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>


分享到:


相關文章: