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组件的更多相关文章

  1. Tronado自定义Form组件

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

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

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

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

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

  4. 仿照wtform自定义Form组件

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

  5. 自定义Form组件

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

  6. BBS论坛 自定义form组件

    二.自定义form组件 from django import forms from django.forms import widgets from app01 import models # 定制f ...

  7. Python Web框架篇:Django Form组件

    Form简介 在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传.如何接收. 访问网站时,表单可以实现客户端与服务器之间的通信.例如查询,就用到了表 ...

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

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

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

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

随机推荐

  1. jquery.validate.js使用之自定义表单验证规则

    jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 ...

  2. sql server 字符串拆分

    最近项目调取存储的时候直接传入string 作为in的查询范围,结果报错了,深思之后才发现,数据库对于传进来的String,并不是我们想的直接可以作为参数,而是作为一个整体,而in是需要一个类似arr ...

  3. RTX系统整合记录

    1.切换数据库RTX常见问题解答五. SQL数据库配置 2.同步系统组织机构 部门同步 用户同步https://blog.csdn.net/qq_21703215/article/details/80 ...

  4. vsftp新建用户及目录时遇到的坑

    1.有关vsftp配置及用户权限设置,请参考: http://blog.sina.com.cn/s/blog_3edc5e2e0102vzv8.html 2.需求:公司另一部门要求单独建一目录,来存在 ...

  5. 2 Java中常见集合

    1)说说常见的集合有哪些吧? 答:集合有两个基本接口:Collection 和 Map. Collection 接口的子接口有:List 接口.Set 接口和 Queue 接口: List 接口的实现 ...

  6. 炼丹的一些trick

    采摘一些大佬的果实: 知乎:如何理解深度学习分布式训练中的large batch size与learning rate的关系? https://blog.csdn.net/shanglianlm/ar ...

  7. 【CUDA开发】CUDA的安装、Nvidia显卡型号及测试

    说明:想要让Theano在Windows8.1下能利用GPU并行运算,必须有支持GPU并行运算的Nvidia显卡,且要安装CUDA,千万不要电脑上是Intel或AMD的显卡,却要编写CUDA. 文中用 ...

  8. 【机器学习】聚类算法:层次聚类、K-means聚类

    聚类算法实践(一)--层次聚类.K-means聚类 摘要: 所谓聚类,就是将相似的事物聚集在一 起,而将不相似的事物划分到不同的类别的过程,是数据分析之中十分重要的一种手段.比如古典生物学之中,人们通 ...

  9. 洛谷 P1073 最优贸易 题解

    题面 大家都是两遍SPFA吗?我这里就一遍dp啊: 首先判断对于一个点u,是否可以从一号点走到这里,并且可以从u走到n号点: 对于这样的点我们打上标记: 那么抛出水晶球的点一定是从打上标记的点中选出一 ...

  10. Python 入门之 软件开发规范

    Python 入门之 软件开发规范 1.软件开发规范 -- 分文件 (1)为什么使用软件开发规范: 当几百行--大几万行代码存在于一个py文件中时存在的问题: 不便于管理 修改 可读性差 加载速度慢 ...