django实现captcha验证码功能
时间: 2024-10-21 12:12:53 浏览: 15
django_captcha:django验证码
在Django中实现CAPTCHA(全称为Completely Automated Public Turing Test to tell Computers and Humans Apart,即全自动区分计算机和人类的图灵测试)验证通常用于防止自动化脚本恶意提交表单。以下是一个简单的步骤来添加reCaptcha到Django项目中:
1. **安装依赖**:
首先,你需要安装`django-recaptcha`库,通过命令行运行:
```
pip install django-recaptcha
```
2. **设置配置**:
在`settings.py`文件中添加`RECAPTCHA_PUBLIC_KEY`和`RECAPTCHA_PRIVATE_KEY`,这两个值可以从Google reCAPTCHA网站获取。
```python
RECAPTCHA_PUBLIC_KEY = 'your_public_key'
RECAPTCHA_PRIVATE_KEY = 'your_private_key'
```
3. **模型字段**:
在需要验证码的模型中,比如用户注册表单,添加一个`captcha_field`字段:
```python
from captcha.fields import ReCaptchaField
class UserForm(forms.ModelForm):
captcha = ReCaptchaField()
class Meta:
model = User
fields = ['username', 'email']
```
4. **视图处理**:
在处理表单验证的视图函数里,检查用户填写的验证码是否有效。例如:
```python
def register(request):
form = UserForm(request.POST)
if form.is_valid() and form.cleaned_data['captcha'].is_valid():
# 验证成功,继续处理注册过程
pass
else:
form.add_error('captcha', 'Invalid CAPTCHA')
return render(request, 'register.html', {'form': form})
```
5. **模板渲染**:
在HTML模板中展示表单并嵌入reCAPTCHA:
```html
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<div class="g-recaptcha" data-sitekey="{{ RECAPTCHA_PUBLIC_KEY }}"></div>
<button type="submit">Register</button>
</form>
```
6. **部署时的处理**:
Google reCAPTCHA有服务器端校验,确保在部署时也启用它。可以在`urls.py`中添加URL pattern,并在相应视图中处理POST请求,如`verify_recaptcha`。
记得在实际使用前,从Google Cloud Console创建一个项目并激活reCAPTCHA服务,然后获取上述提到的公钥和私钥。
阅读全文