一、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. sqlserver 删除表中 指定字符串

    源表T "单据编号"               "航班计划日期"        "航班号"          "起飞航站代码&q ...

  2. linux ubuntu 关于vim得一些基本命令

    1.vim显示行号 :set number 2. 快捷键 J 向下 K 往上 H 向左 L 向右 ctrl+shift+T 打开新窗口 ctrl+Page Down 所有vim窗口向下切换 ctrl+ ...

  3. 【2018.08.19 C与C++基础】编程语言类型系统简介(草稿)

    还是先占坑,等理顺了思路再写,学过的东西总是无法系统化,感觉什么都知道一点,但一深入却是一脸懵逼. 这真的是个问题,看似很努力,却无法成为一个master. 参考链接: 1. 编程语言的类型系统为何如 ...

  4. js获取请求地址后面带的参数

    浏览器输入页面地址的时候在后面带有请求参数, 页面加载后需要获取携带的参数, 可以使用js, 在页面加载js的时候获取参数 http://localhost:8080/demo/index.html? ...

  5. C语言 文件的读写操作

    //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ #include<stdio.h> #include<stdlib.h> void ...

  6. Java教程01-基础语法

    目录 1. 基本概念 1.1. 环境变量 Path环境变量的作用->寻找命令 classpath变量的作用->寻找类文件 1.2. JDK里面有什么? 1.3. 什么是JRE? 2. Ja ...

  7. 编译&链接笔记

    无法解析的外部符号? 1)库的版本不对,换成X64或Win32试试

  8. 【C编程基础】C程序常用函数

    基础知识 1.const const 修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的. ; 或 ; //在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再改变它了 ...

  9. [python] 解决pip install download速度过慢问题 更换豆瓣源

    """ python建立pip.ini.py 2016年4月30日 03:35:11 codegay """ import os ini=& ...

  10. Android中Bitmap对象和字节流之间的相互转换

    android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte   import java.io.B ...