Django中无表单实现Recaptcha?

3 投票
2 回答
1460 浏览
提问于 2025-04-17 07:42

我正在制作一个Django应用,这个网站上有表单,但我手动渲染这些表单(也就是说,我是逐个输入每个字段,并通过AJAX提交它们)。

我该如何把Recaptcha集成到我的表单里呢?谢谢大家的帮助!

2 个回答

3

recaptcha-client在python3中无法使用。我最后选择了使用django-recaptcha(https://pypi.python.org/pypi/django-recaptcha/1.0)。简要的文档说明了如何通过表单字段'ReCaptchaField'来实现recaptcha,但你也可以像这样直接使用captcha.client中的提交功能:

import captcha.client

[...]

recaptcha_response = captcha.client.submit(  
    request.POST.get('recaptcha_challenge_field'),  
    request.POST.get('recaptcha_response_field'),  
    '[[privatekey]]',  
    request.META['REMOTE_ADDR'],)  

然后你需要检查一下recaptcha_response.is_valid是否有效。

不需要把recaptcha添加到你的INSTALLED_APPS或者其他地方。

1

我正在使用这个Python库来处理reCAPTCHA:

http://pypi.python.org/pypi/recaptcha-client

然后我的视图代码看起来是这样的:

captcha_key = get_config('RECAPTCHA_PUB_KEY',None)
recaptcha_challenge_field = request.POST.get('recaptcha_challenge_field', None)
recaptcha_response_field = request.POST.get('recaptcha_response_field', None)
check_captcha = captcha.submit(recaptcha_challenge_field, recaptcha_response_field, settings.RECAPTCHA_PRIVATE_KEY, request.META['REMOTE_ADDR'])
if check_captcha.is_valid is False:
    log.info('captcha_error : %s' % check_captcha.error_code)
    return {'TEMPLATE':template_name,'captcha_error': True,'register_form': f,'captcha_key':captcha_key ,'next':redirect_to}

撰写回答