在項目中加入一個簡單的圖片驗證碼,選擇找個輪子,就找到了這個.
官方文檔還比較老,使用的時候暫時沒有發(fā)現(xiàn)什么坑,在此記錄一下.
安裝:
pip 安裝即可,django中添加app captcha
,url中也加入相應(yīng)的設(shè)置即可.
#settings.py
INSTALLED_APPS = [
...
"captcha",
]
#url.py
captcha = [url(r'^captcha/', include('captcha.urls'))]
urlpatterns += captcha
settings.py里還有一些其他的配置項.可以對驗證碼圖片的內(nèi)容,格式,樣式以及表單模板進(jìn)行修改.
http://django-simple-captcha.readthedocs.io/en/latest/advanced.html#configuration-toggles
之后需要運(yùn)行python manage.py migrate captcha
命令,同步數(shù)據(jù)表.
使用
配合表單使用,可以很方便的實(shí)現(xiàn)后端驗證的功能.傻瓜式操作.
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})
可以選擇直接將驗證碼添加到現(xiàn)有表單中,即上文的樣子.
也可以拆分使用.
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)
...
這樣做可以避免修改所有表單,但是相應(yīng)的view函數(shù)要做出更多調(diào)整,根據(jù)實(shí)際情況進(jìn)行調(diào)整.
前端
前端需要注意的地方主要是,驗證碼字段包含了input和img兩個元素,還有一個hidden的input來傳遞驗證碼id,這三個字段的布局可以通過setting中的設(shè)置或者自定義模板進(jìn)行修改.