1. 从容联云中拿出accId,accToken,appId
注册完容联云之后,找到管理,把里边的对应的accId,accToken,appId都拿出来
拿出来之后找一个空的文件保存下来,以便后续使用
2. 在Flask中安装容联云
在终端输入
pip install ronglian_sms_sdk
安装即可
3. 使用容联云
在根目录下创建一个工具文件夹utils,在创建一个SmsTools的文件
在文件中,实例化,并使用。对于个人的信息(例如:accId,accToken,appId)采取封装处理
import json,redis
from flask import current_app
from ronglian_sms_sdk import SmsSDK
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")
password = current_app.config.get("REDIS_PASSWORD")
self.rds = redis.Redis(host=host,port=port,password=password)
def send(self,phone,code):
'''
发送短信接口
:param python: 手机号
:param code: 验证码
:return: Bool 发送成功或失败
'''
tid= current_app.config.get("RL_TID")
t = current_app.config.get("SMS_TIME")
print(t)
# 把验证码存入redis
key = "sms_%s"%phone
self.rds.set(key,code,ex= t * 60)
# 发送短信
datas=(code,t)
print(tid, phone, datas)
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("18132317749","6666")
print(rs)
创建一个文件对自己的个人信息进行封装
class SecretConfig():
RL_ACC_ID = "自己的accid"
RL_ACC_TOKEN = "自己的acctoken"
RL_APP_ID = "自己的appid"
RL_TID = "1"
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
REDIS_PASSWORD = "123456"
4. 结合使用
在蓝图中导入,在蓝图中引用,实例化
class SmsView(Resource):
def post(self):
req = reqparse.RequestParser()
req.add_argument("phone",required= True)
args = req.parse_args()
code = random.randint(100000,999999)
s = SmsTool()
rs = s.send(args["phone"],code)
if rs:
return jsonify({
"code": 200,
"msg": "发送成功",
})
return jsonify({
"code": 400,
"msg": "发送失败"
})
5. 实际应用,短信注册及登录
def post(self):
# 获取参数
req = reqparse.RequestParser()
req.add_argument("phone",required=True)
req.add_argument("code",required=True)
# 校验参数
args = req.parse_args()
# 校验验证码
# 连接redis数据库
s = SmsTool()
# 根据手机号,拿书出对应的验证码
key = "sms_%s" % args["phone"]
code_byte = s.rds.get(key) # 返回值是byte类型
if not code_byte:
return jsonify({
"code": 400,
"msg": "验证码已经过期"
})
# 对比
if args["code"] != code_byte.decode():
return jsonify({
"code": 400,
"msg": "验证码错误"
})
return jsonify({
"code": 200,
"msg": "登录成功"
})