Tronado自定義Form元件

2021-09-07 17:13:55 字數 4215 閱讀 4690

一、獲取類裡面的靜態屬性以及動態屬性的方法

方式一:

#

**********=方式一***************=

class

foo(object):

user = 123

def__init__

(self):

self.name = 123self.age = 456

defaaa(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

reimport

copy

class

validateerror(exception) :

'''自定義異常

'''def

__init__

(self,detail):

self.detail =detail

#**********=自定義外掛程式***************

class

textinput(object):

def__str__

(self):

return''

class

emailinput(object):

def__str__

(self):

return''

#**********==字段:內部包含正則用於驗證********************==

class

field(object):

def__init__(self,required=true,error_message=none, widgets=none):

self.required =required

self.error_message =error_message

ifnot

widgets:

self.widgets = textinput() #

設定預設

else

: self.widgets =widgets

def__str__

(self):

#return self.widgets

return str(self.widgets) #

將物件轉成字串

class

charfield(field):

defvalid(self,val):

ifself.required:

ifnot

val:

msg = self.error_message['

required']

raise validateerror(msg) #

呼叫自定義的異常

return

valclass

emailfield(field):

erg = "

^\w+@\w+$

"def

valid(self,val):

ifself.required:

ifnot

val:

msg = self.error_message['

required']

raise

validateerror(msg)

#print(val, type(val))

result =re.match(self.erg,val)

ifnot

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)

ifisinstance(field,field):

declare_field[field_name] =field

cls.declare_field =declare_field

return object.__new__(cls) #

建立物件

defis_valid(self):

#使用者提交的資料

#self.data #

#self.fields #

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

ifmethod:

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=, widgets=textinput())

#email = emailfield(error_message=, widgets=emailinput())

obj = userform(data=)

ifobj.is_valid():

print

(obj.clean_data)

else

:

print(obj.errors)

Django自定義form表單

from django import forms class customform forms.form ba forms.integerfield label 數字 widget forms.textinput attrs label引數對應的就是數字a widget表示控制項,input就是乙個...

element 封裝form整合校驗自定義內容

後台管理系統使用form的頻率非常高,並且存在不同的校驗,如果不加以封裝,大量的ifelse存在,不同人可能寫不同的校驗規則,大大增加了維護的難度。封裝乙個form元件 讓校驗規則全部交由元件處理。封裝好解決了很多需求 記錄並且分享下 接解了校驗,讓校驗由元件來處理,傳入相應校驗規則即可。使用ren...

Qt自定義Button組控制項

在網上也看到大佬們實現過這樣的效果,然後自己也想想封裝了一套。下劃線帶動畫效果。封裝類包括 1.設定按鈕位置,分東南西北方向 void setbuttonposition int position 2.下劃線顏色 void setbuttoncolor qcolor color 3.下劃線的高度 下...