Django中的函數(shù)視圖和類(lèi)視圖以及路由的定義方式
Django允許接收的請(qǐng)求方法
http_method_names = [‘get', ‘post', ‘put', ‘patch', ‘delete', ‘head', ‘options', ‘trace']
函數(shù)視圖
- 函數(shù)視圖它是一個(gè)標(biāo)準(zhǔn)的Python函數(shù)
- 函數(shù)視圖中, 第一個(gè)參數(shù)必須定義: 第一個(gè)參數(shù)為請(qǐng)求對(duì)象, 用于接收用戶(hù)發(fā)送的請(qǐng)求報(bào)文.
- 在函數(shù)視圖中, 必須返回響應(yīng)對(duì)象: 用于構(gòu)成響應(yīng)報(bào)文, 并響應(yīng)給用戶(hù)
- 請(qǐng)求對(duì)象: HTTPRequest() 對(duì)應(yīng)的對(duì)象
- 響應(yīng)對(duì)象: HTTPResponse() 對(duì)應(yīng)的對(duì)象
from django import http
# 創(chuàng)建一個(gè)函數(shù)視圖
def text_view(request):
"""
函數(shù)視圖
:param request:包含請(qǐng)求報(bào)文信息,請(qǐng)求對(duì)象
:return: 響應(yīng)對(duì)象,用于構(gòu)造響應(yīng)報(bào)文,并響應(yīng)給用戶(hù)
"""
# 響應(yīng)數(shù)據(jù)調(diào)用http
return http.HTTPResponse("數(shù)據(jù)data")
這里如果有請(qǐng)求路徑相同, 但是請(qǐng)求方式不同, 就需要在函數(shù)視圖內(nèi)加一個(gè)判斷
def text_view(request):
"""
函數(shù)視圖
:param request:包含請(qǐng)求報(bào)文信息,請(qǐng)求對(duì)象
:return: 響應(yīng)對(duì)象,用于構(gòu)造響應(yīng)報(bào)文,并響應(yīng)給用戶(hù)
"""
# 先判斷請(qǐng)求方法是什么如"GET","POST"
if request.method == "GET":
# 處理GET請(qǐng)求
return http.HTTPResponse("數(shù)據(jù)data")
elif request.method == "POST":
# 處理POST請(qǐng)求
return http.HTTPResponse("數(shù)據(jù)data")
在一些接口需要限制請(qǐng)求方式時(shí)可以使用裝飾器require_http_methods
from django.views.decorators.http import require_http_methods
# 添加一個(gè)裝飾器進(jìn)行限制,請(qǐng)求方式大寫(xiě)
@require_http_methods(['GET'])
def text_view(request):
"""
函數(shù)視圖, 限制請(qǐng)求方式,只能使用GET進(jìn)行訪問(wèn),其他訪問(wèn)方式會(huì)報(bào)錯(cuò)405
:param request:包含請(qǐng)求報(bào)文信息,請(qǐng)求對(duì)象
:return: 響應(yīng)對(duì)象,用于構(gòu)造響應(yīng)報(bào)文,并響應(yīng)給用戶(hù)
"""
# 響應(yīng)數(shù)據(jù)調(diào)用http
return http.HTTPResponse("數(shù)據(jù)data")
類(lèi)視圖
類(lèi)視圖是一個(gè)Python類(lèi)
定義類(lèi)視圖時(shí)需要繼承Django中的提供的父類(lèi)視圖 View
在類(lèi)視圖中
- 需要定義跟請(qǐng)求方法同名的函數(shù)來(lái)對(duì)應(yīng)不同的請(qǐng)求方式
- 在請(qǐng)求方法同名的函數(shù)中,還必須定義一個(gè)接收請(qǐng)求的參數(shù)(跟函數(shù)視圖一樣)
- 在請(qǐng)求方法同名的函數(shù)中, 也必須返回一個(gè)相應(yīng)對(duì)象
from django.views import View
class CodeView(View):
"""
類(lèi)視圖
"""
def get(self, request)
"""
處理GET請(qǐng)求
"""
return http.HttpResponse("數(shù)據(jù)")
def post(self, request)
"""
處理POST請(qǐng)求
"""
return http.HttpResponse("數(shù)據(jù)")
...
路由
定義路由的方法:path()、re_path()、url()
- Django1.x版本:url()
- Django2.x版本:path()、re_path()
說(shuō)明:
- 為了在版本迭代中,保留舊版本的路由系統(tǒng),url()在新版中依然可用。
- 并新增了一個(gè)url()的替代方案re_path(),所以u(píng)rl()幾乎跟re_path()一樣。
路由方法對(duì)比
- path()
# 函數(shù)視圖path()路由語(yǔ)法:
# path('網(wǎng)絡(luò)地址正則表達(dá)式', 函數(shù)視圖名),
# 類(lèi)視圖path()路由語(yǔ)法:
# path('網(wǎng)絡(luò)地址正則表達(dá)式', 類(lèi)視圖.as_view()),
path()路由語(yǔ)法中,不需要定義正則表達(dá)式嚴(yán)格的開(kāi)頭和結(jié)尾,因?yàn)橐呀?jīng)封裝好了
- re_path()、url()
# 函數(shù)視圖re_path()路由語(yǔ)法: # re_path(r'^網(wǎng)絡(luò)地址正則表達(dá)式$', 函數(shù)視圖名), # 類(lèi)視圖re_path()路由語(yǔ)法: # re_path(r'^網(wǎng)絡(luò)地址正則表達(dá)式$', 類(lèi)視圖.as_view()), # 函數(shù)視圖url()路由語(yǔ)法: # url(r'^網(wǎng)絡(luò)地址正則表達(dá)式$', 函數(shù)視圖名), # 類(lèi)視圖url()路由語(yǔ)法: # url(r'^網(wǎng)絡(luò)地址正則表達(dá)式$', 類(lèi)視圖.as_view()), re_path()和url()路由語(yǔ)法中,必須要定義正則表達(dá)式嚴(yán)格的開(kāi)頭和結(jié)尾
總路由
在Django中一個(gè)子應(yīng)用對(duì)應(yīng)一個(gè)總路由
總路由中,使用include()將 子應(yīng)用里面的所有路由都包含在工程總路由中
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
# 自帶的后臺(tái)管理系統(tǒng)的總路由:可以忽略
path('admin/', admin.site.urls),
# 總路由包含子路由語(yǔ)法
# path('網(wǎng)絡(luò)地址前綴/', include('子應(yīng)用.urls')),
# 或者
# path('', include('子應(yīng)用.urls')),
# 例:
# 用戶(hù)模塊:http://127.0.0.1:8000/users/register/
path('', include('users.urls')),
]
函數(shù)視圖的路由
from django.urls import path
# 把當(dāng)前文件下的視圖文件導(dǎo)進(jìn)來(lái)
from . import views
# urlpatterns是被Django自動(dòng)識(shí)別的路由列表變量:定義該應(yīng)用的所有路由信息
urlpatterns = [
# 函數(shù)視圖路由語(yǔ)法:
# path('網(wǎng)絡(luò)地址正則表達(dá)式', 函數(shù)視圖名),
# 例:
# 用戶(hù)注冊(cè):http://127.0.0.1:8000/users/register/
path('users/register/', views.register),
]
類(lèi)視圖定義路由
from django.urls import path
from . import views
# urlpatterns是被Django自動(dòng)識(shí)別的路由列表變量:定義該應(yīng)用的所有路由信息
urlpatterns = [
# 類(lèi)視圖路由語(yǔ)法:
# path('網(wǎng)絡(luò)地址正則表達(dá)式', 類(lèi)視圖.as_view()),
# 用戶(hù)注冊(cè):http://127.0.0.1:8000/users/register/
path('users/register/', views.RegisterView.as_view()),
]
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用Tkinter實(shí)現(xiàn)機(jī)器人走迷宮
這篇文章主要為大家詳細(xì)介紹了Python使用Tkinter實(shí)現(xiàn)機(jī)器人走迷宮,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Python中BeautifulSoup通過(guò)查找Id獲取元素信息
這篇文章主要介紹了Python中BeautifulSoup通過(guò)查找Id獲取元素信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
python中DataFrame數(shù)據(jù)合并merge()和concat()方法詳解
Pandas提供了很多合并Series和Dataframe的強(qiáng)大的功能,通過(guò)這些功能可以方便的進(jìn)行數(shù)據(jù)分析,下面這篇文章主要給大家介紹了關(guān)于python中DataFrame數(shù)據(jù)合并merge()和concat()方法的相關(guān)資料,需要的朋友可以參考下2022-07-07
利用Python解決構(gòu)造回文字符串問(wèn)題的方法
回文字符串是指正讀和反讀都相同的字符串,例如"aba"或"abba",構(gòu)造回文字符串問(wèn)題通常涉及從給定字符串中刪除某些字符,以形成最長(zhǎng)的回文子序列,或者計(jì)算形成回文所需的最小刪除次數(shù),本文將詳細(xì)介紹如何使用Python和動(dòng)態(tài)規(guī)劃算法來(lái)解決構(gòu)造回文字符串問(wèn)題2025-04-04
Python爬蟲(chóng)與防反爬蟲(chóng)策略從入門(mén)到實(shí)戰(zhàn)
本文將從基礎(chǔ)的爬蟲(chóng)原理和庫(kù)介紹開(kāi)始,逐步深入,通過(guò)實(shí)際示例代碼,帶領(lǐng)讀者學(xué)習(xí)Python爬蟲(chóng)的使用和技巧,掌握從簡(jiǎn)單到復(fù)雜的爬蟲(chóng)實(shí)現(xiàn)2024-01-01
PyTorch實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的搭建詳解
這篇文章主要為大家介紹了PyTorch實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的搭建詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python實(shí)現(xiàn)更改圖片尺寸大小的方法(基于Pillow包)
這篇文章主要介紹了Python實(shí)現(xiàn)更改圖片尺寸大小的方法,結(jié)合實(shí)例形式分析了Python基于Pillow包更改圖片屬性的相關(guān)技巧,需要的朋友可以參考下2016-09-09
python庫(kù)pydantic數(shù)據(jù)驗(yàn)證和設(shè)置管理庫(kù)的用途
pydantic是一個(gè)用于數(shù)據(jù)驗(yàn)證和設(shè)置管理的Python庫(kù),它主要利用Python類(lèi)型注解來(lái)定義數(shù)據(jù)模型的結(jié)構(gòu)和驗(yàn)證規(guī)則,本文給大家介紹python庫(kù)pydantic數(shù)據(jù)驗(yàn)證和設(shè)置管理庫(kù)的用途,感興趣的朋友跟隨小編一起看看吧2025-09-09

