from django.urls import path
from app01.views import cbv_demourlpatterns = [# path('admin/', admin.site.urls),path('cbv/demo/', cbv_demo.StudentsView.as_view()),
]
from django.views import View
from django.shortcuts import HttpResponse
from django.views.decorators.csrf import csrf_exempt,csrf_protect
from django.utils.decorators import method_decorator"""
CBV知识点:
1.流程:路由--》view--》dispatch(反射)
2.取消csrf认证,有两种方式。重写dispatch,装饰dispatch。直接装饰类:@method_decorator(csrf_exempt,name='dispatch')
3.csrf认证,是基于中间件的process_view中实现。中间件总共有5个方法,process_request,process_view,process_respones,process_exception,process_render_template流程:执行所有的process_request--》》路由匹配--》》执行所有的process_view-->>视图函数--》》执行process——response原因:我们在取消csrf认证的时候,加了装饰器-->>某个函数免除csrf认证--->>所以在认证的过程中需要判断函数有没有加装饰器--->>所以需要先做路由匹配,找到函数
"""
class MyBaseView(View):# @method_decorator(csrf_exempt) # 1.免除csrf认证,必须在dispatch中使用在类中使用def dispatch(self, request, *args, **kwargs):print('before')ret = super(MyBaseView,self).dispatch(request, *args, **kwargs)print('after')return ret# @method_decorator(csrf_exempt,name='dispatch') # 2.直接装饰类
class StudentsView(MyBaseView,View):def get(self,request,*args,**kwargs):return HttpResponse('GET')def post(self,request,*args,**kwargs):return HttpResponse('POST')def delete(self,request,*args,**kwargs):return HttpResponse('DELETE')def put(self,request,*args,**kwargs):return HttpResponse('PUT')class TeacherView(MyBaseView,View):def get(self, request, *args, **kwargs):return HttpResponse('GET')def post(self, request, *args, **kwargs):return HttpResponse('POST')def delete(self, request, *args, **kwargs):return HttpResponse('DELETE')def put(self, request, *args, **kwargs):return HttpResponse('PUT')
- 实现效果