因为要网上一个个查询bt种子的tacker列表,所以我自己弄了一个用来存储tracker的工具。
默认用户名:admin,密码:admin,没有存在数据库中,改成自己需要的即可
增删查都写好了,不需要改什么。信息不是太多,直接删除不需要的tracker链接,重新添加即可
用的sqlite数据库,需要移动项目的时候直接把文件夹复制走即可
templates\trackers_index.html
–
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>trackers</title>
</head>
<body>
{% if session.logged_in %}
<form action="/logout" method="get">
<input type="submit" value="登出">
</form>
{% else %}
<form action="/login" method="post">
<input type="text" name="username" placeholder="用户名">
<input type="password" name="password" id="password" placeholder="密码">
<input type="submit" value="登录">
</form>
{% endif %}
<main>
<!-- flask的flash函数专用固定代码 专门用来显示内容的 -->
{% for message in get_flashed_messages() %}
<div class="alert">{{ message }}</div>
{% endfor %}
</main>
<p>tracker总数量:{{count}}</p>
<form action="/trackers_search" method="post">
<input type="text" name="trackers_name" placeholder="请输入tracker关键字">
<input type="submit" value="搜索">
</form>
{% if session.logged_in %}
<!-- 登录表单,实际上用户已经登录,所以可以显示欢迎信息或其他内容 -->
<form action="/trackers_add" method="post">
<label for="trackers_name">trackers_add:</label>
<input type="text" name="trackers_name" placeholder="请输入完整的tracker链接">
<input type="submit" value="提交">
</form>
<form action="/trackers_delete" method="post">
<label for="trackers_name">trackers_delete:</label>
<input type="text" name="trackers_name" placeholder="请输入完整的tracker链接">
<input type="submit" value="删除">
</form>
{% endif %}
<hr>
<div class="tracker_box scrollable-div">
<form action="/get_trackers_as_text" method="get">
<input type="submit" value="去复制,请使用Ctrl+A和Ctrl+C复制">
</form>
{% for i in trackers %}
<ul style="list-style-type: none">
<li>{{i.name}}</li>
</ul>
{% endfor %}
</div>
</body>
</html>
<style>
* {
margin:0;
padding:0;
}
.scrollable-div {
height: 800px; /* 或者你需要的高度 */
overflow-y: auto; /* 内容超出时在 y 轴方向显示滚动条 */
overflow-x: auto; /* 内容超出时在 x 轴方向显示滚动条 */
}
</style>
–
app.py
–
from flask import Flask, request, render_template, redirect, url_for, flash, session
from flask_sqlalchemy import SQLAlchemy
import os
from datetime import datetime
from flask_cors import CORS
import secrets
'''
待实现:
flash错误提示显示红色,警告信息显示黄色,成功显示绿色,使用div画出来
'''
app = Flask(__name__)
# 为整个应用启用 CORS
CORS(app)
# 启用 CORS 并设置特定的域名
#CORS(app, resources={r"/some_route": {"origins": "http://example.com"}})
# 或者,允许所有域名访问所有路由
CORS(app, resources={r"*": {"origins": "*"}})
# 获取当前文件的路径
basedir = os.path.abspath(os.path.dirname(__file__))
# 设置数据库文件的路径为当前目录下的 data.db
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.db')
#app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////data.db'
app.secret_key = secrets.token_urlsafe() # 用于保持会话安全,字符串随机即可
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False#模型修改的跟踪
db = SQLAlchemy(app)
class Trackers(db.Model):
__tablename__= 'trackers'
id = db.Column(db.Integer, unique=True, comment='id')
name = db.Column(db.String(64), primary_key=True, comment='Trackers,主键')
is_usable = db.Column(db.String(64), unique=False, comment='Tracker是否可用')
create_date = db.Column(db.DateTime, unique=False, default=datetime.now(), comment='Tracker创建日期')
update_date = db.Column(db.DateTime, unique=False, comment='Tracker更新日期')
def __repr__(self):
return '<Trackers %r>' % self.name
def create_tables():
with app.app_context():
db.create_all()
@app.route('/')
@app.route('/trackers_index')
def trackers_index():
trackers = Trackers.query.order_by(Trackers.create_date.desc()).all()#倒序输出所有
count = Trackers.query.count()#tracker总数量
return render_template('trackers_index.html', trackers=trackers, count=count)
@app.route('/get_trackers_as_text')
def get_trackers_as_text():
trackers = Trackers.query.all()
lines = [f"{tracker.name}" for tracker in trackers]
text = "<br>".join(lines)
return text
@app.route('/trackers_add', methods=['POST'], endpoint='add_announcement')
def announcement_add():
trackers_name = request.form['trackers_name']
# 关键词列表
keywords = ['announce', 'http', 'udp', 'https', 'wss']
# 检查字符串是否包含列表中的任意关键词
if contains_keywords(trackers_name, keywords) or trackers_name.endswith('announce'):
print("提交信息中包含关键字")
else:
flash("你提交的可能不是tracker链接")
return redirect(url_for('trackers_index'))
exists = Trackers.query.filter_by(name=trackers_name).first() is not None
if exists:
flash('tracker 已经存在.')
else:
flash('tracker 不存在,已插入.')
new_tracker = Trackers(name=trackers_name)
db.session.add(new_tracker)
db.session.commit()
return redirect(url_for('trackers_index'))
def contains_keywords(s, keywords):
return any(keyword in s for keyword in keywords)
@app.route('/trackers_delete/<int:trackers_name>', methods=['POST'], endpoint='delete_announcement_specific')
def delete_announcement_specific(trackers_name):
data = Trackers.query.filter_by(name=trackers_name).first()
if data:
db.session.delete(data)
db.session.commit()
flash(f'【{data}】已删除')
return redirect(url_for('trackers_index'))
else:
return 'Tracker not found'
@app.route('/trackers_delete', methods=['POST'], endpoint='delete_announcement')
def delete_announcement():
trackers_name = request.form.get('trackers_name') or request.view_args.get('trackers_name')
if not trackers_name:
return '什么都没输入,你删除啥呢!!!'
data = Trackers.query.filter_by(name=trackers_name).first()
if data:
db.session.delete(data)
db.session.commit()
flash(f'{data}已删除')
return redirect(url_for('trackers_index'))
else:
return f'数据库中不存在该数据!!!{trackers_name}'
@app.route('/trackers_update/<int:trackers_name>', methods=['POST'], endpoint='update_announcement')
def announcement_update(trackers_name):
data = Trackers.query.filter_by(name=trackers_name).first()
if data:
data.name = request.form.get('name')
data.is_usable = request.form.get('description')
db.session.commit()
flash('Data has been updated successfully.', 'success')
else:
flash('Data not found.', 'error')
return redirect(url_for('trackers_index'))
@app.route('/trackers_search', methods=['GET', 'POST'])
def announcement_search():
if request.method == 'POST':
trackers_name = request.form.get('trackers_name')
trackers = Trackers.query.filter(Trackers.name.like(f'%{trackers_name}%')).all()
return render_template('trackers_index.html', trackers=trackers)
return render_template('trackers_index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username == 'admin' and password == 'admin':
session['logged_in'] = True
session['username'] = username
flash("登陆成功")
return redirect(url_for('trackers_index'))
else:
return '无效的用户名或密码'
return redirect(url_for('trackers_index'))
@app.route('/logout', methods=['GET', 'POST'])
def logout():
session.pop('logged_in', None)
session.pop('username', None)
return redirect(url_for('trackers_index'))
if __name__ == '__main__':
# 创建数据库
create_tables()
app.run(debug=True, host='0.0.0.0', port=5000)
–
发表回复