BBS论坛 自定义form组件
二、自定义form组件
from django import forms
from django.forms import widgets
from app01 import models # 定制form组件
class MyForm(forms.Form):
username = forms.CharField(max_length=8, min_length=3, label='用户名', error_messages={
'max_length': '用户名长度超啦,不能超过8位!',
'min_length': '兄dei,你输的用户名也太短了,最起码3位吧!',
'required': '这么大的框,你至少输点东西吧!',
}, widget=widgets.TextInput(attrs={
'class': 'form-control',
})) password = forms.CharField(max_length=8, min_length=3, label='密码', error_messages={
'max_length': '密码长度超啦,不能超过8位!',
'min_length': '兄dei,你输的密码也太短了,最起码3位吧!',
'required': '密码这种东西,你至少输点东西吧!',
}, widget=widgets.PasswordInput(attrs={
'class': 'form-control',
})) confirm_password = forms.CharField(max_length=8, min_length=3, label='确认密码', error_messages={
'max_length': '确认密码长度超啦,不能超过8位!',
'min_length': '兄dei,你输的确认密码也太短了,最起码3位吧!',
'required': '密码这种东西,你至少输点东西吧!',
}, widget=widgets.PasswordInput(attrs={
'class': 'form-control',
})) email = forms.EmailField(label='邮箱', error_messages={
'required': '邮箱不能为空啊!',
'invalid': '邮箱的格式你竟然写错了!'
}, widget=widgets.EmailInput(attrs={
'class': 'form-control'
})) # 局部钩子 --> 校验用户名是否存在
def clean_username(self):
username = self.cleaned_data.get('username')
user_obj = models.UserInfo.objects.filter(username=username).first()
if user_obj:
self.add_error('username', '这个用户名已经存在了,换一个试试吧!')
return username # 全局钩子函数 --> 校验密码是否一致
def clean(self):
password = self.cleaned_data.get('password')
confirm_password = self.cleaned_data.get('password')
if not password == confirm_password:
self.add_error('confirm_password', '兄弟,手抖了吧,两次输入的密码不一样啊!')
return self.cleaned_data
BBS论坛 自定义form组件的更多相关文章
- 仿照wtform自定义Form组件
仿照wtforms自定义Form组件 1.wtforms 点击查看源码分析及使用方法 2.自定义Form组件 #!usr/bin/env python # -*- coding:utf-8 -*- f ...
- 自定义Form组件
一.wtforms源码流程 1.实例化流程分析 # 源码流程 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...
- Tronado自定义Form组件
Tronado自定义Form组件 一.获取类里面的静态属性以及动态属性的方法 方式一: # ===========方式一================ class Foo(object): user ...
- Flask学习【第10篇】:自定义Form组件
wtforms源码流程 实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...
- Tronado【第2篇】:tronado自定义Form组件
Tronado自定义Form组件 一.获取类里面的静态属性以及动态属性的方法 方式一: # ===========方式一================ class Foo(object): user ...
- Flask【第10篇】:自定义Form组件
自定义Form组件 一.wtforms源码流程 1.实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: ...
- Flask系列(十)自定义Form组件
一.wtforms源码流程 1.实例化流程分析 # 源码流程 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...
- 基于wtforms源码实现自定义form组件
from flask import Flask,Markup,render_template,request,redirect from wtforms.form import Form from w ...
- 基于Django Form源码开发自定义Form组件
import copy import re class ValidateError(Exception): def __init__(self, detail): self.detail = deta ...
随机推荐
- Linux Kernel Development有关内存管理
1 Pages Page的概念来源为处理器Processor的部件MMU(Memory Management Unit),MMU通过设置好的页表(通过设置CR3寄存器,指向页目录所在的物理内存)对内存 ...
- 剑指offer——04二维数组中的查找
题目: 数组中唯一只出现一次的数字.在一个数组中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字. 题解: 如果一个数字出现三次,那么它的二进制表示的每一位(0或者1)也出现 ...
- nginx基本配置各个参数说明
#运行用户user nobody;#启动进程,通常设置成和cpu的数量相等worker_processes 1; #全局错误日志及PID文件#error_log logs/error.log;#err ...
- Operator '?:' has lower precedence than '*'; '*' will be evaluated first
1.项目中用宏的时候,遇到如下警告 Operator '?:' has lower precedence than '*'; '*' will be evaluated first 2.错误原因 *操 ...
- Linux 进程间通信 消息队列
1.特点: 消息队列是IPC对象的一种 消息队列由消息队列ID来唯一标识 消息队列就是一个消息的列表.用户可以在消息队列中添加消息.读取消息等. 消息队列可以按照类型来发送/接收消息(消息的类型是正整 ...
- python_django_静态文件
什么是静态文件? 是django中用于存放css,js,图片,json文件,字体文件等的文件,使代码更好管理. 1.配置 https://www.cnblogs.com/Vera-y/p/114923 ...
- main中的argc,argv
那么我们运行程序时,传入的参数,就是这个argc的值:从截图中,我们很清楚的可以看出,argc是传入参数的个数,”传入的参数“加上可执行文件的文件名:
- Android Studio 安装及汉化
{ https://www.bilibili.com/video/av48649403?from=search&seid=15739157224002905777 Tool: https:// ...
- php注册和登陆与数据库的链接
注册和登陆其实是从一个表中进行提取和写入数据 1.(1)先建立一个注册页面 1 2 3 4 5 6 7 8 9 <body> <h1>注册页面</h1&g ...
- bzoj1011题解
[解题思路] 这题解法很多,我也不知道标算是什么..这简直就是大放水啊.. 网上流传的乱搞法,对于小范围内(假设为[1,l]∩N)暴力,大范围内估算. 我写这题时还是写P的?!..但是我看不懂我当时写 ...