一、獲取類裡面的靜態屬性以及動態屬性的方法
方式一:
#**********=方式一***************=
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元件示例
importreimport
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():
(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.下劃線的高度 下...