带Djangorecaptch的新Google ReCAPTCHA

2024-06-16 10:28:54 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种简单的方法来调整django-recaptcha插件来使用新的googlere-captchaapi? 我已经更改了模板,验证码以写的方式显示,但验证不起作用。有人知道我怎么用简单的方法解决这个问题吗?在


Tags: django方法插件模板方式recaptcha验证码googlere
3条回答

或者做你自己的:这是我用别人做的模板/起点。在

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

就这样。在

相关问题 更多 >