[英]Custom middleware class raises error
I want to create a very simple Middleware which just prints 'OK' on every request. 我想创建一个非常简单的中间件,该中间件仅在每个请求上都打印“ OK”。 The problem is that it raises error:
问题是它引发错误:
Traceback (most recent call last):
File "c:\python27\Lib\wsgiref\handlers.py", line 85, in run
self.result = application(self.environ, self.start_response)
File "C:\Users\Milano\Desktop\Projekty\venvs\sfl_venv\lib\site-packages\django\contrib\staticfiles\handlers.py", line 63, in __call__
return self.application(environ, start_response)
File "C:\Users\Milano\Desktop\Projekty\venvs\sfl_venv\lib\site-packages\django\core\handlers\wsgi.py", line 170, in __call__
self.load_middleware()
File "C:\Users\Milano\Desktop\Projekty\venvs\sfl_venv\lib\site-packages\django\core\handlers\base.py", line 52, in load_middleware
mw_instance = mw_class()
TypeError: __init__() takes exactly 2 arguments (1 given)
The middleware class is in project/project/middleware.py
中间件类在
project/project/middleware.py
middleware.py 中间件
class UserHasProfileMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
print 'OK'
return response
SETTINGS.PY 设定值
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.middleware.locale.LocaleMiddleware',
'SolutionsForLanguages.middleware.UserHasProfileMiddleware'
)
Do you know where is the problem? 您知道问题出在哪里吗?
Django introduced new-style middleware in Django 1.10. Django在Django 1.10中引入了新型中间件 。
Your UserHasProfileMiddleware
is a new-style middleware class. 您的
UserHasProfileMiddleware
是一种新型的中间件类。 Assuming you are using Django 1.10+, you should use the MIDDLEWARE
setting, not MIDDLEWARE_CLASSES
. 假设您使用的是Django 1.10+,则应使用
MIDDLEWARE
设置,而不是MIDDLEWARE_CLASSES
。 All the other middlewares are from Django, so renaming the setting should be enough to fix the error. 所有其他中间件均来自Django,因此重命名设置应足以解决该错误。
MIDDLEWARE = (
...
)
If you are using Django 1.9 or earlier, you should covert your UserHasProfileMiddleware
class to old-style middleware . 如果您使用的是Django 1.9或更早版本,则应将
UserHasProfileMiddleware
类转换为旧式Middleware 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.