目前了解的 flask,django 都有后端表单功能,不是很理解存在的意义
1
xiaolinjia 2020-09-11 14:39:43 +08:00
不写 form,怎么接收前端表单传的数据?
如果你说的是后端来定义 form 的样式,这个是之前历史需要,现在基本不用。 |
2
Achilless OP @xiaolinjia 接收 request 对象不可以么
|
3
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 。这样写不麻烦吗? |
4
Achilless OP @xiaolinjia 我验证 form 都是在前端写好再传的。。觉得比写 form.py 轻松许多,所以怀疑后端设计 form 的意义
|
5
Haujilo 2020-09-11 15:54:13 +08:00
楼主的意思是既然前端的定义数据格式,不理解为啥后端还要再定义一次?后端开发要默认前端传输的数据都是不可信的,必须自定义好格式并验证。
|
6
leopod1995 2020-09-11 15:55:12 +08:00
做后端就要有 前端所有数据都不可信 的心态
|
7
zacharyjia 2020-09-11 15:58:24 +08:00 2
@Achilless 不要相信前端传来的数据,所有验证一定要在后端做好。前端的验证只是为了提高用户体验的。
|
8
lasuar 2020-09-11 16:06:40 +08:00
遇到不理解的设计先提问 是个好习惯
|
9
lovecy 2020-09-11 16:07:26 +08:00
前端验证是提高用户体验,减少无效请求的
后端验证是防错防攻击 |
10
lovecy 2020-09-11 16:07:55 +08:00
前端代码是公开的,所有请求都是可以伪造的,不可信任前端传来的数据
|
11
xiaolinjia 2020-09-11 16:33:04 +08:00
@Achilless 你前端 js 验证的话,某种程度上是可以防止那些操作浏览器的正经用户乱输。那我直接 postman 请求接口,不是把你前端绕过了,那我后端还要不要验证啊。
或者说,我直接 request 库向 api 接口发请求 post 数据,有经过你的前端表单? |
12
sixway 2020-09-11 16:52:26 +08:00
一般来说前端的 From 是可以像你说的。不过前端的数据毕竟不可信,验证也只是防君子。想做坏事的成本可太低了。
|
13
L00kback 2020-09-11 16:52:45 +08:00
你前端搞好了,传给后端的时候黑客把数据包一截,爱怎么改怎么改。
功能是没问题的,安全性太低了。 |
14
clf 2020-09-11 16:59:56 +08:00
@Achilless 只做前端验证是不够的。
1.像上面说的那样完全可以用 postman 等工具直接请求你的接口,往接口里写入一堆对业务会造成极大干扰的数据。 2.前端的代码是可以被修改的(比如网页,我去掉前端的验证表单的 js 代码,直接请求就可以了) 3.网络传输的不可靠,如果采用明文传输,在中间过程中可以被修改。 |
15
gollwang 2020-09-11 17:14:18 +08:00
前段验证在程序员眼中==没有
|
16
kalluwa 2020-09-11 17:33:01 +08:00
面向黑客编程?
|
17
oneend 2020-09-11 17:46:24 +08:00
前端的数据一定要像 女人的嘴骗人的鬼 那样对待
|
18
wuwukai007 2020-09-11 18:51:57 +08:00 via Android
django-drf,表单验证默秒全
|
19
saulshao 2020-09-11 21:10:56 +08:00
出于安全考虑,后端应该把所有接收的输入再验证一遍。并且有一些数据的有效性是只有后端才知道的。
|
20
muuubooo 2020-09-12 14:08:48 +08:00
我的经验理解是前端验证是软验证,更多的是防止用户无恶意的错误填写,和规范数据格式。
就像某扇门上贴着非请勿入的一纸告示,但门本身没上锁。 |
21
lslqtz 2020-09-13 02:33:30 +08:00
前端验证可以降低不必要的服务器请求,同时提升用户体验
后端验证可以防止前端写出 bug 导致没有进行验证,同时也可以防止恶意接口请求,并且可以进行一些增强验证(例如说注册这个功能,你前端是不知道账号存在不存在的,而后端做注册逻辑的时候肯定是要去数据库先查表的) |
22
soulmt 2020-09-13 10:23:51 +08:00
不要相信前端!!!不要相信前端!!!不要相信前端!!!前端给什么都不要相信!真的!!
|
23
OHyn 2020-09-13 16:14:17 +08:00
所有验证,后端都需要进行。。前端防君子不防小人的。
|
24
sxy960806 2020-09-29 01:50:29 +08:00 via Android
可以换一个问题,后端写了 form 为什么数据库还要再检验一遍?理解了吧
|