2016-08-23 5 views
1

私のpython/eve REST APIには、自明な処理を行うカスタムルートがあります。私はPOSTリクエストを受け取り、処理の後にこの文書をデータベースに送ります。しかし、Eveと同じ検証を使用してこの文書を検証できればいいです。私はcerberusを直接使うことができると知っていますが、それは私のスキーマにあるdata_relationのようなものを扱いません。Eveがカスタムルート内のドキュメントを検証するように強制します

内部Eveバリデーターを呼び出す方法はありますか?

答えて

1

デフォルトのバリデータ(またはカスタマイズした場合は独自のサブクラス)を使用できます。次のサンプルスニペットでは、データベースフックを使用します(ドキュメントはdb挿入の直前に処理されます)。

from eve.io.mongo import Validator 
from flask import current_app 

validator = Validator() 

def on_insert(resource, documents):   
    schema = current_app.config['DOMAIN'][resource]['schema'] 
    for document in items: 
     if not validator(document): 
      print validator.errors 


app = Eve() 
app.on_insert += on_insert 

if __name__ == '__main__': 
    app.run() 

この段階では、彼らはあなたが(可能性がスキーマに含まれていますが、アイデアを得るされていないなど_created_updated、自動フィールドが含まれ、以来さて、この例では、すべて単一のドキュメント上のエラーを返しますバリデータインスタンスのプロパティをallow_unknownに設定してこの問題を回避してください)。

+1

私に面倒!私はすでにそれに定義されたいくつかのカスタムタイプのカスタムバリデーターを持っています。私はそれを使って自分の問題を解決することは考えていませんでした....ありがとう@NicolaIarocci、 –

関連する問題