2016-10-27 3 views
1

私はpython-eveを使ってrest-apiを開発しています。私のオブジェクトには、URL、説明、画像が含まれています。ユーザーは商品を挿入または閲覧することができます(挿入するには、単にユーザーがURLを追加するだけで、説明と画像が生成されます)。python eve - pre-requestで応答を返します

繰り返しの更新を避けるために、ユーザーがPOSTリクエストを使用して既に存在するURLを挿入すると、その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 

は、しかし、私は(上書き)既存のアイテムを追加し続ける:そのために、私はこのコードを追加しました。

プレポストコールバックフックからユーザーを既存の製品にリダイレクトするにはどうすればよいですか?

+0

ここでは 'lookup'が確実に動作していますか?ドキュメントは次のように言っています: 'コールバックは、要求されているリソース、オリジナルのflask.requestオブジェクト、および現在のルックアップ辞書を引数として受け取ります(例外は、lookup引数を提供しないon_pre_POSTフックです)。 – HassenPy

+0

あなたの 'if prev_object'ブロック – HassenPy

+0

if条件のコードは一般的にはリダイレクトでしたが、問題はありませんでした。どのようにしてこの段階でレスポンスを返しますか? –

答えて

0

私がよく理解していれば、POST(書き込み)要求にルックアップのような応答で応答したいと考えています。 RESTでは実際にはしたくないので、Eve(RESTフレームワーク)は実際にはそれには適していませんが、ハッキングで同様の結果が得られるはずです。

urlフィールドにはuniqueルールが設定されているため、POSTには最終的に409 Conflictという応答が返されます。

+0

挿入されたアイテムのURLが存在しない場合は、私は続行したいと思います。もしそうでなければ、そのURLに存在するオブジェクトに対してGETレスポンスを返したいと思います –

+0

POSTが存在しない場合は、POSTが作成されます。すでにURLが存在する場合にのみ/が429になります。 –

+0

私はそのことを理解しています.iは既に存在するかどうかを確認するためにフックを適用し、もしそうであれば、既に存在する古いオブジェクトを返します。 –

関連する問題