新書推薦:
《
日子慢慢向前,事事慢慢如愿
》
售價:NT$
254.0
《
场景供应链金融:将风口变成蓝海
》
售價:NT$
509.0
《
汗青堂丛书146·布鲁克王朝:一个英国家族在东南亚的百年统治
》
售價:NT$
418.0
《
人生是旷野啊
》
售價:NT$
332.0
《
甲骨文丛书· “安国之道”:英国的殖民情报系统及其在亚洲的扩张
》
售價:NT$
403.0
《
台北人(2024版)
》
售價:NT$
398.0
《
让孩子更有力量:赋权型家庭教育指南
》
售價:NT$
305.0
《
白夜追凶(上下)
》
售價:NT$
500.0
|
編輯推薦: |
Flask 是一种具有平缓学习曲线和庞大社区支持的微框架,利用它可以构建大规模的web应用。学习上手Flask非常轻松,但要深入理解却并不容易。本书从一个简单的Flask应用开始,通过解决若干实战中的问题,对一系列进阶的话题进行了探讨。书中使用MVC(模型-视图-控制器)架构对示例应用进行了转化重构,以演示如何正确地组织应用代码结构。有了可扩展性强的应用结构之后,接下来的章节使用Flask扩展为应用提供了额外的功能,包括用户登录和注册、NoSQL查询、REST API、一套后台管理界面,以及其他特性。然后,你会学到如何使用单元测试,保障代码持续按照正确的方式工作,避免极具风险的猜测式编程。本书还会讨论可用于部署Flask应用的诸多不同平台,以及你必须考虑的每个平台的优劣利弊。你会从本书中学到:
■ 搭建Python项目环境的优秀实践
■ 使用SQLAlchemy,以编程式对数据库进行查询
■ 在Jinja中开发页面模板
■ 在Flask中搭建MVC环境
■ 探索NoSQL,何时应该以及何时不应该使用,以及如何使用
■ 开发你自己的Flask扩展
■ 使用Celery创建异
|
內容簡介: |
Flask是在Python用户中最为流行的Web开发框架。本书从一个简单的Flask项目入手,由浅入深地探讨了一系列实战问题,包括如何使用SQLAlchemy和Jinja等工具进行Web开发;如何正确地设计扩展性强的Flask应用架构和搭建MVC环境;对于各种NoSQL数据库的特性,何时应该、何时不应该及如何使用它们;通过使用Flask扩展快速实现用户的身份系统、RESTful API、NoSQL查询、后台管理等功能;如何创建自己的扩展;使用Celery编写异步任务,使用py.test进行单元测试等;最后介绍了如何部署上线,包括使用自己搭建的服务器或使用各种云服务,以及如何权衡和选择这些不同的解决方案。
|
關於作者: |
译者苏丹,来自山城重庆,毕业于北京师范大学;现豆瓣资深开发工程师,主要开发作品有豆瓣FM等;有多年PHP编程实践经验;曾参与《Learning Android中文版》一书翻译。 Jack Stouffer是一位有数年web应用开发经验的程序员。他在两年前将他所有的项目都切换到了Flask。他目前在位于密歇根州奥本山的Apollo America工作,使用Python、Flask和JavaScript编写企业内部业务工具。Jack是开源技术的信徒与支持者,在GitHub上发布以他所推荐的最佳实践原则编写的Flask范例时,立即成为了线上最受欢迎的Flask代码库。Jack还曾经担任Packt Publishing的《Flask Framework Cookbook》一书的审稿人。
|
目錄:
|
目录
第1章 入门1
使用Git进行版本控制1
安装Git1
Git基础2
使用pip管理Python包4
在Windows上安装pip4
在Mac OS X和Linux上安装Python包管理器pip5
pip基本操作6
用virtualenv的沙盒管理依赖7
virtualenv基础7
开始我们的项目8
使用Flask Script9
总结10
第2章 使用SQLAlchemy创建数据模型11
设置SQLAlchemy11
Python安装包12
Flask SQLAlchemy12
我们的第1个数据模型13
创建user表15
CRUD16
新增数据16
读取数据16
修改数据19
删除数据19
数据模型之间的关联20
一对多20
多对多23
SQLAlchemy会话对象的方便之处25
使用Alembic进行数据库迁移26
总结28
第3章 通过模板创建视图29
Jinja的语法29
过滤器30
注释34
if语句34
循环35
宏36
Flask特有的变量和函数37
创建视图38
视图函数38
编写和继承模板41
Flask WTForms45
WTForms基础46
自定义检验器48
发布评论48
总结51
第4章 使用蓝图创建控制器52
请求的构建和销毁,以及全局变量52
错误页面53
使用类描述视图53
方法视图55
蓝图55
总结57
第5章 进阶的应用结构58
模块项目58
重构代码59
应用的工厂模式62
总结64
第6章 保护应用安全65
准备工作65
修改用户模型65
创建表单67
创建视图71
社交网络登录76
使用会话84
使用Flask Login87
用户角色90
总结95
第7章 在Flask中使用NoSQL数据库96
NoSQL数据库的种类96
键值数据库97
文档数据库97
列式数据库98
基于图的数据库100
关系型数据库与NoSQL的比较101
关系型数据库的优势102
NoSQL数据库的优势103
在什么情况下用什么数据库104
在Flask中使用MongoDB105
安装MongoDB106
配置MongoEngine106
定义文档107
CRUD112
NoSQL中的关联关系117
利用NoSQL的强大能力120
总结126
第8章 构建RESTful API127
REST是什么127
构建RESTful Flask API130
GET请求131
格式化输出132
请求中的参数135
POST请求138
身份认证140
PUT请求143
DELETE请求146
总结147
第9章 使用Celery编写异步任务148
Celery是什么148
配置Celery和RabbitMQ150
在Celery中创建任务151
运行Celery任务154
Celery工作流155
监控Celery160
在Flower中通过网页进行监控161
创建一个提醒应用161
生成每周摘要163
总结167
第10章 有用的Flask扩展168
Flask Script168
Flask Debug Toolbar170
Flask Cache173
缓存函数和视图174
缓存带参数的函数175
缓存带有查询参数的路径177
使用Redis作为缓存后端177
使用memcached 作为缓存后端178
Flask Assets178
Flask Admin181
编写基础管理页面182
编写数据库管理页面184
增强文章管理功能185
编写文件系统管理页面187
保护Flask Admin的安全188
Flask Mail189
总结190
第11章 构建你自己的扩展192
编写一个YouTube Flask扩展192
创建Python包196
通过Flask扩展修改响应数据198
总结200
第12章 测试Flask应用201
什么是单元测试201
怎样进行测试202
对应用进行单元测试202
测试路由函数203
用户界面测试208
测试覆盖率213
测试驱动的开发216
总结218
第13章 部署Flask应用219
部署在你自己的服务器上219
使用fabric把代码推送到服务器220
使用supervisor运行你的Web服务器222
Gevent224
Tornado225
Nginx和uWSGI226
Apache和uWSGI229
部署在Heroku上230
使用Heroku Postgres231
在Heroku中使用Celery232
在AWS上部署应用233
在Amazon Elastic Beanstalk上使用Flask233
使用Amazon Relational Database Service235
在Amazon Simple Queue Service中使用Celery236
总结237
|
內容試閱:
|
译者序
最近才知道,Flask 在一开始竟然是作为愚人节玩笑诞生的,不过后来大受好评,并成为正式项目。我在最初接触Flask 的时候,它也只是作为颇具先锋气质的单文件微框架而在Python 世界被人们口口相传。但在很短的时间内,它在Python Web 开发者中开始流行起来,Flask 社区迅速壮大,为它开发的插件数量也呈爆发式增长。如今,Flask 在事实上已经成为轻量级Python Web 框架的代言人。不论是对于Python 初学者,还是对于有若干年经验的Python 老手,使用Flask 搭建新项目都是非常有吸引力的选择。
不过即使再优秀的工具,仍然很容易被用错。作者在书中也反复强调了这一点。Flask提供的是一个最小化的Web 框架,在此基础上你可以方便地使用你最喜欢的方式,添加你最得心应手的工具,形成一个专属于你和你的项目的高度定制化的强大工具套装。它不会逼你自己造轮子,因为在社区里几乎应有尽有;它也不会逼你用它附赠的轮子,因为它根本就没有准备赠品。对老司机来说,这样的框架可以最大程度地解放战斗力;对初学者来说,又可以利用社区中大量现成的资源很快上手。这样大家便都开心了,毕竟写程序最重要的就是开心。
但问题可能也隐藏在这里面:老手可能会根据自己以往熟悉的方式,把强大的战斗力释放在一些本来或许没有必要重复造轮子的地方;而新手则可能犯更多的错误:比如使用最原始的方式或者来自其他框架的方式搭建程序结构,结果当应用规模膨胀时面临困境;又或者引入了过多没必要引入的Flask 扩展,导致代码难以测试和维护,稳定性降低,甚至出现冲突。另一个潜在的问题是,庞大的社区带来的好处毋庸多言,但如果大量地使用非官方库,则意味着需要承担社区开发者的水平参差不齐所带来的风险。有个程序员朋友吐槽说好多Flask 扩展有个共同点,就是文档写得比代码棒。总的来说,如何正确地运用框架给予的高度自由,结合具体项目的需求,在用不用扩展和使用什么扩展之间做出最合理的选择,则是需要一定的经验的。而对于ORM、NoSQL、云服务等,同样存在用不用、用哪个、如何用的选择难题。
在我看来,在面向业务的开发中,深入二字的含义并不是指黑科技和奇技淫巧,而是具有预见性的解决方案选择。基于对当下项目需求的准确认知,采用最适合当前情况的不多不少的架构设计,在避免提前优化的同时对未来做好充分准备,对测试部署等流程的意义的深刻理解,才是深入和进阶,也正是本书的重点所在。实际上本书超纲的地方有点多,探讨的问题已经远不止Flask 了。
这是我翻译的第1 本书。翻译这件事果然是比较特别的体验,跟写作和编程都很不一样。翻译一整本书对于像我这样的拖延症患者来说,是个极大的挑战,因为即使每次翻译一大段,进度条也几乎没有移动的意思;但如果拖下去,它就绝对不会结束。拖到最后时刻然后突击解决的常规办法已经不奏效了,无论如何,经过漫长的修炼,终于还是完成了。感谢张春雨编辑邀请我翻译本书,感谢Cookie 对我不务正业的理解和支持,感谢公孙欠扁等朋友帮我解决一些英文问题。
水平所限,翻译中必定存在问题,请读者见谅。我在豆瓣、Twitter、微博等处的ID 都是su27,读后若有困惑或批评意见,欢迎找我讨论、吐槽。
祝每位读者都能从本书中获益。珍爱生命,我用 Python!
苏丹
2016 年6 月
|
|