欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django中的函數(shù)視圖和類視圖以及路由的定義方式

 更新時間:2025年08月02日 14:32:10   作者:藍小白1024  
Django視圖分函數(shù)視圖和類視圖,前者用函數(shù)處理請求,后者繼承View類定義方法,路由使用path()、re_path()或url(),通過include()整合子應(yīng)用路由,需注意請求方式判斷及裝飾器限制

Django允許接收的請求方法

http_method_names = [‘get', ‘post', ‘put', ‘patch', ‘delete', ‘head', ‘options', ‘trace']

函數(shù)視圖

  1. 函數(shù)視圖它是一個標準的Python函數(shù)
  2. 函數(shù)視圖中, 第一個參數(shù)必須定義: 第一個參數(shù)為請求對象, 用于接收用戶發(fā)送的請求報文.
  3. 在函數(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)文章

  • 5種Python統(tǒng)計次數(shù)方法技巧

    5種Python統(tǒng)計次數(shù)方法技巧

    這篇文章主要給大家分享的是5種Python統(tǒng)計次數(shù)方法技巧,文章主要包括字典 dict 統(tǒng)計、collections.defaultdict 統(tǒng)計、List count方法、集合(set)和列表(list)統(tǒng)計、collections.Counter方法,感興趣的小伙伴一起進入下面文章內(nèi)容吧
    2021-11-11
  • JupyterNotebook 輸出窗口的顯示效果調(diào)整方法

    JupyterNotebook 輸出窗口的顯示效果調(diào)整方法

    這篇文章主要介紹了JupyterNotebook 輸出窗口的顯示效果調(diào)整方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python基于json文件實現(xiàn)的gearman任務(wù)自動重啟代碼實例

    python基于json文件實現(xiàn)的gearman任務(wù)自動重啟代碼實例

    這篇文章主要介紹了python基于json文件實現(xiàn)的gearman任務(wù)自動重啟代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-08-08
  • Pycharm配置導(dǎo)入torch報錯Traceback的問題及解決

    Pycharm配置導(dǎo)入torch報錯Traceback的問題及解決

    這篇文章主要介紹了Pycharm配置導(dǎo)入torch報錯Traceback的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Python代碼一鍵轉(zhuǎn)Jar包及Java調(diào)用Python新姿勢

    Python代碼一鍵轉(zhuǎn)Jar包及Java調(diào)用Python新姿勢

    這篇文章主要介紹了Python一鍵轉(zhuǎn)Jar包,Java調(diào)用Python新姿勢,本文通過截圖實例給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Python安裝Graphviz超詳細圖文教程

    Python安裝Graphviz超詳細圖文教程

    這篇文章主要介紹了Python安裝Graphviz超詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • python下paramiko模塊實現(xiàn)ssh連接登錄Linux服務(wù)器

    python下paramiko模塊實現(xiàn)ssh連接登錄Linux服務(wù)器

    這篇文章主要介紹了python下paramiko模塊實現(xiàn)ssh連接登錄Linux服務(wù)器的方法,實例分析了paramiko模塊實現(xiàn)ssh連接的具體用法,需要的朋友可以參考下
    2015-06-06
  • 詳解使用CUDA+OpenCV加速yolo v4性能

    詳解使用CUDA+OpenCV加速yolo v4性能

    這篇文章主要介紹了使用CUDA+OpenCV加速yolo v4性能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-04-04
  • 最新評論