2016-10-27 33 views
1

我正在開發一個使用python-eve的rest-api。我的對象包含一個URL,一個描述和一個圖像。用戶可以插入或查看產品(插入 - 用戶只需添加一個URL,並生成描述和圖像)。python前夕 - 返回預先請求的響應

爲了避免重複更新 - 當用戶使用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回調掛鉤的已有產品?

+0

你確定'lookup'在這裏工作嗎?該文檔說:'回調將接收被請求的資源,原始的flask.request對象和當前的查找字典作爲參數(只有例外是on_pre_POST掛鉤,它不提供查找參數)。' – HassenPy

+0

和什麼是代碼你的'if prev_object'塊 – HassenPy

+0

if條件中的代碼通常是重定向,但它沒有工作。我的問題是我如何在這個階段返回響應(如果條件)? –

回答

0

如果我很好地理解你,你想用類似於查詢的響應來響應POST(寫入)請求。在REST中,你真的不想這麼做,而Eve(作爲一個REST框架)並不適合這樣做,儘管你可能通過一些黑客手段獲得類似的結果。

你可能會在你的案例中設置unique規則爲url字段,所以POST最終會得到一個409 Conflict響應。

+0

我不知道,因爲當插入的項目的網址不存在 - 我想繼續並創建它,如果它不 - 我想返回GET響應的對象,確實存在與該網址 –

+0

如果它不存在,POST將創建它。只有當/如果url已經存在時,你纔會得到429。 –

+0

我明白that.i appllied掛鉤爲了檢查它是否已經存在,如果它 - 返回已存在的舊對象,如何做,而不是得到429 –