2015-04-01 37 views
0

我安裝django-nocaptcha-recaptcha並將其集成到我的表格:Django的nocaptcha,驗證碼總是顯示額外的驗證框中

from nocaptcha_recaptcha.fields import NoReCaptchaField 

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

它顯示了罰款的形式,但只要我點擊它額外的對話框彈出,詢問輸入一些文字並進行驗證。它每次都發生。我在另一個網絡上的另一臺計算機上測試了它,點擊該框後它仍要求進行額外的驗證。

這是什麼樣子:additional verification dialog box

這裏是我如何處理形式:

@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.我正在用python 3.4使用django 1.7.1

回答

0

重新啓動服務器,不要忘記清除瀏覽器的緩存。希望這可以幫助。

+0

令人驚訝的是,它以某種方式工作!我昨天也嘗試過了,但那並沒有奏效。我仍然不明白問題所在。無論如何,接受答案,因爲它的工作。 – 2015-04-02 12:28:59

1

Another alternative:極簡主義和非框架依賴。 這是代碼,以防你想重寫它。

''' 
    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']) 
+1

嗨阿德里安,雖然這個鏈接可能回答這個問題,最好在這裏包含答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 請看看這裏:[爲什麼和如何刪除一些答案?](http://stackoverflow.com/help/deleted-answers) – bummi 2015-06-07 09:26:10