我在我的 Mac 上使用 Python 3.8 并开发一个应用程序两年多了。我在 PythonAnywhere 上托管这个应用程序,因为我使用的是 Sqlite3。
现在PA给我发了一封邮件,说我需要将系统镜像从Python 3.8升级到3.10。我以前从未这样做过,所以我注册了一个免费帐户并部署了完全相同的应用程序来测试该过程。
我创建了一个新项目 virtualenv 并安装了 Python 3.10 和 Django 5.0(也尝试过 3.1 - 这是我的 Mac 上的版本)。我完成了所有设置并设置了 wsgi,就像之前在其他项目中多次一样。
当我安装所有应用程序并尝试运行该网站时,我收到了很长的错误回溯:
2023-12-20 18:37:37,746: Error running WSGI application
2023-12-20 18:37:38,100: ImportError: cannot import name 'SuccessURLAllowedHostsMixin' from 'django.contrib.auth.views' (/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/contrib/auth/views.py)
2023-12-20 18:37:38,100: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/core/handlers/wsgi.py", line 124, in __call__
2023-12-20 18:37:38,100: response = self.get_response(request)
2023-12-20 18:37:38,101:
2023-12-20 18:37:38,101: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/core/handlers/base.py", line 140, in get_response
2023-12-20 18:37:38,101: response = self._middleware_chain(request)
2023-12-20 18:37:38,101:
2023-12-20 18:37:38,101: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 57, in inner
2023-12-20 18:37:38,102: response = response_for_exception(request, exc)
2023-12-20 18:37:38,102:
2023-12-20 18:37:38,102: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 140, in response_for_exception
2023-12-20 18:37:38,102: response = handle_uncaught_exception(
2023-12-20 18:37:38,102:
2023-12-20 18:37:38,103: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 181, in handle_uncaught_exception
2023-12-20 18:37:38,103: return debug.technical_500_response(request, *exc_info)
2023-12-20 18:37:38,103:
2023-12-20 18:37:38,103: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/views/debug.py", line 69, in technical_500_response
2023-12-20 18:37:38,103: html = reporter.get_traceback_html()
2023-12-20 18:37:38,104:
2023-12-20 18:37:38,104: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/views/debug.py", line 428, in get_traceback_html
2023-12-20 18:37:38,104: c = Context(self.get_traceback_data(), use_l10n=False)
2023-12-20 18:37:38,104:
2023-12-20 18:37:38,104: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/views/debug.py", line 411, in get_traceback_data
2023-12-20 18:37:38,105: c["raising_view_name"] = get_caller(self.request)
2023-12-20 18:37:38,105:
2023-12-20 18:37:38,105: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/views/debug.py", line 102, in get_caller
2023-12-20 18:37:38,105: resolver_match = resolve(request.path)
2023-12-20 18:37:38,105:
2023-12-20 18:37:38,105: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/urls/base.py", line 24, in resolve
2023-12-20 18:37:38,106: return get_resolver(urlconf).resolve(path)
2023-12-20 18:37:38,106:
2023-12-20 18:37:38,106: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/urls/resolvers.py", line 683, in resolve
2023-12-20 18:37:38,106: for pattern in self.url_patterns:
2023-12-20 18:37:38,106:
2023-12-20 18:37:38,106: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/utils/functional.py", line 47, in __get__
2023-12-20 18:37:38,107: res = instance.__dict__[self.name] = self.func(instance)
2023-12-20 18:37:38,107:
2023-12-20 18:37:38,107: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/urls/resolvers.py", line 735, in url_patterns
2023-12-20 18:37:38,107: patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
2023-12-20 18:37:38,107:
2023-12-20 18:37:38,111: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/utils/functional.py", line 47, in __get__
2023-12-20 18:37:38,111: res = instance.__dict__[self.name] = self.func(instance)
2023-12-20 18:37:38,111:
2023-12-20 18:37:38,111: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/urls/resolvers.py", line 728, in urlconf_module
2023-12-20 18:37:38,113: return import_module(self.urlconf_name)
2023-12-20 18:37:38,113:
2023-12-20 18:37:38,113: File "/home/ruszakmikloseu/MPSA/firm/urls.py", line 26, in <module>
2023-12-20 18:37:38,113: from two_factor.urls import urlpatterns as tf_urls
2023-12-20 18:37:38,113:
2023-12-20 18:37:38,113: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/two_factor/urls.py", line 3, in <module>
2023-12-20 18:37:38,114: from two_factor.views import (
2023-12-20 18:37:38,114:
2023-12-20 18:37:38,114: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/two_factor/views/__init__.py", line 1, in <module>
2023-12-20 18:37:38,114: from .core import (
2023-12-20 18:37:38,115:
2023-12-20 18:37:38,115: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/two_factor/views/core.py", line 15, in <module>
2023-12-20 18:37:38,115: from django.contrib.auth.views import SuccessURLAllowedHostsMixin
2023-12-20 18:37:48,218: Error running WSGI application
2023-12-20 18:37:48,506: ImportError: cannot import name 'SuccessURLAllowedHostsMixin' from 'django.contrib.auth.views' (/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/contrib/auth/views.py)
2023-12-20 18:37:48,507: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/core/handlers/wsgi.py", line 124, in __call__
2023-12-20 18:37:48,507: response = self.get_response(request)
2023-12-20 18:37:48,507:
2023-12-20 18:37:48,507: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/core/handlers/base.py", line 140, in get_response
2023-12-20 18:37:48,507: response = self._middleware_chain(request)
2023-12-20 18:37:48,507:
2023-12-20 18:37:48,507: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 57, in inner
2023-12-20 18:37:48,508: response = response_for_exception(request, exc)
2023-12-20 18:37:48,508:
2023-12-20 18:37:48,508: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 140, in response_for_exception
2023-12-20 18:37:48,508: response = handle_uncaught_exception(
2023-12-20 18:37:48,508:
2023-12-20 18:37:48,508: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 181, in handle_uncaught_exception
2023-12-20 18:37:48,508: return debug.technical_500_response(request, *exc_info)
2023-12-20 18:37:48,508:
2023-12-20 18:37:48,508: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/views/debug.py", line 69, in technical_500_response
2023-12-20 18:37:48,509: html = reporter.get_traceback_html()
2023-12-20 18:37:48,509:
2023-12-20 18:37:48,509: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/views/debug.py", line 428, in get_traceback_html
2023-12-20 18:37:48,509: c = Context(self.get_traceback_data(), use_l10n=False)
2023-12-20 18:37:48,509:
2023-12-20 18:37:48,509: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/views/debug.py", line 411, in get_traceback_data
2023-12-20 18:37:48,509: c["raising_view_name"] = get_caller(self.request)
2023-12-20 18:37:48,510:
2023-12-20 18:37:48,510: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/views/debug.py", line 102, in get_caller
2023-12-20 18:37:48,510: resolver_match = resolve(request.path)
2023-12-20 18:37:48,510:
2023-12-20 18:37:48,510: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/urls/base.py", line 24, in resolve
2023-12-20 18:37:48,510: return get_resolver(urlconf).resolve(path)
2023-12-20 18:37:48,510:
2023-12-20 18:37:48,511: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/urls/resolvers.py", line 683, in resolve
2023-12-20 18:37:48,511: for pattern in self.url_patterns:
2023-12-20 18:37:48,511:
2023-12-20 18:37:48,511: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/utils/functional.py", line 47, in __get__
2023-12-20 18:37:48,511: res = instance.__dict__[self.name] = self.func(instance)
2023-12-20 18:37:48,511:
2023-12-20 18:37:48,511: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/urls/resolvers.py", line 735, in url_patterns
2023-12-20 18:37:48,511: patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
2023-12-20 18:37:48,511:
2023-12-20 18:37:48,512: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/utils/functional.py", line 47, in __get__
2023-12-20 18:37:48,512: res = instance.__dict__[self.name] = self.func(instance)
2023-12-20 18:37:48,512:
2023-12-20 18:37:48,512: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/django/urls/resolvers.py", line 728, in urlconf_module
2023-12-20 18:37:48,512: return import_module(self.urlconf_name)
2023-12-20 18:37:48,512:
2023-12-20 18:37:48,512: File "/home/ruszakmikloseu/MPSA/firm/urls.py", line 26, in <module>
2023-12-20 18:37:48,513: from two_factor.urls import urlpatterns as tf_urls
2023-12-20 18:37:48,513:
2023-12-20 18:37:48,513: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/two_factor/urls.py", line 3, in <module>
2023-12-20 18:37:48,513: from two_factor.views import (
2023-12-20 18:37:48,513:
2023-12-20 18:37:48,513: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/two_factor/views/__init__.py", line 1, in <module>
2023-12-20 18:37:48,513: from .core import (
2023-12-20 18:37:48,513:
2023-12-20 18:37:48,513: File "/home/ruszakmikloseu/.virtualenvs/mpa-virtualenv/lib/python3.10/site-packages/two_factor/views/core.py", line 15, in <module>
2023-12-20 18:37:48,514: from django.contrib.auth.views import SuccessURLAllowedHostsMixin
我以前从未见过SuccessURLAllowedHostsMixin。 我不知道如何解决这个问题。难道是因为升级了Python 3.10或者Django 5.0导致的错误?
如果有人可以帮助我,请先谢谢您!
如果找到解决方案,感谢拉斐尔的评论。问题是在 Django 4.1 中,
SuccessURLAllowedHostsMixin
已被 RedirectURLMixin
替换,最新版本(1.3)的 django-two-factor-auth
id 使用 SuccessURLAllowedHostsMixin。
所以我降级到 Django 4.0 并且工作正常。