什么是AutoLine開(kāi)源平臺(tái)
AutoLine開(kāi)源平臺(tái)是一個(gè)開(kāi)源自動(dòng)化測(cè)試解決方案,基于RobotFramework進(jìn)行二次開(kāi)發(fā),支持RobotFramework幾乎所有的庫(kù)。
源碼地址 github地址: https://github.com/small99/AutoLine
碼 云 地 址:https:///lym51/AutoLine
前言
Flask初始化主要完成以下幾個(gè)功能:
創(chuàng)建Flask應(yīng)用 初始化相關(guān)基礎(chǔ),例如數(shù)據(jù)庫(kù)對(duì)象、配置管理、郵件、登錄試圖、blueprint注冊(cè)等等 利用flask初始化函數(shù)加載默認(rèn)或讀取配置文件初始化2中的相關(guān)環(huán)境
代碼模塊 初始化flask模塊和調(diào)用flask初始化主要在如下圖所示的模塊中: 其中: __init__.py 定義和實(shí)現(xiàn)了flask的相關(guān)環(huán)境初始化 manage.py 中使用指定的配置調(diào)用create_app完成實(shí)際初始化動(dòng)作 源碼分析 # -*- coding: utf-8 -*-
__author__ = "苦葉子"
"""
公眾號(hào): 開(kāi)源優(yōu)測(cè)
Email: lymking@foxmail.com
"""
# 導(dǎo)入flask from flask import Flask # 導(dǎo)入flask郵件插件 from flask_mail import Mail # 導(dǎo)入SQLAlchemy,用于數(shù)據(jù)庫(kù)管理 from flask_sqlalchemy import SQLAlchemy # 導(dǎo)入登錄管理 from flask_login import LoginManager # 導(dǎo)入自己寫(xiě)的配置變量,請(qǐng)參見(jiàn)config.py模塊中定義的config變量 from config import config
# 初始化郵件對(duì)象 mail = Mail() # 初始化數(shù)據(jù)庫(kù)對(duì)象 db = SQLAlchemy() # 初始化登錄管理及登錄視圖 login_manager = LoginManager() login_manager.login_view = 'auth.login'
# 創(chuàng)建flask應(yīng)用函數(shù) def create_app(config_name): # 初始化flask應(yīng)用,并將配置導(dǎo)入之a(chǎn)pp上下文環(huán)境 app = Flask(__name__) app.config.from_object(config[config_name]) config[config_name].init_app(app) # 對(duì)不同的對(duì)象都要初始化flask上下文環(huán)境的目的是: # 為了上這些能夠在flask上下文環(huán)境中使用 # 初始化郵件flask上下文環(huán)境 mail.init_app(app) # 初始化數(shù)據(jù)庫(kù)flask上下文環(huán)境 db.init_app(app) # 初始化登錄管理flask上下文環(huán)境 login_manager.init_app(app) # 判斷是否配置了ssl,是則初始化ssl上下文環(huán)境 if app.config['SSL_REDIRECT']: from flask_sslify import SSLify sslify = SSLify(app)
# 注冊(cè)靜態(tài)導(dǎo)航藍(lán)圖(blueprint) from .main import main as main_blueprint app.register_blueprint(main_blueprint)
# 注冊(cè)認(rèn)證導(dǎo)航藍(lán)圖 from .auth import auth as auth_blueprint app.register_blueprint(auth_blueprint, url_prefix='/auth')
# 注冊(cè)restful api藍(lán)圖 from .api import api_bp as api_blueprint app.register_blueprint(api_blueprint, url_prefix='/api/v1')
# 將創(chuàng)建并初始化好的flask應(yīng)用返回 return app
下面我們看下在manage.py中如何調(diào)用create_app來(lái)初始化全局flask運(yùn)行環(huán)境的。 因?yàn)樯衔?a target="_blank">AutoLine源碼分析之配置管理已經(jīng)全面的分析了manage.py,本文就截取flask應(yīng)用創(chuàng)建的關(guān)鍵代碼: 在manage.py中導(dǎo)入create_app函數(shù)及db變量 from app import create_app, db 2. 調(diào)用create_app初始化flask應(yīng)用 app = create_app(os.environ.get('AUTOBEAT_CONFIG') or 'default') 3. 因?yàn)槲覀冇胒lask migrate來(lái)集成和管理數(shù)據(jù)遷移我們的flask應(yīng)用,所以需要用我們創(chuàng)建的app來(lái)初始化migrate環(huán)境及數(shù)據(jù)遷移
# 創(chuàng)建manager對(duì)象,并初始化migrate環(huán)境(用于數(shù)據(jù)庫(kù)遷移、升級(jí)等) manager = Manager(app) migrate = Migrate(app, db)
# 創(chuàng)建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. 主函數(shù),在main函數(shù)中我們通過(guò)manager.run() 來(lái)運(yùn)行我們的flask應(yīng)用 if __name__ == '__main__': check_python_version() check_version()
if "runserver" in sys.argv: start_trigger()
output_logo()
manager.run()總結(jié) 創(chuàng)建flask應(yīng)用的代碼不多,但涉及的知識(shí)面比較廣,例如你需要了解:
flask創(chuàng)建一個(gè)基本服務(wù)的過(guò)程,你可以看下這個(gè)文檔 http://docs./docs/flask/quickstart.html#a-minimal-application 你需要了解什么是sqlalchemy(python下很完美的ORM框架,支持mysql、mssql、mangodb、oracel等等數(shù)據(jù)庫(kù)的管理)http://www./ 你需要了解migrate如何做數(shù)據(jù)庫(kù)的遷移、升級(jí)等等http://flask-migrate./en/latest/
其他的知識(shí)點(diǎn)就不列了,大家根據(jù)關(guān)鍵字自己去搜索,上述三個(gè)可以先大致瀏覽一下,自己跟著AutoLine的目錄結(jié)構(gòu)把代碼敲一遍,要是能在敲完后,跑起來(lái),那你就掌握了不少東西了。 AutoLine源碼分析之開(kāi)始篇
AutoLine源碼分析之入口源碼
AutoLine源碼分析之配置管理
AutoLine源碼分析之?dāng)?shù)據(jù)庫(kù)模型
動(dòng)下手指往下??????點(diǎn)贊和留言支持下我持續(xù)寫(xiě)
|