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基础之网络通信协议--TCP与UDP

    个人理解: 了解区分UDP与TCP的不同,正常情况都是两者结合的使用模式!为了更好的传输,经常会开多线程进行传输的! 一.网络通信协议: 1.TCP/IP协议: 四层:应用层.传输层.网络层和链路层: ...

  2. 多线程----Thread类,Runnable接口,线程池,Callable接口,线程安全

    1概念 1.1进程 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 任务管理器中: 1.2线程 线程是进程中的一个执行单元 ...

  3. spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?

    Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间 ...

  4. SQL查找TCar表中同一辆车前后两条记录的CarId,两条记录中有多个字段值一样

    查询同一个表中某一字段值相同的记录 select * from 表名 where 字段 in(select 字段 from 表名 group by 字段 having count(1)>1) s ...

  5. Burpsuite Professional安装及使用教程

    转自:https://www.jianshu.com/p/edbd68d7c341 1.先从吾爱破解论坛下载工具:https://down.52pojie.cn/Tools/Network_Analy ...

  6. 【开发小结】Two Steps from Deadline

    进度条可以救我也可以杀死我 # START 2018年4月17日晚我测试了11组四则运算的UI,每个exe程序生成的每一道题都有恐怖的倒计时.PSP表格清晰的记录了开发过程中消耗的时间,但是在结对作业 ...

  7. uvm_reg_block——寄存器模型(七)

    这是寄存器模型的顶层 //------------------------------------------------------------------------ // Class: uvm_ ...

  8. 剑指offer24 二叉搜索树的后序遍历序列

    自己写的更简洁的代码 class Solution { public: bool VerifySquenceOfBST(vector<int> sequence) { int length ...

  9. Js笔记 14

      <script> // <!-- 课 对象   // //对象的创建方法 // 1.var obj = {} plainobject 对象字面量 对象直接量 // 2.构造函数 ...

  10. MySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码 这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 一.数据备份 1.使用 ...