一、Django--form功能

  • 用户提交数据验证

  • 生成html标签

二、基础实例

需求

利用Djang​o的form功能,接收用户注册信息。

urls.py
1
2
3
4
5
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^user_list/', views.user_list),
]
app01/views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from django import forms
 
class UserInfo(forms.Form):    #创建类,必须继承自forms.Form
    email=forms.EmailField()   #生成字段,自动创建标签
    host=forms.CharField()
    port= forms.CharField()
    mobile= forms.CharField()
 
def user_list(request):
    obj=UserInfo()
    if request.method=="POST":
        user_input_obj = UserInfo(request.POST) #将所有提交的数据封装到自定义form类的对象里
        if user_input_obj.is_valid():   #判断提交的数据是否合法,有一个错误就是false
            data = user_input_obj.clean()   #如果合法,打印所有信息
            print data
        else:    #如果不合法,将所有错误信息返回给页面,到页面后再利用变量的取值输出每个错误
            error_msg = user_input_obj.errors    #默认是as_ul()列表形式,可以改成as_json()和as_data()。【看d18-16视频】
            return render(request,'user_list.html',{'obj':user_input_obj,'errors':error_msg})
    return render(request,'user_list.html',{'obj':obj})
templates/user_list.py
1
2
3
4
5
6
7
8
9
<body>
    <form action="/user_list/" method="post">
        <p>主机:{{ obj.host }}<span>{{ errors.host }}</span></p> <!--obj是创建form类的实例化对象,host是变量-->
        <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>
browser

三、定制化

1、根据正则判断输入

views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import re
from django.core.exceptions import ValidationError
 
def mobile_validate(value):
    mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
    if not mobile_re.match(value):
        raise ValidationError('手机号码格式错误')
 
from django import forms
 
class UserInfo(forms.Form):  
    email=forms.EmailField()
    host=forms.CharField()
    port= forms.CharField()
    mobile= forms.CharField(  
        validators=[mobile_validate, ],  #根据正则判断
    )
browser

2、select类型

views.py
1
2
3
4
5
6
class UserInfo(forms.Form):  
    user_type_choice = (    #先设定选项
        (0, u'普通用户'),
        (1, u'高级用户'),
    )
    user_type = forms.IntegerField(widget=forms.widgets.Select(choices=user_type_choice,attrs={'class': "form-control"}))
user_list.html
1
<p>用户类型:{{ obj.user_type }}<span>{{ errors.user_type }}</span></p>

browser

3、其它设置

views.py​
1
2
3
4
5
6
class UserInfo(forms.Form):  
    email=forms.EmailField(
        required=False,
        error_messages={'required': u'邮箱不能为空','invalid': u'邮箱格式错误'},
        widget=forms.TextInput(attrs={'class': "form-control", 'placeholder': u'邮箱'})
    )

Django--form基础的更多相关文章

  1. Django学习系列之Form基础

     Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  2. Python之路【第十六篇】:Django【基础篇】

    Python之路[第十六篇]:Django[基础篇]   Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...

  3. Django web 基础

    一.Django概述 Django大而全; 创建Django工程:django-admin startproject sitename 创建django之后生成的目录结构如下: Project Pro ...

  4. Python开发【第二十一篇】:Web框架之Django【基础】

    Python开发[第二十一篇]:Web框架之Django[基础]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...

  5. django: form fileupload - 1

    本节介绍 Form 中一些字段类型的使用,以文件上传字段 FileField 为例:(注,其它字段和相关用法见官方文档中的 Forms -> Built-in Fields) 一,配置 urls ...

  6. Django笔记 —— 基础部分总结

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  7. Django 07 Django模型基础2 (常用查询和多表关联)

    Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...

  8. Django的基础操作总结

    1:准备开始 建立一个新的project: django-admin.py startproject XXXXXX(名称) 建立一个新的App:python manage.py startapp XX ...

  9. 巩固复习(Django最基础的部分_具体查看官方文档)

    Django学习路1 1.脚本不能随便运行,没准 linux 运行完就上不去了 2.pip 在 linux 上 写 pip3 同理 python 写为 python3 3.在 pycharm 上安装库 ...

  10. django form和form组件

    form介绍: 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是 ...

随机推荐

  1. js 预解析

    前言 JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢? 事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了 ...

  2. 【CSS3】 - 初识CSS3

    .navdemo{ width:560px; height: 50px; font:bold 0/50px Arial; text-align:center; margin:40px auto 0; ...

  3. mybatis排序

    排序的时候#和$的分别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by ...

  4. laravel中好用的支付安装包

    是包括支付宝和微信的支付 准用包,在测试中 https://github.com/yansongda/laravel-pay 这个包,看上去很好但是composer require时,要求php太高, ...

  5. substr的学习(PHP学习)

    substr的用法: 首先看PHP手册 ,手册上是这样说的 string substr ( string $string , int $start [, int $length ] ) 执行subst ...

  6. Shell脚本基础知识详细介绍(一)

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...

  7. 【转】Jmeter笔记:响应断言详解

    平时我们使用jmeter进行性能测试时,经常会用到断言.jmeter提供了很多种断言,本来想全都写一下,但发现每一个断言里面的东西都很多,所以就先写一下我们经常使用的响应断言. 第一次在cnblog上 ...

  8. 【转】JMeter脚本的参数化

    JMeter脚本的参数化 当你利用Badboy将你的测试脚本录制完毕后,接下来就是脚本的调试工作了.在我看来,调试应该包括有以下几个方面:1.根据测试场景对脚本进行必要的修改:2.脚本参数化:3.添加 ...

  9. python学习(十二) 图形化用户界面

    12.1 丰富的平台 12.2 下载和安装wxPython 12.3 创建示例GUI应用程序 12.3.1 开始 12.3.2 窗口和组件 12.3.3 标签.标题和位置 12.3.4 更智能的布局 ...

  10. Dynamics CRM 2011 通过工作流发邮件时的权限问题

    场景: 在CRM中配置工作流,完成某个步骤后,发送邮件通知其他用户.发件人统一配置为管理员,收件人则根据业务需要设定动态值. 相关权限配置 首先启动流程的用户, 需要允许其他用户代表发送电子邮件 另外 ...