IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 手机号获取验证码进行登录注册 -> 正文阅读

[Python知识库]手机号获取验证码进行登录注册

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

使用容联云获取验证码,进行用户登录+注册,获取手机验证码使用异步,使用token。


提示:以下是本篇文章正文内容,下面案例可供参考

一、准备工作

1、创建django项目,进行mysql数据库配置,导入创建的app,并在django项目中创建utils目录,在此目录下创建config.py文件用于存储短信验证码,并创建test_celery.py文件写入异步

config.py

# 消息中间人broker设置
broker_url = 'redis://:123456@127.0.0.1:6379/15' #不能写localhost
# 结果存储设置
backend_result_url = 'redis://:123456@127.0.0.1:6379/16'

broker 是代理人,它负责分发任务给 worker 去执行。我使用的是 Redis 作为 broker。没有设置 CELERY_RESULT_BACKEND,默认没有配置,此时 Django 会使用默认的数据库(也是你指定的 orm 数据库)。

test_celery.py

from celery import Celery
from django.conf import settings
import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'day0.settings')

app = Celery('day0')

app.config_from_object('utils3.config')

app.autodiscover_tasks(settings.INSTALLED_APPS)

关于异步详细参考官方文档 链接:link

2、访问容联云网站: 链接:link
  1. 获取自己的accID、accToken、appID
3、参考官方 Pyhon SDK文档:链接:link
from ronglian_sms_sdk import SmsSDK

accId = '容联云通讯分配的主账号ID'
accToken = '容联云通讯分配的主账号TOKEN'
appId = '容联云通讯分配的应用ID'

def send_message():
    sdk = SmsSDK(accId, accToken, appId)
    tid = '容联云通讯创建的模板ID'
    mobile = '手机号1,手机号2'
    datas = ('变量1', '变量2')
    resp = sdk.sendMessage(tid, mobile, datas)
    print(resp)

在utils中创建sms_code.py文件,写入SDK

from ronglian_sms_sdk import SmsSDK
import random
import redis
from utils.test_celery import app

accId = '填写自己的ACCOUNT SID'
accToken = '填写自己的AUTH TOKEN'
appId = '填写自己的AppID'


@app.task
def send_message(mobile):
    sdk = SmsSDK(accId, accToken, appId)
    tid = '1'
    data = random.randint(100000, 999999)
    cls = redis.Redis(host='localhost', port=6379, password='123456')
    cls.set('sms%s' % mobile, data, ex=300)
    datas = (data, '5')
    resp = sdk.sendMessage(tid, mobile, datas)
    print(resp)
    return resp

@app.task为异步

4、Token
  1. 在utils文件夹中创建my_jwt.py文件
  2. 写入代码
import jwt
from django.conf import settings


def generate_jwt(payload):
    token = jwt.encode(payload=payload, key=settings.SECRET_KEY)
    return token
5、模型类创建
class User(models.Model):
    mobile = models.CharField(max_length=11, verbose_name='手机号码')

    class Meta:
        db_table = 'day0920_user'
        verbose_name_plural = '手机验证码登录'

    def __str__(self):
        return self.mobile

二、后端接口创建

1.在views中导入需要的模块
from rest_framework.views import APIView
from rest_framework.response import Response
from day0920.models import User
from utils.sms_code import send_message
from utils.my_jwt import generate_jwt
import redis
2.获取验证码接口
class GetSMSCodeView(APIView):
    def get(self, request):
        mobile = request.query_params.get('mobile')
        send_message(mobile)
        return Response({
            'code': 200,
            'msg': '验证码发送成功'
        })
