Django_Form:

1.class TeacherNewForm(Form):

username = fields.CharField(

required=True,

error_messages={'required': '用户名不能为空'},

widget=widgets.TextInput(attrs={'placeholder': '用户名', 'class': 'form-control'})

)  # 不能为空

password = fields.CharField(required=True, error_messages={'required': '密码不能为空'},

widget=widgets.TextInput(attrs={'placeholder': '密码', 'class': 'form-control'}))  # 不能为空

email = fields.EmailField(required=True, error_messages={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'},

widget=widgets.EmailInput(

attrs={'placeholder': '邮箱', 'class': 'form-control'}))  # 不能为空,且邮箱格式

cls_list = fields.MultipleChoiceField(choices=[])

def __init__(self,*args,**kwargs):

super().__init__(*args,**kwargs)

self.fields['cls_list'].choices = models.ClassList.objects.values_list('id','caption')

2.# 显示input,并且将数据库中的默认值填写到input框中

form = TeacherForm(initial={'username':obj.username,'password':obj.password,'email':obj.email})

3.class DiyForm(forms.Form):

# 类中创建字段  例如 IntegerField包含了正则表达式

user = fields.CharField(

max_length=18,

min_length=6,

required=True,

error_messages={

'max_length': '用户名过长',

'min_length': '用户名过短',

'required': '用户名不能为空',

'invalid': '输入类型错误'

}

)

4.import uuid

data = uuid.uuid4() '16fd2706-8baf-433b-82eb-8c7fada847da'

5.# 多选checkbox,值为列表

user = fields.MultipleChoiceField(

initial=[2, ],

choices=((1, '上海'), (2, '北京'),),

widget=widgets.CheckboxSelectMultiple

6.class FInfo(forms.Form):#从数据库实时获取数据

authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all())

推荐使用:必须使用values_list,放回元组的类型[(1,"讲师"),(2,"班主任"),(3,"管理员")]

classteacher_id = fields.ChoiceField(choices=[])

def __init__(self,*args,**kwargs):   #重写init方法,时时更新

super().__init__(*args,**kwargs)   #继承父类

self.fields["classteacher_id"].choices = models.UserInfo.objects.filter(ut_id = settings.ROLE_CLASSTEACHER).values_list('id', "username")

7.自定义校验

.class MyForm(Form):

phone = fields.CharField(

validators=[RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^188[0-9]+{9}$', '数字必须以188开头')],

.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('手机号码格式错误')

phone = fields.CharField(validators=[mobile_validate, ],

error_messages={'required': '手机不能为空'},

widget=widgets.TextInput(attrs={'class': "form-control",

'placeholder': u'手机号码'}))

8.clean_field:#在form验证完后验证相对应的字段

def clean_user(self): #必须有返回值,只能拿当前字段

"""

Form中字段中定义的格式匹配完之后,执行此方法进行验证

:return:

"""

v = self.cleaned_data['user']

if models.UserInfo.objects.filter(user=v).count():

raise ValidationError('此用户名已经存在')

return v

9.clean:#验证所有字段

#设置整体错误,可以用来设置多个字段整体验证

def clean(self):

value_dict=self.cleaned_data

v1 = value_dict.get('username')

v2 = value_dict.get('user_id')

if v1=='root' and v2==0:

raise ValidationError('整体错误信息')

return self.cleaned_data

10.中间件:

请求 ->process_request1 ->process_request3 ->process_view1 ->process_view3 ->视图view

->prcess_exception3 ->prcess_exception1 ->process_response3 ->process_response1 ->请求

class Md2(MiddlewareMixin):

def process_request(self,request):

print("Md2请求")

# return HttpResponse("Md2中断")

def process_response(self,request,response):

print("Md2返回")

return response

def process_view(self, request, callback, callback_args, callback_kwargs):

print("md2 process_view...")

def process_exception(self):

print("md1 process_exception...")

11.认证使用

form = TeacherForm(initial={"username":obj.username,"password":obj.password,"email":obj.email,

"teacher_classes":[obj.id for obj in obj.teacher_classes.all()]}) #带有初始化的Form

from = TeacherForm(dat = request.POST)

from.is_valid()

from.cleaned_data#一个列表

form.as_json()

from.errors #一个列表

- 主动向form中添加错误信息

  # form.add_error('password','用户名或密码错误')

  form.add_error('password',ValidationError('用户名或密码错误'))

  这两个都可以,建议用第二个

Django Form two的更多相关文章

  1. django: form fileupload - 1

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

  2. django form表单验证

    一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html ...

  3. Django form模块使用心得

    最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得. 一,创建一个表单 创建一个Form表单有两种方式: 第一种方式是继承于forms.Form,的一个子类,通过在f ...

  4. Python Web框架篇:Django Form组件

    Form简介 在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传.如何接收. 访问网站时,表单可以实现客户端与服务器之间的通信.例如查询,就用到了表 ...

  5. Django form表单

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

  6. django Form组件

    django Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建 ...

  7. Django Form和ModelForm组件

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

  8. 9.24 Django Form组件

    2018-9-23 20:10:04 这两天优化了自己图书管理系统 github 连接:https://github.com/TrueNewBee/pythonDemo 顺便整理了博客,写了好多总结, ...

  9. [py][mx]django form验证-给db减压

    django form认证-解压db压力 一般系统都需要前后端都验证 前端验证容器逃逸破解,如通过js console口去发 试想如果后端只有db验证,那么前端无论发什么后端都查询一次db,对db压力 ...

  10. Django学习笔记之Django Form表单详解

    知识预览 构建一个表单 在Django 中构建一个表单 Django Form 类详解 使用表单模板 回到顶部 构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的 ...

随机推荐

  1. 基于JAVA的设计模式之代理模式

    概念 王宝强有一个经纪人叫宋喆,这个经纪人很吊,可以代理王宝强做一系列的事情,与粉丝活动.王宝强的微博维护.安排王宝强的行程以及什么什么等等.如果王宝强一个人做岂不是累死.通过这个代理人为王宝强节省了 ...

  2. swift3.0 项目引导页

    项目引导页并不难,使用 UICollectionView就可以完成, 1.首先获取应用程序的版本号,并存入本地,每次有新版本号,和存入本地的版本号,相比较 fileprivate func setup ...

  3. feign hystrix加仪表盘

    Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数 ...

  4. 解决easyUI下拉控件无法触发onkeydown事件

    实现在combotree下拉控件中按Backspace键清除combotree选中的值 下面的代码无法获取到键盘事件 <input class="easyui-combotree&qu ...

  5. javaSe-线程2

    package com.java.chap09.sec02; public class Thread3 implements Runnable{ private int baoZi=1; privat ...

  6. Unity3D中使用Projector生成阴影

    在Unity3D中使用Projector实现动态阴影 无意中看见一篇博客叙述使用Projector实现动态阴影可以在移动平台拥有非常好的性能,遂按照其想法实现了一遍,发现其中竟有许多细节,写下这篇博客 ...

  7. OpenGL小试牛刀第二季(粒子模拟)

    效果截图:粒子模拟代码展示:#include "Particle.h" /** 构造函数 */CParticle::CParticle(){ data = NULL; numpar ...

  8. UVA 110020 Efficient Solutions (STL)

    把一个人看出一个二维的点,优势的点就是就原点为左下角,这个点为右上角的矩形,包含除了右上角以外边界,其他任意地方不存在点. 那么所有有优势的点将会形成一条下凹的曲线. 因为可能有重点,用multise ...

  9. UVA 12673 Erratic Expansion 奇怪的气球膨胀 (递推)

    不难发现,每过一个小时,除了右下方的气球全都是蓝色以外,其他都和上一个小时的气球是一样的,所以是可以递推的.然后定义一类似个前缀和的东西f(k,i)表示k小时之后上面i行的红气球数.预处理出k小时的红 ...

  10. 第三章 DOM的基本

    节点分为不同的类型:元素节点.属性节点和文本节点 getElementById()方法 这个方法将返回一个与那个有着给定id属性值的元素节点相对应的对象.注意大小写.该方法只有一个参数.这个参数也就是 ...