平时我们写表单要自己写样式,比如我们要写一个注册样式,有如下填写项:
实现代码如下:
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,如需转载请自行联系原作者


