99

Django Rest Framework と AngularJs を使用してアプリケーションを構築しています。認証目的で Django-rest-auth を使用していますが、セットアップできませんでした。とにかく、私は自分のプロジェクトでこのアプリをセットアップしようとしています。実行するには django-rest-auth-registration をインストールする必要があることに気付いたので、このドキュメントに従って次のことを行いました。

コマンドを実行しました

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 のアプリケーションにもありません。

このエラーが発生するのはなぜですか? また、プロジェクトを移行するためにエラーを解決するにはどうすればよいですか? ありがとう!

4

6 に答える 6

254

修正

Django のSites フレームワークをアプリに追加し、設定で SITE_ID を 1 に設定するだけです。

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
]

SITE_ID = 1

なぜこれが起こるのですか?

Django の Sites Frameworkは、単一の Django アプリケーション/コードベースをさまざまなサイト (さまざまなデータベース、ビュー内のロジックなどを使用できます) で使用できるようにするコア ライブラリにバンドルされた寄稿モジュールです。ドキュメントに記載されている SITE_ID 設定は、「アプリケーションデータを特定のサイトにフックし、単一のデータベースで複数のサイトのコンテンツを管理できるようにするために使用されます」。

この特定のケースでは、AllAuth が適切に機能するために Sites Framework が必要です。他の多くのサードパーティ製ライブラリは、複数のサイトが存在する可能性がある場合に安全に処理できるように構築されているため、最適な場合があります。

于 2016-02-14T06:58:33.430 に答える