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跑起来了!
 



flask再学习-重构!启动!的更多相关文章

  1. flask再学习-思考之怎么从数据库中查询数据在页面展示!

    看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...

  2. Android再学习-20141022-Activity的生命周期

    20141022-Android再学习 如何在一个应用程序当中定义多个Activity 定义一个类,继承Activity 在该类当中,复写Activity当中的onCreate方法.onCreate( ...

  3. 再学习sqlhelper

    在机房收费重构系统的时候,第一次学习sqlhelper.当时感觉比较简单,没有写博客总结,现在又经过了图书馆的学习,感觉还是有必要写一写的. SqlHelper是一个基于.NETFramework的数 ...

  4. FFmpeg再学习 -- SDL 环境搭建和视频显示

    继续看雷霄骅的 课程资料 - 基于FFmpeg+SDL的视频播放器的制作 一.SDL 简介 参看:WIKI -- Simple DirectMedia Layer 参看:最简单的视音频播放示例9:SD ...

  5. FFmpeg再学习 -- 硬件加速编解码

    为了搞硬件加速编解码,用了一周时间来看 CUDA,接下来开始加以总结. 一.什么是 CUDA (1)首先需要了解一下,什么是 CUDA. 参看:百度百科 -- CUDA 参看:CUDA基础介绍 参看: ...

  6. activiti学习6:启动流程后动态获取流程图

    目录 activiti学习6:启动流程后动态获取流程图 一.绘图原理 二.根据流程定义id绘图 三.根据流程实例id绘图 3.1 基本原理 3.2 当前节点的获取 3.3 走过的节点的获取 3.4 绘 ...

  7. Selenium2学习-042-Selenium3启动Firefox Version 48.x浏览器(ff 原生 geckodriver 诞生)

    今天又被坑了一把,不知谁把 Slave 机的火狐浏览器版本升级为了 48 的版本,导致网页自动化测试脚本无法启动火狐的浏览器,相关的网页自动化脚本全线飘红(可惜不是股票,哈哈哈...),报版本不兼容的 ...

  8. js再学习笔记

    #js再学习笔记 ##基本 1.js严格区分大小写   2.js末尾的分号可加,也可不加   3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...

  9. express再学习

    对比spring,django,再学习express就有很多共通的地方啦... 看的书是一本小书,<express in action>,排版比较好. 昨天开始看,看了快四分之一啦... ...

随机推荐

  1. Python 函数(三)

    Python 3 函数 (闭包.装饰器.递归.高阶函数) 一.闭包 内部函数可以引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量 都保存在返回的函数中,简单的说,这种内部函数可以 ...

  2. W25Q128BV W25Q128FV W25Q128JV 什么区别?

    W25Q128BV  W25Q128FV  W25Q128JV  什么区别?    官网没有找到  BV 的相关信息, 倒是有 FV,FW,JV,JW 信息..2019年1月19日19:09:55 F ...

  3. 手机视频编辑软件APP

    1. VUE    iOS/Android 2.Alive    iOS/Android 3.Splice  iOS 4. Plotagragh+   能让照片动起来的app 5.Cinepic  能 ...

  4. 20155210 Exp5 MSF基础应用

    Exp5 MSF基础应用 一个主动攻击实践,MS08-067 首先利用msfconsole启用msf终端 然后利用search MS08-067搜索漏洞,会显示相应漏洞模块 如图: 根据上图,我们输入 ...

  5. 20155331 丹增旦达 网络攻防 Exp2后门原理与实践

    20155331 丹增旦达<网络攻防>Exp2后门原理与实践 实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启 ...

  6. Spring-data-jpa 学习笔记(二)

            通过上一篇笔记的,我们掌握了SpringData的相关概念及简单的用法.但上一篇笔记主要讲的是Dao层接口直接继承Repository接口,然后再自己定义方法.主要阐述了自定义方法时的 ...

  7. EZ 2018 05 13 NOIP2018 模拟赛(十三)

    这次的比赛真心水,考时估分240,然后各种悠闲乱逛 然后测完T1数组开小了炸成40,T2,T3都没开long long,T2炸成20,T3爆0 掉回1600+的深渊,但是还有CJJ dalao比我更惨 ...

  8. 8、Dockerfile介绍和最佳实践

    一.Dockerfile 概念 1.Dockerfile是什么 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如 ...

  9. 个人新站 【EXP技术分享博客】 落成~ 全新的技术资源~ 欢迎莅临~

    对的,我筹备了大半年的个站技术网站正式开张了~ EXP技术分享博客: http://exp-blog.com CSDN上面大部分文章已经迁移过去了,以后也会更多地在新站点更新~ 为了庆祝新站开张,近期 ...

  10. Kubernetes并发控制与数据一致性的实现原理

    在大型分布式系统中,定会存在大量并发写入的场景.在这种场景下如何进行更好的并发控制,即在多个任务同时存取数据时保证数据的一致性,成为分布式系统必须解决的问题.悲观并发控制和乐观并发控制是并发控制中采用 ...