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

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

  • 相关阅读:
    kolla多节点部署openstack
    归并排序
    gitlab ci/cd
    微信、支付宝个人收款码不能用于经营收款 z
    微信小程序弹出和隐藏遮罩层动画以及五星评分
    centos7 安装 nginx
    netty+websocket模式下token身份验证遇到的问题
    windows 截图 win+shift+s
    linux下 "chmod 777" 中777这个数字是怎么出来的
    nginx四层转发,访问内网mysql数据库
  • 原文地址:https://www.cnblogs.com/wuyongcong/p/9634837.html
Copyright © 2011-2022 走看看