Django中用 form 实现登录注册

1、forms模块
将Models和Forms结合到一起使用,将Forms中的类和Models中的类关联到一起,实现属性的共享
1、在forms.py中创建class,继承自forms.ModelForm
2、创建内部类:Meta,关联Form和Model


属性:
1、model:指定要关联的Model类
2、fields:指定从Model中取哪些字段生成控件
1、取值 "__all__",全部的属性都要生成控件
2、取值 列表或元组,声明允许生成控件的属性名称
3、labels:每个属性所关联的label,取值为字典
labels = {
"属性名1","文本1",
"属性名2","文本2"
}

url:

 1 urlpatterns = [
 2     url(r'^01_request/$',request_views),
 3     url(r'^02_meta/$',meta_views),
 4     url(r'^03_form/$',form_views),
 5     url(r'^04_get_post/$',get_post_views),
 6     url(r'^05_remark/$',remark_views),
 7 
 8     url(r'^register/$',register_views),
 9     url(r'^login/$',login_views),
10     url(r'^login_auto/$',login_auto_views),
11 
12     url(r'01_login',login_form_views),
13     url(r'01_regiter',regiter_form_views),
14 ]

models.py

 1 from django.db import models
 2 
 3 class Users(models.Model):
 4     uname = models.CharField(max_length=30)
 5     upwd = models.CharField(max_length=30)
 6     uage = models.IntegerField()
 7     uemail = models.EmailField()
 8 
 9     def __str__(self):
10         return self.uname

views.py:

  1 from django.shortcuts import render,HttpResponse
  2 from django.views.decorators.csrf import csrf_protect
  3 
  4 
  5 def request_views(request):
  6     # request,类型就是HttpRequest
  7     # request 封装的是与所有请求相关的内容
  8     # print(dir(request))
  9 
 10     scheme = request.scheme    #请求方案(协议)
 11     body = request.body        #请求主体
 12     path = request.path        #请求路径
 13     host = request.get_host()  #请求主机地址  /  域名
 14     method = request.method    #请求方法
 15     get = request.GET          #get的请求数据
 16     post = request.POST        #get的请求数据
 17     cookies = request.COOKIES  #cookie中的数据
 18     meta = request.META        #请求中的元数据
 19     return render(request,"01_request.html",locals())
 20 
 21 
 22 def meta_views(request):
 23     print(request.META["HTTP_REFERER"])
 24     return HttpResponse("request ok")
 25 
 26 def form_views(request):
 27     return render(request,"03_form.html")
 28 
 29 @csrf_protect
 30 def get_post_views(request):
 31     if request.method == "GET":
 32         name = request.GET.get("uname")
 33         pwd = request.GET.get("upwd")
 34         return HttpResponse("用户名:"+name+",用户密码:"+pwd)
 35     else:
 36         name = request.POST["uname"]
 37         pwd = request.POST["upwd"]
 38         return HttpResponse ("用户名:" + name + ",用户密码:" + pwd)
 39 
 40 from .forms import *
 41 def remark_views(request):
 42     if request.method == "POST":
 43         subject = request.POST["subject"]
 44         return HttpResponse(subject)
 45     form = RemarkForm()
 46     return render(request,"05_remark.html",locals())
 47 
 48 from .form import *
 49 def login_views(request):
 50     if request.method == "GET":
 51         forms = LoginForm()
 52         return render(request,"login.html",locals())
 53     else:
 54         uname = request.POST["uname"]
 55         upwd = request.POST["upwd"]
 56         user = Users.objects.get(uname=uname)
 57         if user:
 58             if user.upwd == upwd:
 59                 return HttpResponse("验证通过")
 60             else:
 61                 errmsg = "密码"
 62                 return render (request, "login.html", locals ())
 63         else:
 64             errmsg = "用户名错误"
 65             return render(request,"login.html",locals())
 66 
 67 
 68 def login_auto_views(request):
 69     if request.method == "GET":
 70         form = LoginForm()
 71         return render(request,"login.html",locals())
 72     else:
 73         form = LoginForm(request.POST)
 74         if form.is_valid():
 75             data = form.cleaned_data
 76             print(data)
 77             uname = data["uname"]
 78             print(uname)
 79             upwd = data["upwd"]
 80             user = Users.objects.filter(uname=uname).first()
 81             if user:
 82                 if user.upwd == upwd:
 83                     return HttpResponse("验证通过")
 84                 else:
 85                     errmsg = "密码错误"
 86                     return render (request,"login.html",locals())
 87             else:
 88                 errmsg = "用户名错误"
 89                 return render(request,"login.html",locals())
 90         return HttpResponse("信息错误")
 91 
 92 
 93 def register_views(request):
 94     if request.method == "GET":
 95         forms = RegisterForm()
 96         return render(request,"register.html",locals())
 97     else:
 98         form = RegisterForm(request.POST)
 99         if form.is_valid():
100             data = form.cleaned_data
101             uname = data["uname"]
102             upwd = data["upwd"]
103             uage = data["uage"]
104             uemail = data["uemail"]
105             user = Users.objects.filter(uname=uname).first()
106             if user:
107                 errmsg = "用户名已存在"
108                 return render(request, "register.html", locals())
109             else:
110                 user = Users (uname=uname, upwd=upwd, uage=uage, uemail=uemail)
111                 user.save ()
112 
113                 Users(**data).save()
114                 return HttpResponse("注册成功")
115 
116 
117 def login_form_views(request):
118     if request.method == "GET":
119         form = UserLoginForm()
120         return render(request,"login_form.html",locals())
121     else:
122         uname = request.POST["uname"]
123         upwd = request.POST["upwd"]
124         user = Users.objects.get(uname=uname)
125         if user:
126             if user.upwd == upwd:
127                 return HttpResponse("验证通过")
128             else:
129                 errmsg = "密码"
130                 return render (request, "login.html", locals ())
131         else:
132             errmsg = "用户名错误"
133             return render(request,"login.html",locals())
134 
135 
136 
137 def regiter_form_views(request):
138     if request.method == "GET":
139         form = UserRegisterForm()
140         return render(request,"register_form.html",locals())
141     else:
142         form = RegisterForm(request.POST)
143         if form.is_valid():
144             data = form.cleaned_data
145             uname = data["uname"]
146             upwd = data["upwd"]
147             uage = data["uage"]
148             uemail = data["uemail"]
149             user = Users.objects.filter(uname=uname).first()
150             if user:
151                 errmsg = "用户名已存在"
152                 return render(request, "register.html", locals())
153             else:
154                 user = Users (uname=uname, upwd=upwd, uage=uage, uemail=uemail)
155                 user.save ()
156 
157                 Users(**data).save()
158                 return HttpResponse("注册成功")

forms.py

 1 from django import forms
 2 
 3 # 表示评论内容表单控件
 4 # 评论标题  文本框
 5 # 评论人邮件   type='Email'
 6 # 题目  Select
 7 # isSave  type="checkbox"
 8 class RemarkForm(forms.Form):
 9     subject = forms.CharField(label="标题")
10     email = forms.EmailField(label="邮箱")
11     message = forms.CharField(label="内容",widget=forms.Textarea)
12     topic_choice = (
13         ("1","好评"),
14         ("2","中评"),
15         ("3","差评")
16     )
17     topic = forms.ChoiceField(label="评价",choices=topic_choice)
18     issave = forms.BooleanField(label="是否保存")

form.py

 1 from django import forms
 2 
 3 class LoginForm(forms.Form):
 4     uname = forms.CharField(label="用户名:")
 5     upwd = forms.CharField(label="用户密码:",widget=forms.PasswordInput)
 6 
 7 class RegisterForm(forms.Form):
 8     uname = forms.CharField(label="用户名称:",max_length=18)
 9     upwd = forms.CharField(label="用户密码:",widget=forms.PasswordInput)
10     uage = forms.IntegerField(label="用户年龄:")
11     uemail = forms.EmailField(label="用户邮件:")
12 
13 
14 from .models import *
15 # 创建class表示登录的表单,要关联Users实体类
16 class UserLoginForm(forms.ModelForm):
17     # 创建内部类Meta,关联Model
18     class Meta:
19         # 1、指定关联的Model
20         model = Users
21         # 2、指定要生成的控件
22         fields = ["uname","upwd"]
23         # 3、指定每个控件对应的label
24         labels = {
25             "uname":"用户名称",
26             "upwd":"用户密码"
27         }
28 class UserRegisterForm(forms.ModelForm):
29     # 创建内部类Meta,关联Model
30     class Meta:
31         # 1、指定关联的Model
32         model = Users
33         # 2、指定要生成的控件
34         fields = "__all__"
35         # 3、指定每个控件对应的label
36         labels = {
37             "uname":"用户名称",
38             "upwd":"用户密码",
39             "uage":"用户年龄",
40             "uemail":"用户邮箱"
41         }

login.html:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>用户登录</title>
 6 </head>
 7 <body>
 8     <p>{{ errmsg }}</p>
 9     <form action="/login/" method="post">
10      {% csrf_token %}
11         {% for form in forms %}
12             <p>{{ form.label }}{{ form }}</p>
13         {% endfor %}
14         <p><input type="submit" value="登录"></p>
15     </form>
16 
17 ==========================================================
18     <p>{{ errmsg }}</p>
19     <form action="/login_auto/" method="post">
20      {% csrf_token %}
21         {% for form in forms %}
22             <p>{{ form.label }}{{ form }}</p>
23         {% endfor %}
24         <p><input type="submit" value="登录"></p>
25     </form>
26 </body>
27 </html>

register.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>用户登录</title>
 6 </head>
 7 <body>
 8     <p>{{ errmsg }}</p>
 9     <form action="/register/" method="post">
10      {% csrf_token %}
11         {% for form in forms %}
12             <p>{{ form.label }}{{ form }}</p>
13         {% endfor %}
14         <p><input type="submit" value="注册"></p>
15     </form>
16 </body>
17 </html>

login_form.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
     <p>{{ errmsg }}</p>
    <form action="/01_login/" method="post">
        {% csrf_token %}
            {{ form.as_p }}
        <p><input type="submit" value="登录"></p>
    </form>

</body>
</html>

  register_form.html:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8      <p>{{ errmsg }}</p>
 9     <form action="/01_regiter/" method="post">
10         {% csrf_token %}
11             {{ form.as_p }}
12         <p><input type="submit" value="登录"></p>
13     </form>
14 
15 </body>
16 </html>
原文地址:https://www.cnblogs.com/lmh001/p/9564430.html