2024-09-26 17:56:44 发布
网友
有没有一种简单的方法来调整django-recaptcha插件来使用新的googlere-captchaapi? 我已经更改了模板,验证码以写的方式显示,但验证不起作用。有人知道我怎么用简单的方法解决这个问题吗?在
或者做你自己的:这是我用别人做的模板/起点。在
import json import urllib2, urllib API_SERVER = "https://www.google.com/recaptcha/api/siteverify" class RecaptchaResponse(object): def __init__(self, is_valid, error_code=None): self.is_valid = is_valid self.error_code = error_code def __unicode__(self): print "%s, %s" % (self.is_valid, self.error_code) def __str__(self): return self.__unicode__() def get_error(self): if self.error_code and len(self.error_code): return self.error_code[0] def submit(recaptcha_secret, recaptcha_response, remoteip=''): if not (recaptcha_secret and recaptcha_response and len(recaptcha_secret) and len(recaptcha_response) ): return RecaptchaResponse(is_valid=False, error_code='incorrect-captcha-sol') def encode_if_necessary(s): if isinstance(s, unicode): return s.encode('utf-8') return s params = urllib.urlencode({ 'secret': encode_if_necessary(recaptcha_secret), 'response': encode_if_necessary(recaptcha_response), 'remoteip': encode_if_necessary(remoteip) }) request = urllib2.Request( url=API_SERVER, data=params, headers={ "Content-type": "application/x-www-form-urlencoded", "User-agent": "reCAPTCHA Python" } ) httpresp = urllib2.urlopen(request) return_values = json.loads(httpresp.read()) print return_values if return_values.get('success', False): return RecaptchaResponse(is_valid=True) else: return RecaptchaResponse(is_valid=False, error_code=return_values.get('error-codes', ''))
移植到python3的代码相同。我们正在生产中使用它。如果您预先付费,can be dowloaded from pypi/pip。在
''' 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'])
我知道你的问题很老,但现在,你只要写下来就行了设置.py公司名称:
NOCAPTCHA = True
就这样。在
或者做你自己的:这是我用别人做的模板/起点。在
移植到python3的代码相同。我们正在生产中使用它。如果您预先付费,can be dowloaded from pypi/pip。在
我知道你的问题很老,但现在,你只要写下来就行了设置.py公司名称:
就这样。在
相关问题 更多 >
编程相关推荐