浅谈中间件 | Django开发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈中间件 | Django开发相关的知识,希望对你有一定的参考价值。

中间件
1.什么是中间件?
    # 介于Django请求和响应的处理过程,修改Django的输入输出的底层插件;
2.怎么使用中间件?
    1.应用中创建middleware.py
        # 定义类
        class ForbiddenIpsMiddleware(object):
            pass
        # 类里包含5个内置方法,针对不同的时刻;
        # 下面也是中间件方法执行的顺序;
        1.__init__()
            # 服务器响应第一个请求时调用,确定是否使用中间件
        2.process_request(request)
            # 处理请求前调用(匹配视图前)
        3.process_view(request,view_func,*args,**kwargs)
            # 处理视图前调用
        4.process_exception(request,exception)
            # 视图抛出异常时调用
        5.process_template_response()
            # 仅用于模板响应
        6.process_response(request, response)
            # 响应返回浏览器之前调用

    2.将建立的中间件添加到配置文件中
        MIDDLEWARE_CLASSES = (
            ...
            应用名.middleware.ForbiddenIpsMiddleware,
        )
3.中间件使用案例
    1.禁止IP访问
        class ForbiddenIpsMiddleware(object):
            def process_request(self, request):
                # 获取访问网站的用户IP
                remote_addr = request.META[REMOTE_ADDR]
                # 列出禁止访问的用户IP
                forbidden_addr = [192..., 192...]
                # 判断是否禁止访问的用户
                if remote_addr in forbidden_addr:
                    return HttpResponse(<h1>不给访问</h1>)
    2.注册并登陆成功之后返回上次浏览页面
        # 这里需要排除上次浏览的是有关用户中心的页面;
        # 怎么记住上次浏览的页面?
        # 在访问视图之后将url写到cookie里;
        class RecordUrlMiddleware(object):
            def process_response(self, request, response):
                exclude_urls = [
                    reverse(users:login),
                    ...
                ]
                if request.path not in exclude_urls and resposne.status_code==200:
                    set_cookie(response, pre_url, request.get_full_path())
                return response

 

以上是关于浅谈中间件 | Django开发的主要内容,如果未能解决你的问题,请参考以下文章

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

浅谈tomcat中间件的优化

浅谈Python Django框架

OpenHarmony啃论文成长计划——浅谈中间件

浅谈对express中间件的的理解。