Django 中的Form、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):
#!/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的更多相关文章
- Django中的Form表单
Django中已经定义好了form类,可以很容易的使用Django生成一个表单. 一.利用Django生成一个表单: 1.在应用下创建一个forms文件,用于存放form表单.然后在forms中实例华 ...
- Django中的Form
Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 2.验证输入内容 要想使用django提供的form,要在views里导入form模块 from dj ...
- Django中的form组件
Django中的form组件有两大作用 1.验证获取正确的结果或者错误信息 2.生成html代码 一.为什么需要form组件呢? 在写form表单,提交数据时,自己写验证的代码是一件非常困难的事情. ...
- 转 Django中的Form
https://www.cnblogs.com/chenchao1990/p/5284237.html Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 ...
- django中的Form和ModelForm中的问题
django的Form组件中,如果字段中包含choices参数,请使用两种方式实现数据源实时更新 方法一:重写构造方法,在构造方法中重新去获取值 class UserForm(forms.Form): ...
- django基础 -- 10.form , ModelForm ,modelformset
一.生成页面可用的 HTML标签 1.form 所有内置字段 Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label ...
- django中的 form 表单操作
form组件 1. 能做什么事? 1. 能生成HTML代码 input框 2. 可以校验数据 3. 保留输入的数据 4. 有错误的提示 1. 定义 from django ...
- Django中的form设置field的html属性
在Django中无论何种field,都有一个widget的属性: class Field(object): widget = TextInput # Default widget to use whe ...
- Django中的Form表单验证
回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错 ...
随机推荐
- 对讲解OS文献的反思
前天把OS中Taneubaum写的那篇论文Can We Make Operating Systems Reliable and Secure?给班上的同学讲解了一遍.这篇文献我花了三天的时间才把它弄好 ...
- LeetCode算法题-Merge Sorted Array(Java实现)
这是悦乐书的第161次更新,第163篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第20题(顺位题号是88).给定两个排序的整数数组nums1和nums2,将nums2中 ...
- jquery.qrcode.js 生成二维码并支持中文的方法
GitHub地址: https://github.com/jeromeetienne/jquery-qrcode <div class="QR"></div> ...
- IntelliJ IDEA 创建maven管理的webapp项目
因为使用框架时基本需要使用maven管理项目,所以单独写一个搭建maven项目的流程 第一步: File-->New--Project 第二步: 选择maven框架 第三步: 输入工程id ...
- 聚类——FCM的matlab程序
聚类——FCM的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在聚类——FCM文章中已介绍了FCM算法的理论知识,现在用matlab ...
- 一张有料的图片!!!附文件-图片合成器C语言实现算法
凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.打开F盘,先找两个文件,一个是压缩文件(2.rar),另一个是一张图片(1.jpg),将其放到F盘目录下, ...
- Sqlite3并发读写注意事项
最近项目中涉及到sqlite并发读写的问题,参考一些文档并结合自己的实践,对sqlite3并发问题总结了几点: sqlite3的锁及事务类型 sqlite3总共有三种事务类型:BEGIN [DEFER ...
- Nginx代理与负载均衡
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...
- 淡旺季机票的价格问题(switch语句与if-else语句嵌套)
项目背景 淡旺季机票的价格,原价机票价格为5000元, 淡季头等舱打5折,经济舱打4折 旺季头等舱打9折,经济舱打8折 要求 编写程序实现: 输入任意的月份与舱位来计算机票的价格 1代表头等舱,2代表 ...
- 【深度学习】一文读懂机器学习常用损失函数(Loss Function)
最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点以及应用范围,如果文中有任何错误,请各位朋友指教,谢谢~ 损失函数(lo ...