web-dev-qa-db-ja.com

SQLiteは機能しますが、PostgreSQLで移行されたデータベースでエラーが発生します-Django 3.0

状況

  • Django 3.0、PostgreSQL 11、macOSプロジェクトをいくつかのアプリケーションでビルドしました。
  • コース に基づいてアカウントアプリを作成しました github です
  • 認証用のアプリケーションを作成したよりacc
  • これはすべてSQLiteデータベースで行われました
  • 以前、私はPostgreSQLデータベースを試してみました
  • しかし、settings.pyファイルでSQLite-に切り替えると、 PostgreSQLログインしようとするとエラーが発生する
  • Settings.pyをSQLiteに戻すと、すべてが完全に機能します(例:認証、ユーザー、ユーザーによるログイン)独自の設定でウェブサイトで物事を行う)
  • 私はdecorators.pyを使用して、ログインページとサインアップページにアクセスしているログインユーザーを維持しますが、postgresqlに切り替えるとエラーが発生します。ここでは、エラーメッセージに含まれるHttpResponseのみを使用します

decorators.py

from Django.http import HttpResponse
from Django.shortcuts import redirect

def unauthenticated_user(view_func):
    def wrapper_func(request, *args, **kwargs):
        if request.user.is_authenticated:
            return redirect('home')
        else:
            return view_func(request, *args, **kwargs)

    return wrapper_func

def allowed_users(allowed_roles=[]):
    def decorator(view_func):
        def wrapper_func(request, *args, **kwargs):

            group = None
            if request.user.groups.exists():
                group = request.user.groups.all()[0].name

            if group in allowed_roles:
                return view_func(request, *args, **kwargs)
            else:
                return HttpResponse('Authorized')
        return wrapper_func
    return decorator

[〜#〜]エラー[〜#〜]

Settings.pyがPostgreSQLを使用しているときにログインすると、ログアウトすると、すべてが再び正常に機能します。 SQL liteを使用すればログインでき、すべてが完全に機能します

ValueError at /
The view accounts.decorators.wrapper_function didn't return an HttpResponse object. It returned None instead.
Request Method: GET
Request URL:    http://localhost...
Django Version: 3.0
Exception Type: ValueError
Exception Value: The view accounts.decorators.wrapper_function didn't return an HttpResponse object. It returned None instead.
Exception Location: /Users/.../python3.7/site-packages/Django/core/handlers/base.py in _get_response, line 126
Python Executable:  /Users/.../bin/python3
Python Version: 3.7.3
.....

Request information
USER MYUSERNAME
GET No GET data
POST No POST data
FILES  No FILES data
COOKIES ...
...

解決しようとしました

  1. 私が作成したガイド follow は、移行したpostgreSQLデータベースでも同様にユーザーグループを作成しましたが、コメントセクションでUSER1と同じエラーが発生します。
    • これはビデオの下部にある推奨事項でした
    • 「USER1見つけた。ユーザーのグループを変更するのを忘れた!
    • -> USER2は管理パネルに移動し、ユーザーセクションで、選択したグループセクションに顧客を追加します。
    • 私はそれを正確に実行しましたが、うまくいきませんでした。唯一の違いは、移行されたpostgresqlを使用していて、元のSQLightを使用したということです。 。
  2. 両方のデータベースにデータとテーブルがありますが、PostgreSQLいくつかの古いスタッフと- SQLiteすべてに対して。
    • SQLitePostgreSQLに移行しようとしましたこれを ガイド で。
    • SQLiteデータベースのコピーを作成しました
    • しかし、設定をpostgresに変更してpython manage.py migrateと書いてありますRunning migrations: No migrations to apply.
    • python manage.py loaddata db.json
    • ユーザーはSQLiteから移行されます(ユーザーと一緒にログインすると、SQliteユーザーのみと同じようにエラーが発生します。ユーザーまたはパスワードを間違って入力すると、SQLiteからアクセスできません)がSQLiteから移行されます。 IDEで検索するとPostgresqlで
  3. 私はフォーラムで他の人々と話しましたが、これは問題があるのはデコレータファイルであると多くの人が言いましたが、データベースの切り替えでのみ発生します。
  4. 私は新しいpostgresqlデータベースを作成し、すべてを移行しようとしました(移行はまだすべてを移行していません)。新しいアカウントでサインアップしようとしたときより、フォームへの入力後、次のエラーメッセージが表示されました。
DoesNotExist at /register/
Group matching query does not exist.
  1. コースリーダーのようなAWS RDS postgreSQLデータベースも作成し、移行してサーバーと設定に接続しましたが、それでも同じエラーが発生しました。
  2. ユーザーグループのアクセス許可も調べましたが、ソースコードのSQLightデータベースには、postgresqlと同じように[管理]タブでアクセス許可が与えられていません。
  3. 真新しいDjango 3プロジェクト、真新しい仮想環境を作成しました0前のプロジェクトからすべてをテキストとしてコピーし、前のデータベースからすべてを移行しましたが、同じエラーが発生します
4
sogu

だからここに私がそれを解決した方法があります。

  • ビデオが管理パネルでユーザーグループを作成する必要があると言ったとき、私は魔法使いでした。
  • そのGropにプロパティを追加する必要があるだけです。
  • Home › Authentication and Authorization › Groups › customer
  • ユーザーが行うことを許可した機能を追加する:
...
accounts customer can view customer
...
  • 管理ビューからログアウトするより
  • 私は通常の方法でログインし、すべてが機能します
2
sogu