3.用户登录接口
class LoginUser(APIView):
    def post(self, request):
        mobile = request.data.get('mobile')
        smscode = request.data.get('smscode')
        if not all([mobile, smscode]):  # 校验前端传来数据的完整性
            return Response({
                'code': 400,
                'msg': '请输入账号或验证码'
            })
        cls = redis.Redis(host='127.0.0.1', port=6379, password='123456')
        redid_data = cls.get('sms%s' % mobile)  # 从redis中获取验证码
        if not redid_data:
            return Response({
                'code': 400,
                'msg': '验证码已过期'
            })
        if redid_data.decode('utf-8') != smscode:   # 将存入redis中的验证码转码与前端数据进行比较
            return Response({
                'code': 400,
                'msg': '验证码错误'
            })
        try:
            # 此时数据库中有此用户,直接登录
            User.objects.get(mobile=mobile)
            data_ = {
                'name': mobile
            }
            token = generate_jwt(data_)
            return Response({
                'code': 200,
                'msg': '登陆成功',
                'token': token
            })
        except Exception as e:
            # 数据库中无此用户,进行注册登录
            User.objects.create(mobile=mobile)
            data_ = {
                'name': mobile
            }
            token = generate_jwt(data_)
            return Response({
                'code': 201,
                'msg': '登陆成功',
                'token': token
            })
4.路由创建
  1. 主路由
"""day0 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('day/', include('day0920.urls'))
]

2.在app中创建接口的子路由

from django.urls import path
from .views import *
urlpatterns = [
    path('get_sms_code/', GetSMSCodeViews.as_view()),
    path('login_user/', LoginUser.as_view())
]

三.在vue中添加接口

1.前端准备工作

1.创建vue2项目
2.下载axios与elment-ui
3.elment-ui官方文档link

2.登录窗口
<template>
  <div>
    <table align="center">
      <tr>
        <td><h1>欢迎登陆</h1></td>
      </tr>
      <tr>
        <td>
          <el-input placeholder="请输入手机号" v-model="mobile"></el-input>
        </td>
      </tr>
      <tr>
        <td>
          <el-input placeholder="请输入验证码" v-model="smscode"
            ><el-button
              style="padding-right: 10px"
              slot="suffix"
              type="text"
              @click="getsms"
              >获取验证码</el-button
            ></el-input
          >
        </td>
      </tr>
      <tr>
        <td><el-button @click="login">登录</el-button></td>
      </tr>
    </table>
  </div>
</template>

在这里插入图片描述

3.验证码获取
getsms() {
      this.$axios
        .get("/day/get_sms_code/", {
          params: { mobile: this.mobile },
        })
        .then((result) => {
          console.log(result);
          if (result.data.code == 200) {
            this.$message(result.data.msg);
          }
        })
        .catch((err) => {
          console.log(err);
        });
    }
4.登录
login() {
      this.$axios
        .post("/day/login_user/", {
          mobile: this.mobile,
          smscode: this.smscode,
        })
        .then((result) => {
          console.log(result);
          if (result.data.code == 201 || result.data.code == 200) {
            this.$message(result.data.msg);
          } else if (result.data.code == 400) {
            this.$message(result.data.msg);
          }
        })
        .catch((err) => {
          console.log(err);
        });
    }

四.实践测试

1.输入手机号码

在这里插入图片描述

2.点击获取验证码

在这里插入图片描述

此时后端接收的验证码

在这里插入图片描述

手机接收的验证码

在这里插入图片描述

点击登录

在这里插入图片描述

此时后端提示为200,因为这个手机号码登陆过,所以是已存在直接登录

在这里插入图片描述

mysql数据库

在这里插入图片描述

此时更换新手机号进行注册登录

在这里插入图片描述

后端接收的验证码

在这里插入图片描述

因为此手机号没有在容联云中添加测试号码,所以不会以短信形式发送

在这里插入图片描述

提示201,表示以注册并登录,此时数据库

在这里插入图片描述

总结

  1. 创建前后端项目
  2. 后端项目中写入容联云SDK、异步、Token
  3. 创建模型
  4. 编写获取验证码与登录接口
  5. 前端编写登录模板
  6. 获取手机号验证码按钮与登录按钮绑定点击事件并写入后端接口
  7. 完成测试
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:53:29  更:2022-09-24 20:54:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 14:08:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计