一些面试题目
django中间件有几个方法,分别是什么,流程,应用
中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出
- process_request(self,request)
- process_view(self, request, view_func, view_args, view_kwargs)
- process_template_response(self,request,response)
- process_exception(self, request, exception)
- process_response(self, request, response)
流程
用户发送请求,如果通过process_request,执行url路由匹配,在执行process_view,通过view就执行视图函数函数,执行process_response,期间返回有模板就走process_temelate_response,报错就走process_exception
应用
权限设置,用户登录验证,csrf_oken
当网站多数请求需要csrf认证,少数视图不需要验证的时候,可以在不需要csrf认证的视图上边加装饰器
from django.views.decorators.csrf import csrf_exempt,csrf_protect @csrf_exempt # 下边的函数免除csrf认证,不注销setting里边的csrf功能 def get_list(request): list = [1, 2, 3, 4, 5, 6] return HttpResponse(json.dumps(list))
反之,网站中只有几个函数需要认证csrf的时候,可以把setting中的csrf的中间件注释,为要认证的函数加装饰器
from django.views.decorators.csrf import csrf_protect @csrf_protect def get_list(request): list = [1, 2, 3, 4, 5, 6] return HttpResponse(json.dumps(list))
在CBV中如何不注释setting中的csrf使指定方法跳过csrf认证
第一种方法,在类下边的dispatch方法上边加装饰器,把csrf_exempt当参数传进去
from django.views import View from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator class ApiTest(View): # 必须继承django中的View类 @method_decorator(csrf_exempt) # 跳过csrf认证 def dispatch(self, request, *args, **kwargs): return super(ApiTest, self).dispatch(request, *args, **kwargs)
第二种方法,在类的上边加装饰器
from django.views import View from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator @method_decorator(csrf_exempt, name="dispatch") # name表达类中的方法名字 class ApiTest(View): # 必须继承django中的View类 def dispatch(self, request, *args, **kwargs): return super(ApiTest, self).dispatch(request, *args, **kwargs)
谈谈你对resetful api规范的认识
本质上就是一个规范,让我们写api 的时候更好的和前端配合,方便处理数据,在api上可以体现出对资源的操作。
有10个规则
跨域jsonp