Django项目中的中间件不正确(导入REDIS函数)



我正在为我的Django应用程序编写中间件,在该应用程序中我从request.session获得了一个变量,然后必须将其插入Redis排序集中。相当直截了当。

即。

import os
#os.environ.setdefault("DJANGO_SETTINGS_MODULE","myproject.settings")
from myapp.redis_functions import set_whose_online
class WhoseOnlineMiddleware(object):
    def process_request(self, request):
        if '_auth_user_id' in request.session:
            set_whose_online(request.session['_auth_user_id'])
        else:
            pass

redis_functions.py在我的应用中包含所有与REDIS相关的功能。Redis连接池也在那里实例化。

,这给了我ImporperlyConfigured的CC_3错误。完整的追溯是:

Traceback (most recent call last):
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 72, in __call__
    return self.application(environ, start_response)
  File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/dj_static.py", line 83, in __call__
    return self.application(environ, start_response)
  File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 236, in __call__
    self.load_middleware()
  File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 53, in load_middleware
    raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e))
ImproperlyConfigured: Error importing middleware myproject.middleware.WhoseOnline: "cannot import name add_filtered_post"

这是令人困惑的,因为我不是要导入add_filtered_post,而是要导入set_whose_onlineadd_filtered_postredis_functions.py中的另一个功能,完全在其他地方使用。

可能会发生什么,我该如何解决这个问题?我猜想要归咎于循环进口,但是python manage.py validate --traceback返回0个错误。


这是我在settings.py中拥有的:

MIDDLEWARE_CLASSES = (
    'myproject.middleware.XForwardedFor.XForwardedForMiddleware',
    'user_sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'myproject.middleware.WhoseOnline.WhoseOnlineMiddleware',
    #'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'myproject.middleware.HellBanned.HellBannedMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'mobileesp.middleware.MobileDetectionMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

注意:中间件是在myfolder/myproject/middleware/WhoseOnline.py上添加的,即与settings.py,URL,模板

相同的文件夹。

虽然可能有多种原因发生,但在我的特殊情况下,这是因为循环导入。我诊断并解决了这个问题,这消失了。

最新更新