Django验证码captcha实战介绍

旧城等待, 2022-03-02 11:58 475阅读 0赞

今天给大家介绍Django如何利用captcha生成验证码

1、看一下效果图

在这里插入图片描述

2 查看captcha开发框架的介绍和基本使用情况

captcha官方介绍链接 点击进入
在这里插入图片描述
这是我在官方介绍上截取的一段信息,读者也可以点击官方链接去查看信息,首先我们来分析上面图片的内容
1,安装库 pip install django-simple-captcha想必只要有python基础的人都知道
2,将captcha添加到app库中,请看下面

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'users',
  9. 'courses',
  10. 'operations',
  11. 'organizations',
  12. 'xadmin',
  13. 'crispy_forms',
  14. # 也就是下面的这个
  15. 'captcha'
  16. ]

3, 执行迁移,想必不用多介绍 和数据库迁移一样

  1. python manage.py migrate

4, 配置url文件

  1. # 这个是注册页面的url name用于反向解析
  2. path('register/', views.Registeriew.as_view(), name="register"),
  3. # captcha在运行时会时一个app,使用include,直接这样写就可以了
  4. path('captcha/', include('captcha.urls'))

5,Form表单文件
Form表单文件主要是对POST请求数据进行第一次过滤,不满足要求信息 例如长度不够,格式不符合要求的我们不进行查找,不查找数据库,满足要求后在进行数据库的查询

  1. class RegisterForm(forms.Form):
  2. # email和password时post请求的两个数据
  3. email = forms.EmailField(required=True)
  4. password = forms.CharField(required=True, min_length=5)
  5. # 创建一个CaptchaField对象
  6. captcha = CaptchaField()

6, View视图文件
在视图文件中,我们定义了get和post请求函数,,我们在返回视图前创建RegisterForm

  1. class Registeriew(View):
  2. def get(self,request):
  3. # 创建 RegisterForm
  4. register_from = RegisterForm()
  5. # 将register_from传递到html文件当中
  6. return render(request, "register.html", { "register_from": register_from})
  7. def post(self,request):
  8. return render(request, "register.html", { })

7,html文件

  1. <div class="form-group marb8 captcha1 {% if register_form.errors.captcha %}errorput{% endif %}">
  2. <label>验 证 码</label>
  3. <!--在验证码后面将register_from的captcha传递过来即可-->
  4. {
  5. { register_from.captcha }}
  6. </div>

基本的使用就以上的步骤

3、 官网解释

  1. def some_view(request):
  2. if request.POST:
  3. form = CaptchaTestForm(request.POST)
  4. # Validate the form: the captcha field will automatically
  5. # check the input
  6. if form.is_valid():
  7. human = True
  8. else:
  9. form = CaptchaTestForm()
  10. return render_to_response('template.html',locals())

这是官网上的一段form的代码,其实也就是将请求传递进去,先检验用户名等输入时候格式正确,然后利用locals()将参数传递到HTML文件中

  1. from django.views.generic.edit import CreateView
  2. from captcha.models import CaptchaStore
  3. from captcha.helpers import captcha_image_url
  4. from django.http import HttpResponse
  5. import json
  6. class AjaxExampleForm(CreateView):
  7. template_name = ''
  8. form_class = AjaxForm
  9. def form_invalid(self, form):
  10. if self.request.is_ajax():
  11. to_json_response = dict()
  12. to_json_response['status'] = 0
  13. to_json_response['form_errors'] = form.errors
  14. to_json_response['new_cptch_key'] = CaptchaStore.generate_key()
  15. to_json_response['new_cptch_image'] = captcha_image_url(to_json_response['new_cptch_key'])
  16. return HttpResponse(json.dumps(to_json_response), content_type='application/json')
  17. def form_valid(self, form):
  18. form.save()
  19. if self.request.is_ajax():
  20. to_json_response = dict()
  21. to_json_response['status'] = 1
  22. to_json_response['new_cptch_key'] = CaptchaStore.generate_key()
  23. to_json_response['new_cptch_image'] = captcha_image_url(to_json_response['new_cptch_key'])
  24. return HttpResponse(json.dumps(to_json_response), content_type='application/json')

上面是ajax请求表单的例子,运行程序访问,即可达到最上面图片的效果

发表评论

表情:
评论列表 (有 0 条评论,475人围观)

还没有评论,来说两句吧...

相关阅读