如需了完整內(nèi)容請訪問:https://www.emperinter.info/2022/05/31/django-view/
視圖
概述
- 作用:
- 視圖接受web請求,并響應(yīng)Web請求
- 本質(zhì):
- 視圖就是 一個Python中的函數(shù)
- 響應(yīng)內(nèi)容:
- 網(wǎng)頁
- 重定向
- 錯誤視圖
- 404:url找不到
- 500: 服務(wù)器內(nèi)部錯誤
- JSON數(shù)據(jù)
- 網(wǎng)頁
URL 配置
配置流程
- 在
settings.py中指定根級URL配置文件:ROOT_URLCONF = 'project.urls',默認(rèn)實現(xiàn)了。 -
urlpatterns:- 一個url實例的對象
- url對象
- 正則表達式
- 視圖名稱
- 名稱(用來反向解析的)
- url匹配正則的注意事項:
- 如果想要從url中獲取一個值,需要對正則加小括號
- 匹配正確,前方不需要加小斜杠
/,一般在最后加 - 正則前需要加
r表示字符串不轉(zhuǎn)義
引入其它url配置
- 一般在應(yīng)用中創(chuàng)建
urls.py文件,定義本應(yīng)用的url配置,在工程urls.py文件中使用include()方法:url(r'^', include('myApp.urls',namespace='myApp')),
匹配過程
- 工程url->應(yīng)用url->視圖
URL的反向解析(代理):
- 概述
- 如果在視圖/模板中使用了硬編碼的連接,在url配置發(fā)生改變時,動態(tài)生成鏈接的地址。
- 解決思路
- 在使用鏈接時,通過url配置的名稱,動態(tài)生成url地址。
- 作用
- 使用url模板的時候
視圖函數(shù)
定義視圖:
- 本質(zhì):一個函數(shù)
- 視圖參數(shù):
-
request一個HttpRequest的實例 - 通過url正則表達式獲取的參數(shù)
-
- 位置:
- 一般在
views.py中定義
- 一般在
錯誤視圖
- 404視圖
- 找不到網(wǎng)頁(url匹配不成功)時返回。
- 可以自己定義。
- 在
templates下定義404.html-
request_path:導(dǎo)致出錯的網(wǎng)址。
-
- 配置
settings.py-
DEBUG如果為True永遠(yuǎn)不會調(diào)用404.html頁面 ALLOWED_HOSTS = [*]
-
- 在
- 500視圖
- 在視圖代碼中出現(xiàn)錯誤(服務(wù)器代碼)。
- 400視圖
- 錯誤是客戶的操作。
HttpRequest對象
概念
- 接收HTTP請求后,會根據(jù)報文創(chuàng)建
HttpRequest對象 - 視圖的第一個參數(shù)就是
HttpRequest對象 - Djano對象創(chuàng)建的,之后調(diào)用試圖傳遞給視圖
屬性
-
path- 請求的完整路徑(不包括域名和端口)
-
method- 表示請求的方式,常用的有GET、POST
-
encoding- 表示瀏覽器提交的數(shù)據(jù)的編碼方式,一般為
utf-8
- 表示瀏覽器提交的數(shù)據(jù)的編碼方式,一般為
-
GET- 類似字典的對象,包含了get請求的所有參數(shù)
-
POST- 類似字典的對象,包含了post請求的所有參數(shù)
-
FILES- 類似字典的對象,包含了所有上傳的文件。
-
COOKIES- 字典,包含所有的cookie
-
session- 類似字典的對象,表示當(dāng)前會話
方法
-
is_ajax()- 如果是
XMLHttpRequest發(fā)起的,返回True
- 如果是
QueryDict對象
- request對象中的GET、POST對象都屬于QueryDict對象
- 方法
-
get()- 作用:根據(jù)鍵獲取值
- 只能獲取一個值
www.baidu.com/abc?a=1&b=2&c=3
-
getlist()- 將鍵的值以列表形式返回
- 可以獲取多個值
-
www.baidu.com/abc?a=1&a=2&c=3(注意有兩個a)
-
GET屬性
# 獲取get傳遞的數(shù)據(jù)
def get1(request):
a = request.GET.get("a")
b = request.GET["b"]
c = request.GET.get("c")
return HttpResponse(a + " " + b + " " + c)
def get2(request):
a = request.GET.getlist('a')
a1 = a[0]
a2 = a[1]
b = request.GET.get('c')
return HttpResponse(a1 + " " + a2 + " " + b)
POST屬性
- 使用表單模擬提交post請求
- 關(guān)閉
CSRF:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
- test case
def showregister(request):
name = request.POST.get("username")
gender = request.POST.get("gender")
age = request.POST.get("age")
hobby = request.POST.getlist("hobby") # checkbox
info = str("name:\t" + name + "\tgender:" +gender + "\tage:" + age + "\thobby"+ str(hobby))
print(info)
return HttpResponse(info)
HttpResponse對象
如需了解更多請訪問:https://www.emperinter.info/2022/05/31/django-view/