所有请求都会走dispatch方法
所以应用场景上,如果当你希望某个接口或特定方法
CBV使用
url中的写法
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.IndexView.as_view()) # 执行类后面的as_view()方法,是父类里面的方法
]
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方法
总结:所有方法如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')