一個視圖函數,簡稱視圖,是一個簡單的 Python 函數,它接受 Web 請求并且傳回 Web 響應。
響應可以是一個 HTML 頁面、一個 404 錯誤頁面、重定向頁面、XML 文檔、或者一張圖檔...
無論視圖本身包含什麼邏輯,都要傳回響應。代碼寫在哪裡都可以,隻要在 Python 目錄下面,一般放在項目的 views.py 檔案中。
每個視圖函數都負責傳回一個 HttpResponse 對象,對象中包含生成的響應。
視圖層中有兩個重要的對象:請求對象(request)與響應對象(HttpResponse)。
以下介紹幾個常用的 request 屬性。
資料類型是 QueryDict,一個類似于字典的對象,包含 HTTP GET 的所有參數。
有相同的鍵,就把所有的值放到對應的清單裡。
取值格式:對象.方法。
get():傳回字元串,如果該鍵對應有多個值,取出該鍵的最後一個值。
def runoob(request):
name = request.GET.get("name")
return HttpResponse('姓名:{}'.format(name))

資料類型是 QueryDict,一個類似于字典的對象,包含 HTTP POST 的所有參數。
常用于 form 表單,form 表單裡的标簽 name 屬性對應參數的鍵,value 屬性對應參數的值。
取值格式: 對象.方法。
name = request.POST.get("name")
資料類型是二進制位元組流,是原生請求體裡的參數内容,在 HTTP 中用于 POST,因為 GET 沒有請求體。
在 HTTP 中不常用,而在處理非 HTTP 形式的封包時非常有用,例如:二進制圖檔、XML、Json 等。
name = request.body
print(name)
return HttpResponse("菜鳥教程")
擷取 URL 中的路徑部分,資料類型是字元串。
name = request.path
擷取目前請求的方式,資料類型是字元串,且結果為大寫。
name = request.method
響應對象主要有三種形式:HttpResponse()、render()、redirect()。
HttpResponse(): 傳回文本,參數為字元串,字元串中寫文本内容。如果參數為字元串裡含有 html 标簽,也可以渲染。
# return HttpResponse("菜鳥教程")
return HttpResponse("<a href='https://www.runoob.com/'>菜鳥教程</a>")
render(): 傳回文本,第一個參數為 request,第二個參數為字元串(頁面名稱),第三個參數為字典(可選參數,向頁面傳遞的參數:鍵為頁面參數名,值為views參數名)。
name ="菜鳥教程"
return render(request,"runoob.html",{"name":name})
redirect():重定向,跳轉新頁面。參數為字元串,字元串中填寫頁面路徑。一般用于 form 表單送出後,跳轉到新頁面。
return redirect("/index/")
render 和 redirect 是在 HttpResponse 的基礎上進行了封裝:
render:底層傳回的也是 HttpResponse 對象
redirect:底層繼承的是 HttpResponse 對象