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. TCP和UDP套接字编程 (java实现)

    在了解网络编程之前,我们先了解一下什么叫套接字 套接字即指同一台主机内应用层和运输层之间的接口 由于这个套接字是建立在网络上建立网络应用的可编程接口 因此也将套接字称为应用程序和网络之间的应用程序编程 ...

  2. statefulSet + headless service 学习记录 service :selector --> template :label

    1.statefulset.yaml apiVersion: apps/v1kind: StatefulSetmetadata:   name: webspec:    serviceName: &q ...

  3. Only one complex type allowed as argument to a web api controller action.

    错误内容: message":"An error has occurred.","exceptionMessage":"Only one c ...

  4. python_基础语法

    开始正式接触python的语法: 1. 2.

  5. 大数据入门第二十天——scala入门(二)scala基础01

    一.基础语法 1.变量类型 // 上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型.在scala是可以对数字等基础类型调用方法的. 2.变量声明——能用val的尽量使用val! ...

  6. 20155301 Web基础

    20155301 Web基础 1.基础问题回答 (1)什么是表单 答: 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输入信息的元素 (2)浏 ...

  7. PYQT5实现控制台显示功能

    首先,写一个信号,用来发射标准输出作为信号 class EmittingStream(QtCore.QObject): textWritten = QtCore.pyqtSignal(str) #定义 ...

  8. 对*P++的理解,再联想~~~

    前言: 最近在看一位叫朱有鹏大神的视频,讲的甚好.应此,我的感悟也因此被激发,准备针对朱老师将的内容,结合自己的理解,写一个系列的笔记博客--大家可以去www.zhulaoshi.org观看视频-- ...

  9. EEPROM---AT24Cxx应用介绍

    结论:1.读写AT24CXX芯片,根据容量有多种方式:一.容量为AT24C01~AT24C16,首先发送设备地址(8位地址),再发送数据地址(8位地址),再发送或者接受数据. 二.AT24C32/AT ...

  10. OpenCV学习C++接口 Mat像素遍历详解

    OpenCV学习C++接口 Mat像素遍历详解