Django auth通过simple-captcha实现验证码,并利用ajax实现验证码刷新

首先通过pip安装simple-captcha

pip install  django-simple-captcha

将captcha添加到settings.py的INSTALLED_APPS

在路径urls.py中配置路径

将验证码数据迁移到数据库,这是数据库会多一个captcha_captchastore存储验证码信息的表

python manage.py migrate

添加验证码到我们的注册表单,记得导入from captcha.fields import CaptchaField

修改相应label和error_message定义自己的需求

此时进入网站注册页面已经可以看到验证码,但是点击无法刷新,在此我们利用ajax实现刷新

在前端添加jQuery

      $(function() {
        $(".captcha").click(function () {
          $.getJSON("{% url 'movie:signup' %}",function(result){
            $('.captcha').attr('src', result.image_url);
            $('#id_captcha_0').val(result.key);
          });
      });
      });

请求url的view中,比如我的是signup中,记得导入from captcha.models import CaptchaStore 和 from captcha.helpers import captcha_image_url

def signup(request):
    if request.is_ajax(): #请求ajax则返回新的image_url和key
        result = dict()
        result['key'] = CaptchaStore.generate_key()
        result['image_url'] = captcha_image_url(result['key'])
        return JsonResponse(result)
    if request.method == 'POST':

        form = RegisterForm(request.POST)
        if form.is_valid():
            form.save()
            user = authenticate(username=form.cleaned_data['username'],
                                password=form.cleaned_data['password1'])
            login(request, user) #注册成功后自动登录
            return redirect(reverse('movie:index'))
    else:
        form = RegisterForm()

    return render(request, 'registration/signup.html', context={'form': form})

 此时前端就可以点击验证码刷新

猜你喜欢

转载自www.cnblogs.com/abczqy/p/10779647.html
今日推荐