Почему l oop не может работать в этом django views.py - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь написать страницу входа в систему, которая заблокирует пользователя, введя неправильный пароль три раза, и имя пользователя будет 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 = 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 = 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 = 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)
                # how to put the username in to BlackList?
                messages.info(request, 'Username in black list, please contact admin')

    context = {}
    return render(request, 'accounts/login.html', context)

1 Ответ

0 голосов
/ 11 июля 2020

Итак, когда вы пишете

else:
     count = count+1
     messages.info(request, '1 Username or Password is incorrect' + str(count))

, вы должны делать count + = 1. Итак, это должно выглядеть так

else:
     count += 1
     messages.info(request, '1 Username or Password is incorrect' + str(count))

сделайте это для каждого места, где вы положили count = count + 1. Правильный способ - сделать count + = 1

...