Dajngo的CBV和FBV

时间:2021-03-27 04:18:15

CBV:

  class、 base、 view

路由:
url(r'students/', views.StudentsView.as_view()) 视图: from django.views import View class StudentsView(View): def get(self, request, *args, **Kwargs):
return HttpResponse('GET') def post(self, request, *args, **kwargs):
return HttpResponse('POST') def put(self, request, *args, **kwargs):
return HttpResponse('PUT') def delete(self, request, *args, **kwargs):
return HttpResponse('DELETE')

FBV:

  functions、 base、 view

def users(request):
user_list = ['wyc', 'test']
return HttpResponse(json.dumps(user_list))

django中间件五种方法:

process_request
process_view
process_exception
process_response
process_render_template

用中间件做过什么?

权限
用户登录认证
django的csrf是怎么实现的:
原理:
请求拿去token, 然后验证是否是以前发送的, 如果是以前发送的就验证通过,否则失败。
解决办法:
from django.view.decorators.csrf import csrf_exempt @csrf_exempt # 表示不用认证
实现方式:
process_view方法
检查是否被 @csrf_exempt (免除csrf认证)
去请求体或cookie获取token csrf_protect # 函数认证 CBV解决csrf的问题
from django.utils.decorators import method_decorator 加到函数dispatch函数
@method_decorator
def dispatch(self, request, *args, **kwargs):
  return super(StudentsView, self).dispatch(request, *args, **Kwargs) 第二种解决办法:
直接在类上边添加
@method_decorator(csrf_exempt, name='dispatch')

总结:

  CBV: 基于用户的请求和方法来进行反射。

      流程:    

        请求先到路由,路由再到View,View在到源码dispatch函数进行请求反射。

      取消csrf认证,需要加到dispatch方法上,用装饰器的形式添加(method_decorator)来装饰。

      扩展:  

        csrf

          基于中间件的process_view方法来实现,

          基于装饰器来给单独函数设置认证或无需认证。