Django Form元件 基於原始碼的擴充套件

2022-09-11 14:33:23 字數 2329 閱讀 2631

class ajaxform(forms.form):

username = fields.charfield()

user_id = fields.integerfield(

widget=(

widgets.select(choices=[(0, '張三'), (1, '李四'), (2, '王五'), ])))

# 通過原始碼可得,當欄位通過正則驗證後,會執行clean_欄位名 的方法,並返回 self.cleaned_data[欄位名]

# 我們可以自行定義此方法,擴充套件form元件,以下**,與原始碼執行流程一致,只是我們重新定義了

# def clean_username(self):    

#   return self.cleaned_data['username']  # 必須有返回值

## def clean_user_id(self):

#   return self.cleaned_data['user_id']

# 開始擴充套件,當使用者名稱通過驗證後再去驗證資料庫中是否有相同的使用者名稱,如果有就發出錯誤資訊

from django.core.exceptions import non_field_errors, validationerror  # 在原始碼**錯會丟擲乙個 validationerror 異常

def clean_username(self): 

v = self.cleaned_data['username']  # 只能取當前欄位的值,不能取其它欄位的值

if models.userinfo.objects.filter(username=v).count():  如果使用者數大於0

raise validationerror('使用者名稱已存在')

return self.cleaned_data['username']

class

ajaxform(forms.form):

username =fields.charfield()

user_id =fields.integerfield(

widget=(

widgets.select(choices=[(0, '

張三'), (1, '

李四'), (2, '王五'

), ])))

#通過原始碼可得,當欄位通過正則驗證後,會執行clean_欄位名 的方法,並返回 self.cleaned_data[欄位名]

#我們可以自行定義此方法,擴充套件form元件,以下**,與原始碼執行流程一致,只是我們重新定義了

#def clean_username(self):    

#return self.cleaned_data['username']  # 必須有返回值 ##

def clean_user_id(self):

#return self.cleaned_data['user_id']

#開始擴充套件,當使用者名稱通過驗證後再去驗證資料庫中是否有相同的使用者名稱,如果有就發出錯誤資訊

from django.core.exceptions import non_field_errors, validationerror  #

在原始碼**錯會丟擲乙個 validationerror 異常

defclean_username(self): 

v = self.cleaned_data['username']  # 只能取當前欄位的值,不能取其它欄位的值

if models.userinfo.objects.filter(username=v).count():  如果使用者數大於0

raise validationerror('使用者名稱已存在'

)     

return self.cleaned_data['

username']

def clean(self):  # django為我們預留了這個鉤子函式,當所有clean_欄位名 的方法結束後,會再執行這個函式

value_dict = self.cleaned_date   # 獲取所有通過驗證的資料

v1 = value_dict.get('username')

v2 = value_dict.get('user_id')

if v1 == 'root' and v2 == 1:

raise validationerror('整體錯誤資訊') # 在前端取時,用__all__來取

return self.cleaned_data

def _post_clean(self):  當clean方法執行完成後,還會再執行這個方法,我們可以重寫,沒有返回值,一般不用

pass

Django Form元件之欄位

建立form類時,主要涉及到 字段 和 外掛程式 字段用於對使用者請求資料的驗證,外掛程式用於自動生成html field required true,是否允許為空 widget none,html外掛程式 from django.forms import widgets 設定屬性 widget f...

ConcurrentHahMap 基於原始碼解析

目錄 1 簡單總結 2 jdk1.7 segments hashentry陣列 鍊錶解析 3 jdk1.8 雜湊表 紅黑樹 cas 解析 參考 如下圖所示,segments繼承了可重入鎖reentrantlock,每個片段有乙個鎖,叫做 分段鎖 1 segment 分段鎖 concurrenthas...

基於元件的開發

一直以為元件是個神秘的東西,也就一直沒有勇氣去實踐他,後來在聽msdn講座時,那個講師舉了個很簡單的例子 元件就是把功能分離出來,生成dll,恍然大悟,原來元件這麼簡單啊.看了ted faison的visual c 基於元件的開發後,覺得元件開發並沒有他說的那麼簡單,大概是那講師為了讓我們對元件感興...