Django中的函數(shù)視圖和類視圖以及路由的定義方式
Django允許接收的請求方法
http_method_names = [‘get', ‘post', ‘put', ‘patch', ‘delete', ‘head', ‘options', ‘trace']
函數(shù)視圖
- 函數(shù)視圖它是一個標準的Python函數(shù)
- 函數(shù)視圖中, 第一個參數(shù)必須定義: 第一個參數(shù)為請求對象, 用于接收用戶發(fā)送的請求報文.
- 在函數(shù)視圖中, 必須返回響應(yīng)對象: 用于構(gòu)成響應(yīng)報文, 并響應(yīng)給用戶
- 請求對象: HTTPRequest() 對應(yīng)的對象
- 響應(yīng)對象: HTTPResponse() 對應(yīng)的對象
from django import http
# 創(chuàng)建一個函數(shù)視圖
def text_view(request):
"""
函數(shù)視圖
:param request:包含請求報文信息,請求對象
:return: 響應(yīng)對象,用于構(gòu)造響應(yīng)報文,并響應(yīng)給用戶
"""
# 響應(yīng)數(shù)據(jù)調(diào)用http
return http.HTTPResponse("數(shù)據(jù)data")
這里如果有請求路徑相同, 但是請求方式不同, 就需要在函數(shù)視圖內(nèi)加一個判斷
def text_view(request):
"""
函數(shù)視圖
:param request:包含請求報文信息,請求對象
:return: 響應(yīng)對象,用于構(gòu)造響應(yīng)報文,并響應(yīng)給用戶
"""
# 先判斷請求方法是什么如"GET","POST"
if request.method == "GET":
# 處理GET請求
return http.HTTPResponse("數(shù)據(jù)data")
elif request.method == "POST":
# 處理POST請求
return http.HTTPResponse("數(shù)據(jù)data")
在一些接口需要限制請求方式時可以使用裝飾器require_http_methods
from django.views.decorators.http import require_http_methods
# 添加一個裝飾器進行限制,請求方式大寫
@require_http_methods(['GET'])
def text_view(request):
"""
函數(shù)視圖, 限制請求方式,只能使用GET進行訪問,其他訪問方式會報錯405
:param request:包含請求報文信息,請求對象
:return: 響應(yīng)對象,用于構(gòu)造響應(yīng)報文,并響應(yīng)給用戶
"""
# 響應(yīng)數(shù)據(jù)調(diào)用http
return http.HTTPResponse("數(shù)據(jù)data")
類視圖
類視圖是一個Python類
定義類視圖時需要繼承Django中的提供的父類視圖 View
在類視圖中
- 需要定義跟請求方法同名的函數(shù)來對應(yīng)不同的請求方式
- 在請求方法同名的函數(shù)中,還必須定義一個接收請求的參數(shù)(跟函數(shù)視圖一樣)
- 在請求方法同名的函數(shù)中, 也必須返回一個相應(yīng)對象
from django.views import View
class CodeView(View):
"""
類視圖
"""
def get(self, request)
"""
處理GET請求
"""
return http.HttpResponse("數(shù)據(jù)")
def post(self, request)
"""
處理POST請求
"""
return http.HttpResponse("數(shù)據(jù)")
...
路由
定義路由的方法:path()、re_path()、url()
- Django1.x版本:url()
- Django2.x版本:path()、re_path()
說明:
- 為了在版本迭代中,保留舊版本的路由系統(tǒng),url()在新版中依然可用。
- 并新增了一個url()的替代方案re_path(),所以url()幾乎跟re_path()一樣。
路由方法對比
- path()
# 函數(shù)視圖path()路由語法:
# path('網(wǎng)絡(luò)地址正則表達式', 函數(shù)視圖名),
# 類視圖path()路由語法:
# path('網(wǎng)絡(luò)地址正則表達式', 類視圖.as_view()),
path()路由語法中,不需要定義正則表達式嚴格的開頭和結(jié)尾,因為已經(jīng)封裝好了
- re_path()、url()
# 函數(shù)視圖re_path()路由語法: # re_path(r'^網(wǎng)絡(luò)地址正則表達式$', 函數(shù)視圖名), # 類視圖re_path()路由語法: # re_path(r'^網(wǎng)絡(luò)地址正則表達式$', 類視圖.as_view()), # 函數(shù)視圖url()路由語法: # url(r'^網(wǎng)絡(luò)地址正則表達式$', 函數(shù)視圖名), # 類視圖url()路由語法: # url(r'^網(wǎng)絡(luò)地址正則表達式$', 類視圖.as_view()), re_path()和url()路由語法中,必須要定義正則表達式嚴格的開頭和結(jié)尾
總路由
在Django中一個子應(yīng)用對應(yīng)一個總路由
總路由中,使用include()將 子應(yīng)用里面的所有路由都包含在工程總路由中
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
# 自帶的后臺管理系統(tǒng)的總路由:可以忽略
path('admin/', admin.site.urls),
# 總路由包含子路由語法
# path('網(wǎng)絡(luò)地址前綴/', include('子應(yīng)用.urls')),
# 或者
# path('', include('子應(yīng)用.urls')),
# 例:
# 用戶模塊:http://127.0.0.1:8000/users/register/
path('', include('users.urls')),
]
函數(shù)視圖的路由
from django.urls import path
# 把當前文件下的視圖文件導(dǎo)進來
from . import views
# urlpatterns是被Django自動識別的路由列表變量:定義該應(yīng)用的所有路由信息
urlpatterns = [
# 函數(shù)視圖路由語法:
# path('網(wǎng)絡(luò)地址正則表達式', 函數(shù)視圖名),
# 例:
# 用戶注冊:http://127.0.0.1:8000/users/register/
path('users/register/', views.register),
]
類視圖定義路由
from django.urls import path
from . import views
# urlpatterns是被Django自動識別的路由列表變量:定義該應(yīng)用的所有路由信息
urlpatterns = [
# 類視圖路由語法:
# path('網(wǎng)絡(luò)地址正則表達式', 類視圖.as_view()),
# 用戶注冊:http://127.0.0.1:8000/users/register/
path('users/register/', views.RegisterView.as_view()),
]
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Python獲取docx/doc文件內(nèi)容代碼解析
這篇文章主要介紹了基于Python獲取docx/doc文件內(nèi)容代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下2020-02-02
JupyterNotebook 輸出窗口的顯示效果調(diào)整方法
python基于json文件實現(xiàn)的gearman任務(wù)自動重啟代碼實例
Pycharm配置導(dǎo)入torch報錯Traceback的問題及解決
Python代碼一鍵轉(zhuǎn)Jar包及Java調(diào)用Python新姿勢
python下paramiko模塊實現(xiàn)ssh連接登錄Linux服務(wù)器

