Archived
添加了api接口需要key的规则
This commit is contained in:
9 files changed
+151
-40
No files matched your search
+26
-3
@@ -6,6 +6,8 @@
|
||||
# @File Name: __init__.py
|
||||
|
||||
|
||||
import os
|
||||
import random
|
||||
from flask import Flask
|
||||
from flask_sslify import SSLify
|
||||
from .main import main as main_blueprint
|
||||
@@ -13,17 +15,38 @@ from .api import api as api_blueprint
|
||||
from app.config import config
|
||||
|
||||
|
||||
def generate_random_string(length):
|
||||
"""
|
||||
生成随机密码
|
||||
:param length:
|
||||
:return:
|
||||
"""
|
||||
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
return ''.join(random.choice(letters) for _ in range(length))
|
||||
|
||||
|
||||
def create_app(config_name):
|
||||
"""创建主app"""
|
||||
"""
|
||||
创建 app
|
||||
:param config_name:
|
||||
:return:
|
||||
"""
|
||||
app = Flask(__name__)
|
||||
app.config.from_object(config[config_name])
|
||||
config[config_name].init_app(app)
|
||||
if config[config_name].SSL_REDIRECT:
|
||||
sslify = SSLify(app)
|
||||
if os.environ.get('SSL_REDIRECT'):
|
||||
SSLify(app)
|
||||
|
||||
app.register_blueprint(main_blueprint)
|
||||
app.register_blueprint(api_blueprint, url_prefix='/api/v1/')
|
||||
|
||||
if not os.getenv('ACCESS_KEY'):
|
||||
access_key = generate_random_string(32)
|
||||
os.environ['ACCESS_KEY'] = access_key
|
||||
else:
|
||||
access_key = os.getenv('ACCESS_KEY')
|
||||
print('==========Access Key: {}=========='.format(access_key))
|
||||
|
||||
return app
|
||||
|
||||
|
||||
|
||||
+13
-2
@@ -9,12 +9,23 @@ from . import api
|
||||
from flask import jsonify
|
||||
|
||||
|
||||
@api.errorhandler(403)
|
||||
def forbidden(e):
|
||||
return jsonify(
|
||||
{
|
||||
'code': 403,
|
||||
'msg': 'API: 没有权限',
|
||||
'data': None
|
||||
}
|
||||
), 403
|
||||
|
||||
|
||||
@api.errorhandler(404)
|
||||
def page_not_found(e):
|
||||
return jsonify(
|
||||
{
|
||||
'code': 404,
|
||||
'msg': '页面未找到',
|
||||
'msg': 'API: 页面未找到',
|
||||
'data': None
|
||||
}
|
||||
), 404
|
||||
@@ -25,7 +36,7 @@ def internal_server_error(e):
|
||||
return jsonify(
|
||||
{
|
||||
'code': 500,
|
||||
'msg': '服务器内部错误',
|
||||
'msg': 'API: 服务器内部错误',
|
||||
'data': None
|
||||
}
|
||||
), 500
|
||||
@@ -6,14 +6,33 @@
|
||||
# @File Name: views.py
|
||||
|
||||
|
||||
import os
|
||||
from functools import wraps
|
||||
from flask import abort
|
||||
from flask import jsonify
|
||||
from flask import request
|
||||
from flask import send_file
|
||||
from ..db.db import SQLite as db
|
||||
from . import api
|
||||
|
||||
|
||||
def permission_required(func):
|
||||
@wraps(func)
|
||||
def decorated_func(*args, **kwargs):
|
||||
if request.args.get('key') != os.getenv('ACCESS_KEY'):
|
||||
abort(403)
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return decorated_func
|
||||
|
||||
|
||||
@api.route('/overall/', methods=['GET', 'POST'])
|
||||
@permission_required
|
||||
def overall():
|
||||
"""
|
||||
查询ReqCount表内所有的源数据
|
||||
:return:
|
||||
"""
|
||||
limit = request.args.get('limit', type=int)
|
||||
try:
|
||||
data = db().exec('select * from reqcount;')
|
||||
@@ -38,7 +57,12 @@ def overall():
|
||||
|
||||
|
||||
@api.route('/query/', methods=['GET', 'POST'])
|
||||
@permission_required
|
||||
def query():
|
||||
"""
|
||||
查询指定名称的计数数据
|
||||
:return:
|
||||
"""
|
||||
name = request.args.get('name', type=str)
|
||||
nochange = request.args.get('nochange', type=bool)
|
||||
if nochange:
|
||||
@@ -63,7 +87,12 @@ def query():
|
||||
|
||||
|
||||
@api.route('/theme/', methods=['GET', 'POST'])
|
||||
@permission_required
|
||||
def theme():
|
||||
"""
|
||||
查询数据库内主题的源数据
|
||||
:return:
|
||||
"""
|
||||
_theme = request.args.get('name', type=str)
|
||||
if not db().exists_table(_theme):
|
||||
return jsonify(
|
||||
@@ -85,7 +114,12 @@ def theme():
|
||||
|
||||
|
||||
@api.route('/alltables/', methods=['GET', 'POST'])
|
||||
@permission_required
|
||||
def all_tables():
|
||||
"""
|
||||
查询所有已有表
|
||||
:return:
|
||||
"""
|
||||
data = db().show_tables
|
||||
return jsonify(
|
||||
{
|
||||
@@ -94,3 +128,14 @@ def all_tables():
|
||||
'data': data
|
||||
}
|
||||
), 200
|
||||
|
||||
|
||||
@api.route('/export/', methods=['GET', 'POST'])
|
||||
@api.route('/export/<key>', methods=['GET', 'POST'])
|
||||
@permission_required
|
||||
def export(key: str = None):
|
||||
"""
|
||||
导出数据库文件
|
||||
:return:
|
||||
"""
|
||||
return send_file('./db/data.sqlite', as_attachment=True)
|
||||
+1
-1
@@ -31,5 +31,5 @@ config = {
|
||||
'development': DevelopmentConfig,
|
||||
'production': ProductionConfig,
|
||||
|
||||
'default': ProductionConfig
|
||||
'default': DevelopmentConfig
|
||||
}
|
||||
+15
-1
@@ -7,9 +7,23 @@
|
||||
|
||||
|
||||
import os
|
||||
import time
|
||||
import sys
|
||||
import requests
|
||||
from ..decorators import time_it
|
||||
from functools import wraps
|
||||
|
||||
|
||||
def time_it(func):
|
||||
@wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
print('I: 数据库文件开始下载')
|
||||
start = time.time()
|
||||
result = func(*args, **kwargs)
|
||||
end = time.time()
|
||||
print('I: 下载结束, 耗时 {} 秒'.format(round(end - start, 2)))
|
||||
return result
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
@time_it
|
||||
|
||||
Binary file not shown.
@@ -1,25 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# -- coding:utf-8 --
|
||||
# @Author: markushammered@gmail.com
|
||||
# @Development Tool: PyCharm
|
||||
# @Create Time: 2022/4/5
|
||||
# @File Name: decorators.py
|
||||
|
||||
import time
|
||||
from functools import wraps
|
||||
|
||||
|
||||
def time_it(func):
|
||||
@wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
print('I: 数据库文件开始下载')
|
||||
start = time.time()
|
||||
result = func(*args, **kwargs)
|
||||
end = time.time()
|
||||
print('I: 下载结束, 耗时 {} 秒'.format(round(end - start, 2)))
|
||||
return result
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env python3
|
||||
# -- coding:utf-8 --
|
||||
# @Author: markushammered@gmail.com
|
||||
# @Development Tool: PyCharm
|
||||
# @Create Time: 2022/4/10
|
||||
# @File Name: test_decorator.py
|
||||
|
||||
|
||||
def check(func):
|
||||
def wrapper(*args, **kwargs):
|
||||
print(kwargs)
|
||||
return func(*args, **kwargs)
|
||||
return wrapper
|
||||
|
||||
|
||||
@check()
|
||||
def test(name: str):
|
||||
print(name)
|
||||
|
||||
|
||||
test('Markus')
|
||||
Reference in New Issue
Block a user