zoukankan      html  css  js  c++  java
  • FBV和CBV区别

    FBV和CBV区别

    FBV

    • 就是在视图里使用函数处理请求

    • fbv就是在url中一个路径对应一个函数

      5QP2t2.png

    • 在视图函数中

      5QPR3a.png

    CBV

    • 就是在视图里使用类处理请求

    • 优点

      1. 提高了代码的复用性,可以使用面向对象的技术,比如说Mixin(多继承)
      2. 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高了代码可读性
    • 代码逻辑

      url

      from django.conf.urls import url
      from myapp.views import MyView
        
      urlpatterns = [
           url(r'^index/$', MyView.as_view()),
      ]
      

      view.py

      from django.http import HttpResponse
      from django.views import View
        
      class GreetingView(View):
          name = "lin"
          def get(self, request):
               return HttpResponse(self.name)
      
    • 实现本质: 基于反射实现的

    • 流程:由路由---->as_view()方法--->view中的dispatch方法(反射实现的)

      首先执行url中的as_view()方法

      img

      执行view方法

      img

      5QM1Au.png

    csrf

    • 403报错原理是:基于中间件的process_view方法
    • 装饰器给单独函数进行设置(认证或跳过认证)

    免除csrf_token验证的方法

    • 针对FBV

      from django.views.decorators.csrf import csrf_exempt
      @csrf_exempt  # 这个函数不走认证
      def user(request):
      	pass
      #走post请求时,就可以免除验证了
      
    • 注释setting.py中的46行代码之后单独需要验证的方法

      from django.views.decorators.csrf import csrf_protect
      @csrf_exempt  # 这个函数需要认证
      def user(request):
      	pass
      #注释掉setting中的csrf,之后需要认证可以导入
      
    • 如果是CBV

      5Q0112.png

      或者

      5Q0Aqa.png

  • 相关阅读:
    URL中编码问题
    java得到当前时间
    java 集合类详解
    java String 详解
    java context 讲解
    java代码优化
    oracle 面试题
    查找算法总结
    10个经典的排序算法
    时间复杂度,相关排序算法时间复杂度的比较
  • 原文地址:https://www.cnblogs.com/yuncong/p/10128980.html
Copyright © 2011-2022 走看看