如何实现SimpleMiddleware?
How to implement the SimpleMiddleware?
我正在努力让 MiddleWare 工作。我把这个放在我的 settings.py
:
MIDDLEWARE_CLASSES = [
'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',
'portal.middleware.SimpleMiddleware'
]
我在 portal/middleware/MiddleWare.py
中实现了这个 class:
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
但是当 运行 时,我得到 TypeError
:
TypeError: __init__() takes exactly 2 arguments (1 given)
由于您正在编写新式中间件,因此您应该在设置中使用 MIDDLEWARE
而不是 MIDDLEWARE_CLASSES
。
您还需要确保您在设置中的输入与中间件的位置相匹配。条目 'portal.middleware.SimpleMiddleware'
建议在 portal/middleware.py
中使用 SimpleMiddleware
class,这与您的文件名 portal/middleware/MiddleWare.py
.
不匹配
我正在努力让 MiddleWare 工作。我把这个放在我的 settings.py
:
MIDDLEWARE_CLASSES = [
'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',
'portal.middleware.SimpleMiddleware'
]
我在 portal/middleware/MiddleWare.py
中实现了这个 class:
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
但是当 运行 时,我得到 TypeError
:
TypeError: __init__() takes exactly 2 arguments (1 given)
由于您正在编写新式中间件,因此您应该在设置中使用 MIDDLEWARE
而不是 MIDDLEWARE_CLASSES
。
您还需要确保您在设置中的输入与中间件的位置相匹配。条目 'portal.middleware.SimpleMiddleware'
建议在 portal/middleware.py
中使用 SimpleMiddleware
class,这与您的文件名 portal/middleware/MiddleWare.py
.