Flask, request.form['foo'] or request.form.get('foo')?

2016-03-22 12:21:19 +08:00
 pppy
request.form['foo']这种不容错的方法是否更好?
3723 次点击
所在节点    Python
9 条回复
cloverstd
2016-03-22 12:33:57 +08:00
request.form['foo'] 如果取不到,会直接抛 403 错误
tanywei
2016-03-22 12:51:09 +08:00
request.form.get('foo', None)
zwzmzd
2016-03-22 13:14:26 +08:00
request.form.get('foo') 即可, None 是默认参数

http://flask.pocoo.org/docs/0.10/api/#incoming-request-data
pppy
2016-03-22 13:44:16 +08:00
ok 明白了,感谢大家
glasslion
2016-03-22 20:51:47 +08:00
你自己都说了 request.form['foo']不容错, 所以要看具体使用场景, 需要容错的场景下就用 request.form.get('foo')。 哪种方式更好并不是绝对的。

然而,表单数据来源于用户提交, 经常被用作恶意攻击, 所以要对表单数据做各种合法性检查( csrf, 数据范围...) 另外从用户体验的角度来说, 如果提交表单缺少 必填字段 foo , 那么应该给用户提示 ”缺少 必填字段 foo ...“, 而不是去抛异常。

综上, 在现代 web 开发中,一般使用表单框架 /库来完成上述重复性工作。 例如 django form 或 Flask-WTF 。

直接操作 request.form 请出门左拐 java php 节点
BOYPT
2016-03-22 22:27:12 +08:00
这本来就是 python dict 的标准接口啊,不用扯到 web 的容错吧
a = {}
None == a.get('nope', None)
julyclyde
2016-03-24 18:05:33 +08:00
@cloverstd 为什么是 403 ?应该 500 吧
julyclyde
2016-03-24 18:06:24 +08:00
@BOYPT 说的是对的。
@glasslion 是不是没有具体看过 dict 接口和 Flask 的实现?
cloverstd
2016-03-24 18:30:09 +08:00
@julyclyde 缺少参数, 403

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

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

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

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

© 2021 V2EX