构建高可用MVC

构建高可用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脚本管理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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窗口行输入启动命令:

1
python manager.py runserver

多环境配置

多环境配置

生产环境配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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"
1
2
3
4
5
6
7
8
#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模块。

1
2
3
4
5
6
7
#www.py
'''
toolbar 需要打开app.debug = True 和设置 SECRET_KEY
'''

from flask_debugtoolbar import DebugToolbarExtension
toolbar = DebugToolbarExtension( app )

错误处理器

1
2
3
4
5
6
7
8
9
10
11
12
13
#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模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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

请求拦截器