导语:前段时间学习狗书的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大型项目框架结构理解的更多相关文章

  1. python flask大型项目目录

    Hello World 作者背景 应用程序简介 要求 安装 Flask 在 Flask 中的 “Hello, World” 下一步? 模板 回顾 为什么我们需要模板 模板从天而降 模板中控制语句 模板 ...

  2. SLAM+语音机器人DIY系列:(二)ROS入门——8.理解roslaunch在大型项目中的作用

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  3. 在大型项目上,Python 是个烂语言吗

    Robert Love, Google Software Engineer and Manager on Web Search. Upvoted by Kah Seng Tay, I was the ...

  4. [Android Pro] 组件化:企业级大型项目必经之路

    cp : https://www.csdn.net/article/2011-02-11/291667 摘要:超过一年以上.活跃开发的项目往往到后期陷入了一些共性的问题: 构建速度慢,往往生成一次最终 ...

  5. 大型项目开发: 隔离 (《大规模C++程序设计》书摘)

    书中第六章 隔离. 主要在撰述什么须要定义在头文件?什么应当移到编译单元中? 核心仍然是先区分接口定义与实现细节.实现细节的改变会导致客户代码的又一次编译,从逻辑上也表示与客户代码间可能存在着强耦合. ...

  6. 3、大型项目的接口自动化实践记录----开放API练习

    开始做实际项目前,先拿个网上的简单API练下手 一.API说明: 接口信息 接口名:京东获取单个商品价格 地址:http://p.3.cn/prices/mgets 入参:skuids=J_商品ID& ...

  7. 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介

    1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...

  8. 一步步从零开始用 webpack 搭建一个大型项目

    开篇 很多人都或多或少使用过 webpack,但是很少有人能够系统的学习 webpack 配置,遇到错误的时候就会一脸懵,不知道从哪查起?性能优化时也不知道能做什么,网上的优化教程是不是符合自己的项目 ...

  9. fw: 专访许鹏:谈C程序员修养及大型项目源码阅读与学习

      C家最近也有一篇关于如何阅读大型c项目源代码的文章,学习..融合.. -------------------- ref:http://www.csdn.net/article/2014-06-05 ...

随机推荐

  1. LDAP 服务搭建和后期管理

    LDAP 服务 本文主要在debian配置,如果需要在CentOS上部署,需要修改大部分的路劲,这里需要自行修改. LDAP 服务按照个人理解,也可使理解为一个数据库,但是这个数据库的读写性能不像 M ...

  2. vue在窗口大小改变时强制刷新组件的方法

    mounted () { window.onresize = () => { return (() => { this.$forceUpdate(); })() } }

  3. JavaScript数据结构——链表的实现与应用

    链表用来存储有序的元素集合,与数组不同,链表中的元素并非保存在连续的存储空间内,每个元素由一个存储元素本身的节点和一个指向下一个元素的指针构成.当要移动或删除元素时,只需要修改相应元素上的指针就可以了 ...

  4. java基础精选题

    Integer比较 看下面这段有意思的代码,对数字比较敏感的小伙伴有没有发现异常? public static void main(String[] args) { Integer a = 128,b ...

  5. 微服务SpringCloud之Spring Cloud Config配置中心SVN

    在回来的路上看到一个个的都抱着花,吃了一路的狗粮,原本想着去旁边的工业园里跑跑步呢,想想还是算了,人家过七夕,俺们过巴西.上一博客学习了Spring Cloud Config使用git作为配置中心,本 ...

  6. 佳木斯集训Day1

    23333第一次写博客 其实在佳木斯集训之前我都已经两三个月没打代码了 在佳木斯的时候前几天真心手生,导致了前几次考试考的很差... D1的考试还是比较良心的,T1是一道大模拟,直接枚举最后几位是00 ...

  7. Go中的字符串使用----strings和strconv

    Go中的字符串操作 字符串是工作中最常用的,值得我们专门的练习一下.在Go中使用strings包来操作字符串,这也是内置的包哈,不像Java中要么手写,要么引入common-lang 或者 别的第三方 ...

  8. IOS7.0唯一“设备ID”的获取方法

    ios7.0 以后通过sysctl获得的mac地址已经失效,所有设备均为020000000000. 可以通过苹果的keychain机制,实现设备的唯一ID标示. 具体过程:在app第一次安装时,生成一 ...

  9. 世界十大OTA公司盘点

    世界十大OTA公司盘点 文/刘照慧(执惠旅游联合创始人,首发百度百家) 全球在线旅游公司(OTA)经过多年发展,已经形成较为成熟的商业模式,各大巨头跑马圈地,格局初现, 这两篇文章就梳理出全球按市值( ...

  10. Opengl_入门学习分享和记录_番外篇01(MacOS上如何在Xcode 开始编辑OpenGL)

    写在前面的废话: 哈哈 ,我可真是勤勉呢,今天又来更新了,这篇文章需要大家接着昨天的番外篇00一起食用! 正文开始: 话不多说,先看代码. 这里主要全是使用的glfwwindowhint 这个函数,他 ...