Tronado【第2篇】:tronado自定义Form组件
Tronado自定义Form组件
一、获取类里面的静态属性以及动态属性的方法
方式一:

- # ===========方式一================
- class Foo(object):
- user = 123
- def __init__(self):
- self.name = 123
- self.age = 456
- def aaa(self):
- self.name = 'sd'
- obj = Foo()
- # print(obj.__dict__) #获取对象属性
- # print(Foo.__dict__) #获取类里面的所有属性以及方法等

方式二:

- # ===============方式二==================
- class Foo2(object):
- A = 123
- def __init__(self):
- self.name = 'haiyan'
- self.age = 22
- # print(self.__class__.field) #获取当前类的
- def __new__(cls, *args, **kwargs):
- print(cls.__dict__)
- return object.__new__(cls)
- Foo2()

二、自定义Form组件示例

- import re
- import copy
- class ValidateError(Exception) :
- '''自定义异常'''
- def __init__(self,detail):
- self.detail = detail
- # ===========自定义插件===============
- class TextInput(object):
- def __str__(self):
- return '<input type="text">'
- class EmailInput(object):
- def __str__(self):
- return '<input type="email">'
- # ============字段:内部包含正则用于验证======================
- class Field(object):
- def __init__(self,required=True,error_message=None, widgets= None):
- self.required = required
- self.error_message = error_message
- if not widgets:
- self.widgets = TextInput() #设置默认
- else:
- self.widgets = widgets
- def __str__(self):
- # return self.widgets
- return str(self.widgets) #将对象转成字符串
- class CharField(Field):
- def valid(self,val):
- if self.required:
- if not val:
- msg = self.error_message['required']
- raise ValidateError(msg) #调用自定义的异常
- return val
- class EmailField(Field):
- ERG = "^\w+@\w+$"
- def valid(self,val):
- if self.required:
- if not val:
- msg = self.error_message['required']
- raise ValidateError(msg)
- # print(val, type(val))
- result = re.match(self.ERG,val)
- if not result:
- msg = self.error_message.get('invalid','格式错误')
- raise ValidateError(msg)
- return val
- # ==========================
- class Form(object):
- def __init__(self,data):
- # print(UserForm.__dict__)#获取派生类中的所有静态字段
- # print(self.__class__.__dict__) #静态动态的获取类中的所有静态字段
- self.data = data
- self.fields = copy.deepcopy(self.__class__.declare_field) #获取字段
- self.clean_data = {}
- self.errors = {}
- def __new__(cls, *args, **kwargs): #在__new__里面也可以获取类中的所有静态字段
- declare_field = {}
- for field_name , field in cls.__dict__.items():
- # print(field_name,field)
- if isinstance(field,Field):
- declare_field[field_name] = field
- cls.declare_field = declare_field
- return object.__new__(cls) #创建对象
- def is_valid(self):
- #用户提交的数据
- # self.data #{'username':"zzz","pwd":18}
- # self.fields #{'username': CharField(),"pwd": EmailField()}
- for field_name , field in self.fields.items():
- try:
- input_val = self.data.get(field_name)
- # print("---------------",field_name,input_val)
- val = field.valid(input_val) #内置的验证规则自己去验证
- method = getattr(self,"clean_%s"%field_name,None) #默认为None
- if method:
- val = method(val)
- self.clean_data[field_name] = val
- except ValidateError as e:
- self.errors[field_name] = e.detail
- return len(self.errors) ==0 #根据错误的返回,如果没有错误返回True,有错误返回False
- def __iter__(self): ##########自定义生成标签3
- return iter(self.fields.values()) #返回的是一个迭代器
- # =======================
- class UserForm(Form):
- username = CharField(error_message={'required': '用户名不能为空'}, widgets=TextInput())
- # email = EmailField(error_message={'required': '密码不能为空', 'invalid': '邮箱格式错误'}, widgets=EmailInput())
- obj = UserForm(data={'username':"haiyan","email":"dsfsgd"})
- if obj.is_valid():
- print(obj.clean_data)
- else:
- print(obj.errors)

Tronado【第2篇】:tronado自定义Form组件的更多相关文章
- Tronado自定义Form组件
Tronado自定义Form组件 一.获取类里面的静态属性以及动态属性的方法 方式一: # ===========方式一================ class Foo(object): user ...
- Flask学习【第10篇】:自定义Form组件
wtforms源码流程 实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...
- Flask【第10篇】:自定义Form组件
自定义Form组件 一.wtforms源码流程 1.实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: ...
- 仿照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._ ...
- BBS论坛 自定义form组件
二.自定义form组件 from django import forms from django.forms import widgets from app01 import models # 定制f ...
- Python Web框架篇:Django Form组件
Form简介 在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传.如何接收. 访问网站时,表单可以实现客户端与服务器之间的通信.例如查询,就用到了表 ...
- 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 ...
随机推荐
- 双屏显示——NW.js
1.利用w10中的双屏显示设置(扩展模式) 2.Code for second window: var gui = require('nw.gui'); gui.Screen.Init(); win ...
- 【内部】Fiddler设置代理请求的方式
1.2 打开Fiiddler,设置如图步骤: 3.添加规则: 4.这里选择第三个选项: 5.选中^开始,空格结束的如图内容.复制你要代理的地址.如:http://wap.cmread.com/nap/ ...
- 安装opencv3.3.0碰到的问题及解决方法
出处:http://osask.cn/front/ask/view/258965 CMakeError.log Compilation failed: source file: '/home/jhro ...
- JavaScript Array Reduce用于数组求和
需求一 假设有一个数组,需要对其中的元素进行求和. const numbers = [1, -1, 2, 3]; 传统写法,使用for循环求和 const numbers = [1, -1, 2, 3 ...
- mysql——多表——合并查询结果
合并查询结果 合并查询结果 是将多个select语句的查询结果合并到一起 union关键字,数据库会将所有的查询结果合并到一起,然后除掉相同的记录: union all关键字,只是简单的合并到一起 前 ...
- NFC读写器调试总结20191203
以下为NFC读写器调试经验总结: 1.读写器部分,从TX1/TX2输出的13.56MHZ信号主要由L0/C0构成低通滤波器,用于滤除13.56MHZ的高次谐波,取值L0=1UH,C0=47PF时候,谐 ...
- HDU 1042 N!(高精度阶乘、大数乘法)
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submi ...
- property可以声明得位置
property可以声明的位置有4处 1 @interface处 2 扩展处 3 protocol处 4 分类处 其中分类处的property不会合成实例变量,并且编译器也不会自动合成实例变量
- Redis 3主-3从集群的搭建(CentOS 7)
注意ip地址为: 虚拟机ip设置 TYPE="Ethernet"BOOTPROTO="static"NAME="enp0s3"DEVICE= ...
- win10+vs2013+pcl1.8.0(x86) 环境配置遇到的各种小问题解决
1.PCL提供了各自的PDB调试文件(解压后放入pcl安装目录的bin下) 2.OpenNI的安装需同其余在pcl第三方库文件夹下 3.添加附加依赖项的.lib文件请按照网上对应版本添加,另外需要每行 ...