一些面试题目

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

 

posted @ 2019-09-05 14:06  南头老李  阅读(138)  评论(0编辑  收藏  举报