Flask 学习1 项目搭建 目录结构

一、程序的目录结构

|ProjectName
|-app/ 程序包
|  |-__init__.py
|  |-models.py  // 数据库模型
|  |-emails.py  // 邮件处理程序
|  |-main/  // 程序模块,根据业务区分,不同的模块可以各自拥有自己的单独目录
|  |  |-__init__.py
|  |  |-views.py
|  |  |-errors.py
|  |  |-forms.py
|  |-templates/  // Jinja2的html模板
|  |-static/  // css、js、图片等静态文件
|-migrations/  // 数据库迁移文件夹
|-venv/  // 虚拟环境
|-tests/  // 单元测试程序,可以包含多个文件
|  |-__init__.py
|  |-test*.py  // 单元测试文件
|-manage.py  // 启动程序
|-config.py  // 全局配置文件
|readme.txt

二、程序中各文件说明

这是初学备忘:以下各程序文件只有最基本的内容,主要是为了让程序能运行起来,通过这些目录结构以及各文件之间的引用,弄明白各文件的作用,以及他们之间的关系。后续在不断完善功能的过程中,各文件的内容会不断的增加。

首先我们新建一个名为app(也可以是别的名字)的python package,然后再在app文件夹中新建一个名为main的python package
在Pycharm中新建的Python Package文件夹下默认有一个__init__.py的文件,到时我们实例化整个Flask应用,蓝图各个模块的蓝图对象就是在这些文件。

2.1创建蓝图对象

什么是蓝图(blueprint)
http://www.zhihu.com/question/31748237/answer/55313054
知乎的答案已经很详细啦,其实简而言之呢就是在同一个app内实现代码的模块化,不同的功能可以封装成不同的Package,管理起来方便的多(有点类似django的app)。

我们先在 app/main/__init__.py 文件中创建一个蓝图对象:

from flask import Blueprint
main = Blueprint('main',__name__)

from . import views

通过实例化一个Blueprint 类对象可以创建蓝本。这个构造函数有两个必须指定的参数:
蓝本的名字和蓝本所在的包或模块。和程序一样,大多数情况下第二个参数使用Python 的__name__ 变量即可。

2.2 路由文件 views.py

程序的路由保存在包里的app/main/views.py 模块中,而错误处理程序保存在app/main/ errors.py模块中。导入这两个模块就能把路由和错误处理程序与蓝本关联起来。
注意,这些模块在app/main/__init__.py脚本的末尾导入,这是为了避免循环导入依赖,因为在 views.pyerrors.py 中还要导入蓝本main。

app/main/views.py:蓝本中定义的程序路由

from . import main
@main.route('/')	//注意这里是 main.route 而不再是 app.route
@main.route('/index')
def index():
    return "Hello, World!"

2.3 app/__init__.py:程序包的构造文件,使用工厂函数,注册蓝本

from flask import Flask
from config import Config

def create_app():
    app = Flask(__name__)
    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)	//注册蓝本

    return app

2.4启动脚本 manage.py

from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)

通过构建第一章节的目录结构,以及第二章节中提到的4个程序文件,即可运行起来一个最基本的flask项目,目录结构中提到的 config.pymodels.pyerrors.pyemails.py等文件在这个例子中并没有使用到,在后续完善功能的过程中会陆续增加其内容。

猜你喜欢

转载自blog.csdn.net/ezgame/article/details/85179184