form組件校驗原始碼
1.知識儲備
1 form組件:寫一個類繼承Form,寫欄位 2 做資料校驗(一直有用) 3 模板渲染(混合開發,前后端分離用不到) 4 校驗資料:form=Myform(data=https://www.cnblogs.com/guojieying/p/字典) 5 欄位引數:error_messages,widget,required,max_length,min_length,label 6 錯誤資訊:err=form.errors.get('__all__')#__all__是全域鉤子拋出的錯誤 7 區域和全域鉤子 -def clean_欄位名(self): -校驗通過回傳該欄位的資料部分 -校驗失敗拋出例外ValidationError -def clean(self) -校驗通過回傳cleaned_data -校驗失敗拋出例外ValidationError
2.原始碼筆記
1 讀的入口是: form.is_valid()--->self.errors(BaseForm類)---》self.full_clean()(BaseForm類)--》 -self._clean_fields(區域資料校驗)和self._clean_form(全域資料校驗) 2 self._clean_fields(BaseForm類) #核心代碼,在for回圈里面做的事情 ''' 自己校驗-->區域鉤子 自己校驗-->區域鉤子 ... 全域鉤子(最后,只能有一個全域鉤子) ''' for name, field in self.fields.items(): try: # 欄位自己的校驗(最大值,最小值,是不是郵箱格式) #如果合法,放clean_data里,不合法拋例外ValidationError捕獲例外 value =https://www.cnblogs.com/guojieying/p/ field.clean(value) #合法后,放到clean_data里 self.cleaned_data[name] = value #區域校驗通過后才走這里,不通過不走 if hasattr(self, 'clean_%s' % name): # 反射判斷有沒有clean_欄位名 value = https://www.cnblogs.com/guojieying/p/getattr(self, 'clean_%s' % name)() self.cleaned_data[name] = value except ValidationError as e: self.add_error(name, e) 3 self._clean_form(BaseForm類) 全域鉤子 try: cleaned_data = self.clean() # self.clean執行的是自己類的clean方法,沒有clean方法再找父類 except ValidationError as e: self.add_error(None, e) else: if cleaned_data is not None: self.cleaned_data = cleaned_data
3.拓展
面向切面編程(AOP 全稱Aspect Oriented Programming )---現在 java spring里面的AOP 有名 ---
也叫做面向方法編程,是通過預編譯方式和運行期動態代理的方式實作不修改源代碼的情況下給程式動態統一添加功能的技術,
AOP技術利用一種稱為“橫切”的技術,剖解開封裝物件的內部,將影響多個類的公共行為封裝到一個可重用的模塊中,并將其命名為Aspect切面,
AOP是實作分散關注的編程方法,將關注封裝在切面中,如何分散關注呢?將需求功能從不相關的類中分離出來,同時使多個類共用一個行為,一旦行為發生變化,不必修改多個類,只修改行為即可,
利用AOP可以對業務邏輯各個部分進行隔離,從而使業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高開發效率,
AOP的使用場景主要包括日志記錄、性能統計、安全控制、事務處理、例外處理等,
面向物件編程(OOP 全稱 Object Oriented Programming )
AOP與OOP有什么關系呢?
AOP和OOP是面向不同領域的兩種思想,OOP面向物件編程主要是針對業務處理程序中的物體的屬性和行為的抽象與封裝,以獲得更加清晰高效地邏輯單元,
AOP面向切面編程是針對業務處理程序中的切面進行提取,它所面對的是處理程序中某個步驟或階段,以獲得邏輯程序中各部分之間低耦合性的隔離效果,
AOP可以說是OOP的補充和完善,OOP引入封裝、繼承、多型等概念建立了一種物件層次結構,用來模擬公共行為的一個集合,
當需要為分散的物件引入公共行為的時候,OOP顯得無能為力,也就是說,OOP允許定義從上到下的關系,但并不適合定義從左到右的關系,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/186041.html
標籤:架構設計
上一篇:多個Vue專案如何部署到服務器
