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>