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>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM