Postgresql
SQLite 工作,但 PostgreSQL 遷移數據庫導致錯誤 - Django 3.0
情況
- 我已經用幾個應用程序建構了 Django 3.0 項目。
- 我已經根據以下課程創建了帳戶應用程序,它是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 ... ...
試圖解決
我遵循的指南創建了我在遷移的 postgreSQL 數據庫中也做過的使用者組,但我仍然在評論部分收到與 USER1 相同的錯誤。
- 這是影片底部的建議
- “USER1我找到了,我忘記更改使用者組了!
- –> USER2 轉到管理面板,然後在您的使用者部分中,在所選組部分中添加客戶”。
- 我確實做到了,但沒有奏效,唯一的區別是我使用了遷移的 postgresql,他們使用了原始的 SQLight .
我在兩個數據庫中都有數據和表,但一些老員工使用PostgreSQL ,所有東西都使用SQLite。
- 我嘗試使用本指南將SQLite遷移到PostgreSQL。
- 我已成功創建 SQLite 數據庫的副本
- 但是當我將設置更改為 postgres 並嘗試
python manage.py migrate
時說Running migrations: No migrations to apply.
python manage.py loaddata db.json
- 使用者已從 SQLite 遷移(我可以使用他們登錄並得到錯誤,就像唯一的 SQlite 使用者一樣,如果我輸入錯誤的使用者或密碼,它不允許我進入),但我沒有看到任何數據表在 Postgresql 中,如果我用 IDE 查找它
我在論壇上與其他人交談過,但很多人說這是有問題的裝飾器文件,但它只發生在數據庫切換時。
我創建了一個新的 postgresql 數據庫,並嘗試遷移所有內容(遷移尚未遷移所有內容)。比我嘗試使用新帳戶註冊時,它在填寫表單按下送出後給了我以下錯誤消息
DoesNotExist at /register/ Group matching query does not exist.
所以這就是我解決它的方法。
- 當影片說我必須在管理面板中創建使用者組時,我做到了。
- 只需向該組添加屬性。
Home › Authentication and Authorization › Groups › customer
- 添加使用者允許執行的功能,例如:
... accounts customer can view customer ...
- 比我退出管理視圖
- 我以正常方式登錄int eh,一切正常