增加用户,统计,应用接口
This commit is contained in:
@@ -61,6 +61,9 @@ class Config:
|
|||||||
EMAIL_SERVER_USER = ''
|
EMAIL_SERVER_USER = ''
|
||||||
EMAIL_SERVER_PASSWORD = ''
|
EMAIL_SERVER_PASSWORD = ''
|
||||||
|
|
||||||
|
WEB_ENABLE = 0
|
||||||
|
WEB_USER = {}
|
||||||
|
|
||||||
envs = []
|
envs = []
|
||||||
retry_time = 5
|
retry_time = 5
|
||||||
last_modify_time = 0
|
last_modify_time = 0
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class QueryLog(BaseLog):
|
|||||||
quick_log = []
|
quick_log = []
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'query_count': 1,
|
'query_count': 0,
|
||||||
'last_time': '',
|
'last_time': '',
|
||||||
}
|
}
|
||||||
data_path = None
|
data_path = None
|
||||||
|
|||||||
37
py12306/web/handler/app.py
Normal file
37
py12306/web/handler/app.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
from flask import Blueprint, request
|
||||||
|
from flask.json import jsonify
|
||||||
|
from flask_jwt_extended import (
|
||||||
|
JWTManager, jwt_required, create_access_token,
|
||||||
|
get_jwt_identity)
|
||||||
|
|
||||||
|
from py12306.config import Config
|
||||||
|
from py12306.query.query import Query
|
||||||
|
from py12306.user.user import User
|
||||||
|
|
||||||
|
app = Blueprint('app', __name__)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/app/menus', methods=['GET'])
|
||||||
|
@jwt_required
|
||||||
|
def menus():
|
||||||
|
"""
|
||||||
|
菜单列表
|
||||||
|
"""
|
||||||
|
menus = [
|
||||||
|
{"id": 10, "name": "首页", "url": "/", "icon": "fa fa-tachometer-alt"},
|
||||||
|
{"id": 40, "name": "数据分析", "url": "/analyze", "icon": "fa fa-signature"},
|
||||||
|
{"id": 50, "name": "帮助中心", "url": "/help", "icon": "fa fa-search"}
|
||||||
|
]
|
||||||
|
return jsonify(menus)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/app/actions', methods=['GET'])
|
||||||
|
@jwt_required
|
||||||
|
def actions():
|
||||||
|
"""
|
||||||
|
操作列表
|
||||||
|
"""
|
||||||
|
actions = [
|
||||||
|
{"text": "退出登录", "link": "", "icon": "fa fa-sign-out-alt"}
|
||||||
|
]
|
||||||
|
return jsonify(actions)
|
||||||
31
py12306/web/handler/stat.py
Normal file
31
py12306/web/handler/stat.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
from flask import Blueprint, request
|
||||||
|
from flask.json import jsonify
|
||||||
|
from flask_jwt_extended import (
|
||||||
|
JWTManager, jwt_required, create_access_token,
|
||||||
|
get_jwt_identity)
|
||||||
|
|
||||||
|
from py12306.config import Config
|
||||||
|
from py12306.query.query import Query
|
||||||
|
from py12306.user.user import User
|
||||||
|
|
||||||
|
stat = Blueprint('stat', __name__)
|
||||||
|
|
||||||
|
|
||||||
|
@stat.route('/stat/dashboard', methods=['GET'])
|
||||||
|
@jwt_required
|
||||||
|
def dashboard():
|
||||||
|
"""
|
||||||
|
状态统计
|
||||||
|
任务数量,用户数量,查询次数
|
||||||
|
节点信息(TODO)
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
from py12306.log.query_log import QueryLog
|
||||||
|
query_job_count = len(Query().jobs)
|
||||||
|
user_job_count = len(User().users)
|
||||||
|
query_count = QueryLog().data.get('query_count')
|
||||||
|
return jsonify({
|
||||||
|
'query_job_count': query_job_count,
|
||||||
|
'user_job_count': user_job_count,
|
||||||
|
'query_count': query_count
|
||||||
|
})
|
||||||
@@ -4,14 +4,44 @@ from flask_jwt_extended import (
|
|||||||
JWTManager, jwt_required, create_access_token,
|
JWTManager, jwt_required, create_access_token,
|
||||||
get_jwt_identity)
|
get_jwt_identity)
|
||||||
|
|
||||||
|
from py12306.config import Config
|
||||||
|
from py12306.user.job import UserJob
|
||||||
|
from py12306.user.user import User
|
||||||
|
|
||||||
user = Blueprint('user', __name__)
|
user = Blueprint('user', __name__)
|
||||||
|
|
||||||
|
|
||||||
@user.route('/login', methods=['POST'])
|
@user.route('/login', methods=['POST'])
|
||||||
def login():
|
def login():
|
||||||
|
"""
|
||||||
|
用户登录
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
username = request.json.get('username', None)
|
username = request.json.get('username', None)
|
||||||
password = request.json.get('password', None)
|
password = request.json.get('password', None)
|
||||||
if username and password and username == '1':
|
if username and password and username == Config().WEB_USER.get('username') and password == Config().WEB_USER.get(
|
||||||
|
'password'):
|
||||||
access_token = create_access_token(identity=username)
|
access_token = create_access_token(identity=username)
|
||||||
return jsonify(access_token=access_token)
|
return jsonify(access_token=access_token)
|
||||||
return jsonify({"msg": "用户名或密码错误"}), 401
|
return jsonify({"msg": "用户名或密码错误"}), 401
|
||||||
|
|
||||||
|
|
||||||
|
@user.route('/users', methods=['GET'])
|
||||||
|
def users():
|
||||||
|
"""
|
||||||
|
用户任务列表
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
jobs = User().users
|
||||||
|
result = map(convert_job_to_info, jobs)
|
||||||
|
return jsonify(result)
|
||||||
|
|
||||||
|
|
||||||
|
def convert_job_to_info(job: UserJob):
|
||||||
|
return {
|
||||||
|
'key': job.key,
|
||||||
|
'user_name': job.user_name,
|
||||||
|
'is_ready': job.is_ready,
|
||||||
|
'is_loaded': job.user_loaded, # 是否成功加载 ready 是当前是否可用
|
||||||
|
'last_heartbeat': job.last_heartbeat
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,23 +5,50 @@ from flask_jwt_extended import (
|
|||||||
JWTManager, jwt_required, create_access_token,
|
JWTManager, jwt_required, create_access_token,
|
||||||
get_jwt_identity)
|
get_jwt_identity)
|
||||||
|
|
||||||
from py12306.web.handler.user import user
|
from py12306.helpers.func import *
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
app.register_blueprint(user)
|
|
||||||
|
|
||||||
# app.config['JWT_TOKEN_LOCATION'] = ['json']
|
# app.config['JWT_TOKEN_LOCATION'] = ['json']
|
||||||
app.config['JWT_SECRET_KEY'] = 'super-secret' # Change this!
|
|
||||||
jwt = JWTManager(app)
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/', methods=['GET'])
|
# @flask.route('/', methods=['GET'])
|
||||||
def test():
|
# def test():
|
||||||
print(111111)
|
# print(111111)
|
||||||
|
|
||||||
def run(port=8080):
|
|
||||||
app.run(debug=True, port=port if port else 8080, host='0.0.0.0')
|
# def run(port=8080):
|
||||||
|
# flask.run(debug=True, port=port if port else 8080, host='0.0.0.0')
|
||||||
|
|
||||||
|
|
||||||
|
@singleton
|
||||||
|
class Web:
|
||||||
|
session = None
|
||||||
|
jwt = None
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.session = Flask(__name__)
|
||||||
|
self.register_blueprint()
|
||||||
|
self.session.config['JWT_SECRET_KEY'] = 'super-secret' # Change this!
|
||||||
|
self.jwt = JWTManager(self.session)
|
||||||
|
pass
|
||||||
|
|
||||||
|
def register_blueprint(self):
|
||||||
|
from py12306.web.handler.user import user
|
||||||
|
from py12306.web.handler.stat import stat
|
||||||
|
from py12306.web.handler.app import app
|
||||||
|
self.session.register_blueprint(user)
|
||||||
|
self.session.register_blueprint(stat)
|
||||||
|
self.session.register_blueprint(app)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def run(cls):
|
||||||
|
self = cls()
|
||||||
|
self.start()
|
||||||
|
pass
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
self.session.run(debug=True, port=8080, host='0.0.0.0')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
run()
|
Web.run()
|
||||||
|
|||||||
Reference in New Issue
Block a user