一、ModelForm
  • 源码
class ModelForm(BaseModelForm, metaclass=ModelFormMetaclass):
pass def modelform_factory(model, form=ModelForm, fields=None, exclude=None,
formfield_callback=None, widgets=None, localized_fields=None,
labels=None, help_texts=None, error_messages=None,
field_classes=None):

 

1.2 实例理解
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re from django import forms
from django.forms import widgets as Mwidgets
from django.forms import fields as Mfields
from django.forms import ValidationError from cmdb import models class UserModelForm(forms.ModelForm): session_checkbox = Mfields.ChoiceField(
choices=(
(0, "默认每次输入密码"),
(1, "一周免登陆"),
(4, "一个月免登陆"),
),
# widget=Mwidgets.CheckboxInput
) is_login = Mfields.CharField(
label= "一年免登陆",
widget= Mwidgets.CheckboxInput()
) class Meta:
model = models.User
# fields = "__all__" #所有字段都验证生成
fields = ["name", "email", "wechat", "phone",] #从表中选出字段验证生成
exclude = ["password", "ctime"] #除了选中的字段都验证生成 labels = { #前端生成 labels 给字段别名,使用中文不使用数据库字段名
"name": "用户名:",
"email": "邮箱:",
"wechat": "微信",
"phone": "手机号:" }
widgets = {
"name": Mwidgets.TextInput(attrs={"class": "c1", "value": "请输入用户名"}),
"email": Mwidgets.Textarea(attrs={"class": "c2"})
} error_messages = {
"email": {
"required": "邮箱必填",
"invalid": "邮箱格式有误"
},
"phone": {
"required": "电话号码为必填",
"invalid": "手机号有误"
}
} #因为本身 ModelForm 继承了 Form
#所以可以用 Form预留的钩子来做验证 def clean_phone(self):
"""
class BaseForm:
.....
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
....
self.is_bound = data is not None or files is not None
self.data = {} if data is None else data
"""
#上面为BaseForm源码, 当在 POST 方法中实例化Form 或者 ModleForm 时,requestPOST 就被传入 self.data中了
#所以 所有字典的方法 self.data都可用了,建议使用dict.get()方式取数据
phone_number = self.data.get("phone", None)
if not phone_number:
raise ValidationError("电话号不能为空")
mobile_pattern = '^13[0-8]{1}\d{8}'
if not re.match(mobile_pattern, str(phone_number)):
raise ValidationError("手机号格式有误")
return phone_number # 将正确的 value 电话号返回去 #以下为预留钩子源码
# if hasattr(self, 'clean_%s' % name):
# value = getattr(self, 'clean_%s' % name)()
# self.cleaned_data[name] = value 返回的正确值被加入到 self.cleaned_data[name] 中,name为字段名

Django 中的Form、ModelForm的更多相关文章

  1. Django中的Form表单

    Django中已经定义好了form类,可以很容易的使用Django生成一个表单. 一.利用Django生成一个表单: 1.在应用下创建一个forms文件,用于存放form表单.然后在forms中实例华 ...

  2. Django中的Form

    Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 2.验证输入内容 要想使用django提供的form,要在views里导入form模块 from dj ...

  3. Django中的form组件

    Django中的form组件有两大作用 1.验证获取正确的结果或者错误信息 2.生成html代码 一.为什么需要form组件呢? 在写form表单,提交数据时,自己写验证的代码是一件非常困难的事情. ...

  4. 转 Django中的Form

    https://www.cnblogs.com/chenchao1990/p/5284237.html Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 ...

  5. django中的Form和ModelForm中的问题

    django的Form组件中,如果字段中包含choices参数,请使用两种方式实现数据源实时更新 方法一:重写构造方法,在构造方法中重新去获取值 class UserForm(forms.Form): ...

  6. django基础 -- 10.form , ModelForm ,modelformset

    一.生成页面可用的 HTML标签 1.form 所有内置字段 Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label ...

  7. django中的 form 表单操作

     form组件  1. 能做什么事?   1. 能生成HTML代码  input框   2. 可以校验数据   3. 保留输入的数据   4. 有错误的提示   1. 定义   from django ...

  8. Django中的form设置field的html属性

    在Django中无论何种field,都有一个widget的属性: class Field(object): widget = TextInput # Default widget to use whe ...

  9. Django中的Form表单验证

    回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错 ...

随机推荐

  1. 对讲解OS文献的反思

    前天把OS中Taneubaum写的那篇论文Can We Make Operating Systems Reliable and Secure?给班上的同学讲解了一遍.这篇文献我花了三天的时间才把它弄好 ...

  2. LeetCode算法题-Merge Sorted Array(Java实现)

    这是悦乐书的第161次更新,第163篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第20题(顺位题号是88).给定两个排序的整数数组nums1和nums2,将nums2中 ...

  3. jquery.qrcode.js 生成二维码并支持中文的方法

    GitHub地址: https://github.com/jeromeetienne/jquery-qrcode <div class="QR"></div> ...

  4. IntelliJ IDEA 创建maven管理的webapp项目

    因为使用框架时基本需要使用maven管理项目,所以单独写一个搭建maven项目的流程 第一步:  File-->New--Project 第二步:  选择maven框架 第三步:  输入工程id ...

  5. 聚类——FCM的matlab程序

    聚类——FCM的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在聚类——FCM文章中已介绍了FCM算法的理论知识,现在用matlab ...

  6. 一张有料的图片!!!附文件-图片合成器C语言实现算法

    凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.打开F盘,先找两个文件,一个是压缩文件(2.rar),另一个是一张图片(1.jpg),将其放到F盘目录下, ...

  7. Sqlite3并发读写注意事项

    最近项目中涉及到sqlite并发读写的问题,参考一些文档并结合自己的实践,对sqlite3并发问题总结了几点: sqlite3的锁及事务类型 sqlite3总共有三种事务类型:BEGIN [DEFER ...

  8. Nginx代理与负载均衡

    序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...

  9. 淡旺季机票的价格问题(switch语句与if-else语句嵌套)

    项目背景 淡旺季机票的价格,原价机票价格为5000元, 淡季头等舱打5折,经济舱打4折 旺季头等舱打9折,经济舱打8折 要求 编写程序实现: 输入任意的月份与舱位来计算机票的价格 1代表头等舱,2代表 ...

  10. 【深度学习】一文读懂机器学习常用损失函数(Loss Function)

    最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点以及应用范围,如果文中有任何错误,请各位朋友指教,谢谢~ 损失函数(lo ...