环境说明:
- 系统:Windows10
- 开发工具:Pycharm
- Python版本:3.5
1. 创建Django基础工程
直接使用Pycharm创建,当然你也可能使用命令行方式来创建Django工程,如图正常在浏览器里面能运行起来说明工程创建成功
2. 给虚拟环境安装django自带验证码插件包
- 安装方法如下
<code># pip install django-simple-captcha (0.5.12)/<code>
- 不过在Windows下可以直接使用Pycharm来安装
3. 核心代码
- 添加验证码App,文件Demo/settings.py
<code>INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app.apps.AppConfig', 'captcha' ] # 需要屏蔽csrf,会影响post请求 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]/<code>
- 添加路由,Demo\urls.py
<code>from django.conf.urls import url, include from django.contrib import admin from app.views import refresh_captcha, Check urlpatterns = [ url(r'^admin/', admin.site.urls), # Django验证码插件注册,不能删除 url(r'^captcha', include('captcha.urls')), # 获取验证码或者刷新验证码接口 url(r'^refresh_captcha$', refresh_captcha), # 校验验证码是否正确 url(r'^check_captcha$', Check.as_view()), ]/<code>
- 在app里面新建service.py,添加下面核心代码
<code>from captcha.helpers import captcha_image_url from captcha.models import CaptchaStore from django.utils import timezone def captcha(): """ 创建验证码 :return: """ hash_key = CaptchaStore.generate_key() # 验证码答案 image_url = captcha_image_url(hash_key) # 验证码地址 return {'hash_key': hash_key, 'image_url': image_url} def check_captcha(captcha_str, captcha_hash_key): """ 验证验证码 :param captcha_str: :param captcha_hash_key: :return: """ if captcha_str and captcha_hash_key: try: # 获取根据hashkey获取数据库中的response值 get_captcha = CaptchaStore.objects.get(hashkey=captcha_hash_key) if get_captcha.response == captcha_str.lower(): # 如果验证码匹配 if get_captcha.expiration > timezone.now(): return True, "验证成功" else: return False, "验证码过期" except: return False, "验证码错误" return False, "验证码错误" /<code>
- 添加视图,app\views.py
<code>import json from django.http import HttpResponse, JsonResponse from django.shortcuts import render # Create your views here. from django.views import View from app.service import captcha, check_captcha def refresh_captcha(request): """ 刷新验证码、获取验证码 :param request: :return: """ results = {'status': 0, 'msg': '获取成功', 'data': captcha()} return HttpResponse(json.dumps(results), content_type='application/json') class Check(View): """验证码校验""" def post(self, request): results = {'status': 1, 'msg': '校验失败'} try: data = json.loads(request.body.decode()) captcha = data['captcha'] hash_key = data['hash_key'] status, msg = check_captcha(captcha, hash_key) results = {'status': 0 if status else 1, 'msg': msg} except Exception as error: print(error) return JsonResponse(results) /<code>
4. 测试效果
- 使用postman获取验证码
- 查看图形验证码
- 验证码校验,验证码提示:验证码成功、验证码错误、验证码过期
5. 其他配置
[官网文档地址] https://django-simple-captcha.readthedocs.io/en/latest/
具体细节阅读官网文档内容,模式有好几种:普通验证码校验、单词模式、计算模式等
<code> # Django图形验证码配置 # 字母验证码 # 设置 captcha 图片大小 CAPTCHA_IMAGE_SIZE = (150, 45) # 字体大小 CAPTCHA_FONT_SIZE = 36 # 字符个数 CAPTCHA_LENGTH = 4 # 超时(minutes) CAPTCHA_TIMEOUT = 10 # 验证码的背景颜色 CAPTCHA_BACKGROUND_COLOR = '#ffffff' # 字体路径 CAPTCHA_FONT_PATH = './conf/Phosphate-Inline.ttf' # 加减乘除验证码 # CAPTCHA_OUTPUT_FORMAT = '%(image)s %(text_field)s %(hidden_field)s ' # CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_null', # 'captcha.helpers.noise_arcs', # 线 # 'captcha.helpers.noise_dots', # 点 # ) # CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'/<code>