聊聊Flask的项目结构(一)——怎么使用蓝图使项目代码模块化

.idea文件夹是Pycharm IDE的缓存文件,这个是我推荐大家使用的IDE

manage.py 是启动服务的文件,之前我们也把视图路由放在这个文件中,这在实战中是不推荐的,因为如果我们有很多个页面的话,单个manage.py文件都会非常的大,管理和维护起来非常的不方便。

因此我们需要把视图路由独立开来(就是@app.route(“/”)那一部分),在这个时候使用蓝图(blueprint)来划分我们不同的功能模块就显得非常的重要。

什么是蓝图(blueprint)

http://www.zhihu.com/question/31748237/answer/55313054

知乎的答案已经很详细啦,其实简而言之呢就是在同一个app内实现代码的模块化,不同的功能可以封装成不同的Package,管理起来方便的多(有点类似django的app)。

首先我们新建一个名为weixin的python package,然后再在weixin文件夹中新建一个名为admin的python package

在Pycharm中新建的Python Package文件夹下默认有一个init.py的文件,到时我们实例化整个Flask应用,蓝图各个模块的蓝图对象就是在这些文件。

首先我们先在weixin文件夹的根目录下的init.py文件中创建Flask对象(就是将原先写在manage.py中的代码搬到这里)。即:

weixin/init.py 第一部分代码

from flask import Flask

创建一个flask对象

app = Flask(__name__)

接下来我们在weixin下的admin文件夹(即假设我们要开发管理员后台的代码文件夹)中的init.py中创建一个蓝图对象

weixin/admin/init.py

引入blueprint

from flask import Blueprint

创建一个blueprint对象

admin = Blueprint("admin",__name__)

引入视图文件(这里要在admin下创建一个views.py的文件),记得,引入views视图文件一定要在创建蓝图对象的之后

from . import views

对from import的语法不熟悉的朋友建议先熟悉下python先

接下来就要回到weixin下的init.py下注册我们刚才创建的这个admin的蓝图对象了。

weixin/init.py 第二部分代码

从admin包中引入admin并将其赋值给admin_blueprint

from .admin import admin as admin_blueprint

注册蓝图

app.register_blueprint(admin_blueprint, url_prefix='/admin')

register_blueprint是注册蓝图的方法,url_prefix是访问这个蓝图根目录的链接前缀

,像这里把admin作为链接的前缀,那么要访问admin视图文件的根目录的话就是

www.abc.com/admin

接下来我们在视图文件中简单的写一个helloworld的根目录视图函数

weixin/admin/views.py

from . import admin

@admin.route("/")

def index():

    return "Hello World!"

在这里要用admin.route而不是app.route,要注意(即对应蓝图的名称)。

然后manage.py文件修改后如下所示

from weixin import app

if __name__ == "__main__":

    app.run(debug=True)

接下来在cmd中运行整个应用

python manage.py

就可以看到蓝图注册成功,访问admin时会显示admin下的视图函数。

其实整个蓝图的功能就这么简单,当然如果你不喜欢使用也没关系,但是整个项目到达一定的程度时,使用蓝图会是的视图文件的管理变得相对简单,各蓝图需要引用的其他模块都可以独立开来,所以的小编我个人的建议是最好还是使用这个蓝图。

如无意外的化明天应该会讲一下Flask项目结构中静态文件的管理,有这方面需求的朋友可以继续关注哦!

最后附上这次的源码,其中的venv文件请先删除后再根据自己的环境重新创建,目测本次的源码应该还是兼容Python2的。

链接:http://share.weiyun.com/ead1f3b31420b043890aa8af508ba566 (密码:cYLE)

猜你喜欢

转载自blog.csdn.net/u014094101/article/details/80390690
今日推荐