【DRF+Django】微信小程序入门到实战_day03(下)

 (0)摘要

# 课程链接

入门到实战,讲讲公司的微信小程序【django+drf+小程序实战】_哔哩哔哩_bilibili

# 微信开发者文档

微信开放文档

# 课程内容

(1)P28_发送短信验证码流程

(2)P29_腾讯云短信使用


(1)P28_发送短信验证码流程

# (1)验证码初步

                1)首先是布置一下前端的界面,然后我们想要把 "点击获取验证码" 注册为一个事件,具体思路就是,点击后,就会往后台发送一个 get 请求来获取验证码。

                2)然后是 js 代码,注意data 处。

                但是我们要获取验证码,首先要求的是必须先填入合法的手机号,所以我们需要在前面加一个判断(这只是初步判断),比如是不是输入了 11 位。如果没有输入到 11 位数的话,就会报错并且直接 return,即后续代码不执行。

                3)wx.showToast(Object object) 官方api,可以理解为这个是给一个弹窗的,比如成功的弹窗、失败的弹窗、等待的弹窗等待。那么以下是相应的文档信息,详细的讲解如下:

                title:这个就是返回的弹窗中的内容,比如我们的是手机号长度错误。

                icon:是图标,默认是成功。也可以是其他值,详情可以看文档。

                image:是自定义的图标,优先级高于 icon。

                duration:就是弹窗持续的时间。

                mask:简单理解就是弹窗之后,直接让当前界面的交互失灵。

                后面的三个,和之前的是一样的。


# (2)正则匹配手机格式

                1)前面我们限制了手机号的位数必须是 11 位,但是没有限制必须是数字。因为用户也可能输入各种其他字符,这是不允许的。因而可以使用 js 中的正则表达式。(当然,限制数字的话,也要限制开头是130、156等待正常的开头),具体的书写方式如下所示,当然了,对于正则表达式而言,我们还是要学会现查现用。

                2)那么我们在后台的代码可以尝试获取一下


# (3)基于 django 视图类的验证流程

                1)首先是明确整个流程,后台接收到前台传来的手机号,然后进行校验等等一系列步骤如下。

                 

                这里需要提一下第 5 个步骤,就是发送验证码+手机号。有效期保留 30s(据说超出 30s 就要收费了),因为要存在服务器端,所以这里我们最好使用 redis 去做。redis 的一些用法如下,后续具体实践的时候我们再说。

                2)那么获取手机号就不说了,直接开始写手机号的正则校验即可。思路很简单,就是利用 re.match() 模块来做。 然后如果匹配不成功,返回的是 None,那么直接就返回手机号格式错误,当然了,这只是一种方法。

                3)校验手机号还有一种实现的方法,就是使用 drf 的序列化来做。如下所示,这是继承自 serializers.Serializer 类来做的(之前用过 serializers.ModelSerializer ,但是这是需要设计相应的数据库的,显然我们的获取的号码没有存储它的数据库,所以不用这个。)

                 

                4)我们应用的时候就是下面的红框的代码所示,先是实例化我们自定义序列化的类,然后传参 data=request.query_params,然后使用 ser.is_valid() 来进行校验。但是我们只是校验的规则只是检测是否为空,我们可以自定义加上校验的规则。

                5)那么具体的序列化的办法就是,首先我们是定义一个校验规则,比如我们简单点,我们只是定义,写个 pass 即可。

                然后验证的时候,我们在 serializers.CharField() 中添加一个 validators 属性,只要把我们自定义的校验办法添加进去即可,这是固定写法。亦即这样 serializers.CharField(label="手机号",validators=[phoneNum_validator,]) 。那么之后 ser.is_valid() 校验的时候,首先会验证字段是不是为空,然后再去使用这个序列化的校验规则,也就是执行 phoneNume_validator 这个函数。

                6)结合上面的思路,我们就可以来做正则匹配了。如下所示。可以看到代码比之前的复杂了,但是我们相当于封装了一个序列化的校验规则,后续需要的时候可以复用。

                7)一些细节,就是钩子函数的校验。这个钩子函数也是可以用来做校验规则的,但是整个执行流程是这样的,首先是执行默认的 label 规则(就是能不能为空),然后去执行我们自定义的序列化规则,也就是放在 serializers.CharField() 中的 validators 属性中,即下面的 phoneNum_validator(value) ,最后才是执行钩子函数 validate_phoneNum() 的内容(如果有定义的话)。【这里提一下,传参 value 就是传进来的 phoneNum 】

                8)我们做一个错误数据来测试一下,可以看到返回的错误信息

                9)生成随机验证码和发送验证码给用户的代码如下:


# (4)基于 django 视图类的验证流程之 redis 专栏

                1)redis 的一个基本使用,或者说是构建一个 redis 的前提。其实就是一个小案例,但是这里也只是引出来。

                2)但是在 django 中,给我们进一步封装了 redis 的一个模块,就是 django-redis 模块,安装直接可以用 pip 来安装。以下是使用的一个流程,暂且先了解。

               

                3)安装完成 django-redis 后,要去 settings.py 去配置一下。

               

                4)那么使用就是下面这样的,就记住先,后续再详解了。

                5)该视图类的完整代码如下:

import re
from rest_framework import serializers

def phoneNum_validator(value):
    reg = r"^(1[3|4|5|6|7|8|9])\d{9}$"   # 这里定义一下正则的规则

    # 显然没通过就抛出一个异常
    if not re.match(reg, value):
        from rest_framework.exceptions import ValidationError       # 这是 drf 的错误,我故意放这的

        raise ValidationError("手机格式错误")
    # 如果通过了,那么默认是返回的 None


class GetCodeSerializer(serializers.Serializer):
    # 基于 serializers.Serializer 类的自定义的字段
    # label 其实默认了不能为空
    phoneNum = serializers.CharField(label="手机号", validators=[phoneNum_validator, ])

    # # 钩子函数这是定义的
    # def validate_phoneNum(self, value):
    #     pass

# 重构一个我们的代码
class GetCode(APIView):

    def get(self, request, *args, **kwargs):

        # 1. 首先要使用正则模块校验手机号,然后才能继续获取验证码
        ser = GetCodeSerializer(data=request.query_params)
        # 2. 如果校验没通过那么直接返回错误的信息
        if not ser.is_valid():

            return HttpResponse({"status": False, "msg": "手机格式错误"})

        # 3. 显然我们校验成功后,数据就放在了 ser.validated_data 中,所以我们可以通过 ser.validated_data.get() 来取得号码
        phoneNum = ser.validated_data.get("phoneNum")

        # 4. 生成验证码
        import random
        random_code = random.randint(1000, 9999)

        # 5. 然后将生成的验证码 random_code 发送到手机上面,这里需要购买相应的服务,只需要朝相应的 api 发请求就可以得到验证码了
        # 一般买的是阿里云/腾讯云的服务,前者居多,但是微信小程序自然是选择腾讯云啦。


        # 6. 保留验证码+手机号,并且保留30秒。
        # 这里我们使用 django-redis 来做
        from django_redis import get_redis_connection
        conn = get_redis_connection()   # 创建链接
        conn.set(phoneNum, random_code, ex=30)      # 保留手机号和验证码,以及保留时间 30 秒

        ret = {
            "status": True,
            "msg": "发送成功"
        }

        return JsonResponse(ret)


(2)P29_腾讯云短信使用

# (1)腾讯云短信的注册和试用

                1)首先我们打开以下的链接:短信_文本短信_通知短信_营销短信_验证码短信 - 腾讯云  ,然后就可以看到如下的界面,我们点击免费试用。

                点击了免费试用后,就会跳出如下的界面。我们首先先登录,如果是用微信登录的话,一般是要关联账户的,比如我们关联的是公众号管理平台的账户。 

                关联完成后,会要求我们勾选相应协议,和认证类型,接着就是点击接入了,我们只是用来学习,所以试用个人认证即可。

                接入成功后,就是领取到了100 条免费国内短信了。 

                2)在完成了上述的步骤后,我们就可以来到如下的界面。


# (2)创建应用程序

                1)紧接着,我们要新建一个应用程序。如下所示,在左边的选项栏中,选择应用管理下的应用列表,然后选择创建应用。

               

                2)那么我们创建好之后,只需要记住 SDK AppID 的值就可以了。


