重构Cookie监控系统:添加Web管理后台、Vue3前端界面、Cookie Cloud参数支持、5秒倒计时自动刷新、专业UI配色
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
"""
|
||||
通知管理路由
|
||||
"""
|
||||
import requests
|
||||
from flask import Blueprint, request, jsonify
|
||||
from models.database import db, Notification, User
|
||||
from datetime import datetime
|
||||
|
||||
notification_bp = Blueprint('notifications', __name__)
|
||||
|
||||
|
||||
@notification_bp.route('/', methods=['GET'])
|
||||
def get_notifications():
|
||||
"""获取通知列表"""
|
||||
user_id = request.args.get('user_id')
|
||||
|
||||
if user_id:
|
||||
notifications = Notification.query.filter_by(user_id=user_id).order_by(Notification.created_at.desc()).all()
|
||||
else:
|
||||
notifications = Notification.query.order_by(Notification.created_at.desc()).all()
|
||||
|
||||
return jsonify([notification.to_dict() for notification in notifications])
|
||||
|
||||
|
||||
@notification_bp.route('/', methods=['POST'])
|
||||
def send_notification():
|
||||
"""发送通知"""
|
||||
data = request.json
|
||||
|
||||
user_id = data.get('user_id')
|
||||
website_id = data.get('website_id')
|
||||
title = data.get('title')
|
||||
content = data.get('content')
|
||||
|
||||
# 获取用户的爱语飞飞令牌
|
||||
user = User.query.get_or_404(user_id)
|
||||
|
||||
if not user.iyuu_token:
|
||||
return jsonify({'message': '用户未配置爱语飞飞令牌'}), 400
|
||||
|
||||
# 发送爱语飞飞通知
|
||||
send_success = _send_iyuu_notification(user.iyuu_token, title, content)
|
||||
|
||||
# 创建通知记录
|
||||
notification = Notification(
|
||||
user_id=user_id,
|
||||
website_id=website_id,
|
||||
title=title,
|
||||
content=content,
|
||||
status='sent' if send_success else 'failed',
|
||||
send_time=datetime.utcnow() if send_success else None
|
||||
)
|
||||
|
||||
db.session.add(notification)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify(notification.to_dict()), 201
|
||||
|
||||
|
||||
def _send_iyuu_notification(token, title, content):
|
||||
"""通过爱语飞飞发送通知"""
|
||||
try:
|
||||
url = f"https://iyuu.cn/{token}.send"
|
||||
|
||||
response = requests.post(
|
||||
url,
|
||||
json={
|
||||
'text': title,
|
||||
'desp': content
|
||||
},
|
||||
timeout=10
|
||||
)
|
||||
|
||||
response.raise_for_status()
|
||||
result = response.json()
|
||||
|
||||
if result.get('errcode') == 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
except requests.RequestException:
|
||||
return False
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
# 为Notification模型添加to_dict方法
|
||||
def notification_to_dict(self):
|
||||
return {
|
||||
'id': self.id,
|
||||
'user_id': self.user_id,
|
||||
'website_id': self.website_id,
|
||||
'title': self.title,
|
||||
'content': self.content,
|
||||
'status': self.status,
|
||||
'send_time': self.send_time.isoformat() if self.send_time else None,
|
||||
'created_at': self.created_at.isoformat() if self.created_at else None,
|
||||
'updated_at': self.updated_at.isoformat() if self.updated_at else None
|
||||
}
|
||||
|
||||
Notification.to_dict = notification_to_dict
|
||||
Reference in New Issue
Block a user