Пример #1
0
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
Пример #2
0
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)
Пример #3
0
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
Пример #4
0
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