加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

tornado自定义Form组件

发布时间:2020-12-20 12:44:02 所属栏目:Python 来源:网络整理
导读:一、获取类里面的静态属性以及动态属性的方法 方式一: # ===========方式一================ 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__)

一、获取类里面的静态属性以及动态属性的方法

方式一:

# ===========方式一================
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 = "^[email?protected]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,**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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读