SQLite 可以工作,但是 PostgreSQL 迁移数据库导致错误 - Django 3.0

SQLite 可以工作,但是 PostgreSQL 迁移数据库导致错误 - Django 3.0

情况

  • 我已经构建了包含几个应用程序的 Django 3.0 项目。
  • 我根据以下内容创建了帐户应用程序课程而且它github
  • 然后我创建了一个用于身份验证的应用程序acc
  • 这一切都是在SQLite数据库
  • 之前我尝试过PostgreSQL运行良好的早期应用程序的数据库
  • 但是现在当我在 settings.py 文件中切换时SQLitePostgreSQL我尝试登录时收到错误
  • 如果我切换回 settings.py 到SQLite一切都运行正常(例如:身份验证、用户登录、用户使用自己的设置在网站上执行操作)
  • 我使用 decorators.py 来保持登录用户访问登录和注册页面,当我切换到 postgresql 时会出现错误。我在这里只使用HttpResponse包含错误消息

装饰器.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 ...
...

尝试解决

  • 我的指南跟随创建用户组,我在迁移的 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.

答案1

以下是我解决问题的方法。

  • 当视频说我必须在管理面板中创建用户组时,我就这么做了。
  • 只需向该组添加属性。
  • Home › Authentication and Authorization › Groups › customer
  • 添加用户允许执行的功能,例如:
...
accounts customer can view customer
...
  • 然后我退出管理员视图
  • 我以正常方式登录,一切正常

相关内容