私はログインシステムの基本的なアプリケーションを持っていますが、非常に基本的な作業はOKですが、今は別のデータベースで動作させようとしています。思想。私は読んでいたので、私はそれを試みたので、私は2番目のデータベースで動作するようにdbルータが必要であることがわかった。ここで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
私は私のデータベースdb2
で期待通りに動作させるためにこれを処理するにはどうすればよい
NameError at /
global name 'get_db2' is not defined
:私はpython manage.py runserver
を実行した後、210
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次でしたか?私が達成しようとしているものを基本的に
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
ないデフォルトのものを使用して認証することです。
ありがとうございます、期待通りに働きました。よく説明され、より良い不可能:)。申し訳ありません。 – User100696