Postgresql

SQLite 工作,但 PostgreSQL 遷移數據庫導致錯誤 - Django 3.0

  • April 10, 2020

情況

  • 我已經用幾個應用程序建構了 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,一切正常

引用自:https://serverfault.com/questions/1011205