我用Django的身份驗證系統登錄用戶,唯一的問題是我得到1062 DUPLICATE ENTRY
錯誤。使用Django登錄現有用戶時出現DUPLICATE錯誤
def login(request):
# this will be the first page someone who isn't signed in will see
form = LoginForms(request.POST)
username = request.POST.get('username')
password = request.POST.get('password')
if username and password:
#this line returns two values, a user object and a boolean flag 'created', 'true' if user is created and false if user already exists
try:
user,created = User.objects.get_or_create(username=username, password=password)
if created:
user.set_password(password)
user.save()
#if the user already exists
user = authenticate(username=username, password=password)
auth_login(request, user)
return HttpResponse('success')
except IntegrityError:
user = authenticate(username=username, password=password)
auth_login(request, user)
return HttpResponse('good')
else:
return render(request, 'tracker/login.html', {'form': form})
現在我只是捕捉錯誤,並基本上告訴Django無論如何登錄。但是我知道這不是一個好的做法,如果用戶不存在,使用User.objects.get
來測試用戶是否存在與User.objects.create_user
相結合來創建用戶會更有意義嗎?
編輯加了我自己的嘗試,似乎工作:
def login(request):
# this will be the first page someone who isn't signed in will see
form = LoginForms(request.POST)
username = request.POST.get('username')
password = request.POST.get('password')
if username and password:
exists = User.objects.filter(username=username)
if exists:
user = authenticate(username=username, password=password)
auth_login(request, user)
return HttpResponse('Logged in')
else:
User.objects.create_user(username=username, password=password)
user = authenticate(username=username, password=password)
auth_login(request, user)
return HttpResponse('created new user')
else:
return render(request, 'tracker/login.html', {'form': form})
EDIT 2固定的,因此無效的密碼會產生一個錯誤
感謝您的回覆,我忘了'filter()'。在我問了這個問題之後,我編輯了自己的代碼,試圖找出它,直到我使用'filter()'後才能正常工作。雖然它仍然與你的不同,你能告訴我你的想法嗎? – Amon
是的,它會正常工作,但有關您的**重複**'用戶'錯誤,它會再次發生,我猜 – Bijoy
因爲如果有多個用戶,'存在'將有價值和條件'如果存在: '將執行導致錯誤 – Bijoy