发送短信验证码
- 安装第三方库
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:222222@127.0.0.1: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')
accToken = current_app.config.get('RL_ACC_TOKEN')
appId = current_app.config.get('RL_APP_ID')
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)
self.red.set(phone, code, ex=t * 60)
rs = self.sdk.sendMessage(tid, phone, datas)
rs_data = json.loads(rs)
if rs_data['statusCode'] == '000000':
return True
return False
- 直接调用即可
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)