我有一個基本的登錄系統應用程序,非常非常基本的工作正常,但現在我試圖使它與另一個數據庫一起工作,在這一點上並不那麼容易,因爲我思想。我正在閱讀,我發現我需要一個數據庫路由器,使其與我的第二個數據庫一起工作,所以我嘗試了這一點。Django - 與多個數據庫進行身份驗證時出現全局名稱錯誤
這裏就是我的了:
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'db2':{
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'login.db'),
}
}
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'myapp.middleware.CustomerMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
DATABASE_ROUTERS = ['myapp.routers.MultiCustomerRouter']
routers.py
from middleware import my_local_global
class MultiCustomerRouter(object):
def db_for_read(self, model, **hints):
return my_local_global.db2
middleware.py
from threading import local
my_local_global = local()
class CustomerMiddleware(object):
def process_request(self, request):
my_local_global.db2 = get_db2(request) # my database name is db2
我下面這個Django Authenticate Backend Multiple Databases我跑python manage.py runserver
後,我得到這個錯誤:
NameError at /
global name 'get_db2' is not defined
我該如何處理這使其工作與我的數據庫db2
預期?
views.py
def login_view(request):
print(request.user.is_authenticated())
title = 'login'
form = UserloginForm(request.POST or None)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
user = authenticate(username=username,password=password)
login(request,user)
print(request.user.is_authenticated())
return redirect('first_view')
return render(request, "form.html",{"form":form,"title":title})
基本上我想要實現與db2
不是默認的一個驗證。
非常感謝你的先生,按預期工作。很好的解釋,更好的不可能:)。對於我的noob問題抱歉。 – User100696