一,业务逻辑分析
二,接口的实现
1,注册子应用verifications实现此功能,到项目app目录中,使用django-admin startapp verifications
2,在主应用中注册视图(可有可无,因为此子应用没有模板和迁移功能)
3,在子应用中新建urls,和主目录连接起来
主应用的urls代码块
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url('admin/', admin.site.urls),
url(r'^',include('verifications.urls'))
]
子应用urls代码块
from django.conf.urls import url
from meiduo_project.apps.verifications import views
urlpatterns=[
# 图形验证码
url(r'^image_codes/(?P<uuid>[\w-]+)$', views.ImageCodeView.as_view()),
]
uuid代表的是图形验证码的唯一标识,作为接口实现的参数进行传递,标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)
正则表达式采取匹配uuid的字符串形式,即字符加‘-’,匹配出来传递到redis数据库作为key,
后端逻辑实现
from django.shortcuts import render
from django_redis import get_redis_connection
from verifications.libs.captcha.captcha import captcha
# Create your views here.
from django.views import View
from django import http
class ImageCodeView(View):
def get(self, request, uuid):
# 接收参数
# 校验参数
# 实现主体业务
# 生成图形验证码
text, image = captcha.generate_captcha()
# 保存图形验证码
redis_conn = get_redis_connection('verify_code')
# redis_conn.setex('key', 'expires', 'value')
redis_conn.setex('img_%s' % uuid, 300, text)
# 响应图形验证码
# return http.HttpResponse('响应体','数据类型')
return http.HttpResponse(image, content_type='image/jpg')
需要准备一个拓展包,需要一个拓展包captcha,进行图像的处理,在子应用下创建包libs,放入,并pip下载Pillow库,用于python图像处理
保存图形验证码,是将使用capcha生成的,保存到redis数据库中,在项目的setting中配置