• 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的学习,如有错误之处,请大牛见谅指出

  • 相关阅读:
    Python使用inspect查看代码参数
    Python的hasattr() getattr() setattr()
    Module-GitBook使用手册
    Module-Hadoop技术文档
    Module-Git使用手册
    Module-Faker使用手册
    Module-Docker使用手册
    Module-DB2技术文档
    Module-Dask并行任务调度
    Module-Apache使用说明
  • 原文地址:https://www.cnblogs.com/big-cabbage/p/10300362.html
Copyright © 2020-2023  润新知