文档章节

Flask Web开发实战:入门、进阶与原理解析

greyli
 greyli
发布于 2018/09/20 18:45
字数 5819
阅读 1977
收藏 0

你可以关注我的Twitter(@greylihui)新浪微博(@李辉Grey),或是访问本书主页(helloflask.com/book)了解这本书的最新动态。

购买方式

欢迎访问本书的豆瓣图书页面撰写书评或短评。

为什么说这是一本更好的Flask书

现有的几本Flask书包含下面这些问题:

  • 内容较旧,不论是Flask本身,还是其他扩展和Python库。

  • 包含误区或不完善的代码实现,比如在使用SQLAlchemy建立数据库关系时,出于性能的考虑,一般不会把加载关系记录的方式设为dynamic。

  • 示例程序过于简单,比如甚至没有删除帖子的功能。

  • 内容比较单一,仅包含入门知识。

相对的,这本《Flask Web开发实战:入门、进阶与原理解析》当然避免了以上问题:

  • Flask使用最新的1.0.2版本,使用Pipenv管理示例程序依赖,所有扩展和其他Python库均使用最新版本。不仅如此,项目中使用的前端框架Bootstrap(4.1)、Materialize(1.0)和Semantic-UI(2.3)也均使用最新版本。

  • 纠正了常见误区,并在相应位置给出提示。

  • 包含多个不同复杂程度的示例程序,尽可能的让程序贴近真实使用情况。

  • 如副书名所示,这本书除了基本的入门知识,还包含进阶内容和原理解析。

看到书名,你的第一想法也许是:为什么书名和Miguel Grinberg的书那么像?起书名并非由我一人决定,而且技术书的起名没有多大自由度,你不仅要考虑加入合适的关键词,还要考虑到如何凸显书的主要特点。“Flask Web开发”的确是简洁又突出重点的好名字,我们在后面添加了“实战”,用来着重体现这本书的最大特点。

3个推荐语

这本书内容翔实,推荐给想要系统学习Flask的人。不要漏掉书中的小知识点哦。

—— Flask开发团队(Pallets)核心维护者 Hsiaoming Yang(lepture)

这本《Flask Web开发实战》非常有趣,是一本能够给读者带来帮助的书,作为一个Flask框架的爱好者,我也很期待这本书的出版。

—— 《Redis设计与实现》作者 黄健宏(huangz)

Grey Li is a really helpful contributor to Flask and the Python community. He is making it easier for more people to learn and use Flask.

—— Flask开发团队(Pallets)核心维护者 David Lord(davidism)

8个示例程序、5个项目实例、1个扩展

包含丰富的实例是这本书的最大特点,这也是为什么要把“实战”放到书名里。

书的第一部分(基础篇)共6章,每一章都包含一个示例程序,示例程序包含每章涉及的大部分代码,你可以实际运行程序来查看效果。以第5章《数据库》为例,除了一个简单的演示“增删查改”的笔记程序外,示例程序中还包含“一对多”、“多对一”、“一对一”、“多对多”、“一对多+双向关系”、“一对多+双向关系+使用backref简化关系定义”、“级联设置”“数据库时间监听函数”等15(2 * 7 + 1)个模型类定义和2个事件监听函数(两种实现方式)。

第1~6章以及第13章的示例程序统一包含在helloflask仓库中的demos目录下。

第二部分(实战篇)共5章,每一章都通过一个程序来组织起所有的知识点。这5个程序分别为:留言板SayHello、个人博客Bluelog、图片社交网站Albumy、待办事项程序Todoism和聊天室CatChat。你可以在下面的《章节概括》部分查看每一个示例程序所涉及的知识点。

和《Flask Web开发》中的做法类似,这部分的示例程序均使用Git标签来组织不同阶段的代码,方便你签出相应的版本或是进行对比。

第三部分(进阶篇)第13章《性能优化》通过两个实例程序来介绍使用Flask-Caching和Flask-Assets对Flask程序添加缓存和进行静态资源优化的前后变化对比。第15章《Flask扩展开发》则通过一个简单的为页面中添加社交分享组件的Flask-Share扩展来完整介绍从创建Git仓库到使用twine将包上传到PyPI的完整扩展开发流程。

你可以在文章《Flask Web开发实战》中的示例程序们一文中了解这些程序的具体信息,其中包含大量程序界面截图。

这几个项目的源码和在线Demo链接均可以在helloflask.com看到。

满足80%的读者提议

在文章《写一本Flask书》中,很多知友通过评论给出了希望看到的内容和建议。我做了简单的收集和处理,粗略的浏览,大概有80%的读者提议得到了满足。

内容丰富,大约700页

这本书在介绍基础知识外,还引入了许多进阶技巧。第一部分从第2章开始每一章都包含一个《进阶实践》章节,其中包含一些常见的技巧,比如“如何安全的跳转回上一页”,“使用WTForms表单内置的中文错误消息”,“数据库事件监听”等,具体可以参考下面的《目录》部分。

另外,这本书还介绍了一些被其他Flask书忽略,但又非常实用的知识,比如实现AJAX时Flask和JavaScript交互数据的方式、通过AJAX实现的资料弹窗、在弹窗中实现动态的关注收藏按钮、通过AJAX实现简单的单页程序、实时双向通讯、国际化和本地化、全文搜索、第三方登录、Markdown支持、代码语法高亮、头像裁剪、设置缓存等。

本书会尽量提供多个技术选型,比如第6章《电子邮件》中,除了介绍使用Flask-Mail实现发送电子邮件,还介绍了使用事务邮件服务SendGrid发送电子邮件的两种方式;在第14章《部署上线》中,我介绍了一个基本的服务器初始化过程,包括安装基本的而库、设置SSH密钥登录、设置防火墙等部署,接着才是Gunicorn、Nginx和Supervisor的使用介绍。除了Linux部署,还介绍了使用PythonAnywhere和Heroku的程序部署流程。

尽管如此,在多次修改的过程中,我还是删掉了大量内容(近8万字约240页):

  • 在Flask程序中使用Celery

  • Fabric自动化部署

  • 使用Tox自动化测试

  • 使用Sentry处理日志

  • 使用Docker开发和部署Flask程序

  • NoSQL数据库的使用介绍

  • 使用Frozen-Flask静态化处理程序

  • 静态部署

  • Flask-SSE的使用

  • Travis CI、Coverall的使用

  • 使用GitHub-Flask集成GitHub登录

这些内容或是偏离主题,或是有了更好的替代内容,删掉这些内容一方面可以保证书的内容贴近主题,同时也可以避免成书太厚。因为内容丰富,所以最终完稿共980页,成书大概会在700页左右。

对于这些删减掉的内容,我会抽取有价值的内容并进行完善后陆续发布在专栏中。

关于我

我是李辉,一个Python开发者,Flask开发团队(Pallets Team)的成员。我在GitHub上维护了几个Flask扩展项目,也尝试为多个Flask相关项目贡献代码和处理Issue;除了知乎,我偶尔会在Stack Overflow上回答一些Flask相关的问题。如果你想了解我的项目或书的最新动态,可以关注我的Twitter新浪微博账号。

章节概括

下面是本书的章节概括,简单的介绍了各章的内容,你可以通过下面的《目录》部分来了解详细的内容。本书由四部分组成,分别为基本篇、实战篇、进阶篇和附录,共16章。本书的章节安排经过精心的设计,力求让读者可以循序渐进的掌握Flask开发基础知识和技巧。

第一部分:基础篇 介绍Flask开发相关的基础知识。

  • 第1章:搭建开发环境,编写一个最小的Flask程序并运行它,了解Flask基本知识。

  • 第2章:介绍了Flask与HTTP的交互方式以及相关的Flask功能。

  • 第3章:Jinja2模板的使用和技巧。

  • 第4章:Web表单的创建和表单数据的验证。

  • 第5章:在Flask程序中使用数据库进行CRUD操作,各类数据库关系的建立。

  • 第6章:在Flask程序中发送电子邮件的几种方式,使用Flask-Mail通过SMTP服务器发送,或是通过事务邮件服务SendGrid(SMTP和Web API两种方式)。

