增加用户,统计,应用接口
This commit is contained in:
@@ -61,6 +61,9 @@ class Config:
|
||||
EMAIL_SERVER_USER = ''
|
||||
EMAIL_SERVER_PASSWORD = ''
|
||||
|
||||
WEB_ENABLE = 0
|
||||
WEB_USER = {}
|
||||
|
||||
envs = []
|
||||
retry_time = 5
|
||||
last_modify_time = 0
|
||||
|
||||
@@ -17,7 +17,7 @@ class QueryLog(BaseLog):
|
||||
quick_log = []
|
||||
|
||||
data = {
|
||||
'query_count': 1,
|
||||
'query_count': 0,
|
||||
'last_time': '',
|
||||
}
|
||||
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,
|
||||
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.route('/login', methods=['POST'])
|
||||
def login():
|
||||
"""
|
||||
用户登录
|
||||
:return:
|
||||
"""
|
||||
username = request.json.get('username', 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)
|
||||
return jsonify(access_token=access_token)
|
||||
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,
|
||||
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_SECRET_KEY'] = 'super-secret' # Change this!
|
||||
jwt = JWTManager(app)
|
||||
|
||||
|
||||
@app.route('/', methods=['GET'])
|
||||
def test():
|
||||
print(111111)
|
||||
# @flask.route('/', methods=['GET'])
|
||||
# def test():
|
||||
# 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__':
|
||||
run()
|
||||
Web.run()
|
||||
|
||||
Reference in New Issue
Block a user