【问题标题】:Are "dummy URLs" required to make function calls to Flask from the front-end?从前端对 Flask 进行函数调用是否需要“虚拟 URL”?
【发布时间】:2016-06-17 01:23:47
【问题描述】:

我正在使用 Flask 制作我的第一个网络应用程序,其中基于所选成分在前端显示饮料数据库。然后用户选择一种饮料,然后出现一个页面内弹出窗口,其中包含一些饮料信息和一个按钮“make”,当用户点击“make”时,它会在后端(Flask)调用一些 python 代码来控制我的 GPIO树莓派来控制一些泵。

这个“make”是否需要调用一些路由(例如/make/<drink>)才能调用后端的python函数?我不喜欢任何用户只需输入 URL (example.com/make/<drink>) 的想法,即使没有加载正确的成分,数据库中的某些内容也会强制机器制作饮料。即使我确实检查了后端以确保已加载用户选择的成分,我希望用户必须使用界面而不是仅仅输入 URL。

有没有办法让make按钮调用python代码而不使用“虚拟URL”将按钮路由到服务器?

【问题讨论】:

  • 如果我理解正确,那么是的,您需要 Flask 中的路由以使服务器接受客户端操作。我不太明白您所说的“虚拟 URL”是什么意思,但并非所有功能都需要路由,如果这就是您所说的
  • 我不是在问是否所有的函数都需要一个路由,只是那些被前端按钮调用的函数。 “虚拟 URL”是指 /make/<drink> 不是显示内容的 URL。它只用于调用饮料制作代码,然后可能重定向用户。我不希望用户能够只输入 URL 来制作饮料,我希望他们通过网络应用程序。
  • 明白了。所以,你在问一个安全问题。唯一想到的是在 POST 数据中为 CSRF token 隐藏一个字段@
  • 嗯,有趣。所以没有任何方法可以从前端调用 python 代码而不需要路由 URL?
  • 不应该。前端都是 HTML/CSS/JS,那里没有加载/可用的 python。

标签: python flask


【解决方案1】:

正如其他人提到的,您可以保护端点,以便用户必须提供凭据才能向该端点发出成功的请求。

此外,您的端点在创建/更新数据时应该使用正确的 HTTP 语义。即POST 创建饮料,PUT 更新饮料。这也将保护您免受将 URL 放入浏览器的人的影响,因为这是一个 GET 请求。

TL;DR

  1. 保护端点(如果可能)
  2. 添加检查是否提供了正确的请求正文
  3. 使用正确的 HTTP 语义

【讨论】:

  • 我不打算有一个登录系统,但你的其他建议似乎很可靠。我想这将是一个 POST 请求?不一定要创建饮料,而是要求后端启动控制树莓派的代码。
  • 是的,IMO,那将是一个 POST。每当请求在每次执行时更改服务器状态时,都会被视为 POST。
  • 它是否改变了服务器状态?我还是个初学者,所以我不知道什么是“改变”状态。
  • 这对你来说可能是一个更好的问题。提出请求时究竟会发生什么?可能希望将其包含在您的原始问题中
  • 我还没有开始制作应用程序,我只是在计划它。我只想有一个与数据库中的项目相对应的按钮,当按下它时,前端会告诉后端将该数据库项目发送到一些控制我的树莓派 GPIO 的 python 代码
猜你喜欢
  • 2011-09-18
  • 1970-01-01
  • 2019-12-17
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 2011-08-02
相关资源
最近更新 更多