Django中的一些概念和使用技巧

Django中模式概念

FBV: function basic view

<code>def home(request):    return HttpResponse()/<code>

CBV: class basic view

<code>class HomeView(View):    def get(self, request):        return HttpResponse()/<code>

Django中間件

Django中間件的五個方法方法

  • process_request
  • process_response
  • process_view
  • process_exception
  • process_render_template

執行順序:請求過來

  1. 執行所有中間件的process_request
  2. 執行路由匹配,找到要執行的函數
  3. 執行所有中間件的process_view
  4. 執行路由匹配到的函數
  5. 執行process_response如果響應的執行有異常就執行process_exception如果路由函數中有render渲染HTML,則先執行process_render_template,再執行process_response

Django CSRF驗證

Django的crsf驗證是在中間件CsrfViewMiddleware中進行驗證的,具體來講是在此中間件的process_view中驗證的。那麼為什麼要在process_view中驗證而不是在process_request中呢?我們先了解一個情況,如果我不希望某個路由函數進行csrf驗證,可以加上csrf_exempt,免除csrf驗證,所有必須在process_view中驗證,而不是在process_request中。

<code>from django.views.decorators.csrf import csrf_exempt@csrf_exemptdef home(request):    return HttpResponse()/<code>

如果是在CBV中要取消某個路由的csrf驗證呢?

<code>from django.view.decorators.csrf import csrf_exemptfrom django.utils.decorators import method_decoratorclass HomeView(View):    @method_decorator(csrf_exempt)    def dispatch(self, request, *args, **kwargs):        return super().dispatch(request, *args, **kwargs)    def post(self, request):        return HttpResponse()或者@method_decorator(csrf_exempt, name="dispatch")class HomeView(View):    pass/<code>

必須使用method_decorator裝飾器修飾,並且只能添加到dispatch中,加到單獨的函數中是不行的。


rest_framework中的APIView

<code>BaseAuthentication.authenticate方法返回值:None: 執行下一個認證非None: 驗證通過拋出異常:驗證不通過/<code>


分享到:


相關文章: