现在较为主流网站的注册页面中,通常会有要求输入手机号和图形验证码,当图形验证码正确时发送短信验证码,输入短信验证码正确后才能完成注册。
生成图形验证码可以看我之前的博客:如何生成图形验证码
将生成的验证码存入redis数据库(配置redis数据库)并生成一个uuid作为键
conn = get_redis_connection('default')
conn.setex(name=uuid,time=300,value=a) # 存入{uuid:a}的键值对,并设置300秒的过期时限
rest_framework作为django前后端分离项目的核心,主要作用为序列化数据,反序列化数据,以及校验数据。可以通过pip在cmd终端中下载。官方文档
在apps/user文件夹中新建一个serializers文件。
apps/user/serializers.py
from rest_framework import serializers
from django_redis import get_redis_connection
class MsgCodeSerializer(serializers.Serializer):
'''定义需要校验的数据类型'''
imagecode_id = serializers.UUIDField()
image_string = serializers.CharField(max_length=3,min_length=3)
def validate(self, attrs):
print('传递过来的数据',attrs)
imagecode_id = str(attrs['imagecode_id']) # 从网页中传过来的值为byte类型需要转为字符串类型
image_string = attrs['image_string'].encode('utf-8')
print(type(imagecode_id))
conn = get_redis_connection('default')# 连接redis数据库
true_string = conn.get(imagecode_id)# 从redis数据库中取值
print(true_string)
if not true_string or image_string != true_string:
raise serializers.ValidationError('验证码错误')
if image_string == true_string:
print('验证通过')
return attrs
建立串行器后,即可在views类中编写逻辑
apps/user/views.py
class MsgCodeView(APIView):
def get(self,request,phone):
print(request.query_params)
ser = MsgCodeSerializer(data=request.query_params)
ser.is_valid(raise_exception=True)
return HttpResponse('ok')
apps/user/urls.py
配置路由
from django.conf.urls import url,include
from . import views
urlpatterns = [
url(r'^msg_code/(\d+)',views.MsgCodeView.as_view())
]
开启django服务器,使用postman测试。
网址:127.0.0.1:8000/user/msg_code/123456789?imagecode_id=01c5a504-a201-4014-87da-699b7227c771&image_string=MEZ
这边使用的为容联·云通讯的短信发送平台(因为他家的可以白嫖,注册送金额8块,可以发不少呢,作为学习用再合适不过了)
首先注册账号,账号需要接手机的语音验证码。注册完毕后,进入到管理控制台主页面可以看到开发者主账号的各种参数。可以在容联云的官方网站上查看如何使用以及配置各种参数。
将下载的demo中的文件放置在django项目中(笔者的习惯是新建一个until工具文件夹作为储存位置)接下来就是在views中调用接口就行了
from until.yuntongxun.sms import CCP
msg_num = random.randint(100000,999999)
ccp = CCP()
print(ccp.send_template_sms('17858150687',[msg_num,1],1)) # 发送成功返回0 发送错误返回的错误码详细的在官方文档中有介绍
笔者目前才刚刚开始django的学习,如有错误之处,请大牛见谅指出