【问题标题】:How do you serve content other than files using Flask?您如何使用 Flask 提供文件以外的内容?
【发布时间】:2017-12-10 04:10:27
【问题描述】:

这个问题可能看起来有点愚蠢,因为我才刚刚开始掌握 HTTP。据我了解,HTTP 是一种通信协议,这意味着 2 台计算机可以使用它进行通信。然而,在 Internet 上,似乎所有 HTTP 服务器都在提供文件。我可以制作一个不提供文件但只通过 HTTP 与客户端通信的烧瓶服务器吗?

【问题讨论】:

  • 你是在问是否可以只返回文本?
  • 有点,我想发送不在文件中而是在变量中的文本。
  • 如果您想了解 Web 服务器的工作原理,您可能会发现这一系列文章很有趣。使用 Python 作为示例。 ruslanspivak.com/lsbaws-part1
  • 是的,你是对的,我混淆了那里的页面和文件,这个问题现在确实很荒谬,但我得到了一个解决方案,可以让我以另一种方式解决问题,所以我想我会删除或编辑这个问题。

标签: python python-2.7 python-3.x http flask


【解决方案1】:

我可以制作一个不提供文件而只通过 HTTP 与客户端通信的烧瓶服务器吗?

我的理解是,当您在“正常”网络请求中收到“文件”时,实际发生的是您正在接收 HTTP 响应(类似于文本文件),并且该 HTTP 响应包含状态代码(您似乎认为是 real HTTP),一个“内容”部分,其中包含“文件”的文本,并且 HTTP 响应中有另一行指定如何接收方计算机应解释该“内容”部分的内容(例如 JSON、纯文本、HTML 或 XML 等)。该行通常类似于Content-Type: text/html

在您的情况下,您只会在将内容部分留空时指定状态代码。

由于您不发送任何内容,因此您可能想在 HTTP 响应中指定“空”内容类型,但 there doesn't seem to be a 'null' content type。尽管如此,您将内容类型设置为什么并不重要,因为您不会填写任何内容。我见过的一件事是将其设置为text/plainapplication/json


如果您想向用户发送结构化数据,通常的做法是将其作为 JSON 发送。因此,您可以将Content-Type 指定为application/json,然后将响应的正文(“内容”)格式化为JSON

这是一个可以执行此操作的 Flask 代码示例:

@app.route('/get_current_user')
def get_current_user():
    return jsonify(
        username=g.user.username,
        email=g.user.email,
        id=g.user.id
    )

来源:Return JSON response from Flask view

【讨论】:

  • 谢谢,但这仅解决了部分问题,我如何发送数据而不将其放在文件中。
  • 我更新了我的答案,包括如何通过 HTTP 请求发送结构化数据的描述。执行此操作的常用方法是将数据格式化为 JSON。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多