Flask Web开发实战 : 入门,进阶与原理解析 = Python Web development with flask 🔍
李辉著
北京:机械工业出版社, Web 开发技术丛书, 1, 2018
中文 [zh] · PDF · 23.9MB · 2018 · 📘 非小说类图书 · 🚀/duxiu/lgli/lgrs/nexusstc/zlib · Save
描述
这是一本面向Python程序员的,全面介绍Python Web框架Flask的书。关于本书的详细介绍、相关资源等更多信息可以访问本书的官方主页http://helloflask.com/book了解。
• 国内首本Flask著作,在内容上涵盖完整的Flask Web开发学习路径,在实践上包含完整的Flask Web程序开发流程。同时兼容Python2 .7和Python3.6。
• 内容最新,基于Flask 1.0.2版本,所有的Python库、前端框架和JavaScript库均使用最新版本。
• 内容全面,除了基础知识,还包含Web API、全文搜索、国际化和本地化、第三方登录、AJAX、WebSocket、源码分析、扩展开发等实用内容。
• 实战性强,包含8个示例程序,5个实战项目和1个Flask扩展。实战项目包括留言板、个人博客、图片社交网站、...
这是一本面向Python程序员的,全面介绍Python Web框架Flask的书。关于本书的详细介绍、相关资源等更多信息可以访问本书的官方主页http://helloflask.com/book了解。
• 国内首本Flask著作,在内容上涵盖完整的Flask Web开发学习路径,在实践上包含完整的Flask Web程序开发流程。同时兼容Python2 .7和Python3.6。
• 内容最新,基于Flask 1.0.2版本,所有的Python库、前端框架和JavaScript库均使用最新版本。
• 内容全面,除了基础知识,还包含Web API、全文搜索、国际化和本地化、第三方登录、AJAX、WebSocket、源码分析、扩展开发等实用内容。
• 实战性强,包含8个示例程序,5个实战项目和1个Flask扩展。实战项目包括留言板、个人博客、图片社交网站、待办事项程序和聊天室,分别对应不同的知识点,难度递增。
• 5个实战项目的Git标签经过精心设置,每个标签都对应新增的某个程序功能。
• 全书所有章节均经过精心设计和编排,力求满足不同水平读者的需要,并且让读者可以循序渐进的掌握Flask开发知识和技巧。
• 通过丰富的图表和代码示例讲解复杂知识点,尽量做到通俗易懂。
本书共16章,分为三部分。
第一部分 基础篇(第1~6章)
通过大量的程序实例详细介绍了Flask的所有基础知识,同时在每章的后面又提供了一些进阶技巧,供进阶读者学习。
第二部分 实战篇(第7~11章)
通过5个真实的项目案例来串接和阐释不同的知识点,难度逐渐递增。这5个案例分别为:留言板SayHello、个人博客Bluelog、图片社交网站Albumy、待办事项程序Todoism和聊天室CatChat。
第三部分 进阶篇(第12~16章)
首先介绍了Flask程序的部署流程:测试、性能优化和部署上线;然后通过一个真实的实例讲解了Flask扩展的开发,最后以源代码为切入点深入剖析了Flask的实现原理与主要工作机制。
• 国内首本Flask著作,在内容上涵盖完整的Flask Web开发学习路径,在实践上包含完整的Flask Web程序开发流程。同时兼容Python2 .7和Python3.6。
• 内容最新,基于Flask 1.0.2版本,所有的Python库、前端框架和JavaScript库均使用最新版本。
• 内容全面,除了基础知识,还包含Web API、全文搜索、国际化和本地化、第三方登录、AJAX、WebSocket、源码分析、扩展开发等实用内容。
• 实战性强,包含8个示例程序,5个实战项目和1个Flask扩展。实战项目包括留言板、个人博客、图片社交网站、...
这是一本面向Python程序员的,全面介绍Python Web框架Flask的书。关于本书的详细介绍、相关资源等更多信息可以访问本书的官方主页http://helloflask.com/book了解。
• 国内首本Flask著作,在内容上涵盖完整的Flask Web开发学习路径,在实践上包含完整的Flask Web程序开发流程。同时兼容Python2 .7和Python3.6。
• 内容最新,基于Flask 1.0.2版本,所有的Python库、前端框架和JavaScript库均使用最新版本。
• 内容全面,除了基础知识,还包含Web API、全文搜索、国际化和本地化、第三方登录、AJAX、WebSocket、源码分析、扩展开发等实用内容。
• 实战性强,包含8个示例程序,5个实战项目和1个Flask扩展。实战项目包括留言板、个人博客、图片社交网站、待办事项程序和聊天室,分别对应不同的知识点,难度递增。
• 5个实战项目的Git标签经过精心设置,每个标签都对应新增的某个程序功能。
• 全书所有章节均经过精心设计和编排,力求满足不同水平读者的需要,并且让读者可以循序渐进的掌握Flask开发知识和技巧。
• 通过丰富的图表和代码示例讲解复杂知识点,尽量做到通俗易懂。
本书共16章,分为三部分。
第一部分 基础篇(第1~6章)
通过大量的程序实例详细介绍了Flask的所有基础知识,同时在每章的后面又提供了一些进阶技巧,供进阶读者学习。
第二部分 实战篇(第7~11章)
通过5个真实的项目案例来串接和阐释不同的知识点,难度逐渐递增。这5个案例分别为:留言板SayHello、个人博客Bluelog、图片社交网站Albumy、待办事项程序Todoism和聊天室CatChat。
第三部分 进阶篇(第12~16章)
首先介绍了Flask程序的部署流程:测试、性能优化和部署上线;然后通过一个真实的实例讲解了Flask扩展的开发,最后以源代码为切入点深入剖析了Flask的实现原理与主要工作机制。
备用文件名
lgli/9787111606598---da8b55ade4bab166a91380831f47a62e.pdf
备用文件名
lgrsnf/9787111606598---da8b55ade4bab166a91380831f47a62e.pdf
备用文件名
zlib/Computers/Web Development/李辉/Flask Web 开发实战:入门、进阶与原理解析_5640630.pdf
备选标题
Flask Web开发实战 Python Web development with flask : 入门、进阶与原理解析
备选标题
Flask Web 开发实战:入门、进阶与原理解析
备用出版商
China Machine Press
备用版本
Web kai fa ji shu cong shu, Di 1 ban, Beijing, 2018
备用版本
China, People's Republic, China
备用版本
2021
元数据中的注释
{"isbns":["7111606590","9787111606598"],"last_page":704,"publisher":"机械工业出版社","series":"Web开发技术丛书"}
元数据中的注释
Bookmarks: p1 (p2): 第一部分 基础篇
p1-1 (p2): 第1章 初识Flask
p1-1-1 (p3): 1.1搭建开发环境
p1-1-1-1 (p3): 1.1.1 Pipenv工作流
p1-1-1-2 (p7): 1.1.2安装Flask
p1-1-1-3 (p8): 1.1.3集成开发环境
p1-1-2 (p11): 1.2 Hello,Flask!
p1-1-2-1 (p11): 1.2.1创建程序实例
p1-1-2-2 (p12): 1.2.2注册路由
p1-1-3 (p14): 1.3启动开发服务器
p1-1-3-1 (p14): 1.3.1 Run,Flask,Run!
p1-1-3-2 (p18): 1.3.2更多的启动选项
p1-1-3-3 (p18): 1.3.3设置运行环境
p1-1-4 (p20): 1.4 Python Shell
p1-1-5 (p21): 1.5 Flask扩展
p1-1-6 (p22): 1.6项目配置
p1-1-7 (p23): 1.7 URL与端点
p1-1-8 (p23): 1.8 Flask命令
p1-1-9 (p24): 1.9模板与静态文件
p1-1-10 (p25): 1.10 Flask与MVC架构
p1-1-11 (p26): 1.11本章小结
p1-2 (p27): 第2章 Flask与HTTP
p1-2-1 (p27): 2.1请求响应循环
p1-2-2 (p29): 2.2 HTTP请求
p1-2-2-1 (p29): 2.2.1请求报文
p1-2-2-2 (p31): 2.2.2 Request对象
p1-2-2-3 (p34): 2.2.3在Flask中处理请求
p1-2-2-4 (p37): 2.2.4请求钩子
p1-2-3 (p38): 2.3 HTTP响应
p1-2-3-1 (p39): 2.3.1响应报文
p1-2-3-2 (p40): 2.3.1在Flask中生成响应
p1-2-3-3 (p43): 2.3.2响应格式
p1-2-3-4 (p46): 2.3.3来一块Cookie
p1-2-3-5 (p49): 2.3.4 session:安全的Cookie
p1-2-4 (p54): 2.4 Flask上下文
p1-2-4-1 (p54): 2.4.1上下文全局变量
p1-2-4-2 (p55): 2.4.2激活上下文
p1-2-4-3 (p56): 2.4.3上下文钩子
p1-2-5 (p57): 2.5 HTTP进阶实践
p1-2-5-1 (p57): 2.5.1重定向回上一个页面
p1-2-5-2 (p60): 2.5.2使用AJAX技术发送异步请求
p1-2-5-3 (p64): 2.5.3 HTTP服务器端推送
p1-2-5-4 (p65): 2.5.4 Web安全防范
p1-2-6 (p74): 2.6本章小结
p1-3 (p75): 第3章 模板
p1-3-1 (p75): 3.1模板基本用法
p1-3-1-1 (p76): 3.1.1创建模板
p1-3-1-2 (p77): 3.1.2模板语法
p1-3-1-3 (p78): 3.1.3渲染模板
p1-3-2 (p80): 3.2模板辅助工具
p1-3-2-1 (p80): 3.2.1上下文
p1-3-2-2 (p82): 3.2.2全局对象
p1-3-2-3 (p83): 3.2.3过滤器
p1-3-2-4 (p85): 3.2.4测试器
p1-3-2-5 (p87): 3.2.5模板环境对象
p1-3-3 (p88): 3.3模板结构组织
p1-3-3-1 (p88): 3.3.1局部模板
p1-3-3-2 (p88): 3.3.2宏
p1-3-3-3 (p90): 3.3.3模板继承
p1-3-4 (p93): 3.4模板进阶实践
p1-3-4-1 (p93): 3.4.1空白控制
p1-3-4-2 (p94): 3.4.2加载静态文件
p1-3-4-3 (p98): 3.4.3消息闪现
p1-3-4-4 (p100): 3.4.4自定义错误页面
p1-3-4-5 (p101): 3.4.5 JavaScript和CSS中的Jinja2
p1-3-5 (p103): 3.5本章小结
p1-4 (p104): 第4章 表单
p1-4-1 (p104): 4.1 HTML表单
p1-4-2 (p106): 4.2使用Flask-WTF处理表单
p1-4-2-1 (p106): 4.2.1定义WTForms表单类
p1-4-2-2 (p109): 4.2.2输出HTML代码
p1-4-2-3 (p110): 4.2.3在模板中渲染表单
p1-4-3 (p112): 4.3处理表单数据
p1-4-3-1 (p112): 4.3.1提交表单
p1-4-3-2 (p113): 4.3.2验证表单数据
p1-4-3-3 (p117): 4.3.3在模板中渲染错误消息
p1-4-4 (p118): 4.4表单进阶实践
p1-4-4-1 (p118): 4.4.1设置错误消息语言
p1-4-4-2 (p120): 4.4.2使用宏渲染表单
p1-4-4-3 (p121): 4.4.3自定义验证器
p1-4-4-4 (p122): 4.4.4文件上传
p1-4-4-5 (p129): 4.4.5使用Flask-CKEditor集成富文本编辑器
p1-4-4-6 (p132): 4.4.6单个表单多个提交按钮
p1-4-4-7 (p133): 4.4.7单个页面多个表单
p1-4-5 (p137): 4.5本章小结
p1-5 (p138): 第5章 数据库
p1-5-1 (p139): 5.1数据库的分类
p1-5-1-1 (p139): 5.1.1 SQL
p1-5-1-2 (p139): 5.1.2 NoSQL
p1-5-1-3 (p140): 5.1.3如何选择?
p1-5-2 (p140): 5.2 ORM魔法
p1-5-3 (p142): 5.3使用Flask-SQLAlchemy管理数据库
p1-5-3-1 (p142): 5.3.1连接数据库服务器
p1-5-3-2 (p144): 5.3.2定义数据库模型
p1-5-3-3 (p145): 5.3.3创建数据库和表
p1-5-4 (p146): 5.4数据库操作
p1-5-4-1 (p147): 5.4.1 CRUD
p1-5-4-2 (p151): 5.4.2在视图函数里操作数据库
p1-5-5 (p156): 5.5定义关系
p1-5-5-1 (p157): 5.5.1配置Python Shell上下文
p1-5-5-2 (p158): 5.5.2一对多
p1-5-5-3 (p164): 5.5.3多对一
p1-5-5-4 (p165): 5.5.4一对一
p1-5-5-5 (p166): 5.5.5多对多
p1-5-6 (p168): 5.6更新数据库表
p1-5-6-1 (p168): 5.6.1重新生成表
p1-5-6-2 (p169): 5.6.2使用Flask-Migrate迁移数据库
p1-5-6-3 (p171): 5.6.3开发时是否需要迁移?
p1-5-7 (p172): 5.7数据库进阶实践
p1-5-7-1 (p172): 5.7.1级联操作
p1-5-7-2 (p175): 5.7.2事件监听
p1-5-8 (p177): 5.8本章小结
p1-6 (p178): 第6章 电子邮件
p1-6-1 (p179): 6.1使用Flask-Mail发送电子邮件
p1-6-1-1 (p179): 6.1.1配置Flask-Mail
p1-6-1-2 (p182): 6.1.2构建邮件数据
p1-6-1-3 (p182): 6.1.3发送邮件
p1-6-2 (p183): 6.2使用事务邮件服务SendGird
p1-6-2-1 (p183): 6.2.1注册SendGird
p1-6-2-2 (p185): 6.2.2 SendGrid SMTP转发
p1-6-2-3 (p185): 6.2.3 SendGrid Web API转发
p1-6-3 (p188): 6.3电子邮件进阶实践
p1-6-3-1 (p188): 6.3.1提供HTML正文
p1-6-3-2 (p189): 6.3.2使用Jinja2模板组织邮件正文
p1-6-3-3 (p191): 6.3.3异步发送邮件
p1-6-4 (p192): 6.4本章小结
p2 (p194): 第二部分 实战篇
p2-1 (p194): 第7章 留言板
p2-1-1 (p195): 7.1使用包组织代码
p2-1-1-1 (p196): 7.1.1配置文件
p2-1-1-2 (p197): 7.1.2创建程序实例
p2-1-2 (p198): 7.2 Web程序开发流程
p2-1-2-1 (p199): 7.2.1程序功能设计
p2-1-2-2 (p200): 7.2.1前端页面开发
p2-1-2-3 (p202): 7.2.3后端程序开发
p2-1-3 (p206): 7.3使用Bootstrap-Flask简化页面编写
p2-1-3-1 (p207): 7.3.1加载资源文件
p2-1-3-2 (p207): 7.3.2快捷渲染表单
p2-1-4 (p209): 7.4使用 Flask-Moment本地化日期和时间
p2-1-4-1 (p209): 7.4.1本地化前的准备
p2-1-4-2 (p209): 7.4.2使用Flask-Moment集成Moment…js
p2-1-4-3 (p210): 7.4.3渲染时间日期
p2-1-5 (p213): 7.5使用Faker生成虚拟数据
p2-1-6 (p215): 7.6使用Flask-DebugToolbar调试程序
p2-1-7 (p216): 7.7 Flask配置的两种组织形式
p2-1-7-1 (p217): 7.7.1环境变量优先
p2-1-7-2 (p217): 7.7.2实例文件夹覆盖
p2-1-8 (p218): 7.8本章小结
p2-2 (p219): 第8章 个人博客
p2-2-1 (p220): 8.1大型项目结构
p2-2-1-1 (p221): 8.1.1使用蓝本模块化程序
p2-2-1-2 (p227): 8.1.2使用类组织配置
p2-2-1-3 (p228): 8.1.3使用工厂函数创建程序实例
p2-2-2 (p232): 8.2编写程序骨架
p2-2-2-1 (p233): 8.2.1数据库
p2-2-2-2 (p240): 8.2.2模板
p2-2-2-3 (p246): 8.2.3表单
p2-2-2-4 (p249): 8.2.4视图函数
p2-2-2-5 (p249): 8.2.5电子邮件支持
p2-2-3 (p251): 8.3编写博客前台
p2-2-3-1 (p251): 8.3.1分页显示文章列表
p2-2-3-2 (p258): 8.3.2显示文章正文
p2-2-3-3 (p259): 8.3.3文章固定链接
p2-2-3-4 (p262): 8.3.4显示分类文章列表
p2-2-3-5 (p263): 8.3.5显示评论列表
p2-2-3-6 (p266): 8.3.6发表评论与回复
p2-2-3-7 (p267): 8.3.7支持回复评论
p2-2-3-8 (p269): 8.3.8网站主题切换
p2-2-4 (p271): 8.4初始化博客
p2-2-4-1 (p271): 8.4.1安全存储密码
p2-2-4-2 (p273): 8.4.2创建管理员用户
p2-2-5 (p275): 8.5使用Flask-Login管理用户认证
p2-2-5-1 (p276): 8.5.1获取当前用户
p2-2-5-2 (p277): 8.5.2登入用户
p2-2-5-3 (p278): 8.5.3登出用户
p2-2-5-4 (p279): 8.5.4视图保护
p2-2-6 (p281): 8.6使用CSRFProtect实现CSRF保护
p2-2-7 (p283): 8.7编写博客后台
p2-2-7-1 (p284): 8.7.1文章管理
p2-2-7-2 (p291): 8.7.2评论管理
p2-2-7-3 (p297): 8.7.3分类管理
p2-2-8 (p298): 8.8本章小结
p2-3 (p299): 第9章 图片社交网站
p2-3-1 (p300): 9.1项目组织架构
p2-3-1-1 (p300): 9.1.1功能式架构
p2-3-1-2 (p302): 9.1.2分区式架构
p2-3-1-3 (p303): 9.1.3混合式架构
p2-3-1-4 (p303): 9.1.4如何选择
p2-3-2 (p303): 9.2编写程序骨架
p2-3-2-1 (p305): 9.2.1数据库模型与虚拟数据
p2-3-2-2 (p307): 9.2.2模板与静态文件
p2-3-3 (p308): 9.3高级用户认证
p2-3-3-1 (p309): 9.3.1用户注册
p2-3-3-2 (p311): 9.3.2验证邮箱地址
p2-3-3-3 (p315): 9.3.3使用装饰器过滤未确认用户
p2-3-3-4 (p316): 9.3.4密码重置
p2-3-4 (p319): 9.4基于用户角色的权限管理
p2-3-4-1 (p319): 9.4.1角色与权限模型
p2-3-4-2 (p320): 9.4.2设置角色与权限
p2-3-4-3 (p321): 9.4.3写入角色与权限
p2-3-4-4 (p323): 9.4.4验证用户权限
p2-3-5 (p325): 9.5使用Flask-Dropzone优化文件上传
p2-3-5-1 (p326): 9.5.1配置Flask-Dropzone
p2-3-5-2 (p328): 9.5.2渲染上传区域
p2-3-5-3 (p329): 9.5.3处理并保存上传图片
p2-3-6 (p334): 9.6使用Flask-Avatars处理用户头像
p2-3-6-1 (p335): 9.6.1默认头像
p2-3-6-2 (p335): 9.6.2生成随机头像
p2-3-7 (p337): 9.7图片展示与管理
p2-3-7-1 (p338): 9.7.1在用户主页显示图片列表
p2-3-7-2 (p341): 9.7.2图片详情页
p2-3-7-3 (p342): 9.7.3上一张下一张跳转
p2-3-7-4 (p344): 9.7.4删除确认模态框
p2-3-7-5 (p346): 9.7.5举报图片
p2-3-7-6 (p347): 9.7.6图片描述
p2-3-7-7 (p349): 9.7.7图片标签
p2-3-7-8 (p353): 9.7.8用户资料弹窗
p2-3-8 (p358): 9.8收藏图片
p2-3-8-1 (p358): 9.8.1使用关联模型表示多对多关系
p2-3-8-2 (p360): 9.8.2添加和取消收藏
p2-3-8-3 (p362): 9.8.3收藏者和收藏页面
p2-3-9 (p365): 9.9用户关注
p2-3-9-1 (p365): 9.9.1自引用多对多关系
p2-3-9-2 (p366): 9.9.2关注与取消关注
p2-3-9-3 (p369): 9.9.3显示关注用户列表
p2-3-9-4 (p371): 9.9.4使用AJAX在弹窗中执行关注操作
p2-3-10 (p378): 9.10消息提醒
p2-3-10-1 (p379): 9.10.1提醒消息在数据库中的表示
p2-3-10-2 (p379): 9.10.2创建提醒
p2-3-10-3 (p380): 9.10.3显示和管理提醒
p2-3-10-4 (p382): 9.10.4通过轮询实时更新未读计数
p2-3-11 (p384): 9.11用户资料与账户设置
p2-3-11-1 (p385): 9.11.1编辑个人资料
p2-3-11-2 (p386): 9.11.2自定义头像
p2-3-11-3 (p392): 9.11.3更改密码
p2-3-11-4 (p394): 9.11.4提醒消息开关
p2-3-11-5 (p395): 9.11.5将收藏设为仅自己可见
p2-3-11-6 (p396): 9.11.6注销账户
p2-3-12 (p397): 9.12首页与探索
p2-3-12-1 (p399): 9.12.1获取正在关注用户的图片
p2-3-12-2 (p401): 9.12.2使用联结和分组查询获取热门标签
p2-3-12-3 (p402): 9.12.3使用数据库通用函数获取随机图片
p2-3-13 (p403): 9.13使用Flask-Whooshee实现全文搜索
p2-3-13-1 (p404): 9.13.1创建索引
p2-3-13-2 (p405): 9.13.2搜索表单
p2-3-13-3 (p406): 9.13.3显示搜索结果
p2-3-14 (p407): 9.14编写网站后台
p2-3-14-1 (p408): 9.14.1用户管理
p2-3-14-2 (p411): 9.14.2资源管理
p2-3-14-3 (p412): 9.14.3面向管理员的用户资料编辑
p2-3-15 (p413): 9.15本章小结
p2-4 (p415): 第10章 待办事项程序
p2-4-1 (p417): 10.1使用JavaScript和AJAX编写单页程序
p2-4-1-1 (p418): 10.1.1单页程序的模板组织
p2-4-1-2 (p421): 10.1.2在根页面内切换子页面
p2-4-1-3 (p423): 10.1.3生成测试账户
p2-4-1-4 (p424): 10.1.4添加新待办条目
p2-4-2 (p426): 10.2国际化与本地化
p2-4-2-1 (p427): 10.2.1使用Flask-Babel集成Babel
p2-4-2-2 (p427): 10.2.2区域和语言
p2-4-2-3 (p432): 10.2.3文本的国际化
p2-4-2-4 (p433): 10.2.4文本的本地化
p2-4-2-5 (p438): 10.2.5时间与日期的本地化
p2-4-3 (p440): 10.3设计并编写Web API
p2-4-3-1 (p441): 10.3.1认识Web API
p2-4-3-2 (p443): 10.3.2设计优美实用的Web API
p2-4-3-3 (p446): 10.3.3使用Flask编写Web API
p2-4-3-4 (p453): 10.3.4使用OAuth认证
p2-4-3-5 (p461): 10.3.5资源的序列化
p2-4-3-6 (p465): 10.3.6资源的反序列化
p2-4-3-7 (p470): 10.3.7 Web API的测试与发布
p2-4-4 (p473): 10.4本章小结
p2-5 (p474): 第11章 在线聊天室
p2-5-1 (p476): 11.1编写程序骨架
p2-5-2 (p477): 11.2 Gravatar头像
p2-5-3 (p480): 11.3使用Flask-SocketIO建立实时双向通信
p2-5-3-1 (p481): 11.3.1建立Socket.IO连接
p2-5-3-2 (p482): 11.3.2一条消息的旅程
p2-5-3-3 (p485): 11.3.3在线人数统计
p2-5-3-4 (p486): 11.3.4通信频道分离
p2-5-4 (p489): 11.4使用Flask-OAuthlib实现第三方登录
p2-5-4-1 (p490): 11.4.1编写OAuth客户端
p2-5-4-2 (p491): 11.4.2注册OAuth程序
p2-5-4-3 (p493): 11.4.3处理OAuth2授权
p2-5-4-4 (p505): 11.4.4处理OAuth1授权
p2-5-5 (p507): 11.5聊天室功能增强
p2-5-5-1 (p507): 11.5.1无限滚动加载历史消息
p2-5-5-2 (p510): 11.5.2 Markdown支持
p2-5-5-3 (p512): 11.5.3代码语法高亮
p2-5-5-4 (p515): 11.5.4标签页消息提醒
p2-5-5-5 (p517): 11.5.5浏览器桌面通知
p2-5-5-6 (p519): 11.5.6消息管理
p2-5-6 (p519): 11.6本章小结
p3 (p522): 第三部分 进阶篇
p3-1 (p522): 第12章 自动化测试
p3-1-1 (p522): 12.1认识自动化测试
p3-1-2 (p523): 12.2 Flask测试客户端
p3-1-3 (p525): 12.3使用unittest编写单元测试
p3-1-3-1 (p525): 12.3.1 Flask程序的测试固件
p3-1-3-2 (p527): 12.3.2编写测试用例
p3-1-3-3 (p533): 12.3.3组织测试
p3-1-3-4 (p535): 12.3.4运行测试
p3-1-4 (p536): 12.4使用Selenium进行用户界面测试
p3-1-4-1 (p537): 12.4.1安装浏览器与驱动
p3-1-4-2 (p538): 12.4.2准备测试环境
p3-1-4-3 (p539): 12.4.3编写测试代码
p3-1-5 (p541): 12.5使用Coverage.py计算测试覆盖率
p3-1-5-1 (p542): 12.5.1基本用法
p3-1-5-2 (p543): 12.5.2获取测试覆盖率
p3-1-6 (p544): 12.6使用Flake8检查代码质量
p3-1-7 (p546): 12.7本章小结
p3-2 (p547): 第13章 性能优化
p3-2-1 (p548): 13.1程序性能分析
p3-2-1-1 (p548): 13.1.1函数性能分析
p3-2-1-2 (p549): 13.1.2数据库查询分析
p3-2-2 (p551): 13.2使用Flask-Caching设置缓存
p3-2-2-1 (p552): 13.2.1缓存视图函数
p3-2-2-2 (p554): 13.2.2缓存其他函数
p3-2-2-3 (p554): 13.2.3更新缓存
p3-2-2-4 (p556): 13.2.4使用Redis作为缓存后端
p3-2-3 (p557): 13.3使用Flask-Assets优化静态资源
p3-2-3-1 (p558): 13.3.1注册资源集
p3-2-3-2 (p559): 13.3.2生成资源集文件
p3-2-3-3 (p559): 13.3.3在模板中加载资源集
p3-2-4 (p562): 13.4本章小结
p3-3 (p563): 第14章 部署上线
p3-3-1 (p563): 14.1传统部署VS云部署
p3-3-2 (p564): 14.2基本部署流程
p3-3-3 (p566): 14.3部署前的准备
p3-3-3-1 (p566): 14.3.1更新程序配置
p3-3-3-2 (p567): 14.3.2创建生产环境专用的程序实例
p3-3-3-3 (p568): 14.3.3设置迁移工具
p3-3-3-4 (p568): 14.3.4程序日志
p3-3-3-5 (p572): 14.3.5手动导入环境变量
p3-3-3-6 (p572): 14.3.6 HTTPS转发
p3-3-4 (p573): 14.4部署到Linux服务器
p3-3-4-1 (p573): 14.4.1使用OpenSSH登录远程主机
p3-3-4-2 (p574): 14.4.2安装基本库和工具
p3-3-4-3 (p575): 14.4.3安全防护措施
p3-3-4-4 (p578): 14.4.4推送代码并初始化程序环境
p3-3-4-5 (p579): 14.4.5使用Gunicom运行程序
p3-3-4-6 (p580): 14.4.6使用Nginx提供反向代理
p3-3-4-7 (p584): 14.4.7使用Supervisor管理进程
p3-3-4-8 (p586): 14.4.8更新部署后的程序
p3-3-5 (p587): 14.5部署到PythonAnywhere
p3-3-5-1 (p587): 14.5.1反向代理设置
p3-3-5-2 (p588): 14.5.2创建PythonAnywhere程序
p3-3-5-3 (p588): 14.5.3推送代码并初始化程序环境
p3-3-5-4 (p590): 14.5.4创建数据库
p3-3-5-5 (p591): 14.5.5设置虚拟环境
p3-3-5-6 (p592): 14.5.6静态文件
p3-3-5-7 (p592): 14.5.7运行和更新程序
p3-3-6 (p594): 14.6部署到Heroku
p3-3-6-1 (p595): 14.6.1通过Heroku Git部署
p3-3-6-2 (p601): 14.6.2使用GitHub部署
p3-3-7 (p603): 14.7下一步做什么?
p3-3-8 (p604): 14.8本章小结
p3-4 (p605): 第15章 Flask扩展开发
p3-4-1 (p606): 15.1扩展的命名
p3-4-2 (p606): 15.2扩展项目骨架
p3-4-3 (p608): 15.3编写扩展类
p3-4-4 (p610): 15.4添加扩展配置
p3-4-5 (p610): 15.5实现扩展功能
p3-4-5-1 (p611): 15.5.1加载静态资源
p3-4-5-2 (p612): 15.5.2创建分享组件
p3-4-5-3 (p613): 15.5.3在移动设备上隐藏
p3-4-6 (p614): 15.6开源发布前的准备
p3-4-6-1 (p614): 15.6.1添加文档字符串与注释
p3-4-6-2 (p615): 15.6.2编写README与文档
p3-4-6-3 (p616): 15.6.3为打包做准备
p3-4-6-4 (p621): 15.6.4编写示例程序
p3-4-6-5 (p621): 15.6.5编写单元测试
p3-4-7 (p622): 15.7发布到PyPI
p3-4-7-1 (p623): 15.7.1创建PypI账号
p3-4-7-2 (p623): 15.7.2使用setuptools打包
p3-4-7-3 (p625): 15.7.3使用twine上传
p3-4-8 (p625): 15.8编写良好的扩展
p3-4-9 (p627): 15.9本章小结
p3-5 (p628): 第16章 Flask工作原理与机制解析
p3-5-1 (p628): 16.1阅读 Flask源码
p3-5-1-1 (p628): 16.1.1获取Flask源码
p3-5-1-2 (p629): 16.1.2如何阅读源码
p3-5-1-3 (p637): 16.1.3 Flask发行版本分析
p3-5-2 (p638): 16.2 Flask的设计理念
p3-5-2-1 (p638): 16.2.1“微”框架
p3-5-2-2 (p638): 16.2.2两个核心依赖
p3-5-2-3 (p638): 16.2.3显式程序对象
p3-5-2-4 (p639): 16.2.4本地上下文
p3-5-2-5 (p640): 16.2.5三种程序状态
p3-5-2-6 (p641): 16.2.6丰富的自定义支持
p3-5-3 (p641): 16.3 Flask与WSGI
p3-5-3-1 (p642): 16.3.1 WSGI程序
p3-5-3-2 (p643): 16.3.2 WSGI服务器
p3-5-3-3 (p644): 16.3.3中间件
p3-5-4 (p646): 16.4 Flask的工作流程与机制
p3-5-4-1 (p646): 16.4.1 Flask中的请求响应循环
p3-5-4-2 (p649): 16.4.2路由系统
p3-5-4-3 (p653): 16.4.3本地上下文
p3-5-4-4 (p665): 16.4.4请求与响应对象
p3-5-4-5 (p667): 16.4.5 session
p3-5-4-6 (p674): 16.4.6蓝本
p3-5-4-7 (p677): 16.4.7模板渲染
p3-5-5 (p680): 16.5本章小结
p4 (p681): 附录A Flask资源
p1-1 (p2): 第1章 初识Flask
p1-1-1 (p3): 1.1搭建开发环境
p1-1-1-1 (p3): 1.1.1 Pipenv工作流
p1-1-1-2 (p7): 1.1.2安装Flask
p1-1-1-3 (p8): 1.1.3集成开发环境
p1-1-2 (p11): 1.2 Hello,Flask!
p1-1-2-1 (p11): 1.2.1创建程序实例
p1-1-2-2 (p12): 1.2.2注册路由
p1-1-3 (p14): 1.3启动开发服务器
p1-1-3-1 (p14): 1.3.1 Run,Flask,Run!
p1-1-3-2 (p18): 1.3.2更多的启动选项
p1-1-3-3 (p18): 1.3.3设置运行环境
p1-1-4 (p20): 1.4 Python Shell
p1-1-5 (p21): 1.5 Flask扩展
p1-1-6 (p22): 1.6项目配置
p1-1-7 (p23): 1.7 URL与端点
p1-1-8 (p23): 1.8 Flask命令
p1-1-9 (p24): 1.9模板与静态文件
p1-1-10 (p25): 1.10 Flask与MVC架构
p1-1-11 (p26): 1.11本章小结
p1-2 (p27): 第2章 Flask与HTTP
p1-2-1 (p27): 2.1请求响应循环
p1-2-2 (p29): 2.2 HTTP请求
p1-2-2-1 (p29): 2.2.1请求报文
p1-2-2-2 (p31): 2.2.2 Request对象
p1-2-2-3 (p34): 2.2.3在Flask中处理请求
p1-2-2-4 (p37): 2.2.4请求钩子
p1-2-3 (p38): 2.3 HTTP响应
p1-2-3-1 (p39): 2.3.1响应报文
p1-2-3-2 (p40): 2.3.1在Flask中生成响应
p1-2-3-3 (p43): 2.3.2响应格式
p1-2-3-4 (p46): 2.3.3来一块Cookie
p1-2-3-5 (p49): 2.3.4 session:安全的Cookie
p1-2-4 (p54): 2.4 Flask上下文
p1-2-4-1 (p54): 2.4.1上下文全局变量
p1-2-4-2 (p55): 2.4.2激活上下文
p1-2-4-3 (p56): 2.4.3上下文钩子
p1-2-5 (p57): 2.5 HTTP进阶实践
p1-2-5-1 (p57): 2.5.1重定向回上一个页面
p1-2-5-2 (p60): 2.5.2使用AJAX技术发送异步请求
p1-2-5-3 (p64): 2.5.3 HTTP服务器端推送
p1-2-5-4 (p65): 2.5.4 Web安全防范
p1-2-6 (p74): 2.6本章小结
p1-3 (p75): 第3章 模板
p1-3-1 (p75): 3.1模板基本用法
p1-3-1-1 (p76): 3.1.1创建模板
p1-3-1-2 (p77): 3.1.2模板语法
p1-3-1-3 (p78): 3.1.3渲染模板
p1-3-2 (p80): 3.2模板辅助工具
p1-3-2-1 (p80): 3.2.1上下文
p1-3-2-2 (p82): 3.2.2全局对象
p1-3-2-3 (p83): 3.2.3过滤器
p1-3-2-4 (p85): 3.2.4测试器
p1-3-2-5 (p87): 3.2.5模板环境对象
p1-3-3 (p88): 3.3模板结构组织
p1-3-3-1 (p88): 3.3.1局部模板
p1-3-3-2 (p88): 3.3.2宏
p1-3-3-3 (p90): 3.3.3模板继承
p1-3-4 (p93): 3.4模板进阶实践
p1-3-4-1 (p93): 3.4.1空白控制
p1-3-4-2 (p94): 3.4.2加载静态文件
p1-3-4-3 (p98): 3.4.3消息闪现
p1-3-4-4 (p100): 3.4.4自定义错误页面
p1-3-4-5 (p101): 3.4.5 JavaScript和CSS中的Jinja2
p1-3-5 (p103): 3.5本章小结
p1-4 (p104): 第4章 表单
p1-4-1 (p104): 4.1 HTML表单
p1-4-2 (p106): 4.2使用Flask-WTF处理表单
p1-4-2-1 (p106): 4.2.1定义WTForms表单类
p1-4-2-2 (p109): 4.2.2输出HTML代码
p1-4-2-3 (p110): 4.2.3在模板中渲染表单
p1-4-3 (p112): 4.3处理表单数据
p1-4-3-1 (p112): 4.3.1提交表单
p1-4-3-2 (p113): 4.3.2验证表单数据
p1-4-3-3 (p117): 4.3.3在模板中渲染错误消息
p1-4-4 (p118): 4.4表单进阶实践
p1-4-4-1 (p118): 4.4.1设置错误消息语言
p1-4-4-2 (p120): 4.4.2使用宏渲染表单
p1-4-4-3 (p121): 4.4.3自定义验证器
p1-4-4-4 (p122): 4.4.4文件上传
p1-4-4-5 (p129): 4.4.5使用Flask-CKEditor集成富文本编辑器
p1-4-4-6 (p132): 4.4.6单个表单多个提交按钮
p1-4-4-7 (p133): 4.4.7单个页面多个表单
p1-4-5 (p137): 4.5本章小结
p1-5 (p138): 第5章 数据库
p1-5-1 (p139): 5.1数据库的分类
p1-5-1-1 (p139): 5.1.1 SQL
p1-5-1-2 (p139): 5.1.2 NoSQL
p1-5-1-3 (p140): 5.1.3如何选择?
p1-5-2 (p140): 5.2 ORM魔法
p1-5-3 (p142): 5.3使用Flask-SQLAlchemy管理数据库
p1-5-3-1 (p142): 5.3.1连接数据库服务器
p1-5-3-2 (p144): 5.3.2定义数据库模型
p1-5-3-3 (p145): 5.3.3创建数据库和表
p1-5-4 (p146): 5.4数据库操作
p1-5-4-1 (p147): 5.4.1 CRUD
p1-5-4-2 (p151): 5.4.2在视图函数里操作数据库
p1-5-5 (p156): 5.5定义关系
p1-5-5-1 (p157): 5.5.1配置Python Shell上下文
p1-5-5-2 (p158): 5.5.2一对多
p1-5-5-3 (p164): 5.5.3多对一
p1-5-5-4 (p165): 5.5.4一对一
p1-5-5-5 (p166): 5.5.5多对多
p1-5-6 (p168): 5.6更新数据库表
p1-5-6-1 (p168): 5.6.1重新生成表
p1-5-6-2 (p169): 5.6.2使用Flask-Migrate迁移数据库
p1-5-6-3 (p171): 5.6.3开发时是否需要迁移?
p1-5-7 (p172): 5.7数据库进阶实践
p1-5-7-1 (p172): 5.7.1级联操作
p1-5-7-2 (p175): 5.7.2事件监听
p1-5-8 (p177): 5.8本章小结
p1-6 (p178): 第6章 电子邮件
p1-6-1 (p179): 6.1使用Flask-Mail发送电子邮件
p1-6-1-1 (p179): 6.1.1配置Flask-Mail
p1-6-1-2 (p182): 6.1.2构建邮件数据
p1-6-1-3 (p182): 6.1.3发送邮件
p1-6-2 (p183): 6.2使用事务邮件服务SendGird
p1-6-2-1 (p183): 6.2.1注册SendGird
p1-6-2-2 (p185): 6.2.2 SendGrid SMTP转发
p1-6-2-3 (p185): 6.2.3 SendGrid Web API转发
p1-6-3 (p188): 6.3电子邮件进阶实践
p1-6-3-1 (p188): 6.3.1提供HTML正文
p1-6-3-2 (p189): 6.3.2使用Jinja2模板组织邮件正文
p1-6-3-3 (p191): 6.3.3异步发送邮件
p1-6-4 (p192): 6.4本章小结
p2 (p194): 第二部分 实战篇
p2-1 (p194): 第7章 留言板
p2-1-1 (p195): 7.1使用包组织代码
p2-1-1-1 (p196): 7.1.1配置文件
p2-1-1-2 (p197): 7.1.2创建程序实例
p2-1-2 (p198): 7.2 Web程序开发流程
p2-1-2-1 (p199): 7.2.1程序功能设计
p2-1-2-2 (p200): 7.2.1前端页面开发
p2-1-2-3 (p202): 7.2.3后端程序开发
p2-1-3 (p206): 7.3使用Bootstrap-Flask简化页面编写
p2-1-3-1 (p207): 7.3.1加载资源文件
p2-1-3-2 (p207): 7.3.2快捷渲染表单
p2-1-4 (p209): 7.4使用 Flask-Moment本地化日期和时间
p2-1-4-1 (p209): 7.4.1本地化前的准备
p2-1-4-2 (p209): 7.4.2使用Flask-Moment集成Moment…js
p2-1-4-3 (p210): 7.4.3渲染时间日期
p2-1-5 (p213): 7.5使用Faker生成虚拟数据
p2-1-6 (p215): 7.6使用Flask-DebugToolbar调试程序
p2-1-7 (p216): 7.7 Flask配置的两种组织形式
p2-1-7-1 (p217): 7.7.1环境变量优先
p2-1-7-2 (p217): 7.7.2实例文件夹覆盖
p2-1-8 (p218): 7.8本章小结
p2-2 (p219): 第8章 个人博客
p2-2-1 (p220): 8.1大型项目结构
p2-2-1-1 (p221): 8.1.1使用蓝本模块化程序
p2-2-1-2 (p227): 8.1.2使用类组织配置
p2-2-1-3 (p228): 8.1.3使用工厂函数创建程序实例
p2-2-2 (p232): 8.2编写程序骨架
p2-2-2-1 (p233): 8.2.1数据库
p2-2-2-2 (p240): 8.2.2模板
p2-2-2-3 (p246): 8.2.3表单
p2-2-2-4 (p249): 8.2.4视图函数
p2-2-2-5 (p249): 8.2.5电子邮件支持
p2-2-3 (p251): 8.3编写博客前台
p2-2-3-1 (p251): 8.3.1分页显示文章列表
p2-2-3-2 (p258): 8.3.2显示文章正文
p2-2-3-3 (p259): 8.3.3文章固定链接
p2-2-3-4 (p262): 8.3.4显示分类文章列表
p2-2-3-5 (p263): 8.3.5显示评论列表
p2-2-3-6 (p266): 8.3.6发表评论与回复
p2-2-3-7 (p267): 8.3.7支持回复评论
p2-2-3-8 (p269): 8.3.8网站主题切换
p2-2-4 (p271): 8.4初始化博客
p2-2-4-1 (p271): 8.4.1安全存储密码
p2-2-4-2 (p273): 8.4.2创建管理员用户
p2-2-5 (p275): 8.5使用Flask-Login管理用户认证
p2-2-5-1 (p276): 8.5.1获取当前用户
p2-2-5-2 (p277): 8.5.2登入用户
p2-2-5-3 (p278): 8.5.3登出用户
p2-2-5-4 (p279): 8.5.4视图保护
p2-2-6 (p281): 8.6使用CSRFProtect实现CSRF保护
p2-2-7 (p283): 8.7编写博客后台
p2-2-7-1 (p284): 8.7.1文章管理
p2-2-7-2 (p291): 8.7.2评论管理
p2-2-7-3 (p297): 8.7.3分类管理
p2-2-8 (p298): 8.8本章小结
p2-3 (p299): 第9章 图片社交网站
p2-3-1 (p300): 9.1项目组织架构
p2-3-1-1 (p300): 9.1.1功能式架构
p2-3-1-2 (p302): 9.1.2分区式架构
p2-3-1-3 (p303): 9.1.3混合式架构
p2-3-1-4 (p303): 9.1.4如何选择
p2-3-2 (p303): 9.2编写程序骨架
p2-3-2-1 (p305): 9.2.1数据库模型与虚拟数据
p2-3-2-2 (p307): 9.2.2模板与静态文件
p2-3-3 (p308): 9.3高级用户认证
p2-3-3-1 (p309): 9.3.1用户注册
p2-3-3-2 (p311): 9.3.2验证邮箱地址
p2-3-3-3 (p315): 9.3.3使用装饰器过滤未确认用户
p2-3-3-4 (p316): 9.3.4密码重置
p2-3-4 (p319): 9.4基于用户角色的权限管理
p2-3-4-1 (p319): 9.4.1角色与权限模型
p2-3-4-2 (p320): 9.4.2设置角色与权限
p2-3-4-3 (p321): 9.4.3写入角色与权限
p2-3-4-4 (p323): 9.4.4验证用户权限
p2-3-5 (p325): 9.5使用Flask-Dropzone优化文件上传
p2-3-5-1 (p326): 9.5.1配置Flask-Dropzone
p2-3-5-2 (p328): 9.5.2渲染上传区域
p2-3-5-3 (p329): 9.5.3处理并保存上传图片
p2-3-6 (p334): 9.6使用Flask-Avatars处理用户头像
p2-3-6-1 (p335): 9.6.1默认头像
p2-3-6-2 (p335): 9.6.2生成随机头像
p2-3-7 (p337): 9.7图片展示与管理
p2-3-7-1 (p338): 9.7.1在用户主页显示图片列表
p2-3-7-2 (p341): 9.7.2图片详情页
p2-3-7-3 (p342): 9.7.3上一张下一张跳转
p2-3-7-4 (p344): 9.7.4删除确认模态框
p2-3-7-5 (p346): 9.7.5举报图片
p2-3-7-6 (p347): 9.7.6图片描述
p2-3-7-7 (p349): 9.7.7图片标签
p2-3-7-8 (p353): 9.7.8用户资料弹窗
p2-3-8 (p358): 9.8收藏图片
p2-3-8-1 (p358): 9.8.1使用关联模型表示多对多关系
p2-3-8-2 (p360): 9.8.2添加和取消收藏
p2-3-8-3 (p362): 9.8.3收藏者和收藏页面
p2-3-9 (p365): 9.9用户关注
p2-3-9-1 (p365): 9.9.1自引用多对多关系
p2-3-9-2 (p366): 9.9.2关注与取消关注
p2-3-9-3 (p369): 9.9.3显示关注用户列表
p2-3-9-4 (p371): 9.9.4使用AJAX在弹窗中执行关注操作
p2-3-10 (p378): 9.10消息提醒
p2-3-10-1 (p379): 9.10.1提醒消息在数据库中的表示
p2-3-10-2 (p379): 9.10.2创建提醒
p2-3-10-3 (p380): 9.10.3显示和管理提醒
p2-3-10-4 (p382): 9.10.4通过轮询实时更新未读计数
p2-3-11 (p384): 9.11用户资料与账户设置
p2-3-11-1 (p385): 9.11.1编辑个人资料
p2-3-11-2 (p386): 9.11.2自定义头像
p2-3-11-3 (p392): 9.11.3更改密码
p2-3-11-4 (p394): 9.11.4提醒消息开关
p2-3-11-5 (p395): 9.11.5将收藏设为仅自己可见
p2-3-11-6 (p396): 9.11.6注销账户
p2-3-12 (p397): 9.12首页与探索
p2-3-12-1 (p399): 9.12.1获取正在关注用户的图片
p2-3-12-2 (p401): 9.12.2使用联结和分组查询获取热门标签
p2-3-12-3 (p402): 9.12.3使用数据库通用函数获取随机图片
p2-3-13 (p403): 9.13使用Flask-Whooshee实现全文搜索
p2-3-13-1 (p404): 9.13.1创建索引
p2-3-13-2 (p405): 9.13.2搜索表单
p2-3-13-3 (p406): 9.13.3显示搜索结果
p2-3-14 (p407): 9.14编写网站后台
p2-3-14-1 (p408): 9.14.1用户管理
p2-3-14-2 (p411): 9.14.2资源管理
p2-3-14-3 (p412): 9.14.3面向管理员的用户资料编辑
p2-3-15 (p413): 9.15本章小结
p2-4 (p415): 第10章 待办事项程序
p2-4-1 (p417): 10.1使用JavaScript和AJAX编写单页程序
p2-4-1-1 (p418): 10.1.1单页程序的模板组织
p2-4-1-2 (p421): 10.1.2在根页面内切换子页面
p2-4-1-3 (p423): 10.1.3生成测试账户
p2-4-1-4 (p424): 10.1.4添加新待办条目
p2-4-2 (p426): 10.2国际化与本地化
p2-4-2-1 (p427): 10.2.1使用Flask-Babel集成Babel
p2-4-2-2 (p427): 10.2.2区域和语言
p2-4-2-3 (p432): 10.2.3文本的国际化
p2-4-2-4 (p433): 10.2.4文本的本地化
p2-4-2-5 (p438): 10.2.5时间与日期的本地化
p2-4-3 (p440): 10.3设计并编写Web API
p2-4-3-1 (p441): 10.3.1认识Web API
p2-4-3-2 (p443): 10.3.2设计优美实用的Web API
p2-4-3-3 (p446): 10.3.3使用Flask编写Web API
p2-4-3-4 (p453): 10.3.4使用OAuth认证
p2-4-3-5 (p461): 10.3.5资源的序列化
p2-4-3-6 (p465): 10.3.6资源的反序列化
p2-4-3-7 (p470): 10.3.7 Web API的测试与发布
p2-4-4 (p473): 10.4本章小结
p2-5 (p474): 第11章 在线聊天室
p2-5-1 (p476): 11.1编写程序骨架
p2-5-2 (p477): 11.2 Gravatar头像
p2-5-3 (p480): 11.3使用Flask-SocketIO建立实时双向通信
p2-5-3-1 (p481): 11.3.1建立Socket.IO连接
p2-5-3-2 (p482): 11.3.2一条消息的旅程
p2-5-3-3 (p485): 11.3.3在线人数统计
p2-5-3-4 (p486): 11.3.4通信频道分离
p2-5-4 (p489): 11.4使用Flask-OAuthlib实现第三方登录
p2-5-4-1 (p490): 11.4.1编写OAuth客户端
p2-5-4-2 (p491): 11.4.2注册OAuth程序
p2-5-4-3 (p493): 11.4.3处理OAuth2授权
p2-5-4-4 (p505): 11.4.4处理OAuth1授权
p2-5-5 (p507): 11.5聊天室功能增强
p2-5-5-1 (p507): 11.5.1无限滚动加载历史消息
p2-5-5-2 (p510): 11.5.2 Markdown支持
p2-5-5-3 (p512): 11.5.3代码语法高亮
p2-5-5-4 (p515): 11.5.4标签页消息提醒
p2-5-5-5 (p517): 11.5.5浏览器桌面通知
p2-5-5-6 (p519): 11.5.6消息管理
p2-5-6 (p519): 11.6本章小结
p3 (p522): 第三部分 进阶篇
p3-1 (p522): 第12章 自动化测试
p3-1-1 (p522): 12.1认识自动化测试
p3-1-2 (p523): 12.2 Flask测试客户端
p3-1-3 (p525): 12.3使用unittest编写单元测试
p3-1-3-1 (p525): 12.3.1 Flask程序的测试固件
p3-1-3-2 (p527): 12.3.2编写测试用例
p3-1-3-3 (p533): 12.3.3组织测试
p3-1-3-4 (p535): 12.3.4运行测试
p3-1-4 (p536): 12.4使用Selenium进行用户界面测试
p3-1-4-1 (p537): 12.4.1安装浏览器与驱动
p3-1-4-2 (p538): 12.4.2准备测试环境
p3-1-4-3 (p539): 12.4.3编写测试代码
p3-1-5 (p541): 12.5使用Coverage.py计算测试覆盖率
p3-1-5-1 (p542): 12.5.1基本用法
p3-1-5-2 (p543): 12.5.2获取测试覆盖率
p3-1-6 (p544): 12.6使用Flake8检查代码质量
p3-1-7 (p546): 12.7本章小结
p3-2 (p547): 第13章 性能优化
p3-2-1 (p548): 13.1程序性能分析
p3-2-1-1 (p548): 13.1.1函数性能分析
p3-2-1-2 (p549): 13.1.2数据库查询分析
p3-2-2 (p551): 13.2使用Flask-Caching设置缓存
p3-2-2-1 (p552): 13.2.1缓存视图函数
p3-2-2-2 (p554): 13.2.2缓存其他函数
p3-2-2-3 (p554): 13.2.3更新缓存
p3-2-2-4 (p556): 13.2.4使用Redis作为缓存后端
p3-2-3 (p557): 13.3使用Flask-Assets优化静态资源
p3-2-3-1 (p558): 13.3.1注册资源集
p3-2-3-2 (p559): 13.3.2生成资源集文件
p3-2-3-3 (p559): 13.3.3在模板中加载资源集
p3-2-4 (p562): 13.4本章小结
p3-3 (p563): 第14章 部署上线
p3-3-1 (p563): 14.1传统部署VS云部署
p3-3-2 (p564): 14.2基本部署流程
p3-3-3 (p566): 14.3部署前的准备
p3-3-3-1 (p566): 14.3.1更新程序配置
p3-3-3-2 (p567): 14.3.2创建生产环境专用的程序实例
p3-3-3-3 (p568): 14.3.3设置迁移工具
p3-3-3-4 (p568): 14.3.4程序日志
p3-3-3-5 (p572): 14.3.5手动导入环境变量
p3-3-3-6 (p572): 14.3.6 HTTPS转发
p3-3-4 (p573): 14.4部署到Linux服务器
p3-3-4-1 (p573): 14.4.1使用OpenSSH登录远程主机
p3-3-4-2 (p574): 14.4.2安装基本库和工具
p3-3-4-3 (p575): 14.4.3安全防护措施
p3-3-4-4 (p578): 14.4.4推送代码并初始化程序环境
p3-3-4-5 (p579): 14.4.5使用Gunicom运行程序
p3-3-4-6 (p580): 14.4.6使用Nginx提供反向代理
p3-3-4-7 (p584): 14.4.7使用Supervisor管理进程
p3-3-4-8 (p586): 14.4.8更新部署后的程序
p3-3-5 (p587): 14.5部署到PythonAnywhere
p3-3-5-1 (p587): 14.5.1反向代理设置
p3-3-5-2 (p588): 14.5.2创建PythonAnywhere程序
p3-3-5-3 (p588): 14.5.3推送代码并初始化程序环境
p3-3-5-4 (p590): 14.5.4创建数据库
p3-3-5-5 (p591): 14.5.5设置虚拟环境
p3-3-5-6 (p592): 14.5.6静态文件
p3-3-5-7 (p592): 14.5.7运行和更新程序
p3-3-6 (p594): 14.6部署到Heroku
p3-3-6-1 (p595): 14.6.1通过Heroku Git部署
p3-3-6-2 (p601): 14.6.2使用GitHub部署
p3-3-7 (p603): 14.7下一步做什么?
p3-3-8 (p604): 14.8本章小结
p3-4 (p605): 第15章 Flask扩展开发
p3-4-1 (p606): 15.1扩展的命名
p3-4-2 (p606): 15.2扩展项目骨架
p3-4-3 (p608): 15.3编写扩展类
p3-4-4 (p610): 15.4添加扩展配置
p3-4-5 (p610): 15.5实现扩展功能
p3-4-5-1 (p611): 15.5.1加载静态资源
p3-4-5-2 (p612): 15.5.2创建分享组件
p3-4-5-3 (p613): 15.5.3在移动设备上隐藏
p3-4-6 (p614): 15.6开源发布前的准备
p3-4-6-1 (p614): 15.6.1添加文档字符串与注释
p3-4-6-2 (p615): 15.6.2编写README与文档
p3-4-6-3 (p616): 15.6.3为打包做准备
p3-4-6-4 (p621): 15.6.4编写示例程序
p3-4-6-5 (p621): 15.6.5编写单元测试
p3-4-7 (p622): 15.7发布到PyPI
p3-4-7-1 (p623): 15.7.1创建PypI账号
p3-4-7-2 (p623): 15.7.2使用setuptools打包
p3-4-7-3 (p625): 15.7.3使用twine上传
p3-4-8 (p625): 15.8编写良好的扩展
p3-4-9 (p627): 15.9本章小结
p3-5 (p628): 第16章 Flask工作原理与机制解析
p3-5-1 (p628): 16.1阅读 Flask源码
p3-5-1-1 (p628): 16.1.1获取Flask源码
p3-5-1-2 (p629): 16.1.2如何阅读源码
p3-5-1-3 (p637): 16.1.3 Flask发行版本分析
p3-5-2 (p638): 16.2 Flask的设计理念
p3-5-2-1 (p638): 16.2.1“微”框架
p3-5-2-2 (p638): 16.2.2两个核心依赖
p3-5-2-3 (p638): 16.2.3显式程序对象
p3-5-2-4 (p639): 16.2.4本地上下文
p3-5-2-5 (p640): 16.2.5三种程序状态
p3-5-2-6 (p641): 16.2.6丰富的自定义支持
p3-5-3 (p641): 16.3 Flask与WSGI
p3-5-3-1 (p642): 16.3.1 WSGI程序
p3-5-3-2 (p643): 16.3.2 WSGI服务器
p3-5-3-3 (p644): 16.3.3中间件
p3-5-4 (p646): 16.4 Flask的工作流程与机制
p3-5-4-1 (p646): 16.4.1 Flask中的请求响应循环
p3-5-4-2 (p649): 16.4.2路由系统
p3-5-4-3 (p653): 16.4.3本地上下文
p3-5-4-4 (p665): 16.4.4请求与响应对象
p3-5-4-5 (p667): 16.4.5 session
p3-5-4-6 (p674): 16.4.6蓝本
p3-5-4-7 (p677): 16.4.7模板渲染
p3-5-5 (p680): 16.5本章小结
p4 (p681): 附录A Flask资源
备用描述
前言
第一部分 基础篇
第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.1 在Flask中生成响应
2.3.2 响应格式
2.3.3 来一块Cookie
2.3.4 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中的Jinja
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.1 前端页面开发
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 本章小结
附录A Flask资源
第一部分 基础篇
第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.1 在Flask中生成响应
2.3.2 响应格式
2.3.3 来一块Cookie
2.3.4 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中的Jinja
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.1 前端页面开发
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 本章小结
附录A Flask资源
备用描述
Ben shu cong ji chu zhi shi dao jin jie shi zhan,Zai dao Flask yuan li he gong zuo ji zhi jie xi,Han gai wan zheng de Flask Web kai fa xue xi lu jing.Quan shu cong kai fa huan jing de da jian,Xiang mu de jian li yu zu zhi dao cheng xu de bian xie,Zai dao zi dong hua ce shi,Xing neng you hua,Hou dao sheng chan huan jing de da jian he bu shu shang xian,Xiang xi jiang jie wan zheng de Flask Web cheng xu kai fa liu cheng,Yong 5 ge zong he xing an li jiang bu tong nan du ceng ji de zhi shi dian ji ju ti yuan li chuan lian qi lai,Rang ni zai kai fa ji qiao,Yuan li shi xian he bian cheng si xiang shang dou huo de xiang ying de ti sheng
备用描述
本书从基础知识到进阶实战,再到Flask原理和工作机制解析,涵盖完整的Flask Web开发学习路径.全书从开发环境的搭建,项目的建立与组织到程序的编写,再到自动化测试,性能优化,后到生产环境的搭建和部署上线,详细讲解完整的Flask Web程序开发流程,用5个综合性案例将不同难度层级的知识点及具体原理串联起来,让你在开发技巧,原理实现和编程思想上都获得相应的提升
开源日期
2022-01-31
🚀 快速下载
成为会员以支持书籍、论文等的长期保存。为了感谢您对我们的支持,您将获得高速下载权益。❤️
🐢 低速下载
由可信的合作方提供。 更多信息请参见常见问题解答。 (可能需要验证浏览器——无限次下载!)
- 低速服务器(合作方提供) #1 (稍快但需要排队)
- 低速服务器(合作方提供) #2 (稍快但需要排队)
- 低速服务器(合作方提供) #3 (稍快但需要排队)
- 低速服务器(合作方提供) #4 (稍快但需要排队)
- 低速服务器(合作方提供) #5 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #6 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #7 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #8 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #9 (无需排队,但可能非常慢)
- 下载后: 在我们的查看器中打开
所有选项下载的文件都相同,应该可以安全使用。即使这样,从互联网下载文件时始终要小心。例如,确保您的设备更新及时。
外部下载
-
对于大文件,我们建议使用下载管理器以防止中断。
推荐的下载管理器:JDownloader -
您将需要一个电子书或 PDF 阅读器来打开文件,具体取决于文件格式。
推荐的电子书阅读器:Anna的档案在线查看器、ReadEra和Calibre -
使用在线工具进行格式转换。
推荐的转换工具:CloudConvert和PrintFriendly -
您可以将 PDF 和 EPUB 文件发送到您的 Kindle 或 Kobo 电子阅读器。
推荐的工具:亚马逊的“发送到 Kindle”和djazz 的“发送到 Kobo/Kindle” -
支持作者和图书馆
✍️ 如果您喜欢这个并且能够负担得起,请考虑购买原版,或直接支持作者。
📚 如果您当地的图书馆有这本书,请考虑在那里免费借阅。
下面的文字仅以英文继续。
总下载量:
“文件的MD5”是根据文件内容计算出的哈希值,并且基于该内容具有相当的唯一性。我们这里索引的所有影子图书馆都主要使用MD5来标识文件。
一个文件可能会出现在多个影子图书馆中。有关我们编译的各种数据集的信息,请参见数据集页面。
有关此文件的详细信息,请查看其JSON 文件。 Live/debug JSON version. Live/debug page.