Я пытаюсь написать страницу входа в систему, которая заблокирует пользователя, введя неправильный пароль три раза, и имя пользователя будет go в черном списке, так что оно будет заблокировано. Страница входа работает хорошо, и черный список работает хорошо. Одна проблема заключается в том, что l oop не работает, у меня вначале было while count < 3
, но он дает пользователю только один шанс ввести пароль, затем я переписываю код в формате if ... elif...
, чтобы проверить, что идет не так. Я обнаружил, что он застрял на «1 имя пользователя или пароль неверен 1», что означает, что он переходит только к первому, если и счет всегда равен 1, что означает, что счетчик каждый раз возвращается на 0.
Я думаю, что потому что после того, как пользователь нажимает кнопку входа в систему, страница обновляется sh и снова делает счет 0, поэтому как мне решить эту проблему?
@unauthenticated_user
def loginPage(request):
if request.method == "POST":
username = request.POST.get('username') # Get username input first
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
BL = BlackList.objects.values_list('list', flat=True) # Read all data into array
if username in BL: # Check if the username is in blacklist
messages.info(request, 'Username in black list, please contact admin')
else: # Not in black list username can go to login
count = 0
if count == 0: # User can try 3 times for each login in
if user is not None:
login(request, user)
return redirect('home')
else:
count += 1
messages.info(request, '1 Username or Password is incorrect' + str(count))
elif count == 1:
messages.info(request, 'testest' + str(count))
request.method == "POST"
username = request.POST.get('username') # Get username input first
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
count += 1
messages.info(request, '2 Username or Password is incorrect' + str(count))
elif count == 2:
request.method == "POST"
username = request.POST.get('username') # Get username input first
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
count += 1
messages.info(request, '3 Username or Password is incorrect' + str(count))
else: # 3 times fail the username will go to the black list
BlackList.objects.create(list=username)
# Put the username in to BlackList
messages.info(request, 'Username in black list, please contact admin')
context = {}
return render(request, 'accounts/login.html', context)