1. 程式人生 > 程式設計 >Django form表單與請求的生命週期步驟詳解

Django form表單與請求的生命週期步驟詳解

Django中請求的生命週期

HTTP請求及服務端響應中傳輸的所有資料都是字串

步驟

  • 使用者在瀏覽器中輸入url時,瀏覽器會生成請求頭和請求體發給伺服器
  • url經過wsgi和中介軟體,到達路由對映表,在路由中一條一條進行匹配
  • 檢視函式根據客戶端的請求查詢響應的資料,返回給
  • DjangoDjango把客戶端想要的資料做為一個字串返回給客戶端
  • 客戶端瀏覽器接收到返回的資料,經過渲染後顯示給使用者

FBV

一個url對應一個檢視函式

url匹配成功之後,會直接執行對應的檢視函式。

CBV

一個url對應一個類

url匹配成功找到檢視函式中對應的類,然後這個類回到請求頭中找到對應的Request.Method

如果客戶端以post的方式提交請求,就執行類中的post方法如果客戶端以get的方式提交請求,就執行類中的get方法

步驟:

  1. 服務端傳送包含url和method的請求,這兩個資訊都是字串型別
  2. 服務端通過路由對映表匹配成功後會自動去找dispatch方法
  3. Django會通過dispatch反射的方式找到類中對應的方法並執行
  4. 勒種的方法執行完畢後,會把客戶端想要的資料返回給dispatch方法
  5. dispatch方法把資料返回給客戶端

form表單

定義:

Django的表單系統中,所有的表單都繼承自django.forms.Form

Django的表單系統

form_obj.as_p		 #在html網頁渲染所有的欄位
label				#為一個標籤新增id號
form_obj.欄位		 #渲染指定的欄位
min_length			#繫結欄位的最短長度
max_length			#繫結欄位的最長長度
is_valid()			#驗證使用者輸入的資訊是否有效,返回一個布林值
cleaned_data()		 #清洗資料
error_massage()		 #定義錯誤的返回資訊
#檔案上傳:
request.POST.get("file")	#獲取上傳的檔案的檔名
request.FILES			#獲取上傳檔案的物件	結果是一個欄位
file_obj.name			#獲取上傳檔案在記憶體中的名字
#上傳檔案時要使用分片傳輸的方式
#上傳
enctype="multipart/form-data"	#form表單的屬性裡新增
#接收
if request.method=="POST":
 file_obj = request.FILES.get("up_file")
 fl = open(file_obj.name,'vb')
 for i in file_obj.chunks():
 fl.write(i)
 fl.close()
#可以在class Meta中設定的功能

model = model.UserInfo		#顯示對於Model的字典,這裡顯示使用者資訊表
fields = "__all__"		#顯示資料表中所有的欄位
fields = ["username","age"]	#顯示資料表的某些指定的欄位
exclude = ["email"]		#不顯示資料表的某些欄位
#自定義頁面的標籤
labels = {"username":"使用者名稱","age":"年齡","email":"郵箱"}	
#自定義在標籤後面顯示的提示幫助資訊
help_texts = {"username":"請輸入正確的使用者名稱","email":"請輸入正確的郵箱"}	
#自定義錯誤資訊,使用者輸入錯誤時提示
error_messages = {"username":{"required":"使用者名稱不能為空"},"email":{"invalid":"郵箱不能為空"}}
#自定義標籤的型別,在這裡把email這個輸入框的型別更改為email型別
from django import fields as field_widget
field_classes = {}"email":field_widget.EmailField}
#自定義外掛(attrs為外掛的屬性)
from django.forms import widgets as formwidget
widgets = {"username":formwidget.Textarea(attrs={"class":"c1"})}

總結

到此這篇關於Django-form表單與請求的生命週期的文章就介紹到這了,更多相關Django-form表單與請求的生命週期內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!