mirror of
https://github.com/letian1650/N3RD.git
synced 2025-01-25 04:05:17 +08:00
92 lines
3.7 KiB
Python
92 lines
3.7 KiB
Python
|
#!/usr/bin/env python3
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
# File : app.py
|
|||
|
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
|||
|
# Date : 2022/9/6
|
|||
|
|
|||
|
from flask.app import Flask
|
|||
|
from flask_migrate import Migrate
|
|||
|
from base import config
|
|||
|
from base.database import db
|
|||
|
from utils.log import logger
|
|||
|
from utils.system import get_wlan_info, getHost
|
|||
|
from controllers import *
|
|||
|
from js.rules import getRuleLists
|
|||
|
import sys
|
|||
|
|
|||
|
|
|||
|
def create_flask_app():
|
|||
|
app = Flask(__name__, static_folder='static', static_url_path='/static')
|
|||
|
app.config.from_object(config) # 单独的配置文件里写了,这里就不用弄json中文显示了
|
|||
|
app.register_blueprint(home.home, url_prefix='')
|
|||
|
app.register_blueprint(admin.admin, url_prefix='/admin')
|
|||
|
app.register_blueprint(vod.vod, url_prefix='')
|
|||
|
app.register_blueprint(cls.cls, url_prefix='/cls')
|
|||
|
app.register_blueprint(layui.layui, url_prefix='/layui')
|
|||
|
app.register_blueprint(parse.parse, url_prefix='/parse')
|
|||
|
# app.register_blueprint(web.web, url_prefix='/web',template_folder='templates/cmsV10/mxpro/html/index/')
|
|||
|
app.register_blueprint(web.web, url_prefix='/web')
|
|||
|
app.logger.name = "drLogger"
|
|||
|
# lsg = service.storage_service()
|
|||
|
logger.info(f"默认解析地址:{app.config.get('PLAY_URL')}")
|
|||
|
# logger.info(f"自定义播放解析地址:{lsg.getItem('PLAY_URL')}")
|
|||
|
logger.info(f'当前操作系统{sys.platform}')
|
|||
|
rule_list = getRuleLists()
|
|||
|
wlan_info, _ = get_wlan_info()
|
|||
|
logger.info(rule_list)
|
|||
|
logger.info(
|
|||
|
f'局域网: {getHost(1, app.config.get("HTTP_PORT"))}/index\n本地: {getHost(0, app.config.get("HTTP_PORT"))}/index\nwlan_info:{wlan_info}')
|
|||
|
db.init_app(app)
|
|||
|
db.app = app
|
|||
|
db.create_all(app=app)
|
|||
|
return app
|
|||
|
|
|||
|
|
|||
|
app = create_flask_app()
|
|||
|
migrate = Migrate(app, db)
|
|||
|
max_version = (3, 11) # 小于3.11的版本(3.6-3.10)
|
|||
|
max_version_str = ".".join([str(i) for i in max_version])
|
|||
|
now_python_ver = ".".join([str(i) for i in sys.version_info[:3]])
|
|||
|
no_error = True
|
|||
|
if sys.version_info < max_version:
|
|||
|
try:
|
|||
|
from gevent.pywsgi import WSGIServer
|
|||
|
|
|||
|
# from gevent import monkey
|
|||
|
# monkey.patch_all() # 多线程,只能放在最开头,import其它包之前
|
|||
|
|
|||
|
from gevent import monkey
|
|||
|
|
|||
|
monkey.patch_socket() # 开启socket异步
|
|||
|
print(f'当前python版本{now_python_ver}为{max_version_str}及以下,支持gevent')
|
|||
|
|
|||
|
except Exception as e:
|
|||
|
print(f'gevent使用过程中发生了错误:{e}')
|
|||
|
no_error = False
|
|||
|
else:
|
|||
|
print(f'当前python版本{now_python_ver}为{max_version_str}及以上,不支持gevent')
|
|||
|
|
|||
|
if __name__ == "__main__":
|
|||
|
http_port = int(app.config.get('HTTP_PORT', 5705))
|
|||
|
http_host = app.config.get('HTTP_HOST', '0.0.0.0')
|
|||
|
threaded = app.config.get('THREAD')
|
|||
|
GEVENT = app.config.get('GEVENT')
|
|||
|
print(GEVENT)
|
|||
|
if threaded is None:
|
|||
|
threaded = True
|
|||
|
if GEVENT is None:
|
|||
|
debug = False
|
|||
|
# https://www.zhihu.com/question/64096559
|
|||
|
print(f'threaded:{threaded},GEVENT:{GEVENT}')
|
|||
|
# if sys.version_info < (3, 9) and not sys.platform.startswith('win'):
|
|||
|
use_gevent = sys.version_info < max_version # 是否使用协程
|
|||
|
is_debug = (not GEVENT) and sys.platform.startswith('win') # windows开调试模式
|
|||
|
print(f'开启调试模式:{is_debug}')
|
|||
|
if use_gevent and no_error and not is_debug:
|
|||
|
# server = WSGIServer(('0.0.0.0', 5705), app, handler_class=WebSocketHandler,log=app.logger)
|
|||
|
# server = WSGIServer(('0.0.0.0', 5705), app, handler_class=WebSocketHandler,log=None)
|
|||
|
server = WSGIServer((http_host, http_port), app, log=logger)
|
|||
|
server.serve_forever()
|
|||
|
else:
|
|||
|
app.run(debug=False, host=http_host, port=http_port, threaded=threaded)
|