setting配置

# 配置jwt的全局认证
REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES':['rest_framework_jwt.authentication.JSONWebTokenAuthentication']
}from datetime import timedelta
JWT_AUTH = {# jwt过期时间'JWT_EXPIRATION_DELTA': timedelta(days=3),# 配置返回数据的处理器'JWT_RESPONSE_PAYLOAD_HANDLER':'users.utils.jwt_response_payload_handler'
}AUTH_USER_MODEL = 'users.User'# django的认证 使用重写的方法认证用户
AUTHENTICATION_BACKENDS = ['users.utils.MyAuthentication',
]#容联云的配置
from ronglian_sms_sdk import SmsSDK
ACCID = '8aaf07087f77bf96017fddbef0593317'
AUTHTOKEN = 'a3da9527d560414ea27e2b0403d02a62'
APPID = '8aaf07087f77bf96017fddbef145331e'

models模型类

from django.db import modelsfrom django.contrib.auth.models import AbstractUser# 用户模型类
class User(AbstractUser):phone = models.CharField('手机号',max_length=11,unique=True,null=True,blank=True)last_login = models.DateTimeField('上次登录',null=True,blank=True)
# 配置文件里的unique = "true"的作用是:
# 若指定为True,则重复出现的记录仅保留一条;若指定为False,则筛选出所有符合条件的记录。默认值为False
# null = True是针对数据库而言,表示数据库的该字段可以为空
# blank = True是针对表单的表示你的表单填写该字段的时候可以不填def __str__(self):return self.usernameclass Meta:db_table = 'user'verbose_name_plural = '用户表'views视图函数
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
import redis
from users.models import User
import string
import random
from captcha.image import ImageCaptcha
from django.http import HttpResponse
class GenImageCode(APIView):def get(self,request,uuid):aplha_num = string.ascii_letters + string.digitsimg_code = ''.join(random.sample(aplha_num,4))img_cap = ImageCaptcha()img_code_cap = img_cap.generate(img_code)key = 'img%s'%uuidr = redis.Redis(host='localhost',db=0,password='123',port=6379)r.set(key,img_code,ex=300)r.close()return HttpResponse(img_code_cap,content_type='image/png')class CheckImageCode(APIView):def post(self,request):uuid_ = request.data.get('uuid')image_code = request.data.get('agree')key = 'img%s'%uuid_r = redis.Redis(host='localhost',password='123',db=0,port=6379)stored_image = r.get(key)if not stored_image:return Response({'code':401,'msg':'验证码已经过期'})if stored_image.decode().lower() == image_code.lower():return Response({'code':200,'msg':'验证成功'})else:return Response({'code':400,'msg':'验证码错误'})class Register(APIView):def post(self,request):username = request.data.get('username')password = request.data.get('password')phone = request.data.get('mobile')agreement = request.data.get('agree')print(username,password,phone,agreement)if not all ({username,password,phone,agreement}):return Response({'code':204,'msg':'用户信息不完整'})User.objects.create_user(username=username,password=password,phone=phone)return Response({'code':200,'msg':'创建成功'})from .utils import send_message
import random
# 发送短信的视图
class SmsAPIView(APIView):def post(self,request):# 1. 获取前端数据mobile = request.data.get('mobile')uuid_ = request.data.get('uuid')# 2. 生成一个短信验证码sms_code = '%d'%random.randint(10000,99999)#2.5 存贮短信验证码r = redis.Redis(host='localhost',db=0,password='123',port=6379)r.set(uuid_,sms_code,ex=300)# 3. 请求容联云发送短信res = send_message(sms_code,mobile)# 判断if res:return Response({'code':200,'msg':'发送短信成功'})else:return Response({'code': 400, 'error': '发送短信失败'})# 验证短信验证码
class SmsVerifyAPIView(APIView):def post(self,request):sms_code = request.data.get('sms_code')uuid_ = request.data.get('code_id')# 2. 查询redis,拿出存储的短信验证码r = redis.Redis(host='localhost',db=0,password='123',port=6379)stored_sms_code = r.get(uuid_)# 3. 判断if stored_sms_code and stored_sms_code.decode() == sms_code:return Response({'code':200,'msg':'验证码正确'})else:return Response({'code':400,'error':'验证码错误'})

utils

def jwt_response_payload_handler(*args,**kwargs):print('args',args)print('kwargs',kwargs)token,user,request = argsreturn {'code':200,'username':user.username,'user_id':user.id,'token':token}from django.contrib.auth.backends import ModelBackend
from users.models import User
from django.contrib.auth.hashers import check_password
from django.db import models# 重写MyAuthentication进行验证权限
class MyAuthentication(ModelBackend):def authenticate(self, request, username=None, password=None, **kwargs):# 查询用户对象user = User.objects.filter(models.Q(username=username) | models.Q(phone=username)).first()# 判断用户 、密码、是否管理员if user and check_password(password,user.password) and  user.is_staff:return userelse:return Nonefrom django.conf import settings
from ronglian_sms_sdk import SmsSDK
import json# 发送短信
def send_message(sms_code,mobile,expire=5):# 实例化sdksdk = SmsSDK(settings.ACCID,settings.AUTHTOKEN,settings.APPID)# 组织数据tid = '1'mobile = '%s'%mobiledatas = ('%s'%sms_code,'%s'%expire)# 发送短信并接受响应res = sdk.sendMessage(tid=tid,mobile=mobile,datas=datas)# 解析响应print('发送短信',res,type(res))res_dict = json.loads(res)if res_dict.get('statusCode') == '000000':return Trueelse:return False

