绿林网

《Flask Web Development》经典读后感有感

《Flask Web Development》经典读后感有感

《Flask Web Development》是一本由Miguel Grinberg著作,O'Reilly Media出版的Paperback图书,本书定价:USD 24.99,页数:225,特精心收集的读后感,希望对大家能有帮助。

《Flask Web Development》读后感(一):Flask Web Development

我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了

《Flask Web Development》读后感(二):Web 开发利器

Python 生态圈有两个现象级的 Web 框架 Flask, Django.

两个框架风格迥异, 但是都各自带动了庞大的生态圈, 这得益于二者灵活的扩展能力.

本书讲述的是基于 Flask 开发 Web 项目.

在对 Flask 框架的各个部分简要分析后, 本书介绍了

* 表单处理(Flask-WTF)

* 持久化(Flask-SQLAlchemy, 这货作者就是 Flask 的作者哟)

* 邮件

* 配置

* 一个真实案例: 模型, 用户验证, 角色, 关注, 写template, 写API

# 特点

* 线程局部变量

我不知道该把这个称作特点还是缺点.

至少在Flask的文档中作者明确给出这样的解释: 作为一个码农, 你也许会感到不适, 但我就想这样设计.

大部分的 Web 框架, 请求对象是外部注入的, 唯独 Flask 选择了全局 (flask.request, flask.g).

这个特点存在意味着你要小心使用这个特性, 否则很容易遇上需要调试大半天的Bug.

另外, request 不是那么容易造出来的.

不过, 这不是什么大不了的事情.

这个顺便波及到测试, 测试的setup 与 teardown, 你必须去营造一个上下文, 关于这点, 书中有讲解如何操作.

* Route/Template

框架的路由使用的是Werkzeug.

Template使用的是Jinja2, 当然不喜欢的话, 用别的也很简单.

* 足够小

Flask 只封装了请求, 路由, 模板这么几个功能.

用起来容易, 要写好也得费点脑子涨点经验才行.

说穿了也就是一句话:

> The idea of Flask is to build a good foundation for all applications.

> Everything else is up to you or extensions.

