zoukankan      html  css  js  c++  java
  • 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方法来实现,

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

  • 相关阅读:
    [codeforces contest 1119 F] Niyaz and Small Degrees 解题报告 (树形DP+堆)
    [牛客挑战赛 30D] 小A的昆特牌 解题报告 (组合数学)
    [jzoj 6073] 河 解题报告 (DP)
    Ant Design Pro的windows10安装
    .Net Core在类库中使用当前HttpContext
    .NetCore多文件上传进度的示例
    简单实现上传文件进度条
    动态导入Js文件
    AutoMapper在asp.netcore中的使用
    Asp.Net Core通过HttpStatusCode状态处理响应结果
  • 原文地址:https://www.cnblogs.com/wuyongcong/p/9634837.html
Copyright © 2011-2022 走看看