web-dev-qa-db-ja.com

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

状況

  • いくつかのアプリケーションを使用してDjango 3.0プロジェクトを構築しました。
  • 次の course に基づいてアカウントアプリを作成しました 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 ...
...

解決しようとしました

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

これが私がそれを解決した方法です。

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