# (3)签名管理【武sir 教我们避坑了】

                1)完成了应用程序的创建之后,我们就要申请签名管理了,如下图所示,先是在左侧的选项框中找到国内短信,然后选择签名管理。

                2)那么点击创建签名后,就是如下的界面了,具体的信息填写和解释如下。

                3)那么这一块我们需要的数据就是 ID 和签名内容,如下所示:


# (4)创建正文模板

                1)我们创建完签名后,就要开始创建正文模板了,还是在国内短信下面,点击正文模板管理。这个就是我们发短信的时候显示的东西。 

                2)具体的创建内容如下,然后点击确定后,就可以等待审核了,这个会比签名管理的审核容易点。

                3)在正文模板这里,我们需要的数据的 ID 和模板类型。 如下所示


# (5)申请腾讯云 API

                1)首先打开网址登录 - 腾讯云 ,然后会出现一个弹窗,我们选择继续使用即可。我们可以看到,左边的菜单栏变了,显然这是另一个控制台。紧接着我们点击新建密钥,就可以有以下的一串密钥,分别是 SecretId 和 SecretKey 两个,这个是我们后续调用 API 要用的。 


# (6)调用相关接口去发送短信---使用腾讯的 python SDK 来做

                1)一般而言,如果某种语言没有相应的 SDK 来处理请求的传参的时候,就需要我们自己手动的去写。但是如果平台提供了对应语言的 SDK 包,那么我们就只需要考虑输出即可,相当于传参的排序和加密等等的操作对我们来说都是透明的。腾讯云的短信验证是提供了 python 的 SDK 包的,我们打开文档的链接:短信 发送短信-API 文档-文档中心-腾讯云 , 就有如下所示。【但是不推荐使用这个方法了】

                2)推荐的方法。自从 API 3.0 以上后,官方是推荐如下的方式,也就是直接打开链接:短信 Python SDK-SDK 文档-文档中心-腾讯云  ,根据这个文档信息开始操作学习即可。

#

【补充知识】

# (1)python 的 re 模块


#

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DRFDjango Rest Framework)是一个用于构建 Web API 的强大框架,而微信小程序是一种基于微信平台的应用程序。下面是一个 DRF 微信小程序开发示例: 1. 创建 Django 项目和应用程序 首先,我们需要使用 Django 创建项目和应用程序。在终端中输入以下命令: ``` django-admin startproject myproject cd myproject python manage.py startapp myapp ``` 2. 创建 DRF 视图 创建一个名为 views.py 的文件,并添加以下代码: ```python from rest_framework.views import APIView from rest_framework.response import Response from django.http import HttpResponse class MyView(APIView): def get(self, request): return Response({'message': 'Hello World!'}) def post(self, request): return Response({'message': 'Received POST request!'}) ``` 这里我们创建了一个名为 MyView 的 DRF 视图,该视图包含 get 和 post 方法。 3. 配置 URL 在应用程序的 urls.py 文件中,添加以下 URL 配置: ```python from django.urls import path from myapp.views import MyView urlpatterns = [ path('api/', MyView.as_view()), ] ``` 这里我们配置了一个名为 api 的 URL,该 URL 将映射到 MyView 视图。 4. 创建微信小程序 在微信开发者工具中创建一个新的小程序项目,设置相关配置并获取 AppID。 5. 编写小程序代码 在小程序的 app.js 文件中,添加以下代码: ```javascript App({ onLaunch: function () { console.log('App launched') }, }) ``` 这里我们定义了一个名为 onLaunch 的函数,该函数在小程序启动时被调用。 在小程序的 index.js 文件中,添加以下代码: ```javascript Page({ onLoad: function () { wx.request({ url: 'https://example.com/api/', method: 'GET', success: function (res) { console.log(res.data) } }) }, }) ``` 这里我们定义了一个名为 onLoad 的函数,该函数在小程序加载时被调用,并使用 wx.request 方法向我们创建的 DRF 视图发送 GET 请求。 6. 运行 DRF 服务器和小程序 在终端中输入以下命令以启动 DRF 服务器: ``` python manage.py runserver ``` 在微信开发者工具中运行小程序并查看控制台输出。如果一切正常,你应该能够看到来自 DRF 视图的响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值