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

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

  • 相关阅读:
    Cesium视角
    Cesium删除特定的实体
    cesium之CLAMPED
    JavaScript:使用setAttribute()改变网页中标签的onclick属性
    atoi()函数及其实现
    寻找数组中的第二大数
    字符串函数之strcpy
    互换两个变量(不使用中间变量)
    寻找兄弟单词(2012.5.6百度实习)
    大数据量的存储分表常见算法(转)
  • 原文地址:https://www.cnblogs.com/wuyongcong/p/9634837.html
Copyright © 2020-2023  润新知