1. 程式人生 > 其它 >net core api swagger 新增自定義請求頭(header)引數

net core api swagger 新增自定義請求頭(header)引數

django表單

1.表單繫結狀態

Django為繼承自Form類的表單維護了一個繫結(bound)狀態

  • 如果一個表單物件在例項化候被賦予過資料內容,則稱該表單處於bound狀態。只有處於bound狀態的表單才具有表單資料驗證(validate data)的功能
  • 如果未被賦予過資料內容,則表單處於unbound狀態。只有處於unbound狀態的表單才能被賦予資料,使表單變為bound狀態。
    注意:已經處於bound狀態的表單不能在python程式碼中修改其中的資料,而只能有網頁使用者在頁面中輸入資料進行修改
    可以通過Form的is_bound屬性檢查表單狀態
    f = MomentForm()
    print(f.is_bound)

f = MomentForm({"headline":"hello"})
print(f.is_bound())

2 表單資料驗證

Django表單資料驗證是指在伺服器端用Python程式碼驗證表單中資料的合法性。表單驗證費為如下兩類:

  • 欄位屬性驗證:驗證表單中欄位是否符合特定的格式要求,比如CharField 欄位是否滿足了max_length要求 非空欄位是否已賦值
  • 自定義邏輯驗證:驗證開發中自定義的一些邏輯要求,比如moment的content長度必須比headline長不能包含某些關鍵字等

1.欄位屬性驗證

欄位屬性驗證要求通過model中欄位的約束完成,在form渲染的過程中django會自動根據驗證約束要求驗證欄位內容,如果欄位不符合呀求,則會自動顯示錯誤資訊並提示使用者。比如對於在前端頁面中不輸入 如果設定表單對應model的content欄位不能為空,則使用者不輸入content內容並提交表單後,該頁面渲染結果會要求輸出類似“this
field is required”
除此之外 開發者也可以用is_valid()函式在程式碼中獲得表單驗證是否通過資訊 用errors屬性獲得錯誤提示資訊
f = MomentForm({'user_name':'david'})
print(f.is_valid())
False

print(f.error)
{'content':['This field is required']}

由於在MomentForm的初始化中只設置了user_name 的值,而沒有設定不能為空的content的值 因此此時呼叫表單的is_valid()結果為False。表單is_valid()函式通常在檢視函式的開發中起到重要作用。下面是表單檢視函式的設計結構

def viewer(request):
   if request.method=='POST':
       form = XXXForm(request.POST)
       if form.is_valid():
           #此處編寫正常的表單提交的業務邏輯
           #處理完成後用redirect重定向到頁面
       else:
           #此處編寫提交資料不完全的業務邏輯,比如現實特定的錯誤資訊等

2.自定義邏輯驗證

如果開發者需要在django進行表資料驗證時判斷自定義的複雜邏輯,則可以通過過載Form子類的clean函式進行定義。修改MomentForm的定義如下
from django.forms import ModelForm,ValidationError
from app.models import Moment
class MomentForm(ModelForm):
    class Meta:
        model = Moment
        fields = "__all__"
    def clean(self):
        cleaned_data = super(MomentForm,self).clean()
        content = cleaned_data.get("content")
        if content is None:
            raise ValidationError("請輸入content內容")
        elif contend.find("ABCD")>=0:
            raise ValidationError("不能輸入敏感字ABCD!")
        return cleaned_data
"""
在MomentForm中增加了對clean函式的定義,該函式在開發者呼叫Form.is_valid()函式時自動被django呼叫,開發者應該獎針對表單的自定義邏輯驗證邏輯解除安裝clean()函式中,如果驗證檢測到邏輯錯誤,則通過丟擲validationError()異常結束本次驗證,如果驗證資料正確 則返回從基類中得到的cleaned-data自定義表單資料驗證結果

"""

3.檢查變更欄位

當檢視函式收到表單提交的POST的時候,經常需要ton過驗證使用者是否修改了表單資料然後進行相應的處理,Django提供了表單函式 has_changed()來判斷使用者是否修改過表單資料,使用方法如下
def view_moment(request):
    data = {"content":"please input the content","user_name":"匿名",'kind':'python技術'}
    f = MomentForm(request.POST,initial=data)
    if f.has_changed():
        #在此處編寫儲存f的程式碼
"""
注意:Form例項初始化需要傳入兩個引數
+ request.POST :django從其中解析出使用者的輸入資料
initial:Form的初始值 在呼叫has_changed時 django用initial中的指端與初始值比較,如果有變化則返回True


"""       

django不僅僅能夠判斷是否有欄位修改過,還能用changed_data屬性精確定位使用者對那些欄位進行了修改。changed_data是包含欄位名的列表

if f.has_changed():
    print("如下欄位進行了修改")
    for field in f.changed_data:
        print(field)