我正在使用Django Rest Framework和AngularJs构建一个应用程序。我使用Django-rest-auth进行身份验证,但是,我无法进行设置。无论如何,我试图用我的项目设置这个app。我意识到我需要安装django-rest-auth-registration来让它运行,所以我按照这个documentation做了以下事情:
我跑了命令
pip install django-rest-auth
和
pip install django-allauth
任何我的settings.py看起来像这样:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 3rd party apps
'rest_framework',
'rest_framework.authtoken',
'rest_auth',
'allauth',
'allauth.account',
'rest_auth.registration',
# My app
'myapp',
]
我还添加了身份验证后端,context_processors和正确的URL。
但是,当我尝试迁移时,我的终端会抛出以下错误:
RuntimeError:模型类django.contrib.sites.models.Site不声明显式的app_label,也不在INSTALLED_APPS的应用程序中。
为什么我会收到此错误,如何解决此问题以迁移我的项目?谢谢!
修复
只需将Django的Sites framework添加到您的应用中,并在您的设置中将SITE_ID设置为1即可。
INSTALLED_APPS = [
...
'django.contrib.sites',
]
SITE_ID = 1
为什么会这样?
Django's Sites Framework是一个与核心库捆绑在一起的贡献模块,允许使用具有不同站点的单个Django应用程序/代码库(可以使用不同的数据库,视图中的逻辑等)。正如文档中所述,使用SITE_ID setting“以便应用程序数据可以挂钩到特定站点,并且单个数据库可以管理多个站点的内容。”
在这个特殊情况下AllAuth requires the Sites Framework为了正常运作。许多其他第三方库可以安全地处理多个站点可能存在的情况,因此可能是最好的。
我通过谷歌搜索登陆这篇文章。我的问题是运行的测试爆炸了错误:
RuntimeError: Model class app.taxonomy.models.Term doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
这是在带有绝对导入的Python 2.7.x上运行的。正如Colton Hicks在下面的评论中提到的,这也可能发生在Python 3(使用Django 1.11.4的pytest 3.2.3)中。
在我的tests.py
:
from __future__ import absolute_import
[...]
from .models import Demographics, Term
将相对导入更改为绝对导入后,问题就消失了:
from taxonomy.models import Demographics, Term
HTH
我得到了上面的错误。但是我的问题是在urls.py中。我正在关注PyDanny cookiecutter django食谱。我的错误是将urls.py放入此行:
url(r'^demo/', include('project.demoapp.urls', namespace='demoapp')),
当我纠正这个:
url(r'^demo/', include('demoapp.urls', namespace='demoapp')),
一切都好。我也改变了我的本地应用程序(我先做了这个,因此关键错误是url配置错误):
LOCAL_APPS = [
# Your stuff: custom apps go here
'demoapp.apps.DemoAppConfig',
]
只需将'django.contrib.sites',
添加到INSTALLED_APPS
并在SITE_ID = 1
文件中设置settings.py
即可。