Django中间件

默认中间件

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    # 为request/response提供了几种xss脚本过滤的安全改进,无它不安全
    'django.contrib.sessions.middleware.SessionMiddleware',
    # 开启session会话支持,无它无session
    'django.middleware.common.CommonMiddleware',
    # 基于APPEND_SLASH和PREPEND_WWW的设置来重写URL,
    # 如果APPEND_SLASH设为True,并且初始URL 没有以斜线结尾以及在URLconf 中没找到对应定义,这时形成一个斜线结尾的新URL;
    # 如果PREPEND_WWW设为True,前面缺少 www.的url将会被重定向到相同但是以一个www.开头的ur
    
    'django.middleware.csrf.CsrfViewMiddleware',
    # 添加跨站点请求伪造的保护,通过向POST表单添加一个隐藏的表单字段,并检查请求中是否有正确的值,无它无csrf保护
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 在视图函数执行前向每个接收到的user对象添加HttpRequest属性,表示当前登录的用户,无它用不了request.user
    'django.contrib.messages.middleware.MessageMiddleware',
    # 开启基于Cookie和会话的消息支持,无它无message
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 对点击劫持的保护
]

自定义中间件

钩子方法的种类

需要继承 django.utils.deprecation.MiddlewareMixin这个类

可以重写的5个方法:

1、process_request(self,request)  #  django 处理请求之前,会执行该方法

2、process_view(self, request, callback, callback_args, callback_kwargs) 

3、process_template_response(self,request,response)

4、process_exception(self, request, exception)

5、process_response(self, request, response)  # django返回响应之后,执行该方法
自定义中间件
class SimMiddleware(MiddlewareMixin):

    def process_request(self, request):
        """
        处理请求前: 在每个请求上,request对象产生之后,url匹配之前调用,返回None或HttpResponse对象
        """
        print('before request=====', request)

    def process_view(self, request, view_func, *view_args, **view_kwargs):
        """
        :param view_func: Django即将使用的视图函数,它是实际的函数对象,而不是函数的名称作为字符串
        :param view_args: 将传递给视图的位置参数的列表
        :param view_kwargs: 将传递给视图的关键字参数的字典;
                            view_args和view_kwargs都不包含第一个视图参数(request)
        """
        # 处理视图前:在每个请求上,url匹配之后,视图函数调用之前调用,返回None或HttpResponse对象
        print('before view=======')

    def process_template_response(self, request, response):
        # 在视图函数执行完后立即执行的, 执行 该 函数有一个前提条件,那就是视图函数返回的对象是一个 TemplateResponse 对象或等价方法, 直接返回render函数无效)
        print("render template=======")
        return response

    def process_exception(self, request, exception):
        # 这个方法只有在视图函数中出现异常了才执行,它返回的值可以是一个None也可以是一个HttpResponse对象
        print("raise exception=======")
        return HttpResponse(exception)

    def process_response(self, request, response):
        # 处理响应后:视图函数调用之后,所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
        print('after response>>>>>', response)
        return response
注册中间件

django项目的settings模块中,在 MIDDLEWARE_CLASSES 变量中添加自定义中间件

MIDDLEWARE = [
  	...
	 'book.middleware.my_middleware',  # book为应用名,middleware为文件名
   'book.middleware.SimMiddleware'
]
模板视图
class Index(View):
    def get(self, request):
        print("Index============")
        return TemplateResponse(request, 'index.html')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值