构建高可用MVC

MVC目录制定

  • application.py 全局变量类
  • common
    • libs
    • models
  • config 配置文件夹
  • controllersMVC中的C层文件夹
    • index.py
  • manager.py 入口文件
  • requirement.txt python 扩展列表
  • static静态文件css、js、images存放文件夹
  • templates 模板存放文件夹
    • common
    • index.html
  • www.py 路由核心文件

MVC优化

flask_script自定义启动命令

需要安装flask_script脚本管理。

#application.py
from flask_script import Manager

manager = Manager( app )

#manager.py
from flask_script import Server,Command
from application import manager

##web server
manager.add_command( "runserver",Server( host = "0.0.0.0",use_debugger=True,use_reloader= True ) )

##create_table
@Command
def create_all():
    from application import db
    from common.models.user import User
    db.create_all()

def main():
    manager.run()

if __name__ == "__main__":
    #app.run( host = "0.0.0.0",debug=True )
    try:
        import sys
        sys.exit( main() )
    except Exception as e:
        import traceback
        traceback.print_exc()

cmd窗口行输入启动命令:

python manager.py runserver

多环境配置

多环境配置

生产环境配置文件

#production_setting.py
#生产环境配置文件
from config.base_setting import *
DEBUG = False

#local_setting.py
#本地开发环境配置文件
from config.base_setting import *
#SQLALCHEMY_ECHO = True
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1/mysql"

SECRET_KEY = "imooc123456"

#base_setting.py
#公用配置
DEBUG = True
SQLALCHEMY_ECHO = False
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ENCODING = "utf8mb4"
SECRET_KEY = "123kevin"
#application.py
app.config.from_pyfile( "config/base_setting.py" )

#ops_config=local|production
#linux export ops_config=local|production
#windows set ops_config=local|production
if "ops_config" in os.environ:
    app.config.from_pyfile( "config/%s_setting.py"%( os.environ['ops_config'] ) )

flask_debugtoolbar

需要先安装flask_debugtoolbar模块。

#www.py
'''
toolbar 需要打开app.debug = True 和设置 SECRET_KEY
'''

from flask_debugtoolbar import DebugToolbarExtension
toolbar = DebugToolbarExtension( app )

错误处理器

#www.py
'''
错误处理器
'''
from interceptors.errorHandler import *


#errorHandler.py
from application import app

@app.errorhandler( 404 )
def error_404( e ):
    return "404 not found"

请求拦截器

interceptors文件夹下新建Auth.py模块

#www.py

'''
请求拦截器
'''
from interceptors.Auth import *

#Auth.py
from application import app

#在请求之前就拦截
@app.before_request
def before_request():
    app.logger.info( "--------before_request--------" )
    return

@app.after_request
def after_request( response ):
    app.logger.info("--------after_request--------")
    return response

请求拦截器