Django Rest FrameworkとAngularJsを使用してアプリケーションを構築しています。認証のためにDjango-rest-authを使用していますが、設定できませんでした。とにかく、私はプロジェクトでこれを設定しようとしています app 実行するにはDjango-rest-auth-registrationをインストールする必要があることに気づいたので、この documentation に従って次のことを行いました。
コマンドを実行しました
pip install Django-rest-auth
そして
pip install Django-allauth
Mysettings.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のサイトフレームワーク は、コアライブラリにバンドルされた貢献モジュールであり、異なるサイト(ビュー内の異なるデータベース、ロジックを使用できる)で単一のDjangoアプリケーション/コードベースを使用できます。など)。 SITE_ID設定 、ドキュメントに記載されているように、「を使用して、アプリケーションデータを特定のサイトにフックし、単一のデータベースで複数のサイトのコンテンツを管理できます。」
この特定の場合 AllAuthにはSites Frameworkが必要です が正しく機能するために。他の多くのサードパーティライブラリは、複数のサイトが存在する可能性がある場合に安全に処理できるように構築されています。
Google検索でこの投稿を見つけました。私の問題は、エラーで爆発したテストを実行していました:
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(pytest 3.2.3 with Django 1.11.4)でも発生する可能性があります。
私の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
を設定するだけです。