Dajngo的CBV和FBV

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方法来实现,

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

posted @ 2018-09-12 15:05  WrYcF  阅读(181)  评论(0编辑  收藏  举报
Live2D