专栏首页python3Django 中间件 请求前

Django 中间件 请求前

中间件:

class TestMiddleware(object):
    """中间件类"""
    def __init__(self):
        """服务器重启之后,接收第一个请求时调用"""
        pass
    
    def process_request(self, request):
        """产生request对象之后,url匹配之前调用"""
        pass
    
    def process_view(self, request, view_func, *view_args, **view_kwargs):
        """url匹配之后,视图函数调用之前调用"""
        pass
    
    def process_exception(self, request, exception):
        """视图函数发生异常时调用"""
        pass
    
    def process_response(self, request, response):
        """视图函数调用之后,内容返回浏览器之前调用"""
        return response

正常调用顺序是从上往下,但如注册了多个中间件类中包含 process_exception函数的时候,process_exception函数调用的顺序跟注册的顺序是相反的,下面两张图说明:

流程图:

注意:process_response之前的中间件如无返回,则默认返回 None,会继续执行下一个中间件,但如有返回,则直接跳到 process_response中间件

例子:

1.

在app内新建一个 middleware.py 文件

2.

from django.http import HttpResponse

class BlacklistIPSMiddleware(object):
    """中间件类"""
    EXCLUDE_IPS = ['192.168.1.1']
    
    def process_view(self, request, view_func, *view_args, **view_kwargs):
        """视图函数调用之前会调用"""
        user_ip = request.META['REMOTE_ADDR'] # 获取访问用户的IP
        if user_ip in BlacklistIPSMiddleware.EXCLUDE_IPS:
            return HttpResponse('您在黑名单中')

3.

在settings配置文件中注册中间件类

# 'app名.中间件文件名.中间件类名'

MIDDLEWARE_CLASSES = (...,

              ...,

             ‘book.middleware.BlacklistIPSMiddleware’)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django之中间件

    中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责...

    py3study
  • Django—常用功能

    项目中的CSS、图片、js都是静态文件。一般会将静态文件放到一个单独的目录中,以方便管理。在html页面中调用时,也需要指定静态文件的路径,Django中提供了...

    py3study
  • python-环境准备python,ip

    [root@localhost ~]# ls anaconda-ks.cfg  Documents  install.log         ipython-1...

    py3study
  • DjangoRestFramework,序列化组件、视图组件

        Courses --- GET ---> 查看数据----->返回所有数据列表[{},{},]

    changxin7
  • 【USACO 2.3】Money Systems(dp)

    dp[i][j]表示前i种货币价格为j有多少种方案,dp[i][j]+=dp[i-1][j-c]。

    饶文津
  • 业界 | 从视频到语句,优必选获TRECVID 2017子任务冠军

    机器之心
  • Flask中的request和response

    小小咸鱼YwY
  • 模板--LIS

    用户2965768
  • LintCode 背包问题I题目分析二维解法的代码优化空间复杂度代码

    在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]

    desperate633
  • cellranger虽然是10x官方软件也未必得全信它

    也就是说,作者认为,这个10X仪器的单细胞转录组数据走cellranger流程,其实是有一点问题的。

    生信技能树jimmy

扫码关注云+社区

领取腾讯云代金券