Flask大型项目框架结构理解
导语:前段时间学习狗书的flask大型项目框架结构的时候有点混乱,到现在也知道是个啥了,想着,把关系理一理,写一篇博客。也方便后来学习的人查阅。以下是我创建项目时候的结构。
myproject
---->app 项目文件夹
---->static 静态资源
---->templates 网页模板
---->main 项目主文件文件夹
---->__init__.py 项目主文件初始化
---->views.py 项目视图
---->errors.py 项目错误网页视图
---->forms.py 项目表单文件
---->models 项目数据库
---->emails 项目邮箱
---->__init__.py 项目初始化信息
---->config.py 项目配置文件
---->manage.py 项目管理文件
根据自己喜好可以自由配置。首先在数据库中,我们可以配置3个config文件,分别用于开发,测试和上线,然后把这三个转化为字典结构,便于调用。如下
config = {
'development': DevelopmentConfig,
'testing': TestingConfig,
'production': ProductionConfig,
'default': DevelopmentConfig
}
配置信息写好之后,便开始开发了。由于结构的问题,使得我们需要使用蓝图来进行开发。我们在app/main/__init__中,写如下代码
from flask import Blueprint main = Blueprint(“main”,__name__) #"main" 为这个蓝图的名字 from . import view,error #导入需要用到蓝图的两个文件
创建好了蓝图之后,我们还需要在app/__init__中完成对蓝图的注册,代码如下:
from app.main import main as main_blueprint app.register_blueprint(main_blueprint)
看到app,是不是有人就很好奇了,这个app是怎么来的啊,其实就跟我们以前写的一样,狗书上用工厂模式在这个__init__中,不仅用于注册,还用于调用配置信息和初始化第三方扩展。完整代码如下:
from flask import Flask, render_template
from flask.ext.mail import Mail mail = Mail() def create_app(config_name):
app = Flask(__name__) #初始化flask
app.config.from_object(config[config_name]) #config_name就是配置信息的那个字典 config[config_name].init_app(app) 调用配置信息的初始化环境的静态方法 mail.init_app(app) 第三方扩展初始化 #这里写的是上方的代码,用于蓝图注册 return app
创建好了蓝图之后怎么用呢?在app/main/views中,我们创建路由是这样,代码如下:
@main.route("/")
def index():
return redirect(url_for("main.路由名字"))
上面的代码写好了之后,我们需要的就是运行了,为此在manage.py中代码如下:
import os
from app import create_app, db
from app.models import User, Role #导入数据库的两个模型
from flask.ext.script import Manager, Shell #导入flask_script
from flask.ext.migrate import Migrate, MigrateCommand #导入flask_migrate app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db) def make_shell_context():
return dict(app=app, db=db, User=User, Role=Role)
manager.add_command("shell", #避免重复导入数据库模型
Shell(make_context=make_shell_context))
manager.add_command('db', MigrateCommand) if __name__ == '__main__':
manager.run()
Flask大型项目框架结构理解的更多相关文章
- python flask大型项目目录
Hello World 作者背景 应用程序简介 要求 安装 Flask 在 Flask 中的 “Hello, World” 下一步? 模板 回顾 为什么我们需要模板 模板从天而降 模板中控制语句 模板 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——8.理解roslaunch在大型项目中的作用
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- 在大型项目上,Python 是个烂语言吗
Robert Love, Google Software Engineer and Manager on Web Search. Upvoted by Kah Seng Tay, I was the ...
- [Android Pro] 组件化:企业级大型项目必经之路
cp : https://www.csdn.net/article/2011-02-11/291667 摘要:超过一年以上.活跃开发的项目往往到后期陷入了一些共性的问题: 构建速度慢,往往生成一次最终 ...
- 大型项目开发: 隔离 (《大规模C++程序设计》书摘)
书中第六章 隔离. 主要在撰述什么须要定义在头文件?什么应当移到编译单元中? 核心仍然是先区分接口定义与实现细节.实现细节的改变会导致客户代码的又一次编译,从逻辑上也表示与客户代码间可能存在着强耦合. ...
- 3、大型项目的接口自动化实践记录----开放API练习
开始做实际项目前,先拿个网上的简单API练下手 一.API说明: 接口信息 接口名:京东获取单个商品价格 地址:http://p.3.cn/prices/mgets 入参:skuids=J_商品ID& ...
- 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介
1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...
- 一步步从零开始用 webpack 搭建一个大型项目
开篇 很多人都或多或少使用过 webpack,但是很少有人能够系统的学习 webpack 配置,遇到错误的时候就会一脸懵,不知道从哪查起?性能优化时也不知道能做什么,网上的优化教程是不是符合自己的项目 ...
- fw: 专访许鹏:谈C程序员修养及大型项目源码阅读与学习
C家最近也有一篇关于如何阅读大型c项目源代码的文章,学习..融合.. -------------------- ref:http://www.csdn.net/article/2014-06-05 ...
随机推荐
- 大型系列课程之-七夕告白之旅Electron篇
上一篇分享了一下vbs的撩妹攻略,但细心的兄弟会发现,这种脚本式的攻城方案并不得心应手,有很多妹子害怕是病毒根本不敢点击,而且这个脚本界面风格也不漂亮,不能轻易打动妹子的心,怎么破,小编这次在为各位老 ...
- 一文了解:Redis基础类型
Redis基础类型 Redis特点 开源的,BSD许可高级的key-value存储系统 可以用来存储字符串,哈希结构,链表,集合 安装 windows:https://github.com/micro ...
- Java匹马行天下之J2EE框架开发——Spring—>用IDEA开发Spring程序(01)
一.心动不如行动 一.创建项目 *注:在IDEA中我创建的Maven项目,不了解Maven的朋友可以看我之前的博客“我们一起走进Maven——知己知彼”,了解Maven后可以看我之前的博客“Maven ...
- Unity实战案例教程之:不免费的PacMan(初级→中级)
课程内容介绍: 本套课程适合以下人士: - 免费资料没教会你游戏开发的: - 学了Unity基础不知道怎么用在游戏项目里的: - 想快速开发一款好玩的游戏的: - 想学游戏不知道如何入门的: - 对游 ...
- java中File IO流的笔记
1.File文件的属性和操作 boolean exists( ) 判断文件或目录是否存在boolean isFile( ) 判断是否是文件boolean isDirectory( ) 判断是否是目 ...
- Maven 项目使用mybatis的环境搭建-基于xml形式实现查询所有的功能
首先了解一下什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. ...
- [GO语言的并发之道] Goroutine调度原理&Channel详解
并发(并行),一直以来都是一个编程语言里的核心主题之一,也是被开发者关注最多的话题:Go语言作为一个出道以来就自带 『高并发』光环的富二代编程语言,它的并发(并行)编程肯定是值得开发者去探究的,而Go ...
- Lasso估计学习笔记(二)
先看Lasso估计学习笔记(一),这篇是续的上一篇
- 后端开发实践系列之三——事件驱动架构(EDA)编码实践
在本系列的前两篇文章中,笔者分别讲到了后端项目的代码模板和DDD编码实践,在本文中,我将继续以编码实践的方式分享如何落地事件驱动架构. 单纯地讲事件驱动架构(Event Driven Architec ...
- SpringMVC源码分析4:DispatcherServlet如何找到正确的Controller
SpringMVC是目前主流的Web MVC框架之一. 我们使用浏览器通过地址 http://ip:port/contextPath/path进行访问,SpringMVC是如何得知用户到底是访问哪个 ...