第二部分:实战篇 通过几个示例程序来介绍Flask开发中的各类功能实现和技巧。

  • 第7章:通过一个简单的留言板程序SayHello介绍Web开发基本流程和基本的项目管理方式,对第一部分的基础知识进行简单的回顾,最后还介绍了Faker、Flask-Moment和Flask-DebugToolbar的使用。

  • 第8章 :通过个人博客程序Bluelog介绍CRUD操作、用户认证(Flask-Login)、文章评论和回复、后台管理等功能,其中还包括网站主题更换,渲染导航链接等小技巧。

  • 第9章:通过图片社交程序Albumy介绍用户注册和认证、用户权限管理、图片上传(Flask-Dropzone)与处理(Pillow)、用户头像、复杂的数据库关系、复杂的数据库查询、全文搜索(Flask-Whooshee)等内容。

  • 第10章:通过待办事项程序Todoism介绍单页应用、国际化与本地化(Flask-Babel)、Web API、OAuth服务器端实现等内容。

  • 第11章:通过聊天室程序CatChat介绍Websocket应用(实时双向通讯,通过Flask-SocketIO实现)、OAuth客户端实现(第三方登录,通过Flask-OAuthlib实现)、Markdown支持(markdown)、代码语法高亮(pygments)等内容。

第三部分:进阶篇 介绍Flask程序的部署流程:测试、性能优化、部署上线;介绍Flask开发的进阶话题:Flask扩展开发和Flask源码与机制分析。

  • 第12章:介绍Flask程序的自动化测试,包括单元测试和UI测试的编写、计算测试覆盖率和代码质量检查。

  • 第13章:对Flask程序进行性能优化的主要措施,包括函数与数据库查询的性能分析、缓存的使用(Flask-Caching)、静态文件优化(Flask-Assets)。

  • 第14章:介绍部署Flask程序前的准备,以及部署到Linux服务器和云平台Heroku、PythonAnywhere的完整流程。

  • 第15章:通过扩展Flask-Share来介绍编写Flask扩展的完整流程,从创建项目到上传到PyPI。

  • 第16章:介绍了Flask的一些设计理念,包括底层WSGI的相关实现,并对各个主要功能点进行源码分析。

目录

下面是本书的完整目录,不过没有包括4级标题。

第一部分 基础篇

第1章 初识Flask

  • 1.1 搭建开发环境

    • 1.1.1 Pipenv工作流

    • 1.1.2 安装Flask

    • 1.1.3 集成开发环境

  • 1.2 Hello, Flask!

    • 1.2.1 创建程序实例

    • 1.2.2 注册路由

  • 1.3 启动开发服务器

    • 1.3.1 Run,Flask,Run!

    • 1.3.2 更多的启动选项

    • 1.3.3 设置运行环境

  • 1.4 Python Shell

  • 1.5 Flask扩展

  • 1.6 项目配置

  • 1.7 URL与端点

  • 1.8 Flask命令

  • 1.9 模板与静态文件

  • 1.10 Flask与MVC架构

  • 1.11 本章小结

第2章 Flask与HTTP

  • 2.1 请求响应循环

  • 2.2 HTTP请求

    • 2.2.1 请求报文

    • 2.2.2 Request对象

    • 2.2.3 在Flask中处理请求

    • 2.2.4 请求钩子

  • 2.3 HTTP响应

    • 2.3.1 响应报文

    • 2.3.2 在Flask中生成响应

    • 2.3.3 响应格式

    • 2.3.4 来一块Cookie

    • 2.3.5 session:安全的Cookie

  • 2.4 Flask上下文

    • 2.4.1 上下文全局变量

    • 2.4.2 激活上下文

    • 2.4.3 上下文钩子

  • 2.5 HTTP进阶实践

    • 2.5.1 重定向回上一个页面

    • 2.5.2 使用AJAX技术发送异步请求

    • 2.5.3 HTTP服务器端推送

    • 2.5.4 Web安全防范

  • 2.6 本章小结

第3章 模板

  • 3.1 模板基本用法

    • 3.1.1 创建模板

    • 3.1.2 模板语法

    • 3.1.3 渲染模板

  • 3.2 模板辅助工具
    • 3.2.1 上下文

    • 3.2.2 全局对象

    • 3.2.3 过滤器

    • 3.2.4 测试器

    • 3.2.5 模板环境对象

  • 3.3 模板结构组织

    • 3.3.1 局部模板

    • 3.3.2 宏

    • 3.3.3 模板继承

  • 3.4 模板进阶实践

    • 3.4.1 空白控制

    • 3.4.2 加载静态文件

    • 3.4.3 消息闪现

    • 3.4.4 自定义错误页面

    • 3.4.5 JavaScript和CSS中的Jinja2

  • 3.5 本章小结

