分享

AutoLine源码分析之Flask初始化模块

 开源优测 2021-12-09

什么是AutoLine开源平台

AutoLine开源平台是一个开源自动化测试解决方案,基于RobotFramework进行二次开发,支持RobotFramework几乎所有的库。

源码地址

github地址: https://github.com/small99/AutoLine

码 云 地 址:https:///lym51/AutoLine

前言

        Flask初始化主要完成以下几个功能:

  1. 创建Flask应用

  2. 初始化相关基础,例如数据库对象、配置管理、邮件、登录试图、blueprint注册等等

  3. 利用flask初始化函数加载默认或读取配置文件初始化2中的相关环境

代码模块

初始化flask模块和调用flask初始化主要在如下图所示的模块中:

其中:

__init__.py  定义和实现了flask的相关环境初始化

manage.py 中使用指定的配置调用create_app完成实际初始化动作

源码分析

# -*- coding: utf-8 -*-

__author__ = "苦叶子"

"""

公众号: 开源优测

Email: lymking@foxmail.com

"""

# 导入flask
from flask import Flask
# 导入flask邮件插件
from flask_mail import Mail
# 导入SQLAlchemy,用于数据库管理
from flask_sqlalchemy import SQLAlchemy
# 导入登录管理
from flask_login import LoginManager
# 导入自己写的配置变量,请参见config.py模块中定义的config变量
from config import config

# 初始化邮件对象
mail = Mail()
# 初始化数据库对象
db = SQLAlchemy()
# 初始化登录管理及登录视图
login_manager = LoginManager()
login_manager.login_view = 'auth.login'

# 创建flask应用函数
def create_app(config_name):
# 初始化flask应用,并将配置导入之app上下文环境
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)

# 对不同的对象都要初始化flask上下文环境的目的是:
# 为了上这些能够在flask上下文环境中使用
# 初始化邮件flask上下文环境
   mail.init_app(app)
# 初始化数据库flask上下文环境
   db.init_app(app)
# 初始化登录管理flask上下文环境
login_manager.init_app(app)

# 判断是否配置了ssl,是则初始化ssl上下文环境
   if app.config['SSL_REDIRECT']:
from flask_sslify import SSLify
sslify = SSLify(app)

# 注册静态导航蓝图(blueprint)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)

# 注册认证导航蓝图
from .auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint, url_prefix='/auth')

# 注册restful api蓝图
from .api import api_bp as api_blueprint
app.register_blueprint(api_blueprint, url_prefix='/api/v1')

# 将创建并初始化好的flask应用返回
return app

下面我们看下在manage.py中如何调用create_app来初始化全局flask运行环境的。

因为上文AutoLine源码分析之配置管理已经全面的分析了manage.py,本文就截取flask应用创建的关键代码:

  1. 在manage.py中导入create_app函数及db变量

from app import create_app, db

  2. 调用create_app初始化flask应用

app = create_app(os.environ.get('AUTOBEAT_CONFIG') or 'default')

  3.  因为我们用flask migrate来集成和管理数据迁移我们的flask应用,所以需要用我们创建的app来初始化migrate环境及数据迁移

# 创建manager对象,并初始化migrate环境(用于数据库迁移、升级等)
manager = Manager(app)
migrate = Migrate(app, db)

# 创建migrate shell上下文
def make_shell_context():
return dict(app=app, db=db, User=User, Role=Role)

# 新增一些shell 命令
manager.add_command('shell', Shell(make_context=make_shell_context))
manager.add_command('db', MigrateCommand)

  4.  主函数,在main函数中我们通过manager.run() 来运行我们的flask应用


if __name__ == '__main__':

check_python_version()
check_version()

if "runserver" in sys.argv:
start_trigger()

output_logo()

manager.run()

总结

        创建flask应用的代码不多,但涉及的知识面比较广,例如你需要了解:

  1. flask创建一个基本服务的过程,你可以看下这个文档 http://docs./docs/flask/quickstart.html#a-minimal-application

  2. 你需要了解什么是sqlalchemy(python下很完美的ORM框架,支持mysql、mssql、mangodb、oracel等等数据库的管理)http://www./

  3. 你需要了解migrate如何做数据库的迁移、升级等等http://flask-migrate./en/latest/

其他的知识点就不列了,大家根据关键字自己去搜索,上述三个可以先大致浏览一下,自己跟着AutoLine的目录结构把代码敲一遍,要是能在敲完后,跑起来,那你就掌握了不少东西了。

AutoLine源码分析之开始篇

AutoLine源码分析之入口源码

AutoLine源码分析之配置管理

AutoLine源码分析之数据库模型

动下手指往下⬇️⬇️⬇️点赞和留言支持下我持续写

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多