1.打造MVC框架:
common/libs:放置一些功能公用的方法。
common/models:放置ORM模型
config:配置文件属性
web/controllers:视图层,处理url和api
web/interceptors:拦截器,用于页面请求,api请求,错误的拦截
web/static:静态资源的存放
web/templates:页面模板的存放
application.py:重构Flask核心对象
manager.py:管理器
www.py:url和api蓝图路由管理器
2.重构我们的Flask:
class Application(Flask): # 重载flask对象,配置分步加载
def __init__(self, import_name, template_folder=None, root_path=None): # 重载初始化方法,重置template位置
super(Application, self).__init__(import_name, template_folder=template_folder, root_path=root_path,
static_folder=None) # 重构,改变template,static等默认值
self.config.from_pyfile('config/base_setting.py') # 加载配置
# export ops_config=local(设置环境变量加载不同的配置文件)
if "ops_config" in os.environ: # 加载配置文件
self.config.from_pyfile('config/%s_setting.py' % os.environ['ops_config'])
db.init_app(self) # 注册到app
db = SQLAlchemy() # 初始化orm对象
app = Application(__name__, template_folder=os.getcwd()+"/web/templates/", root_path=os.getcwd())
manager = Manager(app) # 将App进行包装
在flask源码中,构造方法需要以下参数:
def __init__(
self,
import_name,
static_url_path=None,
static_folder='static',
static_host=None,
host_matching=False,
subdomain_matching=False,
template_folder='templates',
instance_path=None,
instance_relative_config=False,
root_path=None
):
import_name:对象名
static_url_path=None:静态url地址
static_folder:静态文件目录
static_hos:静态主机 template_folder='templates':模板地址
root_path:根目录
我们重载了对象名,模板地址,root_path,静态文件目录
3.在manager.py中启动项目:
from application import app, manager
from flask_script import Server
# web server,自定义命令,runserver自定义server命令,里面是参数,可以取代app.run() manager.add_command("runserver", Server(host='0.0.0.0', port=app.config['SERVER_PORT'], use_debugger=True, use_reloader=True)) def main(): manager.run() # 使用自定义启动方法,启动为manager.py runserver
if __name__ == '__main__': try: import sys sys.exit(main()) except Exception as e: import traceback # 打印所有错误信息 traceback.print_exc()
这里使用了flask_script申明扩展flask能力,Server自定义命令,指定地址,端口,调试模式等,我们就可以用runserver启动
关于加载本地配置还是线上配置,使用export指定脚本变量就可以选择了。默认加载本地的
ok!flask跑起来了!