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
执行顺序:请求过来
- 执行所有中间件的process_request
- 执行路由匹配,找到要执行的函数
- 执行所有中间件的process_view
- 执行路由匹配到的函数
- 执行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>
閱讀更多 Python集結號 的文章