[Ref: What Flask is, What Flask is Not](http://flask.pocoo.org/docs/design/#what-flask-is-what-flask-is-not)

# 工作流

常规的三板斧: 开发, 测试, 部署.

书里面的部署和配置这两章节讲的很出色, 值得一读, 我给打五星.

# 插件

借用 @死鱼眼28号 常说的一句话, 很多 Flask 插件都写得很渣.

我表示 +1.

挑选插件时记得看下插件源码, 给作者的码力打个分再决定要不要用.

# 后记

关于 Web 开发, 我们的选择有很多:

* PHP(Laravel, CodeIgniter, Yii, Symfony, CakePHP, etc.)

* Ruby(RoR, Sinatra, etc.)

* Python(Flask, Django, Quixote, Web.py, Bottle, etc.)

* Java/Scala(Spring, Play!, etc.)

殊途同归, 他们也给出了几乎一样的解决方案.

我们可以看到大部分的 Web 项目都有着类似的目录分类, 类似的架构.

Flask 也不外乎如此: 帮你包装好请求对象, 剩下的路由, 路由逻辑, 响应内容你来填.

上面大部分框架从大学到工作或多或少使用过, 其实真正写到业务层面时, 框架那些都不是事儿.

你想要的东西, 或框架自己造, 或怂恿队友帮你造, 或你自己造, 总之基本上你总能拿到你要的信息.

不要被框架局限了视野哟.

《Flask Web Development》读后感(三):读书笔记:《Flask Web Development》part 1

主要是写给自己的读书笔记,便于日后快速回忆这个主题的内容,也希望能有幸影响到若干匆匆过客。

# meta

作者Miguel Grinberg有25年工作经验,在视频广播行业,博客覆盖web开发,机器人,摄影等领域,因此积累是足够的。国外的这些老程序员都是国内职业生涯的好样板。

全书分成三部分:

- 基础知识导论

- 一个完整的例子串讲

- 最后一公里的测试调优部署

或者更具体一些:

- basic

- templates, database, form, email support

- packages and modules

- auth, roles, profiles

- a blogging project

- restful api

- unit test, performance

- deploy

# preface

提供一个坚实的基础,然后接入一个第三方的生态,这是一种不同的策略或者说境界。

本书的结构是从零开始,逐渐扩展成一个成熟的项目,而不是零散的知识介绍,因此对入门应该是比较合适的。

# Installation

```

micro framework, lean stack

when familiar with it, can read all of its source code

```

这个框架只抓住web开发核心的要素,实现的很棒,其他通用的东西就交出去,这样的好处是可以集中精力做好擅长或核心的事情,同时又能借助社区的力量,毕竟持续进化的才是最优秀的。KISS原则。

实际操作时用vagrant代替了virtualenv。

# Basic Application Structure

- route and view function

- dynamic name component

- application and request context # context tricks实现不用每个view function都加参数,实际上是隐藏了参数

- request hooks # hook的好处是通用的代码不用每个地方都改

- response # 三种response

- flask-script # extension # 这里可以看出开放策略的好处了,封闭系统很难把每件事情做到极致,开放就可以持续的演化。

# Templates

- 代码应该尽可能的简单和整洁,尽可能的做拆分和独立。首先业务和展现应该区分开,因此用template来负责把展现的部分独立出来。

- 具体的编码是最简单的一步,设计清楚了,实现非常的简单,关键是结构要合理清晰。

- template engine jinjia2能做的事情非常多,有分支循环,能执行方法,能重用相当于定义函数,还能继承,相当于oo,已经是较完善的编程语言了。

- flask-bootstrap

- custom error pages

- links # get url by view function

- static files # favicon.ico

- flask-moment # 对moments.js的包装,使得可以在template里方便的调用moments.js的方法,最终实现在browser端格式化时间的功能,这个还是比较常用的。

# Web Forms

- 使用secret-key来做CSRF保护

- 敏感信息不能写在代码里,而是通过环境变量来注入

- 理论上用request的form字段就足够了,但不够高效,会有很多重复代码,本章来集中解决这方面的问题。

- 基本的表单类型和验证,在render方面,有bootstarp的wtf支持,可以wtf.quick_form()

- `This is a great example of the power that well-designed extensions like Flask-WTF and Flask-Bootstrap can give to your application.`

- 为了避免浏览器里刷新时的警告,每个post都要搭配redirect。

- request之间的状态传递,可以用user session实现,一个客户端的私有存储,实际上在cookie里。

- 数据变更时通过flash提供可能的提示, flask自带的功能。

form的各种问题,定义展示数据搜集与session存储,解决了CSRF保护及POST重定向等问题,必要时可以通过flash增加提示。

# Databases

- sql vs nosql

- nosql主要是为了解决sql需要做表join的问题,因此用冗余数据denormalization来减少表的数量,使得检索非常方便,但不利于做更改,不能做join操作。

- 优先使用一个高级别的抽象,比如ORM,如果有性能问题,再做具体的优化。

- ORM的好处是后期可以换数据库引擎,用中间层去除了依赖,随便找一个会用的就可以了,比如先sqlite,后续再迁移到mysql。

- sqlalchemy

- nb, database engine的选择直接配置一个字符串就ok了。

- orm居然能做建库和表创建,这样只要学习这个中间语言就足够了,早期不用关心各种数据库的细节,只了解通用的范式。

- CRUD实现的非常方便,回想GAE也是这样,可惜之前没有领悟到。

- database migration # 给了database cvs的能力

- 这里只是简单的介绍,实际用得时候还是要查对应的文档。

整体来看,SqlAlchemy抽象一个中间层出来,定义ORM就可以了,然后是CRUD,都非常简单。还是那句话,具体编码很容易,关键是设计的完整合理清晰。

# Email

- flask-mail提供了比python smtp库更好用的封装,同template engine结合在一起,使用非常方便和强大。

- 具体到生产环境,还是要找第三方的邮件发送服务来做具体的事情,需要用到队列。

# Large Application Structure

- organize a large application in packages and modules

- 提出了一种工程的组织方式

- dev, test, production三种环境独立配置,由env指定

- blueprint

- unittest

# 感受

整体印象是比较通俗易懂,循序渐进的讲解基于flask的web开发的要素,一步一步,把问题暴露或引导出来,然后拿出flask对应的解决方案,有顺流而下的感觉,比较喜欢这种写作风格。

精心准备的代码可以作为日后做实际项目很好的基础。

读完并跟着做完demo,基本概念就都了解了,看各种web页面的感觉马上就变了,有种剑在手踌躇满志的感觉,但总是心里没底。因此part 2作者给了一个完整的系统的构建过程,来扶上马送一程,应该会有帮助。

future update will publish at "http://nerdcai.com/blog/2015/01/02/flask-web-development-part-1/"

本文由作者上传并发布(或网友转载),绿林网仅提供信息发布平台。文章仅代表作者个人观点,未经作者许可,不可转载。
点击查看全文
相关推荐
热门推荐