修改文件结构

This commit is contained in:
MarkusJoe
2022-04-11 21:49:36 +08:00
parent 32d86c7d67
commit 8625fd8c50
9 files changed
+105 -75

No files matched your search

+10 -13
View File
@@ -7,22 +7,15 @@
import os import os
import random
from flask import Flask from flask import Flask
from flask_sslify import SSLify from flask_sslify import SSLify
from .main import main as main_blueprint from .main import main as main_blueprint
from .api import api as api_blueprint from .api import api as api_blueprint
from app.config import config from .config import config
from .utils.password import generate_pwd
from .utils.logger import CreateLogger
logger = CreateLogger().get_logger()
def generate_random_string(length):
"""
生成随机密码
:param length:
:return:
"""
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
return ''.join(random.choice(letters) for _ in range(length))
def create_app(config_name): def create_app(config_name):
@@ -40,12 +33,15 @@ def create_app(config_name):
app.register_blueprint(main_blueprint) app.register_blueprint(main_blueprint)
app.register_blueprint(api_blueprint, url_prefix='/api/v1/') app.register_blueprint(api_blueprint, url_prefix='/api/v1/')
CreateLogger.init_app(app)
if not os.getenv('ACCESS_KEY'): if not os.getenv('ACCESS_KEY'):
access_key = generate_random_string(32) access_key = generate_pwd(32)
os.environ['ACCESS_KEY'] = access_key os.environ['ACCESS_KEY'] = access_key
else: else:
access_key = os.getenv('ACCESS_KEY') access_key = os.getenv('ACCESS_KEY')
print('==========Access Key: {}=========='.format(access_key))
logger.info('Access Key: {}'.format(access_key))
return app return app
@@ -55,5 +51,6 @@ __all__ = [
'main', 'main',
'tests', 'tests',
'utils', 'utils',
'logger',
'create_app' 'create_app'
] ]
+1 -13
View File
@@ -6,26 +6,14 @@
# @File Name: views.py # @File Name: views.py
import os
from functools import wraps
from flask import abort
from flask import jsonify from flask import jsonify
from flask import request from flask import request
from flask import send_file from flask import send_file
from ..db.db import SQLite as db from ..db.db import SQLite as db
from ..decorators import permission_required
from . import api 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']) @api.route('/overall/', methods=['GET', 'POST'])
@permission_required @permission_required
def overall(): def overall():
+1 -20
View File
@@ -7,26 +7,10 @@
import os import os
import time
import sys import sys
import requests import requests
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
def download(): def download():
res = requests.get('https://filebase.vercel.app/download/data.db') res = requests.get('https://filebase.vercel.app/download/data.db')
with open('./app/db/data.sqlite', 'wb') as fp: with open('./app/db/data.sqlite', 'wb') as fp:
@@ -34,12 +18,9 @@ def download():
if not os.path.exists('./app/db/data.sqlite'): if not os.path.exists('./app/db/data.sqlite'):
print('C: 数据库文件未找到, 正在下载中')
try: try:
download() download()
except Exception as error: except requests.exceptions as error:
print('C: 下载失败, 错误原因:', error)
print('I: 请手动下载数据库文件到 ./app/db/data.sqlite')
sys.exit(1) sys.exit(1)
__all__ = [ __all__ = [
+23
View File
@@ -0,0 +1,23 @@
#!/usr/bin/env python3
# -- coding:utf-8 --
# @Author: markushammered@gmail.com
# @Development Tool: PyCharm
# @Create Time: 2022/4/11
# @File Name: decorators.py
import os
from flask import request
from flask import abort
from functools import wraps
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
View File
Whitespace-only changes.
-26
View File
@@ -1,26 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIEcTCCAtmgAwIBAgIQHnbxwo1i8x5+Py9QyZkLwDANBgkqhkiG9w0BAQsFADCB
pTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMT0wOwYDVQQLDDRERVNL
VE9QLTRQU0xDNk9cVGFwc29AREVTS1RPUC00UFNMQzZPIChKb2hhbiBNYXJrdXMp
MUQwQgYDVQQDDDtta2NlcnQgREVTS1RPUC00UFNMQzZPXFRhcHNvQERFU0tUT1At
NFBTTEM2TyAoSm9oYW4gTWFya3VzKTAeFw0yMjA0MDcxMjU5NTFaFw0yNDA3MDcx
MjU5NTFaMGgxJzAlBgNVBAoTHm1rY2VydCBkZXZlbG9wbWVudCBjZXJ0aWZpY2F0
ZTE9MDsGA1UECww0REVTS1RPUC00UFNMQzZPXFRhcHNvQERFU0tUT1AtNFBTTEM2
TyAoSm9oYW4gTWFya3VzKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AMbxeD2N5xzBADMQfS5HYWJWu8rpkTFdMjcpQSoeBkSQHY6BQ53sFqFVcp/CHwlK
Dz5eC1hRVVaAD4q3rwnS6aPzlm6bJDNEzUJAKwtTYEN7+ZwjSsE5aZ6QkiCOyM86
+tNygwTqnXfPZY7X1XVHuE0GBA517c1LNgX529YOTqPRnITajP1lU2m6Qudlhs+Q
+mQLPsCGL4vT2+Oq1AaKntXnWw0duzJkIFFS1islbQ4wBxOvKUwYeZl26cADVXyp
UjfuOt0T5Ax9O79CaMWjW9yzIlRx70F4tQrpA619oyFH3u2Tm9oA28DVXuYz3835
KEvLDxLmZ57WWkeIT7T8pfsCAwEAAaNZMFcwDgYDVR0PAQH/BAQDAgWgMBMGA1Ud
JQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFARJoO7s5EvePiqav8sT5dB98ay5
MA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQELBQADggGBAFVqF3D4KZxkHsUu
IzwflPCbbvk74xbEtM6Su3eKj2ArwTs4K9ofsWrw5jADCFJPwRC2r06jAnRPiwxB
+i+e3YaAWrTcWVr8qpOoSp1drNqzMPlN7kktqrb9DOFzMGMfXsPjvtmOJr7JQK9W
v8r41L7t9gV9A+rV72ujjz1kC6SIF+8axqghsJ5SbuV6sQ02CxHTCLVOZqkT7DXj
pLsy9+AJjbHllKyAEnrX2GNLCPrlIFpAuO7EYL3yeO2l6mzyvzJDj8gv8IBuy9LC
RTQsesd3iWdxKavhgzvj8bDQjsZefODTgvlsVaL3yMt/q5lFGqpVFSx/7yiAL+OH
T3JcZHxHnizOIghqhalR2WbZ8RWasMV0Pc+DIUvrXIrxs1TeKkXgl4S6X0WWaXXw
ztAvae2j9gngli4Sdw3TZyILO6pwCQqmn6x3vhCZVnX5o6TvrlV/p8gmNRas750Z
5jKgNz5h0TIJ6hJ1xxiyP/StWSWvAnqkmIxHpweY1ZnTuFqv4g==
-----END CERTIFICATE-----
+47
View File
@@ -0,0 +1,47 @@
#!/usr/bin/env python3
# -- coding:utf-8 --
# @Author: markushammered@gmail.com
# @Development Tool: PyCharm
# @Create Time: 2022/4/11
# @File Name: logger.py
import time
import logging.handlers
from colorlog import ColoredFormatter
class CreateLogger:
def __init__(self) -> None:
self.date_format = '%H:%M:%S'
self.info_format_console = '%(log_color)s[%(asctime)s] |%(filename)-12s[%(lineno)s] |%(levelname)-8s |%(message)s'
self.info_format_file = '[%(asctime)s] |%(filename)s[%(funcName)sline:%(lineno)d] |%(levelname)-8s |%(message)s'
self.formatter = ColoredFormatter(fmt=self.info_format_console,
datefmt=self.date_format,
reset=True,
log_colors={
'DEBUG': 'light_purple',
'INFO': 'light_cyan',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red,bold_red'})
self.formatter_file = logging.Formatter(fmt=self.info_format_file,
datefmt=self.date_format)
def get_logger(self) -> logging.Logger:
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
console_logger = logging.StreamHandler() # 输出到终端
console_logger.setFormatter(self.formatter)
log_name = time.strftime('%Y-%m-%d#%H') # 一小时内使用的日志文件都是同一个
file_logger = logging.handlers.RotatingFileHandler(filename=f'./app/logs/{log_name}.log',
maxBytes=102400,
backupCount=5) # 每个日志文件最大102400字节(100Kb)
file_logger.setFormatter(self.formatter_file)
logger.addHandler(console_logger)
logger.addHandler(file_logger)
return logger
@staticmethod
def init_app(app):
pass
+18
View File
@@ -0,0 +1,18 @@
#!/usr/bin/env python3
# -- coding:utf-8 --
# @Author: markushammered@gmail.com
# @Development Tool: PyCharm
# @Create Time: 2022/4/11
# @File Name: password.py
import random
def generate_pwd(length):
"""
生成随机密码
:param length:
:return:
"""
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
return ''.join(random.choice(letters) for _ in range(length))
+5 -3
View File
@@ -11,13 +11,15 @@ from app import create_app
app = create_app('default') app = create_app('default')
if __name__ == '__main__': if __name__ == '__main__':
from app import logger
from gevent import pywsgi from gevent import pywsgi
print('I: 服务运行在 http://127.0.0.1:5000') logger.info('服务运行在 http://127.0.0.1:5000')
try: try:
server = pywsgi.WSGIServer(('0.0.0.0', 5000), app) server = pywsgi.WSGIServer(('0.0.0.0', 5000), app)
server.serve_forever() server.serve_forever()
except KeyboardInterrupt: except KeyboardInterrupt:
print('I: 已退出') logger.info('已退出')
except OSError: except OSError:
print('C: 5000 端口已被占用') logger.critical('5000 端口已被占用')
exit(1)