def init_app(config_path): """ 全局初始化 import_name Flask程序所在的包(模块),传 __name__ 就可以 其可以决定 Flask 在访问静态文件时查找的路径 static_path 静态文件访问路径(不推荐使用,使用 static_url_path 代替) static_url_path 静态文件访问路径,可以不传,默认为:/ + static_folder static_folder 静态文件存储的文件夹,可以不传,默认为 static template_folder 模板文件存储的文件夹,可以不传,默认为 templates """ # 创建app应用对象 app = Flask(import_name=__name__) # 设置项目根目录 app.BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 加载配置 # flask中支持多种配置方式,通过app.config来进行加载,我们会这里常用的是配置类 Config = load_config(config_path) app.config.from_object(Config) # 数据库初始化 db.init_app(app) redis.init_app(app) # session存储初始化 init_session(app) session_store.init_app(app) # 数据迁移初始化 migrate.init_app(app, db) # 添加数据迁移的命令到终端脚本工具中 manager.add_command('db', MigrateCommand) # 日志初始化 app.log = log.init_app(app) # 蓝图注册 init_blueprint(app) # 初始化json-rpc jsonrpc.init_app(app) # 初始化终端脚本工具 manager.app = app # 注册自定义命令 load_command(manager) return manager
from flask import Flask from flask_wtf.csrf import CSRFProtect import os csrf = CSRFProtect() app = Flask(__name__) app.jinja_env.add_extension('pyjade.ext.jinja.PyJadeExtension') app.BASE_DIR = os.path.abspath(os.path.dirname(__file__)) #app.debug=True app.csrf_enabled = True app.csrf_session_key = "FgJT4DYVdWchOEm24Wy1vl7d" app.secret_key = "e96TBjtHB1pFHA4oid2eHTxh" csrf.init_app(app) import port.views from port.mod_jobs.views import mod_jobs from port.mod_ccm.views import mod_ccm from port.mod_jobs.models import * from port.mod_ccm.models import * app.register_blueprint(mod_jobs) app.register_blueprint(mod_ccm) db.bind('sqlite', 'port.db', create_db=True) db.generate_mapping(create_tables=True) db1.bind('sqlite', 'port.db', create_db=True) db1.generate_mapping(create_tables=True)
def init_app(config_path): """ 全局初始化 :return: """ # 创建app应用对象 app = Flask(__name__) # 项目根目录 app.BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 加载导包路径 sys.path.insert(0, os.path.join(app.BASE_DIR, "application/utils/language")) # 加载配置 Config = load_config(config_path) app.config.from_object(Config) # 数据库初始化 db.init_app(app) app.db = db redis.init_app(app) mongo.init_app(app) # 数据转换器的初始化,必须放在db初始化的后面 ma.init_app(app) # session存储初始化 init_session(app) session_store.init_app(app) # 数据迁移初始化 migrate.init_app(app, db) # 添加数据迁移的命令到终端脚本工具中 manager.add_command('db', MigrateCommand) # 日志初始化 app.log = log.init_app(app) # 初始化终端脚本工具 manager.app = app # 注册自定义命令 load_command(manager) # 蓝图注册 init_blueprint(app) # 初始化json-rpc jsonrpc.init_app(app) # jwt初始化 jwt.init_app(app) # admin站点 admin.init_app(app) # 项目语言 babel.init_app(app) # 数据种子生成器[faker] app.faker = Faker(app.config.get("LANGUAGE")) # qrcode初始化配置 QRCode.init_app(app) # cors cors.init_app(app, resources={r"/api/*": {"origins": "*"}}) # socketio socketio.init_app(app, cors_allowed_origins=app.config["CORS_ALLOWED_ORIGINS"], async_mode=app.config["ASYNC_MODE"], debug=app.config["DEBUG"]) # 改写runserver命令 if sys.argv[1] == "runserver": manager.add_command("run", socketio.run(app, host=app.config["HOST"], port=app.config["PORT"])) return manager
def create_app(): # 初始化项目实例 app = Flask(__name__, template_folder=TEMPLATE_FOLDER, static_folder=STATIC_FOLDER) app.secret_key = app.config['SECRET_KEY'] # 导入配置项 app.config.from_object(config) app.config.from_object(redis_config) log.init_app(app) # 注册路由 urls.register(app) # 注册数据库 db.init_app(app) # 注册登录组件 login_manager.init_app(app) # 注册session组件 session.init_app(app) # 定时任务 scheduler.init_app(app) scheduler.start() # csrf 认证 csrf.init_app(app) # 注册 swagger swagger.init_app(app) # css,js assets_env.init_app(app) assets_env.register('main_js', main_js) assets_env.register('main_css', main_css) # 将变量注册到jinja全局变量 app.add_template_global(app.config['PROJECTNAME'], 'PROJECTNAME') app.add_template_global(app.config['STATIC_URL'], 'STATIC_URL') app.add_template_global(app.config['VERSION'], 'VERSION') app.BASE_DIR = BASE_DIR app.LOG_DIR = BASE_DIR + '/logs' # app.add_template_global(app.config['LOGIN_URL'] + '?cburl=' + app.config['BASE_URL'], 'LOGIN_URL') # app.add_template_global(app.config['LOGOUT_URL'] + '?cburl=' + app.config['BASE_URL'], 'LOGOUT_URL') # 钩子 在请求执行之前 @app.before_first_request def before_first_request(): import time from backend.models.TaskModel import RemotecmdTaskModel, InterfaceTaskModel from utils.command import remotecommand, doHttpRequest logfile = app.LOG_DIR + '/' + time.strftime('%Y%m%d', time.localtime( time.time())) + '/' if not os.path.exists(logfile): os.makedirs(logfile) tasks_remote = [x for x in RemotecmdTaskModel.query.filter(RemotecmdTaskModel.run_status == 1).all()] tasks_interface = [x for x in InterfaceTaskModel.query.filter(InterfaceTaskModel.run_status == 1).all()] if len(tasks_remote) > 0: for task in tasks_remote: # 将任务起起来 scheduler.add_job(id=task.task_remotecmd_name, name=task.task_remotecmd_name, func=remotecommand, args=(task.task_remotecmd_host, task.task_remotecmd_port, task.task_remotecmd_username, task.task_remotecmd_password, task.task_remotecmd_cmd_value, "{0}{1}_{2}.log".format(logfile, task.task_remotecmd_name, task.id), ), trigger=task.task_remotecmd_trigger_type, weeks=int( task.task_remotecmd_trigger_value) if task.task_remotecmd_trigger_arg == 'weeks' else 0, days=int( task.task_remotecmd_trigger_value) if task.task_remotecmd_trigger_arg == 'days' else 0, hours=int( task.task_remotecmd_trigger_value) if task.task_remotecmd_trigger_arg == 'hours' else 0, minutes=int( task.task_remotecmd_trigger_value) if task.task_remotecmd_trigger_arg == 'minutes' else 0, seconds=int( task.task_remotecmd_trigger_value) if task.task_remotecmd_trigger_arg == 'seconds' else 0, ) if len(tasks_interface) > 0: for task in tasks_interface: scheduler.add_job(id=task.task_interface_name, name=task.task_interface_name, func=doHttpRequest, args=(task.task_interface_url, task.task_interface_params, 0 if task.task_interface_method == 'GET' else 1, 0, "{0}{1}_{2}.log".format(logfile, task.task_interface_name, task.id), ), trigger=task.task_interface_trigger_type, weeks=int( task.task_interface_trigger_value) if task.task_interface_trigger_arg == 'weeks' else 0, days=int( task.task_interface_trigger_value) if task.task_interface_trigger_arg == 'days' else 0, hours=int( task.task_interface_trigger_value) if task.task_interface_trigger_arg == 'hours' else 0, minutes=int( task.task_interface_trigger_value) if task.task_interface_trigger_arg == 'minutes' else 0, seconds=int( task.task_interface_trigger_value) if task.task_interface_trigger_arg == 'seconds' else 0, ) @app.errorhandler(BaseError) def custom_error_handler(e): if e.level in [BaseError.LEVEL_WARN, BaseError.LEVEL_ERROR]: if isinstance(e, OrmError): app.logger.exception('%s %s' % (e.parent_error, e)) else: app.logger.exception('错误信息: %s %s' % (e.extras, e)) response = jsonify(e.to_dict()) response.status_code = e.status_code return response return app