第4章 表单

  • 4.1 HTML表单

  • 4.2 使用Flask-WTF处理表单

    • 4.2.1 定义WTForms表单类

    • 4.2.2 输出HTML代码

    • 4.2.3 在模板中渲染表单

  • 4.3 处理表单数据

    • 4.3.1 提交表单

    • 4.3.2 验证表单数据

    • 4.3.3 在模板中渲染错误消息

  • 4.4 表单进阶实践

    • 4.4.1 设置错误消息语言

    • 4.4.2 使用宏渲染表单

    • 4.4.3 自定义验证器

    • 4.4.4 文件上传

    • 4.4.5 使用Flask-CKEditor集成富文本编辑器

    • 4.4.6 单个表单多个提交按钮

    • 4.4.7 单个页面多个表单

  • 4.5 本章小结

第5章 数据库

  • 5.1 数据库的分类

    • 5.1.1 SQL

    • 5.1.2 NoSQL

    • 5.1.3 如何选择?

  • 5.2 ORM魔法

  • 5.3 使用Flask-SQLAlchemy管理数据库

    • 5.3.1 连接数据库服务器

    • 5.3.2 定义数据库模型

    • 5.3.3 创建数据库和表

  • 5.4 数据库操作

    • 5.4.1 CRUD

    • 5.4.2 在视图函数里操作数据库

  • 5.5 定义关系

    • 5.5.1 配置Python Shell上下文

    • 5.5.2 一对多

    • 5.5.3 多对一

    • 5.5.4 一对一

    • 5.5.5 多对多

  • 5.6 更新数据库表

    • 5.6.1 重新生成表

    • 5.6.2 使用Flask-Migrate迁移数据库

    • 5.6.3 开发时是否需要迁移?

  • 5.7 数据库进阶实践

    • 5.7.1 级联操作

    • 5.7.2 事件监听

  • 5.8 本章小结

第6章 电子邮件

  • 6.1 使用Flask-Mail发送电子邮件

    • 6.1.1 配置Flask-Mail

    • 6.1.2 构建邮件数据

    • 6.1.3 发送邮件

  • 6.2 使用事务邮件服务SendGird

    • 6.2.1 注册SendGird

    • 6.2.2 SendGrid SMTP转发

    • 6.2.3 SendGrid Web API转发

  • 6.3 电子邮件进阶实践

    • 6.3.1 提供HTML正文

    • 6.3.2 使用Jinja2模板组织邮件正文

    • 6.3.3 异步发送邮件

  • 6.4 本章小结

第二部分 实战篇

第7章 留言板

  • 7.1 使用包组织代码

    • 7.1.1 配置文件

    • 7.1.2 创建程序实例

  • 7.2 Web程序开发流程

    • 7.2.1 程序功能设计

    • 7.2.2 前端页面开发

    • 7.2.3 后端程序开发

  • 7.3 使用Bootstrap-Flask简化页面编写

    • 7.3.1 加载资源文件

    • 7.3.2 快捷渲染表单

  • 7.4 使用Flask-Moment本地化日期和时间

    • 7.4.1 本地化前的准备

    • 7.4.2 使用Flask-Moment集成Moment.js

    • 7.4.3 渲染时间日期

  • 7.5 使用Faker生成虚拟数据

  • 7.6 使用Flask-DebugToolbar调试程序

  • 7.7 Flask配置的两种组织形式

    • 7.7.1 环境变量优先

    • 7.7.2 实例文件夹覆盖

  • 7.8 本章小结

第8章 个人博客

  • 8.1 大型项目结构

    • 8.1.1 使用蓝本模块化程序

    • 8.1.2 使用类组织配置

    • 8.1.3 使用工厂函数创建程序实例

  • 8.2 编写程序骨架

    • 8.2.1 数据库

    • 8.2.2 模板

    • 8.2.3 表单

    • 8.2.4 视图函数

    • 8.2.5 电子邮件支持

  • 8.3 编写博客前台

    • 8.3.1 分页显示文章列表

    • 8.3.2 显示文章正文

    • 8.3.3 文章固定链接

    • 8.3.4 显示分类文章列表

    • 8.3.5 显示评论列表

    • 8.3.6 发表评论与回复

    • 8.3.7 支持回复评论

    • 8.3.8 网站主题切换

  • 8.4 初始化博客

    • 8.4.1 安全存储密码

    • 8.4.2 创建管理员用户

  • 8.5 使用Flask-Login管理用户认证

    • 8.5.1 获取当前用户

    • 8.5.2 登入用户

    • 8.5.3 登出用户

    • 8.5.4 视图保护

  • 8.6 使用CSRFProtect实现CSRF保护

  • 8.7 编写博客后台

    • 8.7.1 文章管理

    • 8.7.2 评论管理

    • 8.7.3 分类管理

  • 8.8 本章小结

第9章 图片社交网站

  • 9.1 项目组织架构

    • 9.1.1 功能式架构

    • 9.1.2 分区式架构

    • 9.1.3 混合式架构

    • 9.1.4 如何选择

  • 9.2 编写程序骨架

    • 9.2.1 数据库模型与虚拟数据

    • 9.2.2 模板与静态文件

  • 9.3 高级用户认证

    • 9.3.1 用户注册

    • 9.3.2 验证邮箱地址

    • 9.3.3 使用装饰器过滤未确认用户

    • 9.3.4 密码重置

  • 9.4 基于用户角色的权限管理

    • 9.4.1 角色与权限模型

    • 9.4.2 设置角色与权限

    • 9.4.3 写入角色与权限

    • 9.4.4 验证用户权限

  • 9.5 使用Flask-Dropzone优化文件上传

    • 9.5.1 配置Flask-Dropzone

    • 9.5.2 渲染上传区域

    • 9.5.3 处理并保存上传图片

  • 9.6 使用Flask-Avatars处理用户头像

    • 9.6.1 默认头像

    • 9.6.2 生成随机头像

  • 9.7 图片展示与管理

    • 9.7.1 在用户主页显示图片列表

    • 9.7.2 图片详情页

    • 9.7.3 上一张下一张跳转

    • 9.7.4 删除确认模态框

    • 9.7.5 举报图片

    • 9.7.6 图片描述

    • 9.7.7 图片标签

    • 9.7.8 用户资料弹窗

  • 9.8 收藏图片

    • 9.8.1 使用关联模型表示多对多关系

    • 9.8.2 添加和取消收藏

    • 9.8.3 收藏者和收藏页面

  • 9.9 用户关注

    • 9.9.1 自引用多对多关系

    • 9.9.2 关注与取消关注

    • 9.9.3 显示关注用户列表

    • 9.9.4 使用AJAX在弹窗中执行关注操作

  • 9.10 消息提醒

    • 9.10.1 提醒消息在数据库中的表示

    • 9.10.2 创建提醒

    • 9.10.3 显示和管理提醒

    • 9.10.4 通过轮询实时更新未读计数

  • 9.11 用户资料与账户设置

    • 9.11.1 编辑个人资料

    • 9.11.2 自定义头像

    • 9.11.3 更改密码

    • 9.11.4 提醒消息开关

    • 9.11.5 将收藏设为仅自己可见

    • 9.11.6 注销账号

  • 9.12 首页与探索

    • 9.12.1 获取正在关注用户的图片

    • 9.12.2 使用联结和分组查询获取热门标签

    • 9.12.3 使用数据库通用函数获取随机图片

  • 9.13 使用Flask-Whooshee实现全文搜索

    • 9.13.1 创建索引

    • 9.13.2 搜索表单

    • 9.13.3 显示搜索结果

  • 9.14 编写网站后台

    • 9.14.1 用户管理

    • 9.14.2 资源管理

    • 9.14.3 面向管理员的用户资料编辑

  • 9.15 本章小结

第10章 待办事项程序

  • 10.1 使用JavaScript和AJAX编写单页程序

    • 10.1.1 单页程序的模板组织

    • 10.1.2 在根页面内切换子页面

    • 10.1.3 生成测试账户

    • 10.1.4 添加新待办条目

  • 10.2 国际化与本地化

    • 10.2.1 使用Flask-Babel集成Babel

    • 10.2.2 区域和语言

    • 10.2.3 文本的国际化

    • 10.2.4 文本的本地化

    • 10.2.5 时间与日期的本地化

  • 10.3 设计并编写Web API

    • 10.3.1 认识Web API

    • 10.3.2 设计优美实用的Web API

    • 10.3.3 使用Flask编写Web API

    • 10.3.4 使用OAuth认证

    • 10.3.5 资源的序列化

    • 10.3.6 资源的反序列化

    • 10.3.7 Web API的测试与发布

  • 10.4 本章小结

第11章 在线聊天室

  • 11.1 编写程序骨架

  • 11.2 Gravatar头像

  • 11.3 使用Flask-SocketIO建立实时双向通讯

    • 11.3.1 建立Socket.IO连接

    • 11.3.2 一条消息的旅程

    • 11.3.3 在线人数统计

    • 11.3.4 通讯频道分离

  • 11.4 使用Flask-OAuthlib实现第三方登录

    • 11.4.1 编写OAuth客户端

    • 11.4.2 注册OAuth程序

    • 11.4.3 处理OAuth2授权

    • 11.4.4 处理OAuth1授权

  • 11.5 聊天室功能增强

    • 11.5.1 无限滚动加载历史消息

    • 11.5.2 Markdown支持

    • 11.5.3 代码语法高亮

    • 11.5.4 标签页消息提醒

    • 11.5.5 浏览器桌面通知

    • 11.5.6 消息管理

  • 11.6 本章小结

第三部分 高级篇

第12章 自动化测试

  • 12.1 认识自动化测试

  • 12.2 Flask测试客户端

  • 12.3 使用unittest编写单元测试

    • 12.3.1 Flask程序的测试固件

    • 12.3.2 编写测试用例

    • 12.3.3 组织测试

    • 12.3.4 运行测试

  • 12.4 使用Selenium进行用户界面测试

    • 12.4.1 安装浏览器与驱动

    • 12.4.2 准备测试环境

    • 12.4.3 编写测试代码

  • 12.5 使用Coverage.py计算测试覆盖率

    • 12.5.1 基本用法

    • 12.5.2 获取测试覆盖率

  • 12.6 使用Flake8检查代码质量

  • 12.7 本章小结

第13章 性能优化

  • 13.1 程序性能分析

    • 13.1.1 函数性能分析

    • 13.1.2 数据库查询分析

  • 13.2 使用Flask-Caching设置缓存

    • 13.2.1 缓存视图函数

    • 13.2.2 缓存其他函数

    • 13.2.3 更新缓存

    • 13.2.4 使用Redis作为缓存后端

  • 13.3 使用Flask-Assets优化静态资源

    • 13.3.1 注册资源集

    • 13.3.2 生成资源集文件

    • 13.3.3 在模板中加载资源集

  • 13.4 本章小结

第14章 部署上线

  • 14.1 传统部署 VS 云部署

  • 14.2 基本部署流程

  • 14.3 部署前的准备

    • 14.3.1 更新程序配置

    • 14.3.2 创建生产环境专用的程序实例

    • 14.3.3 设置迁移工具

    • 14.3.4 程序日志

    • 14.3.5 手动导入环境变量

    • 14.3.6 HTTPS转发

  • 14.4 部署到Linux服务器

    • 14.4.1 使用OpenSSH登录远程主机

    • 14.4.2 安装基本库和工具

    • 14.4.3 安全防护措施

    • 14.4.4 推送代码并初始化程序环境

    • 14.4.5 使用Gunicorn运行程序

    • 14.4.6 使用Nginx提供反向代理

    • 14.4.7 使用Supervisor管理进程

    • 14.4.8 更新部署后的程序

  • 14.5 部署到PythonAnywhere

    • 14.5.1 反向代理设置

    • 14.5.2 创建PythonAnywhere程序

    • 14.5.3 推送代码并初始化程序环境

    • 14.5.4 创建数据库

    • 14.5.5 设置虚拟环境

    • 14.5.6 静态文件

    • 14.5.7 运行和更新程序

  • 14.6 部署到Heroku
    • 14.6.1 通过Heroku Git部署

    • 14.6.2 使用GitHub部署

  • 14.7 下一步做什么?

  • 14.8 本章小结

第15章 Flask扩展开发

  • 15.1 扩展的命名

  • 15.2 扩展项目骨架

  • 15.3 编写扩展类

  • 15.4 添加扩展配置

  • 15.5 实现扩展功能

    • 15.5.1 加载静态资源

    • 15.5.2 创建分享组件

    • 15.5.3 在移动设备上隐藏

  • 15.6 开源发布前的准备

    • 15.6.1 添加文档字符串与注释

    • 15.6.2 编写README与文档

    • 15.6.3 为打包做准备

    • 15.6.4 编写示例程序

    • 15.6.5 编写单元测试

  • 15.7 发布到PyPI

    • 15.7.1 创建PyPI账号

    • 15.7.2 使用setuptools打包

    • 15.7.3 使用twine上传

  • 15.8 编写良好的扩展

  • 15.9 本章小结

第16章 Flask工作原理与机制解析

  • 16.1 阅读Flask源码

    • 16.1.1 获取Flask源码

    • 16.1.2 如何阅读源码

    • 16.1.3 Flask发行版本分析

  • 16.2 Flask的设计理念

    • 16.2.1 “微”框架

    • 16.2.2 两个核心依赖

    • 16.2.3 显式程序对象

    • 16.2.4 本地上下文

    • 16.2.5 三种程序状态

    • 16.2.6 丰富的自定义支持

  • 16.3 Flask与WSGI

    • 16.3.1 WSGI程序

    • 16.3.2 WSGI服务器

    • 16.3.3 中间件

  • 16.4 Flask的工作流程与机制

    • 16.4.1 Flask中的请求响应循环

    • 16.4.2 路由系统

    • 16.4.3 本地上下文

    • 16.4.4 请求与响应对象

    • 16.4.5 session

    • 16.4.6 蓝本

    • 16.4.7 模板渲染

  • 16.5 本章小结

© 著作权归作者所有

greyli

greyli

粉丝 8
博文 2
码字总数 6605
作品 0
徐州
私信 提问
高手问答第 213 期 —— Python 开发者都应该了解的 Flask 框架

OSCHINA 本期高手问答(2018 年 9 月 20 日 — 9 月 26 日)我们请来了李辉@greyli 为大家解答关于 Flask Web 开发方面的问题。 李辉,Flask 官方开发团队(Pallets Team)成员,HelloFlask.com ...

局长
2018/09/19
18.5K
34
【Python Web学习路线】干货整理,不谈虚的,让你短时间高效学好它!

无论是大数据、人工智能还是机器学习,Python都是最热门的首选语言。 学好Python,可以从事Python Web工程师、Python数据分析、人工智能专家等岗位。本期专题,分享的主题是“如何成为一枚优...

Eddie_yang
2018/12/24
0
0
一个 Pythoner的 Awesome List

从大三接触 Python 到现在几乎已经有两年的接触经验了,除去中间有一年左右接私活写写 Android 和 Lamp 之外,有 Python 实际项目开发经验也算是 9 个多月,也稍微算得上是一个入门级别的 Py...

无与童比
2016/12/10
0
0
开源电子书

目录 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WEB服务器 版本控制 编辑器 NoSQL PostgreSQL MySQL 管理和监控 项目相关 设计模式 Web 大数据 编程艺术 ...

zting科技
2017/12/11
0
0
Python进阶(五十)-解析Flask运行原理

Python进阶(五十)-解析Flask运行原理   在学习Python Web开发过程中,掌握了Flask的开发方法。经过一段时间的视频学习,回过头来对Flask的运行原理做一简要解析,以增强自己对Flask的了解。...

sunhuaqiang1
2017/05/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

简单了解 mvc 、mvp 与 MVVM 区别

mvc - 划分三个角色: 用户操作 view 层与 controller 层 mvp view 与 model 不发生联系,用户直接操作 p 层 mvvm view 与 model 双向绑定 react 中 v = f(s) 状态 到 视图的映射。改变状态就...

lemos
18分钟前
2
0
Python爬虫新手教程:手机APP数据抓取 pyspider

1. 手机APP数据----写在前面 继续练习pyspider的使用,最近搜索了一些这个框架的一些使用技巧,发现文档竟然挺难理解的,不过使用起来暂时没有障碍,估摸着,要在写个5篇左右关于这个框架的教...

计算机编程
20分钟前
2
0
巨杉Talk | 拒绝数据碎片化,原生分布式数据库灵活应对数据管理需求

2019年7月19-20日,以“运筹帷幄,数揽未来”为主题的DAMS中国数据智能管理峰会在上海青浦区成功举办。在DAMS峰会上,巨杉数据库为大家带来了题为“云架构下的分布式数据库设计与实践”的主题...

巨杉数据库
27分钟前
1
0
北京课工场教育科技公司喜获第八届中国软件杯企业突出贡献奖

百舸争流,奋楫者先;千帆竞发,勇进者胜。7月18 日, 第八届“中国软件杯” 大学生软件设计大赛决赛(简称“大赛”) 及颁奖典礼在江苏南京软件谷科创城圆满落下帷幕。课工场作为赛事支持单...

IFTNews
40分钟前
2
0
C++ *与&

*获取地址的值 &获取变量地址

colin_86
46分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部