为什么后端要写 form,前端直接写好 form 再传不是很方便么

2020-09-11 14:30:29 +08:00
 Achilless

目前了解的 flask,django 都有后端表单功能,不是很理解存在的意义

4692 次点击
所在节点    Python
24 条回复
xiaolinjia
2020-09-11 14:39:43 +08:00
不写 form,怎么接收前端表单传的数据?
如果你说的是后端来定义 form 的样式,这个是之前历史需要,现在基本不用。
Achilless
2020-09-11 15:16:41 +08:00
@xiaolinjia 接收 request 对象不可以么
xiaolinjia
2020-09-11 15:31:23 +08:00
@Achilless flask 我用的少就先不论。dj 的话,form 类主要有两个功能,1 是验证数据,2 是前端生成表单(这个上面已经说了是历史产物了,现在基本不用)。
那说回 1,接收数据,直接从 request.POST 或者 request.body 里接收确实可以,但是还要另外写验证,就很麻烦。如果用 form 类的话,首先在 model 里能定义一些字段约束,并且 form 类里还能定义 clean_xx 方法来验证。这些验证,只需要调用 form.is_valid()。然后 form.cleaned_data,就可以获取到验证通过的数据,因为框架帮你写好了。
而如果你直接取,那就是 a = request.POST.get('a'),if 验证(a): xxxxx 。b = request.POST.get('b'),if 验证(b): xxxxx 。这样写不麻烦吗?
Achilless
2020-09-11 15:45:34 +08:00
@xiaolinjia 我验证 form 都是在前端写好再传的。。觉得比写 form.py 轻松许多,所以怀疑后端设计 form 的意义
Haujilo
2020-09-11 15:54:13 +08:00
楼主的意思是既然前端的定义数据格式,不理解为啥后端还要再定义一次?后端开发要默认前端传输的数据都是不可信的,必须自定义好格式并验证。
leopod1995
2020-09-11 15:55:12 +08:00
做后端就要有 前端所有数据都不可信 的心态
zacharyjia
2020-09-11 15:58:24 +08:00
@Achilless 不要相信前端传来的数据,所有验证一定要在后端做好。前端的验证只是为了提高用户体验的。
lasuar
2020-09-11 16:06:40 +08:00
遇到不理解的设计先提问 是个好习惯
lovecy
2020-09-11 16:07:26 +08:00
前端验证是提高用户体验,减少无效请求的
后端验证是防错防攻击
lovecy
2020-09-11 16:07:55 +08:00
前端代码是公开的,所有请求都是可以伪造的,不可信任前端传来的数据
xiaolinjia
2020-09-11 16:33:04 +08:00
@Achilless 你前端 js 验证的话,某种程度上是可以防止那些操作浏览器的正经用户乱输。那我直接 postman 请求接口,不是把你前端绕过了,那我后端还要不要验证啊。
或者说,我直接 request 库向 api 接口发请求 post 数据,有经过你的前端表单?
sixway
2020-09-11 16:52:26 +08:00
一般来说前端的 From 是可以像你说的。不过前端的数据毕竟不可信,验证也只是防君子。想做坏事的成本可太低了。
L00kback
2020-09-11 16:52:45 +08:00
你前端搞好了,传给后端的时候黑客把数据包一截,爱怎么改怎么改。
功能是没问题的,安全性太低了。
clf
2020-09-11 16:59:56 +08:00
@Achilless 只做前端验证是不够的。

1.像上面说的那样完全可以用 postman 等工具直接请求你的接口,往接口里写入一堆对业务会造成极大干扰的数据。
2.前端的代码是可以被修改的(比如网页,我去掉前端的验证表单的 js 代码,直接请求就可以了)
3.网络传输的不可靠,如果采用明文传输,在中间过程中可以被修改。
gollwang
2020-09-11 17:14:18 +08:00
前段验证在程序员眼中==没有
kalluwa
2020-09-11 17:33:01 +08:00
面向黑客编程?
oneend
2020-09-11 17:46:24 +08:00
前端的数据一定要像 女人的嘴骗人的鬼 那样对待
wuwukai007
2020-09-11 18:51:57 +08:00
django-drf,表单验证默秒全
saulshao
2020-09-11 21:10:56 +08:00
出于安全考虑,后端应该把所有接收的输入再验证一遍。并且有一些数据的有效性是只有后端才知道的。
muuubooo
2020-09-12 14:08:48 +08:00
我的经验理解是前端验证是软验证,更多的是防止用户无恶意的错误填写,和规范数据格式。
就像某扇门上贴着非请勿入的一纸告示,但门本身没上锁。

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

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

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

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

© 2021 V2EX