在项目中加入一个简单的图片验证码,选择找个轮子,就找到了这个.
官方文档还比较老,使用的时候暂时没有发现什么坑,在此记录一下.
安装:
pip 安装即可,django中添加app captcha
,url中也加入相应的设置即可.
#settings.py
INSTALLED_APPS = [
...
"captcha",
]
#url.py
captcha = [url(r'^captcha/', include('captcha.urls'))]
urlpatterns += captcha
settings.py里还有一些其他的配置项.可以对验证码图片的内容,格式,样式以及表单模板进行修改.
http://django-simple-captcha.readthedocs.io/en/latest/advanced.html#configuration-toggles
之后需要运行python manage.py migrate captcha
命令,同步数据表.
使用
配合表单使用,可以很方便的实现后端验证的功能.傻瓜式操作.
from django import forms
from captcha.fields import CaptchaField
class CaptchaTestForm(forms.Form):
myfield = AnyOtherField()
captcha = CaptchaField()
def some_view(request):
if request.POST:
form = CaptchaTestForm(request.POST)
# 验证表单: 验证码也会自动验证
if form.is_valid():
pass
#do sth
else:
form = CaptchaTestForm()
return render(request, 'template.html',{"form" :form})
可以选择直接将验证码添加到现有表单中,即上文的样子.
也可以拆分使用.
class CaptchaForm(forms.Form):
captcha = CaptchaField(label="验证码")
class RegisterForm(forms.Form):
username = forms.CharField(max_length=16,label="用户名")
password = forms.CharField(max_length=32,label="密码")
def some_view(request):
if request.POST:
captcha = CaptchaForm(request.POST):
if captcha.is_valid():
#do sth. 比如验证另一个表单
#form = RegisterForm(request.POST)
...
这样做可以避免修改所有表单,但是相应的view函数要做出更多调整,根据实际情况进行调整.
前端
前端需要注意的地方主要是,验证码字段包含了input和img两个元素,还有一个hidden的input来传递验证码id,这三个字段的布局可以通过setting中的设置或者自定义模板进行修改.