首頁技術(shù)文章正文

類視圖及定義視圖的方法

更新時間:2022-07-26 來源:黑馬程序員 瀏覽量:

  雖然一個視圖處理用戶的一個請求,但HTTP提供了多種請求方式(GET、POST、PUT等),用戶使用應(yīng)用的某個功能時,該功能可能以任意一種方式發(fā)起請求,例如商品管理功能使用GET方式發(fā)起的呈現(xiàn)商品列表的請求、使用POST方式發(fā)起的修改商品請求等。此時視圖需要結(jié)合條件分支,對每種請求方式分別進(jìn)行處理。然而,若所有請求方式的處理邏輯都定義在同一個視圖中,視圖很可能龐大且臃腫。為了解決這一問題,Django設(shè)計了類視圖。

  類視圖允許在views.py的一個類中定義不同的方法,以處理同一功能以不同請求方式發(fā)送的請求。

  假設(shè)有來自同一URL的GET請求和POST請求,以函數(shù)視圖和類視圖的形式分別組織代碼,具體示例如下:

      1.以函數(shù)的形式定義視圖

from django.http import HttpResponse
def my_view(request):
    if request.method == 'Get':
        return HttpResponse('Get result')
    elif request.method == 'POST':
        return HttpResponse('POST result')

  2.以類的形式定義視圖

# views.py
from django.http import HttpResponse
form django.views import View
class MyView(View):
    def get(self, request):
        return HttpResponse('Get result')
    def post(self,request):
        return HttpResponse('POST result')

  Django的URLconf期望將和請求關(guān)聯(lián)的參數(shù)直接傳遞給可調(diào)用的函數(shù)而非定義了方法的類,所以URL配置中會調(diào)用視圖類的as_view()方法。as_view()方法的功能是接收請求,獲取請求方法request.method,并根據(jù)request.method返回相應(yīng)的視圖方法。

  在urls.py中配置URL,調(diào)用以上定義的類視圖,示例代碼如下:

# urls.py
from django.urls import path
from views import MyView
urlpatterns = [
    path('about/', MyView.as_view()),
]

  以上示例中的path()函數(shù)在接收到URL“about/”時,會調(diào)用MyView類的as_view()方法,根據(jù)不同的請求方式執(zhí)行類視圖MyView中的不同請求方法。

分享到:
在線咨詢 我要報名
和我們在線交談!