情况
我已经使用Django 3.0、PostgreSQL 11和macOS创建了一个含有几个应用的项目。我基于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
错误
如果我在使用 PostgreSQL 的 settings.py 文件时登录,就会出现问题。如果我退出登录,一切都恢复正常。如果我使用 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用于所有内容。
- 我尝试使用此指南将SQLite迁移到PostgreSQL。
- 我成功创建了一个SQLite数据库的副本
- 但当我将设置更改为postgres并尝试
python manage.py migrate
时,它会显示运行迁移:无需应用任何迁移。
python manage.py loaddata db.json
- 用户已从SQLite迁移(我可以使用它们登录并像仅有的SQLite用户一样获得错误,如果我输错了用户名或密码,它不会让我进入),但是如果我使用IDE查看,则在Postgresql中看不到任何数据表。
- 我在论坛上与其他人交谈过,许多人说装饰器文件有问题,但它只在数据库切换时发生。
- 我创建了一个新的postgresql数据库,并尝试迁移所有内容(迁移未迁移所有内容)。然后我尝试使用新帐户注册,填写表单并按提交按钮后,它给了我以下错误消息
DoesNotExist at /register/
Group matching query does not exist.
- 我也像课程导师一样创建了一个AWS RDS postgreSQL数据库,并将其迁移并连接到服务器和设置中,但我仍然遇到了相同的错误。
- 我还查看了用户组权限,并且源代码SQLight数据库在管理员选项卡中没有分配任何权限,与我的postgresql相同。
- 创建了一个全新的Django 3项目,全新的虚拟环境0,我只是从之前的项目中复制了所有内容作为文本,从之前的数据库中迁移了所有内容,但我仍然遇到了相同的错误。