django项目注册发送短信验证码

Django学习第十四天

现在较为主流网站的注册页面中,通常会有要求输入手机号和图形验证码,当图形验证码正确时发送短信验证码,输入短信验证码正确后才能完成注册。

后端实现逻辑

生成图形验证码可以看我之前的博客:如何生成图形验证码
将生成的验证码存入redis数据库(配置redis数据库)并生成一个uuid作为键

conn = get_redis_connection('default')
conn.setex(name=uuid,time=300,value=a) # 存入{uuid:a}的键值对,并设置300秒的过期时限

rest_framework

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

发送get请求,获取成功,显示验证成功
验证成功

短信验证

这边使用的为容联·云通讯的短信发送平台(因为他家的可以白嫖,注册送金额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的学习,如有错误之处,请大牛见谅指出

posted @ 2018-12-25 17:01  一颗大白菜_20181203  阅读(954)  评论(0编辑  收藏  举报