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. Unity3d中3D Text对模型的穿透显示

    昨晚,好友在电话里问我在Unity3d中使用3D Text,不想让其穿透模型显示,即想让场景中的3D Text与模型有正确的遮挡关系,怎么解? 今早谷歌上查了查,明白了原因,因为3D Text的默认材 ...

  2. 安卓下对SD卡文件的读写

    为SD下的操作文件,封装了一些类: package ujs.javawritedata; import java.io.File; import java.io.FileInputStream; im ...

  3. VirtualBox中出现UUID have already exists ,并且数字键盘numlock效果相反

    原文地址:https://www.cnblogs.com/xqzt/p/5053338.html 原因:由于linux密码登录错误,修改也报错误,所以只能重新安装虚拟机并在其中安装镜像文件,但是安装镜 ...

  4. spring事务的开启方式(编程式和声明式)

    1.编程式事务:编码方式实现事务管理(代码演示为JDBC事务管理) Spring实现编程式事务,依赖于2大类,分别是上篇文章提到的PlatformTransactionManager,与模版类Tran ...

  5. Java定时器Timer,TimerTask每隔一段时间随机生成数字

    1:java.util.Timer类是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行. 2:TimerTask类是由 Timer 安排为一次执行或重复执行的任务 ...

  6. python-day1作业(感谢视频老师留的作业)

    __author__ = 'zht' #!/usr/bin/env python # -*- coding: utf-8 -*- ''' #努力学习每一天 ''' #尝试次数计数器 tries = 0 ...

  7. R语言笔记2

    <13: Simulation> > sample(1:6,4,replace=TRUE) [1] 4 5 2 6 在1-6的整数中随机生成4个整数,且数字可以重复,即每个数字均可重 ...

  8. vim的命令

    下面是从一个博客里摘抄出来的, 供自己学习使用.   在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n= ...

  9. 【虚拟机-网关】如何在使用应用程序网关和 Nginx 的环境下实现强制 HTTPS 跳转

    背景介绍 大家在使用 Nginx 部署网站时,实现 HTTP 到 HTTPS 的强制跳转是非常容易的事情,一般可以使用rewrite 命令或者使用返回自定义 301 页面的方法对 HTTP 请求进行 ...

  10. POJ 3017 Cut the Sequence (单调队列优化DP)

    题意: 给定含有n个元素的数列a,要求将其划分为若干个连续子序列,使得每个序列的元素之和小于等于m,问最小化所有序列中的最大元素之和为多少?(n<=105.例:n=8, m=17,8个数分别为2 ...