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. 编译安装php容易出现的问题以及解决办法

    http://crybit.com/20-common-php-compilation-errors-and-fix-unix/

  2. 终于有人把P2P、P2C、O2O、B2C、B2B、C2C的区别讲透了!还有许多其它类别的类型分享

    平时在看招聘时,经常看到我们是什么B2C电子商务网站,但是一直不知是啥意思,今天在WEB开发者上面看到这篇文章,就是知道了个所以然,以记录分享. P2P.P2C .O2O .B2C.B2B. C2C, ...

  3. SQL SERVER 2014 缺少Business Intelligence 解决办法

    SQL SERVER 2014安装完所有的数据库工具后,缺少开发工具 Business Intelligence   之解决办法. https://msdn.microsoft.com/en-us/l ...

  4. Cocos2d-x v3.1 初识(一)

    Cocos2d-x v3.1 初识(一) Cocos2d-x从以前苹果平台上的Cocos2d发展而来,版本已经更新到了3.1.1.作为一个跨平台的游戏开发引擎,现在已经被上百个国家在使用,这也是国人的 ...

  5. Eclipse IDE配置PHP开发、调试环境

    前言 使用java语言开发的朋友想必对Eclipse开发工具已经不陌生了,那么Eclipse作为java主流的开发工具,是否能够开发PHP项目呢?答案如你所想,肯定是可以的!以下就是该IDE下如何配置 ...

  6. 64位Windows系统下32位应用程序连接MySql

    1.首先得安装“Connector/ODBC”,就是Mysql的ODBC驱动,这个是与应用程序相关的,而不是与操作系统相关的,也就是说,不管你的系统是x64还是x86,只要你的应用程序是x86的那么, ...

  7. CF 55D Beautiful numbers (数位DP)

    题意: 如果一个正整数能被其所有位上的数字整除,则称其为Beautiful number,问区间[L,R]共有多少个Beautiful number?(1<=L<=R<=9*1018 ...

  8. PHP的优良习惯(转)

    1.多阅读手册和源代码 没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数.就在这些函数里面包括许多有用的功能,如果你仔细阅读手册,你会经常发 ...

  9. MYSQL内置函数总结

    时间转换为字符串: SELECT date_format(Date, '%Y-%m-%d %H:%i:%s' ) AS TimeFROMtable o convert函数转换为字符串的时候不存在类型为 ...

  10. 手机屏幕材质详解(TFT,TPS,OLED,AMOLED等)

    手机屏幕概括起来就是两种,一个是LCD,一个是OLED屏幕,这两个是屏幕显示技术的两大基础. 一 . LCD:Liquid Crystal Display,这是一种介于固态和液态之间的物质,称为液晶技 ...