开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 1 Fork 24

张张/WaitAdmin开源后台系统(Python版)

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (2)
标签 (1)
master
develop
1.0.0
master
分支 (2)
标签 (1)
master
develop
1.0.0
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (2)
标签 (1)
master
develop
1.0.0
sms.py 5.23 KB
一键复制 编辑 原始数据 按行查看 历史
zero 提交于 2024年09月20日 11:21 +08:00 . update: 调整描述
# +----------------------------------------------------------------------
# | WaitAdmin(fastapi)快速开发后台管理系统
# +----------------------------------------------------------------------
# | 欢迎阅读学习程序代码,建议反馈是我们前进的动力
# | 程序完全开源可支持商用,允许去除界面版权信息
# | gitee: https://gitee.com/wafts/waitadmin-python
# | github: https://github.com/topwait/waitadmin-python
# | 官方网站: https://www.waitadmin.cn
# | WaitAdmin团队版权所有并拥有最终解释权
# +----------------------------------------------------------------------
# | Author: WaitAdmin Team <2474369941@qq.com>
# +----------------------------------------------------------------------
import time
from typing import Union
from common.utils.config import ConfigUtil
from common.enums.notice import NoticeEnum
from common.models.notice import NoticeRecord
from plugins.sms.driver import SmsDriver
class SmsNotice:
async def send(self, scene: int, params: dict, template: dict):
"""
发送短信通知。
Args:
scene (int): 发送场景参数。
params (int): 发送的参数。
template (int): 短信模型参数。
Raises:
AppException: 发送失败时抛出错误。
Author:
zero
"""
# 建发送记录
record = await NoticeRecord.create(
scene=scene,
user_id=params.get("user_id", 0),
account=params.get("mobile"),
title=template.get("name"),
code=self._get_code(params, template),
content=self._get_content(params, template),
receiver=template.get("get_client"),
sender=NoticeEnum.SENDER_SMS,
status=NoticeEnum.STATUS_WAIT,
is_read=NoticeEnum.VIEW_UNREAD,
is_captcha=template.get("is_captcha"),
expire_time=int(params.get("expire_time", 0)) + int(time.time()) + 900,
create_time=int(time.time()),
update_time=int(time.time())
)
# 发送短信通知
result = await SmsDriver().send_sms(
mobile=params.get("mobile"),
template_id=template.get("sms_template").get("template_code"),
template_params=await self._get_sms_params(params, template)
)
# 是否发送成功
if isinstance(result, bool):
await NoticeRecord.filter(id=record.id).update(
status=NoticeEnum.STATUS_OK,
update_time=int(time.time())
)
else:
await NoticeRecord.filter(id=record.id).update(
status=NoticeEnum.STATUS_FAIL,
error=result,
update_time=int(time.time())
)
raise Exception(result)
@staticmethod
def _get_content(params: dict, template: dict) -> str:
"""
获取短信内容(替换模板变量)。
Args:
params (int): 发送的参数。
template (int): 短信模型参数。
Returns:
str: 处理后的短信模型。
Author:
zero
"""
content = template.get("sms_template", {}).get("content", "")
for item, val in params.items():
search_replace = "${" + item + "}"
content = content.replace(search_replace, str(val))
return content
@staticmethod
def _get_code(params: dict, template: dict) -> str:
"""
获取短信验证码(某些场景不需要)。
Args:
params (int): 发送的参数。
template (int): 短信模型参数。
Returns:
str: 短信验证码值。
Author:
zero
"""
code = ""
if template.get("is_captcha", False):
code_dict = {k: v for k, v in params.items() if k in template.get("variable", {})}
if code_dict:
code = list(code_dict.values())[0]
return str(code)
@staticmethod
async def _get_sms_params(params: dict, template: dict) -> Union[dict, list]:
"""
获取短信参数(对腾讯短信作特殊处理)。
Args:
params (int): 发送的参数。
template (int): 短信模型参数。
Returns:
str: 处理后的短信参数。
Author:
zero
"""
# 获取当前短信引擎
engine = await ConfigUtil.get("sms", "engine", "aliyun")
if engine != "tencent":
return params
# 获取变量名数组
arr = []
content = template.get("sms_template", {}).get("content", "")
for item, val in params.items():
search = "{" + item + "}"
if search in content and item not in arr:
arr.append(item)
# 获取变量名数组
positions = {item: content.find("{" + item + "}") for item in arr if "{" + item + "}" in content}
arr2 = sorted(positions.items(), key=lambda x: x[1])
# 提取排序后的变量名
arr3 = [item for item, _ in arr2]
# 获取变量数组的对应值
arr4 = [params[v] for v in arr3 if v in params]
# 返回已处理的变量结果
return arr4
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

🔥🔥🔥WaitAdmin(python)是一款基于Fastapi+Vue3开发的一套快速开发通用管理后台,集成Vue常用组件,RBAC权限管理, 让开发变的简单,界面简洁清爽,后台支持多种菜单结构可满足不同人群的需求,非常适合二开做项目。
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/cvbcvb/waitadmin-python.git
git@gitee.com:cvbcvb/waitadmin-python.git
cvbcvb
waitadmin-python
WaitAdmin开源后台系统(Python版)
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /