django 1.10 中的自定义设置和 wsgi 给我错误

Custom settings and wsgi in django 1.10 give me error

我在自定义设置中遇到这个错误 运行连接服务器:

 salahaddin@TulipanROG  ~/Proyectos/tiempoturco/tiempoturco  (tiempoturco)  ./manage.py runserver                                                                                                                                            ✓  640  23:22:06 
Performing system checks...

System check identified no issues (0 silenced).
June 19, 2016 - 23:22:07
Django version 1.10a1, using settings 'tiempoturco.settings.dev'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f288d67f2f0>
Traceback (most recent call last):
  File "/home/salahaddin/Proyectos/tiempoturco/lib/python3.5/site-packages/django/utils/autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "/home/salahaddin/Proyectos/tiempoturco/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 142, in inner_run
    handler = self.get_handler(*args, **options)
  File "/home/salahaddin/Proyectos/tiempoturco/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/runserver.py", line 27, in get_handler
    handler = super(Command, self).get_handler(*args, **options)
  File "/home/salahaddin/Proyectos/tiempoturco/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 64, in get_handler
    return get_internal_wsgi_application()
  File "/home/salahaddin/Proyectos/tiempoturco/lib/python3.5/site-packages/django/core/servers/basehttp.py", line 49, in get_internal_wsgi_application
    return import_string(app_path)
  File "/home/salahaddin/Proyectos/tiempoturco/lib/python3.5/site-packages/django/utils/module_loading.py", line 20, in import_string
    module = import_module(module_path)
  File "/home/salahaddin/Proyectos/tiempoturco/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 662, in exec_module
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/home/salahaddin/Proyectos/tiempoturco/tiempoturco/tiempoturco/wsgi.py", line 16, in <module>
    application = get_wsgi_application()
  File "/home/salahaddin/Proyectos/tiempoturco/lib/python3.5/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
    return WSGIHandler()
  File "/home/salahaddin/Proyectos/tiempoturco/lib/python3.5/site-packages/django/core/handlers/wsgi.py", line 153, in __init__
    self.load_middleware()
  File "/home/salahaddin/Proyectos/tiempoturco/lib/python3.5/site-packages/django/core/handlers/base.py", line 79, in load_middleware
    mw_instance = middleware(handler)
TypeError: object() takes no parameters

我有这个文件夹结构:

这是我的 wsgi 代码:

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tiempoturco.settings.dev")

application = get_wsgi_application()

还有我的 manage.py 代码:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tiempoturco.settings.dev")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    execute_from_command_line(sys.argv)

怎么了? 我可以执行迁移并创建超级用户,使用 shell plus 和其他命令,但我可以 运行 服务器。我尝试将设置值更改为 production 和 dev,将这些值放入 __init__.py 并做其他事情但什么也没做。

middleware_clases

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.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

我找不到相关信息,我正在测试 django 1.10

我对 django 1.9.7 没有任何问题,我不知道为什么。同样,当我使用 wagtail 1.6 创建项目时,我在 运行 服务器中没有问题,wagtail 1.6 安装 django 1.9.7,但我将其替换为 django 1.10 然后在 运行 迁移后尝试 运行 项目并创建一个超级用户,当我在浏览器中进入主页时,我可以看到该页面,也可以看到管理员。

所以,我没有使用其他应用程序的问题,但我自己手动创建多个设置给我这个错误。

谁能帮帮我?

尝试更改 MIDDLEWARE_CLASSES

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 1.10 时遇到了类似的问题。首先,我会尝试将 MIDDLEWARE_CLASSES 更改为 MIDDLEWARE,因为在 Django 1.10 中,他们在这里引入了一种新的中间件样式:

https://docs.djangoproject.com/en/1.10/releases/1.10/

如果这不起作用,我建议检查你的 django 中间件文件,我必须将所有接受对象的 类 更改为 MiddlewareMixin,你可以通过调用导入:

from django.utils.deprecation import MiddlewareMixin

在我的例子中我改变了

class SiteMiddleware(object):
...

from django.utils.deprecation import MiddlewareMixin

class SiteMiddleware(MiddlewareMixin):
...

我要补充一点,除了 mol 提到的内容之外,在升级 Django 的过程中,我不得不暂时禁用链接的虚拟主机。也尝试全新升级到 Django 1.10(卸载 Django 1.9,然后安装 Django 1.10)。

您可能还需要另外清除所有 Django 会话。

我直接在Django 1.10试过了!最初它显示 "TypeError: object() takes no parameters" 错误。 在我的 settings.py 中将 MIDDLEWARE 更改为 MIDDLEWARE_CLASSES 后,它起作用了!