CommonMiddleware not working in custom middlewares
I have a custom middleware like below:
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
In the line I marked with arrow: “<–”, the request.path_ifo
, has no ending “/”.
example:
If the inputted url is: /sura/10
, then it shows me /sura/10
, but it must append and ending “/” to it. this url is valid, here is the 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"),
]
Note:
Before regex executed, the response.status_code
is 404
. While if I correctly input the url, (like this: /sura/10/
) then the response.status_code
in not 404
.
can someone help me please find out why CommonMiddleware doesn’t work in custom middlewares?
Middlewares in 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
I tried to validate the url in my custom middleware using regex.
I just find out that the CommonMiddleware
is not working in custom middlewares in django.
django version: 4.2
here is stackoverflow question link: