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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM