汇智网 Hubwiz.com
Flask 官方文档中文版
导读
本电子书为 Flask 官方文档的中文译本,最早由网友亦念、云尔和 atupal
发布于网络,由汇智网编目整理,是网上流传最广的 Flask 文档之一。
毫无疑问,对于开发者而言,官方文档是最权威的文档,但往往也最枯燥
的,从官方文档开始使开发者的学习效率大打折扣。为了弥补这一遗憾,
汇智网推出了适合初学者快速上手的在线互动式 Flask 开发课程,课程创
作团队在深入研读 Flask 源码的基础上,引导学习者循序渐进地理解 Flask
中的诸多知识难点。读者可以通过以下链接访问《深入浅出 Flask》在线
教程:http://xc.hubwiz.com/course/562427361bc20c980538e26f?affid=flaskom7878
教程预置了开发环境。进入教程后,可以在每一个知识点立刻进行同步实
践,而不必在开发环境的搭建上浪费时间:
1 / 257
汇智网 Hubwiz.com
Flask 官方文档中文版
汇智网带来的是一种全新的交互式学习方式,可以极大提高学习编程的效
率和学习效果:
汇智网课程内容已经覆盖以下的编程技术:
Node.js、MongoDB、JavaScript、C、C#、PHP、Python、Angularjs、Ionic、React、UML、redis、
mySQL、Nginx、CSS、HTML、Flask、Gulp、Mocha、Git、Meteor、Canvas、zebra、Typescript、
Material Design Lite、ECMAScript、Elasticsearch、Mongoose、jQuery、d3.js、django、cheerio、
SVG、phoneGap、Bootstrap、jQueryMobile、Saas、YAML、Vue.js、webpack、Firebird,jQuery
EasyUI,ruby,asp.net,c++,Express ,Spark......
2 / 257
汇智网 Hubwiz.com
Flask 官方文档中文版
引子
1、欢迎使用 Flask
欢迎阅读 Flask 文档。 本文档分为几个部分。我推荐您先从安装 开始,
之后再浏览 快速入门 章节。 教程 比快速入门更详细地介绍了如何用
Flask 创建一个完整的应用(虽然很小)。 想要深入了解 Flask 内部细
节,请查阅 API 文档。Flask 代码模式 章节介绍了一些常见模式。
Flask 依赖两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集。此
文档不包含这两个库的文档。要细读它们的文档,请点击下面的链接:
Jinja2 文档
Werkzeug 文档
3 / 257
汇智网 Hubwiz.com
Flask 官方文档中文版
2、前言
请在使用 Flask 前阅读。希望本文能回答你一些关于 Flask 的用途和目
标以及 Flask 适用情境的问题。
2.1“微” 是什么意思?
“微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件
(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”
意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决
策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模
板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask
可以与您珠联璧合。
默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有
多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,
如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、
上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但
它已准备好在需求繁杂的生产环境中投入使用。
2.2 配置与惯例
Flask 繁多的配置选项在初始状况下都有一个明智的默认值,并会遵循一
些惯例。 例如,按照惯例,模板和静态文件分别存储在应用 Python 源
4 / 257
汇智网 Hubwiz.com
Flask 官方文档中文版
代码树下的子目录 templates 和 static 里。虽然这个配置可以修改,但你
通常不必这么做, 尤其是在刚开始的时候。
2.3 与 Flask 共成长
当你配置好并运行 Flask,你会发现社区中有许多可以集成到生产环境项
目的扩展。Flask 核心团队会审阅这些扩展,确保经过检验的扩展在未来
版本中仍能适用。
随着你的代码库逐渐壮大,你仍可自由把握项目的设计决策。Flask 会继
续尽可能提供的一个非常简单的胶水层,这也是 Python 应该提供的东西。
你可以在 SQLAlchemy 或其它数据库工具中实现更高级的模式,酌情引
入非关系型数据持久化, 也可以从框架无关的 WSGI——Python 的
Web 接口——工具中获益。
Flask 里有许多钩子用于定制行为。若是需要深层次的定制,可以直接继
承 Flask 类。 如果你对此有兴趣,请阅读 聚沙成塔 章节。如果你好奇
Flask 的设计原则,请查阅 Flask 中的设计决策 章节。
5 / 257
汇智网 Hubwiz.com
Flask 官方文档中文版
3、给有经验程序员的前言
3.1Flask 中的线程局部变量
Flask 的设计抉择之一就是让简单的任务保持简单;它们的实现不应采用
大量的代码, 并且不应对你做出限制。为此,我们选择了一些可能让某
些人觉得惊讶或异端的设计。例如,Flask 内部使用线程局部的对象,这
样你不必在请求内的函数间传递对象来保证线程安全。这个方法很方便,
但为了实现依赖注入,或尝试重用含有与请求挂钩的值的代码之时,需要
一个有效的请求环境(Request Context)。
3.2Web 开发危机四伏
快乐码 Web,安全记心间。
你相当可能编写允许用户在你的服务器上注册并留下数据的 Web 应用。
即便你是这唯一的用户,也会在应用中留下数据。用户们把数据托付给你,
你当然更希望这些数据被妥善安全地保存。
不幸的是,攻陷 Web 应用的手段五花八门。Flask 可保护你免受一个在
现代 Web 应用中最常见的安全问题的困扰:跨站脚本攻击(XSS)。Flask
和底层的 Jinja2 模板引擎已经为你应付得足够好,除非你蓄意把不安全
的 HTML 标记为安全。但仍有很多导致安全问题的可能。
本文档会在 Web 开发中那些需要注意安全的方面警示你。一些安全上的
顾虑远比人们想象的复杂,我们所有人都会有低估漏洞被利用的可能性的
6 / 257
汇智网 Hubwiz.com
Flask 官方文档中文版
时候——直到一个精明的攻击者找出利用我们程序的方法。而且,不要侥
幸认为你的应用没有重要到足够吸引攻击者。取决于攻击的类型,有时候
会是自动化的僵尸机器来检测如何在你数据库中填充垃圾内容、恶意程序
链接或之类东西。
开发者必须在为需求编写代码时留心安全隐患,在这点上,Flask 与其它
框架没有区别。
3.3Python 3 的状态
Python 社区目前处于改善库对 Python 新版本支持的进程中。而当前大
力改进中的处境仍有一些问题,使得用户难以迁移到 Python 3 。这些问
题一部分是因为长时间没有回顾语言中的变化,一部分也是因为我们没有
找出低层 API 应该如何做出修改来适应 Python 3 中 Unicode 的变化。
我们强烈建议在开发时使用 Python 2.6 和 2.7 ,并激活 Python 3 警告。
如果你计划在近期升级到 Python 3 ,我们强烈推荐你阅读 如何编写向后
兼容的 Python 代码 。
继续阅读 安装 或 快速入门 。
7 / 257
汇智网 Hubwiz.com
Flask 官方文档中文版
一、安装
Flask 依赖两个外部库:Werkzeug 和 Jinja2 。 Werkzeug 是一个 WSGI
(在 Web 应用和多种服务器之间的标准 Python 接口) 工具集。Jinja2
负责渲染模板。
那么如何在你的电脑上安装这一切?虽说条条大道通罗马,但是最强大的
方式是 virtualenv ,所以我们首先来看它。
你首先需要 Python 2.6 或更高的版本,所以请确认有一个最新的
Python 2.x 安装。 在 Python 3 中使用 Flask 请参考: Python 3 支持 。
1.1 virtualenv
你很可能想在开发中用上 virtualenv,如果你有生产环境的 shell 权限,
你同样会乐于在生产环境中使用它。
virtualenv 解决了什么问题?如果你像我一样喜欢 Python,不仅会在采
用 Flask 的 Web 应用中用上 virtualenv,在别的项目中你也会想用上它。
你拥有的项目越多,同时使用不同版本的 Python 工作的可能性也就越大,
或者起码需要不同版本的 Python 库。悲惨现实是:常常会有库破坏向后
兼容性,然而正经应用不采用外部库的可能微乎其微。当在你的项目中,
出现两个或更多依赖性冲突时,你会怎么做?
8 / 257