【问题标题】:How to set django middleware in settings file如何在设置文件中设置 django 中间件
【发布时间】:2013-07-29 02:29:43
【问题描述】:

大家好,我正在尝试将中间件添加到我的应用程序中,并且该应用程序位于此位置

myapp/sitemanager/middleware/__init__.py
myapp/sitemanager/middleware/redirects.py

在我的 settings.py 文件中声明它的正确方法是什么。我目前是这样设置的

MIDDLEWARE_CLASSES = ("sitemanager.middleware.redirects.SiteDetectionMiddleware")

但我不断收到此错误

ImproperlyConfigured: Error importing middleware sitemanager.middleware.redirects: "cannot     import name Address"

谢谢

【问题讨论】:

  • 假设myapp 和sitemanager 是实际的Python 包(包含__init__.py)并且在您的PYTHONPATH 中,您可能会遇到循环导入问题。注释掉中间件模块中的所有代码,然后逐个取消注释顶级导入......只是猜测。

标签: python django


【解决方案1】:

您需要确保您的 Python 路径配置正确。 假设(在您的项目中)您的目录结构类似于: Django 1.4

/mysite
/mysite/mysite #defult settings.py gonna here...
/mysite/apps
/mysite/apps/__init__.py
/mysite/apps/main
/mysite/apps/main/__init__.py
/mysite/apps/main/models.py
/mysite/apps/main/views.py
/mysite/apps/main/middleware/__init__.py
/mysite/apps/main/middleware/log.py

这是我的简单中间件记录器示例(在 log.py 中):

from django.http import HttpRequest
import datetime

class Logger(object):
    def process_request(self, request):
        f = open('/tmp/log.txt', 'w')            
        f.write(str(datetime.datetime.now()))

请注意,我的自定义中间件类(在 log.py 中)位于我的中间件 python 包下,即 main 应用程序下。

因此,您应该在 settings.py 中输入如下内容:

import sys
sys.path.append(MY_PROJECT_ROOT)

在中间件元组中:

MIDDLEWARE_CLASSES = (
'...', 
'apps.main.middleware.log.Logger',
)

【讨论】:

  • 你的例子是 MY_PROJECT_ROOT
  • 这就是你的意思 DIR =os.path.abspath(os.path.dirname(file))
  • @user1940979 这只是一个指向您的项目路径的常见 var,例如 MY_PROJECT_ROOT = "C:/myprojectdir" 或 "/home/username/myprojectdir",其中 myprojectdir 是从“django”创建的目录结构-admin.py startproject myprojectdir" 命令。
猜你喜欢
  • 1970-01-01
  • 2015-06-06
  • 2017-06-22
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 2018-10-06
相关资源
最近更新 更多