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