你们对 Flask 这个框架的设计有什么看法吗?

2017-05-27 13:43:25 +08:00
 changwei

V2EX 上 Pythoner 应该比较多,不知道大家对于这个框架怎么看。

我最近也是花了一点时间学了学,感觉这个框架在设计上有很多不是很优雅很规范的地方。

官方文档条理不是很清晰,先不说翻译质量,就英文文档来说,没有像 CodeIgniter 的文档一样把每一个模块小节涉及到的函数的函数原型贴出来,基本上很多东西得边写边试才知道,如果时间很紧迫可能我并没有那么多时间去一个一个 API 的试,也不会把他文档里面的长篇大论全部看一遍,当然我知道他有 API 文档,但是毕竟 API 只是起一个工具字典的作用,很多概念还是得靠文字解释来理解。还有比如说 WEB 应用最常见的 GET,POST 居然放到很后面才讲,而且一会儿 request.form 一会儿 request.args.get,要么还有直接 app.route 里面取值的,不像别的编程语言一样都是统一的 API 获取。还有作用域,对于很多从 PHP,Java Servlet 等转过来的开发者可能对于为什么 request 需要保证线程安全等的概念不是很了解,而官方文档对于这个问题也是很简单的略过,还有命名用什么 g,current_app,request 等等,命名也不统一一下,像写 PHP 或者 ASP,我知道可以知道其中一个 API 之后后面的举一反三,这个 Flask 在 API 设计上命名风格没有统一让强迫症有点受不了啊。

还有我看的是 http://docs.jinkan.org/docs/flask/ 这个版本的翻译,我没有为开源社区贡献什么,也不好怎么批评,求大家推荐一些更好的翻译版本或者 Flask 相关的学习资料,谢谢了!

9584 次点击
所在节点    Python
36 条回复
kimchan
2017-05-27 13:56:42 +08:00
Pythonista
kimchan
2017-05-27 13:58:10 +08:00
还有就是. flask 的文档没觉得质量差吧...
sagaxu
2017-05-27 13:58:32 +08:00
http://flask.pocoo.org/docs/0.12/quickstart/#accessing-request-data 这里讲的很清楚啊
request.form 里是 application/x-www-form-urlencoded 里提交的 data
request.args 里是写在 URL 里?后面的 parameter
request.files 是 multipart/form-data 里上传的文件

current_app 是写扩展的时候用的,request 是请求上下文,g 是让你存全局变量用的

app.route 中指定的变量,在请求中替换成实际的 querypath 中的值后,自动注入到 handle 中去

非常清晰明了和简洁的设计,怎么到你眼里就那么不规范了呢?
timothyqiu
2017-05-27 14:06:43 +08:00
yonoho
2017-05-27 14:20:46 +08:00
flask 是我最欣赏的 python web 框架,我觉得它的设计十分简单优雅,尤其你列举的那些不好用的地方,在我看来都是精髓。

可能楼主对优雅和规范的认识和 flask 的设计者们不太一样吧
huanglongtiankon
2017-05-27 14:25:03 +08:00
flask 的设计是我见过的最简洁优雅的,没有之一,按理说其他语言的 web 框架我也接触过一些,java 的 spring,php 的 tp5,感觉都没比 flask 好啊,怎么就不优雅了?
ITOutsider
2017-05-27 14:42:44 +08:00
換 rails 哈哈
neoblackcap
2017-05-27 14:48:04 +08:00
没有看法
最好读原版的,文档这东西更新很快,不要寄托于社区的翻译热情。
awanabe
2017-05-27 14:59:08 +08:00
doc 一般只会讲 api 使用吧,你还要别人跟你讲 Request 线程安全
不会直接去查这方便的文档么? 搜搜 Request Flask 如何保证线程安全就一大堆 LocalProxy 什么的
文档很好用,入门方便
Kilerd
2017-05-27 15:00:18 +08:00
@sagaxu current_app 用于工厂模式下的 app


flask 设计地更精心,要研究一下才能了解。

研究完了就会觉得很多你认为理所当然的地方都是 flask 独特的地方。





再或者,你试试我的框架?(认真脸
102400
2017-05-27 15:01:10 +08:00
@huanglongtiankon 看过 Sinatra ?
fy
2017-05-27 15:06:44 +08:00
没看法。文档好。个人更喜欢 tornado webhandler 那样的请求封装,但 flask 函数这种也可以接受。
Lycnir
2017-05-27 15:11:03 +08:00
我猜,楼主原先写 java 的?
wingyiu
2017-05-27 15:20:26 +08:00
更喜欢 django
changwei
2017-05-27 15:47:33 +08:00
@kimchan 如果对比一下 ci,laravel,我觉得这文档的章节顺序安排就有问题。
@sagaxu 我说的不是文档讲的不清楚,而是他变量命名不是很统一,比如说 laravel 里面统一是 request 类的 input 方法来接收,而且文档都有该函数原型。看完之后我总下意识的以为这不是最佳函数,应该是有更整齐统一的函数来调用请求变量。
changwei
2017-05-27 15:50:40 +08:00
@Kilerd 对就这个地方很疑惑,还有测试那个章节有点看不懂他的写法,反正理解起来很费劲,也是我没有理解这个框架的精髓。我之前写 php 之类的没有过这种写法,所以现在接触 flask 很多地方都不理解,但是文档也确实很多地方没有讲为什么需要这样写。而且我网上搜索了一大圈,flask 中文方面的资料太少了。 @Lycnir 我写 php 的
WayToPlay
2017-05-27 15:51:59 +08:00
看 RxJava 才要命,action0,action1......
Kilerd
2017-05-27 15:58:08 +08:00
@changwei flask 中文圈挺好的啊,挺多文章的。
或者不会就去问 dalao 咯
Tyanboot
2017-05-27 15:59:45 +08:00
那你觉得怎么样才算命名统一呢
changwei
2017-05-27 16:02:49 +08:00
@awanabe 如果确实有这个问题,要么来个 tip 点明一下,要么就讲完整,而不是好几个地方穿插一点,讲一半还讲的模棱两可(当然也有可能是翻译问题),毕竟设计模式里面也讲究一个单一职责。你看看文档里面讲作用域,那么一次性讲完,别路由里面穿插一点请求,穿插一点作用域,顺便还讲讲全局作用域,请求和路由之间还穿插一下模板引擎,静态文件导入的教程之类的。我认为这个官方文档内容还算可以,但是详略不是很得当而且顺序安插还是有很多问题。

你看看 codeigniter 的文档从头到尾清爽明了,是什么章节专注讲什么内容。关于 session 锁的问题,至少会讲明白 session 为什么需要锁,没有锁会导致什么后果,然后就快速结题。这样无论是对老鸟还是菜鸟都很友好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/364221

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX