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. 一个很好用的侧滑框架ICSDrawerController实现的 QQ 侧滑及换肤功能

    使用ICSDrawerController 实现侧滑功能 在ICSDrawerController 第三方上做了修改实现,QQ 点击头像打开关抽屉头像渐变的效果 - (void)hiddenHeadV ...

  2. Mysql系列常见面试题(三)

    1.Mysql数据表在什么情况下容易损坏? 服务器突然断电导致数据文件损坏,强制关机,没有先关闭Mysql服务等. 2.Mysql有关全校的表都有那几个? Mysql服务器通过权限表老控制用户对数据库 ...

  3. linux文件系统和目录树的关系

    文件系统是和底层的硬件系统紧密关联的,文件系统相当于是dev(设备或硬件)在Linux上面的显示,如/dev/hdc2 而目录树是逻辑的概念,其可以通过挂载的方式连接文件系统,先用df查看本地的文件系 ...

  4. ABAP系统字段

    SY是一个全局的结构体变量,在词典中已定义过.输入SE11到ABAP字典中. 输入SYST点击显示 附录D 系统字段功能列表 字段名 类型 长度 应用目的 说明 ABCDE CHAR 26 常量 字母 ...

  5. ApexSQL Log中的Redo Script跟原始SQL不一致问题

    最近遇到一个误更新数据的问题,使用ApexSQL Log做挖掘事务日志的时候,发现ApexSQL Log生成的Redo Script跟原始SQL是有区别的.它们并不是完全一致的.只是逻辑上等价而已.如 ...

  6. SequenceFile和MapFile

    HDFS和MR主要针对大数据文件来设计,在小文件处理上效率低.解决方法是选择一个容器,将这些小文件包装起来,将整个文件作为一条记录,可以获取更高效率的储存和处理,避免多次打开关闭流耗费计算资源.hdf ...

  7. BZOJ 4777: [Usaco2017 Open]Switch Grass

    4777: [Usaco2017 Open]Switch Grass Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 10[Su ...

  8. ABAP vs Java, 蛙泳 vs 自由泳

    去年7月定下的一年之内学会自由泳的目标终于实现了,特来还愿. ABAP和Java, 蛙泳和自由泳.前面的组合是Jerry用来挣钱养家的技术,后者是Jerry花了大量业余时间和金钱苦练的技能.或许有的朋 ...

  9. 卓越管理的实践技巧(4)如何才能给予有效的反馈 Guide to Giving Effective Feedback

    Guide to Giving Effective Feedback 前文卓越管理的秘密(Behind Closed Doors)最后一部分提到了总结的13条卓越管理的实践技巧并列出了所有实践技巧名称 ...

  10. 《毛毛虫组》【Alpha】Scrum meeting 4

    第二天 日期:2019/6/17 1.1 今日完成任务情况以及遇到的问题. 今日完成任务情况: 货物入库管理模块设计: (1)对数据库表--tb_OutStore进行修改并完善: (2)学习trig_ ...