溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Django的CBV方式講解

發(fā)布時間:2020-06-14 12:26:17 來源:網(wǎng)絡(luò) 閱讀:8222 作者:kesungang 欄目:開發(fā)技術(shù)

CBV使用配置

路徑url的配置

cbv 顧名知義就是通過類的方法來調(diào)用,我們在url中配置為如下路徑

 url(r'^cbv.html/', views.Cbv.as_view()),

這里的Cbv是一個class 類,要想使用cbv方法,這個路徑后面還得必須有一個as_view()這個是必須的固定格式

views里面函數(shù)的格式

在views里面配置類,需要導(dǎo)入一個模塊

from django.views.generic import View #這個是導(dǎo)入的模塊,原來的django版本從django.views 里面可以直接導(dǎo)入View,但是現(xiàn)在需要加一個generic才可以
class Cbv(View): #這里必須要繼承View這個類,只有繼承了這個url那里的as_view()才會有這個方法
    def get(self,request):
        return HttpResponse('cbv-get')

    def post(self,request):
        return HttpResponse('cbv-post')
瀏覽器get方式訪問

Django的CBV方式講解

創(chuàng)建一個login登陸頁面測試post方法
views配置
from django.views.generic import View
class Cbv(View):
    def get(self,request):
        # return HttpResponse('cbv-get')
        return render(request,'login.html') #發(fā)送到login.html
    def post(self,request):
        return HttpResponse('cbv-post')

login的頁面配置代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>cbv學(xué)習(xí)</title>
</head>
<body>
<form action="/cbv.html/" method="post">
    <input type="text" name="username">
    <input type="submit" value="提交">
</form>

</body>
</html>
瀏覽器訪問查看點(diǎn)擊提交后的結(jié)果

Django的CBV方式講解

點(diǎn)擊提交
Django的CBV方式講解

這里通過查看View的源碼,可以看到里面會有很多種提交方法
http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
使用ajax的時候這些方法都是可以使用的。

另外繼承類不光有View,還有很多的,查看源碼就可以看到的
Django的CBV方式講解

我的django版本號是
C:\Users\Tony>python3 -m django --version
1.9.13

cbv匹配原理

這種更具url來匹配方法的是通過反射方法(getattr)來做的。請求過來后先走dispatch這個方法,這個方法存在View類中。

    def dispatch(self, request, *args, **kwargs):
        # Try to dispatch to the right method; if a method doesn't exist,
        # defer to the error handler. Also defer to the error handler if the
        # request method isn't on the approved list.
        if request.method.lower() in self.http_method_names:
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)
定制dispatch

如果需要批量對方法,例如get,post等方法做一些操作的時候,這里我們可以手動寫一個dispatch,這個dispatch就和裝飾器的效果一樣。因為請求來的時候總是先走的dispatch。

from django.views.generic import View
class Cbv(View):
    def dispatch(self, request, *args, **kwargs):
        print('操作前的操作')
        obj = super(Cbv,self).dispatch(request, *args, **kwargs)
        print('操作后的操作代碼')
        return obj

    def get(self,request):
        # return HttpResponse('cbv-get')
        return render(request,'login.html')
    def post(self,request):
        return HttpResponse('cbv-post')

這次我們在通過瀏覽器訪問的時候,發(fā)現(xiàn)不管get或者post方法,都會走print代碼,
Django的CBV方式講解

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI