所有请求都会走dispatch方法
所以应用场景上,如果当你希望某个接口或特定方法

CBV使用

url中的写法

  1. urlpatterns = [
  2. url(r'^admin/', admin.site.urls),
  3. url(r'^index/', views.IndexView.as_view()) # 执行类后面的as_view()方法,是父类里面的方法
  4. ]


CBV写法

from django.views import View
class IndexView(View):

    # 以get形式访问会执行get函数,一般情况下获取数据
    def get(self, request, *args, **kwargs):  
        return HttpResponse('666')

    # 以post形式访问的话会执行post函数,一般情况下发送数据
    def post(self, request, *args, **kwargs):  
        return HttpResponse('999')

dispatch方法

image.pngimage.png
总结:所有方法如get、post、put…都会走该方法,可以通过重写该方法并让python类多继承方式,可以做方法拓展。比如我有接口abc,我希望ab接口所有的请求都有一些公共的处理方式,则可以通过该方式处理

from django.views import View
class myDispatch(View):
    def dispatch(self, request, *args, **kwargs):
        print('before')
        # 定制父类dispatch(派遣)方法
        ret = super(wusiqi,self).dispatch(request, *args, **kwargs)
        print('after')
        # 完全继承父类dispatch方法
        return ret

class IndexView(myDispatch, View):

    # 以get形式访问会执行get函数,一般情况下获取数据
    def get(self, request, *args, **kwargs):  
        return HttpResponse('666')

    # 以post形式访问的话会执行post函数,一般情况下发送数据
    def post(self, request, *args, **kwargs):  
        return HttpResponse('999')