django-nocaptcha-recaptcha всегда показывает дополнительное окно проверки

Я установил django-nocaptcha-recaptcha и интегрировал его в свою форму:

from nocaptcha_recaptcha.fields import NoReCaptchaField

class ClientForm(forms.ModelForm):
    captcha = NoReCaptchaField()

Он отлично отображается в форме, но всякий раз, когда я нажимаю на него, появляется дополнительное диалоговое окно с просьбой ввести текст и подтвердить. Это происходит каждый раз. Я протестировал его с другого компьютера в другой сети, и он по-прежнему запрашивает дополнительную проверку после установки флажка.

Вот как это выглядит: диалоговое окно дополнительной проверки

Вот как я работаю с формой:

@xframe_options_exempt
def registration(request):           
    if request.method == 'POST':        
        clientform = ClientForm(request.POST)

    # check whether it's valid:
    if clientform.is_valid():
        new_client = clientform.save()
...

Что я делаю не так? Это проблема с django-nocaptcha-recaptcha? Должен ли я использовать что-то еще?

P.S. Я использую django 1.7.1 с python 3.4.


person Ashish Acharya    schedule 01.04.2015    source источник


Ответы (2)


Перезапустите сервер и не забудьте очистить кеш браузера. Надеюсь это поможет.

person Bidhan Bhattarai    schedule 02.04.2015
comment
Удивительно, но это как-то сработало! Я тоже вчера пробовал, но тогда не получилось. Я до сих пор не понимаю, в чем проблема. В любом случае, принимаю ответ, потому что он сработал. - person Ashish Acharya; 02.04.2015

Другой вариант: минималистский и не зависящий от фреймворка. Это код, если вы захотите его переписать.

 '''
    NO-CAPTCHA VERSION: 1.0
    PYTHON VERSION:     3.x
 '''

import json
from urllib.request import Request, urlopen
from urllib.parse import urlencode


VERIFY_SERVER = "www.google.com"


class RecaptchaResponse(object):

    def __init__(self, is_valid, error_code=None):
        self.is_valid = is_valid
        self.error_code = error_code

    def __repr__(self):
        return "Recaptcha response: %s %s" % (
            self.is_valid, self.error_code)

    def __str__(self):
        return self.__repr__()


def displayhtml(site_key, language=''):
    """Gets the HTML to display for reCAPTCHA

    site_key -- The site key
    language -- The language code for the widget.
    """

    return """<script src="https://www.google.com/recaptcha/api.js?hl=%(LanguageCode)s" async="async" defer="defer"></script>
  <div class="g-recaptcha" data-sitekey="%(SiteKey)s"></div>
""" % {
        'LanguageCode': language,
        'SiteKey': site_key,
    }


def submit(response,
           secret_key,
           remote_ip,
           verify_server=VERIFY_SERVER):
    """
    Submits a reCAPTCHA request for verification. Returns RecaptchaResponse
    for the request

    response -- The value of response from the form
    secret_key -- your reCAPTCHA secret key
    remote_ip -- the user's ip address
    """

    if not(response and len(response)):
        return RecaptchaResponse(is_valid=False, error_code='incorrect-captcha-sol')

    def encode_if_necessary(s):
        if isinstance(s, str):
            return s.encode('utf-8')
        return s

    params = urlencode({
        'secret': encode_if_necessary(secret_key),
        'remoteip': encode_if_necessary(remote_ip),
        'response': encode_if_necessary(response),
    })

    params = params.encode('utf-8')

    request = Request(
        url="https://%s/recaptcha/api/siteverify" % verify_server,
        data=params,
        headers={
            "Content-type": "application/x-www-form-urlencoded",
            "User-agent": "reCAPTCHA Python"
        }
    )
    httpresp = urlopen(request)

    return_values = json.loads(httpresp.read().decode('utf-8'))
    httpresp.close()

    return_code = return_values['success']

    if return_code:
        return RecaptchaResponse(is_valid=True)
    else:
        return RecaptchaResponse(is_valid=False, error_code=return_values['error-codes'])
person Adrian Lopez    schedule 07.06.2015
comment
Привет, Адриан, хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылку, могут стать недействительными, если связанная страница изменится. Посмотрите здесь: Почему и как удаляются некоторые ответы? - person bummi; 07.06.2015