二、自定义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组件的更多相关文章

  1. 仿照wtform自定义Form组件

    仿照wtforms自定义Form组件 1.wtforms 点击查看源码分析及使用方法 2.自定义Form组件 #!usr/bin/env python # -*- coding:utf-8 -*- f ...

  2. 自定义Form组件

    一.wtforms源码流程 1.实例化流程分析 # 源码流程 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...

  3. Tronado自定义Form组件

    Tronado自定义Form组件 一.获取类里面的静态属性以及动态属性的方法 方式一: # ===========方式一================ class Foo(object): user ...

  4. Flask学习【第10篇】:自定义Form组件

    wtforms源码流程 实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...

  5. Tronado【第2篇】:tronado自定义Form组件

    Tronado自定义Form组件 一.获取类里面的静态属性以及动态属性的方法 方式一: # ===========方式一================ class Foo(object): user ...

  6. Flask【第10篇】:自定义Form组件

    自定义Form组件 一.wtforms源码流程 1.实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: ...

  7. Flask系列(十)自定义Form组件

    一.wtforms源码流程 1.实例化流程分析 # 源码流程 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...

  8. 基于wtforms源码实现自定义form组件

    from flask import Flask,Markup,render_template,request,redirect from wtforms.form import Form from w ...

  9. 基于Django Form源码开发自定义Form组件

    import copy import re class ValidateError(Exception): def __init__(self, detail): self.detail = deta ...

随机推荐

  1. 拾遗:Git 常用操作回顾

    温故而知新,可以为师矣. Git 布局 工作区---->暂存区---->本地仓库---->远程仓库 Create Repository git init PATH git add P ...

  2. HTML中改变列表的序号类型

    HTML中,<ol>标签表示有序列表,每一个表项的编号默认从数字开始.比如 <html> <head> <title>test</title> ...

  3. linux内核编译时如何根据spec指定编译包

    问题: 1> rpmbuild -bb SPECS/kernel.spec --define="_topdir `pwd`" 编译 出的包并未包含kernel-firmwar ...

  4. DevOps到底是什么鬼?DevOps介绍及工具推荐。

    什么是DevOps DevOps是Development和Operations的组合,是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的沟通.协作与 ...

  5. pytest-文件名类名方法名执行部分用例

    pytest test_class_01.py 执行文件名 pytest -v -s test_class_01.py 执行文件名 pytest -v test_class_01.py::TestCl ...

  6. 5.1中容器(Container)和门面(Facade)的实现

    tp5.1中引入了容器(Container)和门面(Facade)这两个新的类 官方文档已经给出了定义: 容器(Container)实现类的统一管理,确保对象实例的唯一性. 门面(Facade)为容器 ...

  7. g++优化开关(暴力必备)

    ) %:pragma GCC optimize("Ofast") %:pragma GCC optimize("inline") %:pragma GCC op ...

  8. etimer

     Contiki包含一个时钟模型和5个定时器模型(timer, stimer, ctimer, etimer, and rtimer),先学习etimer吧. etimer是一个结构体,(个人用eve ...

  9. Google 公司的代码规范

    如题: C++ , Objective-C, Java, Python, R, Shell, HTML/CSS, JavaScript, AngularJS, Common Lisp ,Vimscri ...

  10. JS window对象取消计时器clearInterval() clearInterval() 方法可取消由 setInterval() 设置的交互时间。

    取消计时器clearInterval() clearInterval() 方法可取消由 setInterval() 设置的交互时间. 语法: clearInterval(id_of_setInterv ...