CommonMiddleware 在自定义中间件中不起作用

问题描述 投票:0回答:0

CommonMiddleware 在自定义中间件中不起作用

我有一个像下面这样的自定义中间件:

class PageNotFoundMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)

        sura_pattern = r"/sura/[1-9]\d*-[1-9]\d*/$"

        print(f'\n\n{request.path_info}: {response.status_code}\n\n')  # <--

        if response.status_code == 404:
            if re.match(sura_pattern, request.path_info):
                return response
            return render(request, '404.html')
        elif response.status_code == 400:
            return render(request, '400.html')
        elif response.status_code == 500:
            return render(request, '500.html')
        elif response.status_code == 200 or response.status_code == 301:
            return response



在我用箭头标记的行中:“<--", the

request.path_ifo
,没有结尾“/”。


例子:

如果inputted url是:

/sura/10
,那么它会显示
/sura/10
但它必须附加并以“/”结尾。这个网址是有效的,这是
urls.py

urlpatterns = [
    path("", home, name="home"),

    path('sura/<int:sura>/', sura_handler, name='sura_handler'),  # <-- path which should get the url
    path('sura/<str:sura_aya>/', index, name='index'),
    path('page/<str:page>/', page_handler, name='page_handler'),
    path('juz/<str:juz>/', juz_handler, name='juz_handler'),

    path('api/', include('quran.api.urls')),

    path('sw/', sw, name="sw"),
    path('manifest/', manifest, name="manifest"),
]

注:

在执行正则表达式之前,

response.status_code
404
。 如果我正确输入了 url,(像这样:
/sura/10/
)那么
response.status_code
in not
404
.

有人可以帮我找出为什么 CommonMiddleware 在自定义中间件中不起作用吗?


django 中的中间件:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

    'quran.middleware.PageNotFoundMiddleware'  # <-- custom middleware
]

django version: 4.2

我尝试使用正则表达式验证自定义中间件中的 url。

我刚刚发现

CommonMiddleware
在django的自定义中间件中不起作用。

django version: 4.2

django django-middleware
© www.soinside.com 2019 - 2024. All rights reserved.