中间件 | Django开发

Posted

tags:

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

1.中间件(类,里面放了不同的函数)
    # 中间键是一个轻量级,底层的插件系统,介入Django的请求和响应的处理过程,修改Djang输入输出;
    1.1 中间件的引入
        # 禁止ip访问
        1.在视图中定义一个函数禁止某个用户访问当前ip
            def index3(request):
                # 获取远程用户的IP地址
                remote_addr = request.META[REMOTE_ADDR]
                # 禁止访问IP
                forbidden_addr = [192.168.**.***]
                # 判断访问ip是否为禁止ip
                if remote_addr in forbidden_addr:
                    return HttpResponse(<h1>就是不让你访问!</h1>)
                return render(request, other/index3.html, locals())
            >>>>>> 这里就引出一个问题,只有当前视图的页面不被访问
            >>>>>> 那怎么解决呢?每个视图上都加上这个函数?
            >>>>>> 这个时候就引出了中间键,在访问视图之前就对用户访问做限制;
        2.使用中间件禁止ip访问
            1.在应用中新建一个py文件,middleware.py,在里面定义一个类
                class ForbiddenIpsMiddleware(object):
                    # 在匹配视图之前调用
                    def process_request(self, request):
                        # 获取远程用户的IP地址
                        remote_addr = request.META[REMOTE_ADDR]
                        # 禁止访问ip
                        forbidden_addr = [192.168.**.***]
                        # 判断访问ip是否为禁止ip
                        if remote_addr in forbidden_addr:
                            return HttpReponse(<h1>就是不让你访问!</h1>)
            2.在settings.py配置于文件中,将这个类写入中间键位置,就会在视图执行之前自动调用
                MIDDLEWARE_CLASSES = [
                    ...
                    other.middleware.ForbiddenIpsMiddleware,
                ]

    1.2 内置函数
        process_request(request):在处理请求(匹配视图前)前调用
        process_view(reqeust,view_func,view _args,view_kwargs):在处理视图之前调用
        __init__(get_response):初始化,无需参数,服务器响应第一个请求的时候调用,确定是否启用当前中间件;
        process_response(request,response):所有响应返回浏览器之前被调用
        process_exception(request,exception):视图抛出异常时调用

    1.3 中间件方法执行顺序
        # 在middleware.py定义类,并注册在settings.py中
        # 按需编写中间件
        class MyMiddleware(object):
            # 第一个请求的时候调用,之后的请求不再调用
            def __init__(self):
                print(MyMiddleware __init__!)
            # urlconf执行之前调用
            def process_request(self, request):
                print(MyMiddleware process_request!)
            # urlconf匹配到之后,视图函数执行之前调用
            def process_view(self, request, view_func, *args, **kwargs)
                print(MyMiddleware process_view!)
                # 在执行视图之前,进行干预
                # return HttpReponse(‘<h1>process_view函数返回的结果!</h1>‘)
            # 视图函数执行之后调用
            def process_response(self, request, response):
                print(MyMiddleware process_response!)
                return response
                # 修改视图返回结果
                # return HttpResponse(‘process_response修改了视图返回结果!‘)
    1.4 中间件:异常处理
        # 在middleware.py定义类,并注册在settings.py中
        class MyExceptionMiddleware(object):
            def process_exception(self,request,exception):
            # 将错误信息写入到日志中,终端打印出这个对象的信息(这个对象肯定写有str方法)
            print(exception)
            # return None #如果返回None,仍然会使用django错误处理机制
            # 在视图出现异常的时候,给用户一个友好的提示
            return HttpResponse(站点流量太大,服务器繁忙,请稍后重试!)

 

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

如何在 Django Summernote 中显示编程片段的代码块?

如何在 Django 中显式重置模板片段缓存?

Django高级——中间键

Web框架开发-Django中间件

django-缓存的三种应用

浅谈中间件 | Django开发