推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Achilless
V2EX  ›  Python

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

  •  
  •   Achilless · Sep 11, 2020 · 5810 views
    This topic created in 2095 days ago, the information mentioned may be changed or developed.

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

    24 replies    2020-09-29 01:50:29 +08:00
    xiaolinjia
        1
    xiaolinjia  
       Sep 11, 2020
    不写 form,怎么接收前端表单传的数据?
    如果你说的是后端来定义 form 的样式,这个是之前历史需要,现在基本不用。
    Achilless
        2
    Achilless  
    OP
       Sep 11, 2020
    @xiaolinjia 接收 request 对象不可以么
    xiaolinjia
        3
    xiaolinjia  
       Sep 11, 2020
    @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
        4
    Achilless  
    OP
       Sep 11, 2020
    @xiaolinjia 我验证 form 都是在前端写好再传的。。觉得比写 form.py 轻松许多,所以怀疑后端设计 form 的意义
    Haujilo
        5
    Haujilo  
       Sep 11, 2020
    楼主的意思是既然前端的定义数据格式,不理解为啥后端还要再定义一次?后端开发要默认前端传输的数据都是不可信的,必须自定义好格式并验证。
    leopod1995
        6
    leopod1995  
       Sep 11, 2020
    做后端就要有 前端所有数据都不可信 的心态
    unifier
        7
    unifier  
       Sep 11, 2020   ❤️ 2
    @Achilless 不要相信前端传来的数据,所有验证一定要在后端做好。前端的验证只是为了提高用户体验的。
    freemoon
        8
    freemoon  
       Sep 11, 2020
    遇到不理解的设计先提问 是个好习惯
    lovecy
        9
    lovecy  
       Sep 11, 2020
    前端验证是提高用户体验,减少无效请求的
    后端验证是防错防攻击
    lovecy
        10
    lovecy  
       Sep 11, 2020
    前端代码是公开的,所有请求都是可以伪造的,不可信任前端传来的数据
    xiaolinjia
        11
    xiaolinjia  
       Sep 11, 2020
    @Achilless 你前端 js 验证的话,某种程度上是可以防止那些操作浏览器的正经用户乱输。那我直接 postman 请求接口,不是把你前端绕过了,那我后端还要不要验证啊。
    或者说,我直接 request 库向 api 接口发请求 post 数据,有经过你的前端表单?
    sixway
        12
    sixway  
       Sep 11, 2020
    一般来说前端的 From 是可以像你说的。不过前端的数据毕竟不可信,验证也只是防君子。想做坏事的成本可太低了。
    L00kback
        13
    L00kback  
       Sep 11, 2020
    你前端搞好了,传给后端的时候黑客把数据包一截,爱怎么改怎么改。
    功能是没问题的,安全性太低了。
    clf
        14
    clf  
       Sep 11, 2020
    @Achilless 只做前端验证是不够的。

    1.像上面说的那样完全可以用 postman 等工具直接请求你的接口,往接口里写入一堆对业务会造成极大干扰的数据。
    2.前端的代码是可以被修改的(比如网页,我去掉前端的验证表单的 js 代码,直接请求就可以了)
    3.网络传输的不可靠,如果采用明文传输,在中间过程中可以被修改。
    gollwang
        15
    gollwang  
       Sep 11, 2020
    前段验证在程序员眼中==没有
    kalluwa
        16
    kalluwa  
       Sep 11, 2020
    面向黑客编程?
    oneend
        17
    oneend  
       Sep 11, 2020
    前端的数据一定要像 女人的嘴骗人的鬼 那样对待
    wuwukai007
        18
    wuwukai007  
       Sep 11, 2020 via Android
    django-drf,表单验证默秒全
    saulshao
        19
    saulshao  
       Sep 11, 2020
    出于安全考虑,后端应该把所有接收的输入再验证一遍。并且有一些数据的有效性是只有后端才知道的。
    muuubooo
        20
    muuubooo  
       Sep 12, 2020
    我的经验理解是前端验证是软验证,更多的是防止用户无恶意的错误填写,和规范数据格式。
    就像某扇门上贴着非请勿入的一纸告示,但门本身没上锁。
    lslqtz
        21
    lslqtz  
       Sep 13, 2020
    前端验证可以降低不必要的服务器请求,同时提升用户体验
    后端验证可以防止前端写出 bug 导致没有进行验证,同时也可以防止恶意接口请求,并且可以进行一些增强验证(例如说注册这个功能,你前端是不知道账号存在不存在的,而后端做注册逻辑的时候肯定是要去数据库先查表的)
    soulmt
        22
    soulmt  
       Sep 13, 2020
    不要相信前端!!!不要相信前端!!!不要相信前端!!!前端给什么都不要相信!真的!!
    OHyn
        23
    OHyn  
       Sep 13, 2020
    所有验证,后端都需要进行。。前端防君子不防小人的。
    sxy960806
        24
    sxy960806  
       Sep 29, 2020 via Android
    可以换一个问题,后端写了 form 为什么数据库还要再检验一遍?理解了吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4116 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 05:20 · PVG 13:20 · LAX 22:20 · JFK 01:20
    ♥ Do have faith in what you're doing.