我有一个登录视图功能,在 3 次登录尝试失败后会阻止用户
功能如下
def my_login(request):
context = {}
if request.method == 'POST':
form = LoginForm(request.POST)
user_id = form.cleaned_data['user_id']
user_password = form.cleaned_data['password1']
if form.is_valid:
try:
usr = Users.objects.get(pk=user_id)
except:
context['form'] = form
context['msg'] = "User Not Found"
return render(request, 'login.html', context)
'''
## code for blocking
'''
if user_password == usr.password1:
usr.login_attempt = 0
usr.save()
login(usr)
return redirect('dashbord')
else:
usr.login_attempt += 1
usr.save()
context['msg'] = f"Attempts tried { str(usr.login_attempt)}"
form = LoginForm()
context['form'] = form
return render(request, 'login.html', context)
这里的问题是,当我输入错误的密码时,它会呈现到登录页面,但是当我单击重新加载时,表单再次重新提交并且login_attempt得到更新
我不想要这种行为,所以如何在单击重新加载时停止重新提交表单
我假设的一种可能的解决方案是在视图中操作请求对象, request = HttpRequest()
但它在 csrf 验证时失败。有没有可能克服这个问题