django: recaptcha: ошибка в firefox работает в IE & chrome: ошибка RecaptchaState - PullRequest
1 голос
/ 06 февраля 2010

Я интегрировал Recaptcha с dJango. dJango Snippet - Recaptcha

Вид, который показывает страницу - из baseapp.recaptcha import captcha

def showHome(request):    
    if(request.user.is_authenticated()):    
        tempEmail = request.session.get('id')    
        return render_to_response('logreg/login-register.html',   {'emailFromForm':tempEmail}, context_instance=RequestContext(request));    
    else:    
        request.session.set_test_cookie()    
        form = RegistrationForm()    
        loginForm = LoginForm()    
        html_captcha = captcha.displayhtml(settings.RECAPTCHA_PUB_KEY)    
        print "Captcha HTML is : %s" % html_captcha    
        return render_to_response('logreg/login-register.html', {'form': form, 'loginForm':loginForm, 'html_captcha':html_captcha})    `

Вот код в html -

<div id="register-dialog" title="Register yourself">    
  <p id="validateTips">All form fields are required.</p>    
  {% if error %}    
  {{ error }}    
  {% endif %}    
  <form name="registrationForm" action="registerUser/" method="post">    
      {{ form.as_p }}    
      {{ html_captcha }}    
  </form>    
</div>

Отлично работает в IE & Chrome, но Firefox показывает мне исключение в строке 451 в recaptcha Вот код в этой строке var $ST = RecaptchaState;

Любые мысли приветствуются!

Примечание: версия Firefox - 3,6; IE - 8; Хром - 4,0

1 Ответ

0 голосов
/ 06 февраля 2010

Вот как я это решил.

Я понял, что моя капча показывается в диалоге jqueryui, и, возможно, это проблема с FF. (Почему? Я не знаю.) Следовательно, вместо статического помещения текста от django или его записи. Я использовал ajax api и вставил recaptcha в событие open в диалоговом окне.

Вот пример кода, на случай, если кто-то наткнется на ту же проблему.

Код почти аналогичен тому, что есть на сайте reCaptcha api

$("#register-dialog").dialog({    
    buttons:{
    },    
    open: function() {
    Recaptcha.create("41x39....",
        "recaptcha_div", {
        theme: "red",
        callback: Recaptcha.focus_response_field
        });

И изменил тег формы, чтобы быть таким -

<form name="registrationForm" action="registerUser/" method="post">    
    {{ form.as_p }}    
    <div id="recaptcha_div"></div>    
</form>

И да, включены ajax.js -

    <script type="text/javascript" src="http://api.recaptcha.net/js/recaptcha_ajax.js">
    </script>
...