Django Form表单基础

简介:

平时我们写表单要自己写样式,比如我们要写一个注册样式,有如下填写项:

wKioL1fkhIiQCNfrAABMGcPZdl4557.png

实现代码如下:

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 >

wKiom1fl3v6zFbcfAABZYY4Zceg113.png

 至此,我们完成了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}的内容,然后再看结果:

wKiom1fl4jfBJsSUAABVPBmJT38655.png




      本文转自027ryan  51CTO博客,原文链接:http://blog.51cto.com/ucode/1855711,如需转载请自行联系原作者







相关文章
|
1月前
|
Python
Django表单
【6月更文挑战第13天】Django表单。
16 5
|
1月前
|
测试技术 数据库 Python
使用django构建表单测试
【6月更文挑战第14天】该文档介绍了如何对本地库进行自动化测试,特别是关注于代码结构和模型测试。作者鼓励为其他模型和表单创建类似的测试,并提及测试应避免对底层框架的重复验证。
56 0
使用django构建表单测试
|
1月前
|
Python
Django表单
【6月更文挑战第3天】Django表单。
14 1
|
1月前
|
Python
Django表单
【6月更文挑战第3天】Django表单。
13 1
|
2月前
|
JSON 数据库 数据格式
Django之Form组件
Django之Form组件
|
2月前
|
数据库 开发者 UED
如何使用Django的Form组件
如何使用Django的Form组件
39 0
|
11月前
|
数据库 数据安全/隐私保护 Python
|
11月前
|
前端开发 中间件 数据安全/隐私保护
【Django】创建用户,中间件,表单组件
【Django】创建用户,中间件,表单组件
55 0
|
2月前
|
前端开发 开发者 Python
django表单
django表单
36 0
|
7月前
|
Python
如何使用 Django Forms 创建表单?
如何使用 Django Forms 创建表单?
53 0
如何使用 Django Forms 创建表单?