当前位置:网站首页>Flask发送验证码逻辑
Flask发送验证码逻辑
2022-07-26 00:12:00 【du fei】
发送短信验证码
- 安装第三方库
pip install ronglian_sms_sdk
- 还要设置一个配置文件settings/config.py写入代码
from settings.secret import SecretConfig
class DefaultConfig(SecretConfig):
""" 默认配置项 """
SECRET_KEY = 'haoiehteasdsd'
SQLALCHEMY_DATABASE_URI = ''
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True
class DevConfig(DefaultConfig):
""" 开发阶段配置项 """
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:[email protected]:3306/news'
- 创建一个utils/SmsTools.py文件写入代码
from ronglian_sms_sdk import SmsSDK
from flask import current_app
import json, redis
class SmsTool():
""" 发送短信类 """
def __init__(self):
accId = current_app.config.get('RL_ACC_ID') # 主账户ID
accToken = current_app.config.get('RL_ACC_TOKEN') # 账户授权令牌
appId = current_app.config.get('RL_APP_ID') # 默认
# 实例化SmsSDK
self.sdk = SmsSDK(accId, accToken, appId)
host = current_app.config.get('REDIS_HOST')
port = current_app.config.get('REDIS_PORT')
self.red = redis.Redis(host=host, port=port)
def send(self, phone, code):
""" :param phone: :param code: :return: """
tid = current_app.config.get('RL_TID')
# 有效期
t = current_app.config.get('SMS_TIME')
datas = (code, t)
# 存储redis
self.red.set(phone, code, ex=t * 60)
# 发送短信验证码
rs = self.sdk.sendMessage(tid, phone, datas) # 返回的是JSON字符串
rs_data = json.loads(rs)
if rs_data['statusCode'] == '000000':
return True
return False
# if __name__ == '__main__':
# # 开启上下文换进
# from app import app
#
# with app.app_context():
# s = SmsTool()
# rs = s.send('17559511990', '6666')
# print(rs)
- 直接调用即可
class SmsCodeView(Resource):
def get(self):
req = reqparse.RequestParser()
req.add_argument('mobile')
args = req.parse_args()
sms_code = random.randint(10, 99)
s = SmsTool()
ser = s.send(args['mobile'], sms_code)
if not ser:
return jsonify({
'code': 400, 'msg': '发送失败'})
return jsonify({
'code': 200, 'msg': '已发送请注意查收'})
api.add_resource(SmsCodeView, '/sms')
token的生成
- 封装一个生成token的方法
import time
import jwt
from flask import current_app
class JwtTool():
def create(self, payload, ex=3600):
""" 生成jwt :param payload: :return: """
payload['exp'] = int(time.time()) + ex
print(payload)
secret_key = current_app.config.get('SECRET_KEY')
token = jwt.encode(payload, key=secret_key, algorithm='HS256')
print(token)
return token
def valid(self, token):
secret_key = current_app.config.get('SECRET_KEY')
try:
time.sleep(2)
payload = jwt.decode(token, secret_key, algorithms='HS256')
print(payload)
return payload
except Exception as e:
print(e)
return False
if __name__ == '__main__':
from app import app
with app.app_context():
j = JwtTool()
token_jwt = j.create({
'aaa': 'bbb'})
j.valid(token_jwt)
边栏推荐
- VMware ESXI7.0版本的安装与配置
- FreeRTOS个人笔记-互斥量
- [brother hero July training] day 24: linear tree
- Getaverse, a distant bridge to Web3
- How long can this bull market last Answers to questions 2021-05-11
- 【目录】Nodejs、npm、yarn、BUG
- 牛血清蛋白修饰酚酸类及生物碱类小分子/偶联微球的蛋白/牛红细胞SOD的研究
- 白蛋白纳米粒表面修饰低分子量鱼精蛋白LMWP/PEG-1900修饰牛血清白蛋白制备研究
- Detailed explanation of C language preprocessing
- 寻找命令find和locate
猜你喜欢
随机推荐
LDP related knowledge
Detailed explanation of kubernetes network plug-ins - calico chapter - Overview
Old laptop becomes server (laptop + intranet penetration)
Leetcode question brushing series -- 931. Minimum sum of descent path
12. Neural network model
Unity—欧拉角,四元数
34 use of sparksql custom functions, architecture and calculation process of sparkstreaming, dstream conversion operation, and processing of sparkstreaming docking Kafka and offset
二进制表示--2的幂
京东按关键字搜索商品 API 的使用说明
拼多多根据ID取商品详情 API 的使用说明
Binary tree -- 257. All paths of binary tree
MySQL——数据库日志
Js理解之路:Js常见的6中继承方式
Thymeleaf view integration
How does the server build a virtual host?
How to make your JS code more beautiful
白蛋白纳米-超声微泡载组织型纤溶酶原激活物基因靶向制备研究
Opencv learning Day6
07_ue4进阶_发射火球扣mp值和攻击扣血机制
Getaverse,走向Web3的远方桥梁









