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>