导语:前段时间学习狗书的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. java并发编程(十三)----(JUC原子类)引用类型介绍(CAS和ABA的介绍)

    这一节我们将探讨引用类型原子类:AtomicReference, AtomicStampedRerence, AtomicMarkableReference.AtomicReference的使用非常简 ...

  2. exe4j打包--jar打包exe

    本文重点介绍如何将我们写的java代码打包成在电脑上可以运行的exe文件.这里只介绍直接打包成exe的方法,至于打包成exe安装包下节介绍 test 软件准备 exe4j集合包下载地址(下节内容也在这 ...

  3. HomeKit智能球泡

    产品名称: 智能LED灯泡调光调色 接入苹果HomeKit家庭(无需网关).天猫精灵.小爱.小度.Google.ALEXA 产品价格:9.9 本产品是针对HomeKit的产品,没有iphone手机,配 ...

  4. node一键发布,并运行

    作为一个前端开发人员如果你只会写一些业务代码,从程序员的角度来考虑已经可以了.但是从架构的角度来考虑那远远不够: 在此记录下成长中的经历: 想要达成的目的:运行一个脚本实现代码的打包,上传至服务器并部 ...

  5. java NIO知多少

    背景 Linux系统中的IO操作内部相当复杂,下面是一张带图片的LinuxIO相关层级关系: 下面是一个简化版本Linux内部IO层级图: 对此我的理解,java程序员版本的IO理解: java中的I ...

  6. 日志文件写入失败(permission denied)

    用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案. 在讲这个问题之前可能需要简单介绍下Linu ...

  7. Flink 源码解析 —— Standalone Session Cluster 启动流程深度分析之 Task Manager 启动

    Task Manager 启动 https://t.zsxq.com/qjEUFau 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Ma ...

  8. zookeeper和dubbo安装与搭建

    Zookeeper+Dubbo安装与搭建 (原创:黑小子-余) 本文有借鉴:https://www.cnblogs.com/UncleYong/p/10737119.html (一)zookeeper ...

  9. Linux配置部署_新手向(二)——Nginx安装与配置

    目录 前言 Nginx 配置(后续补充) 小结 @ 前言 上一篇整完Linux系统的安装,紧接着就开始来安装些常用的东西吧,首先Nginx. Nginx 简介 Nginx作为转发,负载均衡,凭着其高性 ...

  10. 吉特日化MES-电子批记录普通样本

    在实施吉特日化配料系统的时候,客户希望一键式生成生产过程电子批记录,由于功能的缺失以及部分设备的数据暂时还无法完全采集到,先做一个普通样本的电子批记录格式打印. 电子批记录包含如下几个部分: 1.  ...