当前位置: 首页 > 面试题库 >

如何在Django中设置自定义中间件

潘俊
2023-03-14
问题内容

我正在尝试创建中间件,以有选择地将kwarg传递给满足条件的每个视图。

问题是我找不到如何设置中间件的示例。我已经看到了覆盖我想要的方法的类process_view

Class CheckConditionMiddleware(object):  
    def process_view(self, request):  

        return None 

但是我该把课程放在哪里?我是否创建一个中间件应用程序并将其放在其中,然后在其中引用它settings.middleware


问题答案:

第一:路径结构
如果没有,则需要按照以下结构在应用程序中创建中间件文件夹:

yourproject/yourapp/middleware

文件夹中间件应与settings.py,URL,模板…放置在同一文件夹中。

重要提示:不要忘记在中间件文件夹中创建__init__.py空文件,以便你的应用识别此文件夹

第二:创建中间件
现在,我们应该为自定义中间件创建一个文件,在此示例中,我们假设需要一个基于用户IP过滤用户的中间件,我们在中间件文件夹中使用以下代码创建一个名为filter_ip_middleware.py的文件:

class FilterIPMiddleware(object):
    # Check if client IP is allowed
    def process_request(self, request):
        allowed_ips = ['192.168.1.1', '123.123.123.123', etc...] # Authorized ip's
        ip = request.META.get('REMOTE_ADDR') # Get client IP
        if ip not in allowed_ips:
            raise Http403 # If user is not allowed raise Error

       # If IP is allowed we don't do anything
       return None

第三:将中间件添加到我们的“ settings.py”中
我们需要寻找:

  • MIDDLEWARE_CLASSES (django <1.10)
  • MIDDLEWARE (Django> = 1.10)

在settings.py内部,我们需要添加中间件(将其添加到最后一个位置)。应该是这样的:

MIDDLEWARE = ( #  Before Django 1.10 the setting name was 'MIDDLEWARE_CLASSES'
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
     # Above are django standard middlewares

     # Now we add here our custom middleware
     'yourapp.middleware.filter_ip_middleware.FilterIPMiddleware'
)

做完了!现在,每个客户端的每个请求都将调用你的自定义中间件并处理你的自定义代码!



 类似资料:
  • 问题内容: 我最近开始在Node.js中工作,在app.js文件中有以下一行: 现在,如何设置自己的自定义favicon.ico? 问题答案: 在Express 4中 安装收藏夹中间件,然后执行以下操作: 或者更好,使用模块: (请注意,此解决方案也可以在Express 3应用中使用) 在Express 3中 根据API,接受一个location参数: 大多数时候,您可能希望这样做(如vsync建

  • 我正在用cakephp开发一个用户库,用于我的应用程序中的翻译操作。我想创造。po文件在Lib目录中,这就是为什么我在Lib目录中创建Locale文件夹,并在相应的语言目录中创建po文件。但问题是CakePHP在默认情况下是在其默认区域设置位置搜索po文件的。现在我的语言环境目录在Lib文件夹中。 我怎么能让cakephp搜索po文件在我自己的区域设置目录这是在Lib文件夹? 这是我的翻译课程代码

  • 问题内容: 首先,我要说的不是关于渲染表格单元。 这是我基于数据库中的对象使用2D数组构建的TableModel 。 我的问题是如何使用表中的选定行取回对象。请注意,我无法创建新对象并用行数据填充它。我必须获取查询的对象(中的对象)。那么,他们用表行设置Object的任何方法吗? 这是我的课。 问题答案: 无需在创建模型之前拆分对象,而是将其直接添加到模型中并允许模型为您完成工作… 例如 这样,您

  • 我正在使用MPAndroidChart显示一个相对简单的条形图。 有2件事我需要设置,我不知道如何自定义: > 我需要为每个条添加文本,而不是简单的值,每个条本身也有样式。 在每个条的顶部,我需要放置各种类型的可绘制材料来覆盖它的宽度(例如一个条中高度为2dp的蓝色,或另一个条上高度相同的黄色渐变)。 下面是我需要做的一个演示: > 我知道我也可以通过使用添加图标,但这似乎不适用于应该使用整个条形

  • 问题内容: 如何(如果可能)如何在Assets文件夹中的字体中设置ActionBar标题文本(仅-不是标签文本)中的自定义字体?我不想使用android:logo选项。 问题答案: 我同意不完全支持此操作,但这就是我所做的。您可以将自定义视图用于操作栏(它将显示在图标和操作项之间)。我正在使用自定义视图,并且已禁用本机标题。我所有的活动都继承自一个活动,该活动在onCreate中包含以下代码: 我

  • 我创建了ListView,当我单击列表项时,它将打开带有NegativeButton的AlertDialog消息。这些都做得很好。现在,我想将自定义字体设置为listview项和AlertDialog的标题、消息和NegativeButton的字体。甚至我也尝试了自定义字体库,但没有得到预期的输出。这里附上我的试用代码如下。谁能告诉我出了什么问题吗? xml文件