平时我们写表单要自己写样式,比如我们要写一个注册样式,有如下填写项:
实现代码如下:
views.py文件
|
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python#-*-conding:utf-8:-*-from django.shortcuts import render
from django import forms
# Create your views here.def user_list(request):
host = request.POST.get('host')
port = request.POST.get('port')
email = request.POST.get('email')
mobile = request.POST.get('mobile')
return render(request,'user_list.html')
|
函数user_list中从user_list.html文件中提交(POST)过来的数据,再以request获取POST方式提交过来的host、port、email、mobile的值然后赋给左边的变量host、port、email、mobile。
user_list.html文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!DOCTYPE html><html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="user_list" method="post">
<p>主机:<input type="text" name="host"/></p>
<p>端口:<input type="text" name="port"/></p>
<p>邮箱:<input type="text" name="email"/></p>
</p>手机:<input type="text" name="mobile"/></p>
<input type="submit" value="submit">
</form>
</body>
</html>
|
url.py文件
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^user_list/', views.user_list),
]
着这里我们要求用户输入的只有主机、端口、email、mobile,所以在views.py中只有
host = request.POST.get('host')
port = request.POST.get('port')
email = request.POST.get('email')
mobile = request.POST.get('mobile')
这四项,试问,如果有多余目前的四项比如20或者30...,是不是我们要在函数user_list中再接着写更多类似的语句?答案不言而喻,是肯定的,那么有没有更简单方便的方法呢?肯定有,另外我们这样写获取数据的机制,如果用户输入为空,那么我们是不是都要一一做验证?为了解决以上的问题,我们可以利用django的一个优势,即django的form表单验证机制:
我们对以上代码做修改:
views.py
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#!/usr/bin/env python#-*-conding:utf-8:-*-from django.shortcuts import render
from django import forms
class UserInfo(forms.Form):
email = forms.EmailField()
host = forms.CharField()
port = forms.CharField()
mobile = forms.CharField()
# Create your views here.def user_list(request):
obj = UserInfo()
if request.method == "POST":
user_input_obj = UserInfo(request.POST)
if user_input_obj.is_valid():
data = user_input_obj.clean()
print data
else:
error_msg = user_input_obj.errors
return render(request,'user_list.html',{'obj':user_input_obj,'errors':error_msg})
return render(request,'user_list.html',{'obj':obj})
|
user_list.html
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<!DOCTYPE html><html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="user_list" method="post">
#这里的obj是views.py中{'obj':obj}中的value,而'obj'是request中的一个变量
<p> 主机:{{ obj.host }}<span>{{ errors.host }}</span></p>
<p> 端口:{{ obj.port }}<span>{{ errors.port }}</span></p>
<p> 邮箱:{{ obj.email }}<span>{{ errors.email }}</span></p>
<p> 手机:{{ obj.mobile }}<span>{{ errors.mobile }}</span></p>
<input type="submit" value="submit">
</form>
</body>
</html>
|
至此,我们完成了django表单的简单验证操作,关键定义一个类UserInfo然后继承Forms.form来实现后续的值的获取和验证功能,但是如果我们想自己定义错误提示又该如何处理呢?下面接着通过如下方式修改错误信息提示:
views.py修改如下:其他文件不作修改
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/usr/bin/env python# -*-coding:utf-8:-*-from django.shortcuts import render
from django import forms
class UserInfo(forms.Form):
email = forms.EmailField(error_messages={'required':u'邮箱不能为空'})
host = forms.CharField(error_messages={'required':u'主机不能为空'})
port = forms.CharField(error_messages={'required':u'端口不能为空'})
mobile = forms.CharField(error_messages={'required':u'手机不能为空'})
# Create your views here.def user_list(request):
obj = UserInfo()
if request.method == "POST":
user_input_obj = UserInfo(request.POST)
if user_input_obj.is_valid():
data = user_input_obj.clean()
print data
else:
error_msg = user_input_obj.errors
return render(request,'user_list.html',{'obj':user_input_obj,'errors':error_msg})
return render(request,'user_list.html',{'obj':obj})
|
这里我们把每个项目中的增加了一条error_messages={'k':v}的内容,然后再看结果:
本文转自027ryan 51CTO博客,原文链接:http://blog.51cto.com/ucode/1855711,如需转载请自行联系原作者