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>