【问题标题】:python eve - return a response on pre-requestpython eve - 根据预请求返回响应
【发布时间】:2016-10-27 18:48:53
【问题描述】:

我正在使用 python-eve 开发一个 rest-api。我的对象包含一个 url、一个描述和一个图像。用户可以插入或查看产品(用于插入 - 用户只需添加一个 url,并生成描述和图像)。

为了避免重复更新 - 当用户使用 POST 请求插入已经存在的 url 时,我想将他重定向到与该 url 对应的项目的 url。为此,我添加了以下代码:

def pre_post_callback(request, lookup):
    prev_object = current_app.data.driver.db['products'].find_one({"url":lookup.values['url']})
    if prev_object:
      # here I would like to redirect the user to the /product/id of the product corresponding.

app.on_pre_POST += pre_post_callback

但是,当两次添加相同的 url 时,我一直在添加(覆盖)现有项目。

如何将用户从 pre-post 回调挂钩重定向到已经存在的产品?

【问题讨论】:

  • 您确定lookup 在这里工作吗?文档是这样说的:Callbacks will receive the resource being requested, the original flask.request object and the current lookup dictionary as arguments (only exception being the on_pre_POST hook which does not provide a lookup argument).
  • if prev_object 块中的代码是什么
  • if 条件中的代码通常是重定向,但是它不起作用。我的问题是我如何在这个阶段(在那个 if 条件下)返回响应?

标签: python eve


【解决方案1】:

如果我对您的理解很好,您希望使用类似查找的响应来响应 POST(写入)请求。在 REST 中你真的不想这样做,而 Eve(作为一个 REST 框架)并不适合这样做,尽管你可能会通过一些 hack 获得类似的结果。

在您的情况下,您可能会为url 字段设置unique 规则,因此POST 最终会得到409 Conflict 响应。

【讨论】:

  • 我不确定,因为当插入的项目的 url 不存在时 - 我想继续并创建它,如果不存在 - 我想返回 GET 响应与该 url 存在的对象
  • 如果它不存在,POST 将创建它。只有当/如果 url 已经存在时,您才会得到 429。
  • 我明白了。我应用了钩子来检查它是否已经存在,如果存在 - 返回已经存在的旧对象。我该怎么做而不是得到 429
猜你喜欢
  • 2021-07-10
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 2019-06-20
相关资源
最近更新 更多