【问题标题】:Is there a way to add middleware for a particular url route in django?有没有办法在 django 中为特定的 url 路由添加中间件?
【发布时间】:2020-11-05 14:33:45
【问题描述】:

假设我有一些网址:

urlpatterns = [
    path('', Home.as_view()),
    path('games/', include('games.urls', namespace='games')),
]

有没有一种方法可以让给定的中间件仅在访问games 下的网址时运行?例如。检查身份验证或预取一些对games 应用程序中的所有视图有用的数据。

【问题讨论】:

    标签: python django middleware


    【解决方案1】:

    您可以使用ResolverMatch检查当前请求是否属于games命名空间:

    def simple_middleware(get_response):
        # One-time configuration and initialization.
    
        def middleware(request):
            # Code to be executed for each request before
            # the view (and later middleware) are called.
    
            if 'games' in request.resolver_match.namespaces:
                # Some additional logic here
                pass
    
            response = get_response(request)
    
            # Code to be executed for each request/response after
            # the view is called.
    
            return response
    
        return middleware
    

    【讨论】:

    • 嗨,我发现这很有用,但只是想指出,我发现 request.resolver_match 在调用 get_response 之后才可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多