2

我正在使用Class-based viewDjango:我只想在 3 次后显示验证码,并且只有在显示后才处理验证码。到目前为止,我只能在一次错误尝试后显示验证码:

def post(self, request):
        response = captcha.submit(  
            request.POST.get('recaptcha_challenge_field'),  
            request.POST.get('recaptcha_response_field'),  
            '[[ MY PRIVATE KEY ]]',  
            request.META['REMOTE_ADDR'],)  

        username = request.POST['username']
        password = request.POST['password']

        user = authenticate(username=username, password=password)
        state = "The username or password is incorrect."
        if user is not None:
            login(request, user)
            return HttpResponseRedirect('/index/')
        else:
            #captcha = CaptchaField()
            public_key = settings.RECAPTCHA_PUBLIC_KEY
            script = displayhtml(public_key=public_key)
            return render_to_response('index.html', {'state':state, 'captcha':'captcha', 'script':script}, context_instance=RequestContext(request))

我想在 3 次后显示验证码并使用 response.is_valid 处理它。我怎样才能做到这一点?

4

1 回答 1

0

最简单的解决方案可能是将尝试次数存储在 cookie 中,并在每次尝试失败时递增。显然这可以被篡改,这让我想到了签名的 cookie:

本质上,如果值已被篡改,签名的 cookie 将引发异常。

您也可以将计数器存储在会话中,但是当 cookie 可以解决问题时,我认为过早创建会话对象没有任何意义。

于 2013-03-28T10:53:06.037 回答