【发布时间】:2020-07-16 11:25:32
【问题描述】:
情况
- 我已经用几个应用程序构建了 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
错误
如果我在 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 适合一切。
- 我已尝试使用此guide 将 SQLite 迁移到 PostgreSQL。
- 我已成功创建 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.
- 我还像课程负责人一样创建了一个 AWS RDS postgreSQL 数据库,将其迁移并连接到服务器和设置中,但我仍然遇到同样的错误。
- 我也查看了用户组权限,并且源代码 SQLight 数据库在管理选项卡中没有与我的 postgresql 相同的权限
- 创建了一个全新的 Django 3 项目,全新的虚拟环境 0 我只复制了上一个项目中的所有内容作为文本,从以前的数据库中迁移了所有内容,我得到了同样的错误
【问题讨论】:
-
您确定您是从 django 管理员手动创建组,然后为他们分配用户。?
-
我不知道其他方法,所以我很确定。
-
不是其他方式。 “allowed_users”函数就是我所指的。基本上,根据视频,它期望组内的角色可以是员工、管理员或任何角色。那么您是否从 django 管理员组中创建了角色?
-
无论如何,我尝试在 postgres 和 sql 中运行你的代码,它对我来说工作得很好
-
我也有同样的问题,你调试了吗
标签: python django postgresql sqlite decorator