路由

from django.contrib import admin
from django.urls import path
from .views import *
from rest_framework.routers import DefaultRouter
from rest_framework_jwt.views import obtain_jwt_tokenrouter = DefaultRouter()urlpatterns = [path('login/',obtain_jwt_token),# 发送短信验证码path('sms_code/',SmsAPIView.as_view()),# 验证短信验证码path('phone_verify/',SmsVerifyAPIView.as_view()),path('image_code/<str:uuid>/',GenImageCode.as_view()),path('yanzheng/',CheckImageCode.as_view()),path('register/',Register.as_view()),]
urlpatterns += router.urls

容联云发送短信验证码相关推荐

  1. Django使用容联云发送短信验证码时提示:172001,网络错误

    尝试用django连接容联云发送短信验证码,运行时出现了以下提示:{'172001':'网络错误'}:在网上查阅资料后得知,是因为python升级到2.7.9之后引入了一个新特性,当打开一个https ...

  2. Go语言初识应用--容联云发送短信验证码、手机号注册

    使用gin框架.gorm映射 所使用的连接容联云参考容联云官方文档,放置到utils中, gin项目结构根据自身需要,大题如下设置: utils--sms.go package main import ...

  3. flask容联云发送短信验证码和异步发送

    容联云地址:https://www.yuntongxun.com/ 获取短信验证码流程图 容联云配置 在容联云官网注册一个账号,发送短信验证码必须使用三个ID ACCOUNT SID   (主账户ID ...

  4. luffcc项目-06-使用容联云发送短信、Celery

    一.使用容联云发送短信 https://www.yuntongxun.com/ 目录结构 sms.py import json from .SmsSDK import SmsSDK from djan ...

  5. 使用容联云获取短信验证码

    容联云地址:https://www.yuntongxun.com/ 获取短信验证码流程图 容联云配置 在容联云官网注册一个账号,发送短信验证码必须使用三个ID ACCOUNT SID   (主账户ID ...

  6. 荣联云发送短信验证码--python3接口

    前言 近期做网页注册需要用到发送验证码功能,于是用荣联云的发送短信验证码进行测试,官网上提供的demo是python2.7的,而目前都使用的python3了,而且demo中的代码太长了,我只取demo ...

  7. Java调用容联云通讯短信验证码API接口示例

    1.注册账号 https://www.yuntongxun.com/doc.html 注册后点击控制台可以看到你的信息 2.添加测试号码 3.打开文档>Rest API>短信 下载Java ...

  8. 记录开发内容demo-java华为云发送短信验证码

    文章目录 前言 一.所需sdk 二.util类 1.demo 2.登录调用 总结 前言 华为云发送短信验证码 一.所需sdk <!--华为云手机获取短信验证码--><dependen ...

  9. 腾讯云发送短信验证码服务

    腾讯云发送短信验证码服务 1.注册腾讯云的账号 在腾讯云的官网:https://cloud.tencent.com/注册一个腾讯云的账号,就是日常的注册流程(这里就不贴图了),不过要实名认证啥的,认证 ...

最新文章

  1. python 默认字典
  2. 常见的局域网拓扑结构
  3. 计算机组成原理—— 指令系统
  4. Altium designer--变压器封装图
  5. ThemeResolver
  6. linux用户双重认证登录,linux PAM 用户登录认证
  7. git上传分支的原理_GIT分支,创建分支与合并分支的工作原理与教程
  8. Typecho评论邮件提醒插件美化版CommentToMail
  9. 自学Java要不要背熟语法_JAVASE经典面试问题(必须熟背),你Get到了吗?
  10. 联想集团董事长杨元庆先生在与微软签约仪式上的发言稿全文
  11. 直线/折线/圆/三角形划分平面直线切割球问题大总结(最多能划分多少区域)
  12. steam安装包_Steam已经绑定了令牌,为什么还会频繁被盗?
  13. 推荐系统实战--movieslens数据集实现UserCF算法
  14. 服务器开发系列(二)——Jetson Xavier NX
  15. Fairy GUI 使用
  16. 《奋斗》中的经典台词
  17. 大模型时代,视觉推理任务竟然只用语言数据也能学习
  18. 遥感影像的“全色”与“多光谱”
  19. 学习笔记(34):MATLAB基础入门课程-乘方
  20. Android四大组件完全解析(一)---Activity

热门文章

  1. html中缩放级别为1,更改浏览器缩放级别
  2. 技术指南:手机拍照身份证识别技术
  3. 955 互联网公司白名单来了!这些公司月薪20k,没有996!福利榜国内大厂只有这家!...
  4. Spinner用法案例
  5. 散粉在哪个步骤用_定妆粉是在哪个步骤用
  6. 机器学习小组知识点31:重要性采样(Importance Sampling )
  7. OpenCV:vector subscript out of range
  8. 如何提高自己的编码水平
  9. 简单几步骤导出网易考拉海购中多个商品的图片
  10. QEMU-KVM 安装方法