Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog

目录

前文列表

用 Flask 来写个轻博客 (1) — 创建项目

用 Flask 来写个轻博客 (2) — Hello World!

用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy

用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表

用 Flask 来写个轻博客 (5) — (M)VC_SQLAlchemy 的 CRUD 详解

用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)

用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)

用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级

用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览

用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法

用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数

用 Flask 来写个轻博客 (12) — M(V)C_编写和继承 Jinja 模板

用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验

用 Flask 来写个轻博客 (14) — M(V)C_实现项目首页的模板

用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单

扩展阅读

用蓝图实现模块化应用

第一期 · 如何理解Flask中的蓝图?

Blueprint 蓝图

Blueprint 蓝图是一种用来扩展已有 Flask 应用结构的方法,通过蓝图的思想我们能够把自己的 Application 拆分成为不同的组件。通常,一个组件代表了 Application 的一个功能模块,我们称之为一个蓝图,但本质上是由一些被注册到这个蓝图中的视图集所组成的。而且还可以在该蓝图中定义其独有的模板文件目录(template_folder)和静态文件目录(static_folder)。最后,将一个个这样的蓝图 Register 到 Flask 的主 app 中,最终整合成为一个完整的 Application,所以蓝图在 Flask 中充当了 MVC 架构中的 Controller 角色。在本项目里,我们也会使用蓝图的方法来重构已往的代码和目录结构。

定义一个蓝图

NOTE : 这里只是一个辅助理解的例子,并不作用到项目中。

  • vim admin_pages/admin.py
from flask import Blueprint

admin = Blueprint(
'admin',
'__name__',
template_folder='template/admin',
static_folder='static/admin',
url_prefix='/admin') @admin.route('/')
def home():
return render_template('home.html')
  • NOTE 1: 蓝图类Blueprint 必须接收两个参数 蓝图名(admin)当前的包名(__name__)

  • NOTE 2: 可选参数定义了该蓝图到那里去寻找所需要的文件(template_folder/static__folder)

  • NOTE 3: 由于指定了参数 template_folder 所以该蓝图的视图函数 home() 不会到默认的 template/ 目录下寻找模板文件 home.html 而是到 template/admin/ 目录下寻找 home.html

  • NOTE 4: 参数 url_prefix 会为 URL 添加上前缀 admin,即:视图函数 home() 的 URL 路由实际上是 /admin/ ,而不是 /

  • NOTE 5: 所以当我们在模板中使用 url_for() 函数时,传入的参数就不是 url_for(‘home’) 了,而是 url_for(‘admin.home’) 或 url_for(‘.home’) 如果需要查找的 URL 路由跟当前视图函数是在同一个蓝图下的话。

注册一个蓝图

需要将蓝图注册到 Flask 的 app 中,该蓝图才能够生效。

  • main.py
from admin_pages import admin
app.register_blueprint(admin)

这就是定义一个蓝图并将该蓝图注册到 app 中的过程。接下来我们就会将蓝图应用到 blog 项目中来。

创建蓝图 blog

  • views.py

    创建蓝图首先我们要在视图函数的模块中使用 Blueprint class 来生成一个蓝图对象,使视图模块编程蓝图模块。
from os import path

from flask import render_template, Blueprint

blog_blueprint = Blueprint(
'blog',
__name__,
template_folder=path.join('templates/blog'),
url_prefix='/blog')
  • 由于为蓝图 blog 定义了新的模板文件存放路径,所以将该蓝图所需要的模板文件都从 templates/ move 到 templates/blog/ 下。

  • 将所有的 app.route() 修改为使用蓝图的路由定义,将视图函数都注册到蓝图中:

@blog_blueprint.route('/')
@blog_blueprint.route('/<int:page>')
def home(page=1):
"""View function for home page"""
  • main.py

    if __name__ == '__main__': 之后将新建的蓝图对象 blog_blueprint 注册到 app 中:
if __name__ == '__main__':
app.register_blueprint(blog_blueprint)
app.run()

现在蓝图 blog 将所有的视图函数都搬离 app 注册到蓝图 blog 中了,但是 app 对象作为入口不能够没有视图函数,所以在为其定义一个根目录视图函数,并且重定向到蓝图 blog 的 home() 中:

from flask import Flask, redirect

@app.route('/')
def index():
return redirect(url_for('blog.home'))

NOTE: 这里的 url_for 传入了 blog.name 而不是 blog_blueprint.home 是因为 Flask 内部搜索的关键字为蓝图的名字而不是蓝图对象的变量名。

最新文章

  1. Android与Struts2简单json通信
  2. SSAS计算列如果是中文名称时,必须要在名字外加中括号
  3. uva 12284 直接判断
  4. CSS3动画之无缝滚动
  5. thrift TNonblockingServer 使用
  6. SaberRD之交流分析
  7. bzoj3064 Tyvj 1518 CPU监控
  8. node.js之express框架入门篇
  9. C语言嵌套循环作业
  10. 阿里云弹性容器实例产品 ECI ——云原生时代的基础设施
  11. Windows server 2012配置WebDeploy发布网站
  12. OpenStack上搭建Q版的公共环境准备(step1)
  13. Linux下进程/程序网络带宽占用情况查看工具 -- NetHogs
  14. Android轮询器,RxJava Interval;
  15. 一个漂亮的 PlaceHolder
  16. Ubuntu 12.04下安装QQ 2012 Beta3(转)
  17. centos7添加服务
  18. nginx 点播mp4方法
  19. CSS—— em的详解
  20. 用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql

热门文章

  1. 测开之路五十六:实现类似unittest的断言
  2. iview+vue 表格中添加图片
  3. selenium:Xpath定位详解
  4. 使用UI Automation实现自动化测试--5-7
  5. [Leetcode] 176.第二高薪水
  6. elementUI table宽度自适应fit
  7. db2 连接数据库与断开数据库
  8. js返回顶部小Demo
  9. Nginx 常用基础模块
  10. go语言从例子开始之Example14.变参函数