django captcha使用
安装:pip install django-simple-captcha
setting:
url配置(使用的django1.11.29的版本,2.0版本使用path):
然后同步数据库表:
python manage.py makemigrations
python manage.py migrate
定义验证码生产公共方法:
from captcha.helpers import captcha_image_url from captcha.models import CaptchaStore def create_captcha(): to_json_response = dict() to_json_response['status'] = 1 to_json_response['new_captcha_key'] = CaptchaStore.generate_key() to_json_response['new_captcha_image'] = captcha_image_url(to_json_response['new_captcha_key']) return to_json_response
form:
class ForgetPasswordForm(forms.Form): email=forms.CharField(required=True) captcha=CaptchaField(label='验证吗') def clean(self): clean_data=super().clean() captcha_data=clean_data.get('captcha') email=clean_data.get('email') user=User.objects.filter(Q(email=email)| Q(username=email)) if not user: raise forms.ValidationError('邮箱不存在,重新输入') if captcha_data is None: raise forms.ValidationError('验证码有误请重新输入') return clean_data
html:
<div class="weui-cell weui-cell_vcode"> <div class="weui-cell__hd"><label class="weui-label">验证码</label></div> <div class="weui-cell__bd"> <input class="weui-input" type="text" name="captcha_1" placeholder="请输入验证码"> </div> <div class="weui-cell__ft"> <input type="hidden" name="captcha_0" value="{{ captcha.new_captcha_key }}"> <img class="weui-vcode-img" id="login-vcode-img" src="{{ captcha.new_captcha_image }}"> </div> </div>
views:
def forget_password(request): if request.method=='POST': form=ForgetPasswordForm(request.POST) print(request.POST) if form.is_valid(): request.session['email']=request.POST['email'] return redirect('user:reset_password') else: form=ForgetPasswordForm() return render(request,'forget_password.html',{'captcha':create_captcha(),'form':form})