交渉するPythonのWebアプリケーション用のスマート、単純なコンテンツ·ネゴシエーションです。
コンテンツネゴシエーションはうまくやって困難な場合があります。理想的には、あなたのコードは、DRYであるべき、とあなたは、異なるフォーマットで同じドメインオブジェクトを放出するために、複数のビューメソッドで同じ古い決まり文句を繰り返すことはない。交渉するあなたは自動的にクライアントから要求された形式にドメインオブジェクトを翻訳するフォーマッタを使用して、ビューのメソッドを飾るようにすることによって、皆様の生活をより簡単にするのに役立ちます。
それは本当に使い簡単です。うまくいけば、(フラスコアプリケーション用の)この例では、主なポイントを明確にします:
#まず、翻訳する方法を指定するフォーマッタのカップルを書く
特定の形式に変換ビュー機能の#出力。ここでは、定義する
#JSONフォーマッタとテンプレートパラメータを受け取りHTMLフォーマッタ。
negotiate.flaskインポートフォーマッタから
クラスJSONFormatter(フォーマッタ):
 フォーマット= 'JSON」
 のMIMEタイプ= ['アプリケーション/ JSON']
 デフレンダリング(自己を、OBJ):
 戻りjson.dumps(OBJ)
クラスHTMLFormatter(フォーマッタ):
 フォーマット= 'JSON」
 のMIMEタイプ= ['text / htmlの']
 デフ(自己、テンプレート)を設定:
  self.template =テンプレート
 デフレンダリング(自己を、OBJ):
&NBSPは、レンダリングを返す(self.template、** OBJ)
アプリケーションを構築する際に#その後、私たちはとビュー機能を飾る
#このビューを使用できるフォーマットをリスト、デコレータを「交渉する」。
negotiate.flaskのインポートから交渉する
@ app.route( '/記事/
@ app.route( '/記事/
@negotiate(JSONFormatter)
@negotiate(HTMLFormatter、テンプレート= 'post.html')
DEF view_post(ID、フォーマット=なし):
 ポスト= Posts.by_id(ID)
 ポストがnoneの場合:
とをタップ(404)アボート
 (、「読み取り」のポストを)g.user.authorizeれていない場合:
とをタップ(401)アボート
 戻り{'ポスト':ポスト}
結果は、デフォルトでは、ポストのHTMLバージョンを返しますビューのアクションである(つまり、と受け入れ:* / *と明示的な形式).html拡張子が明示的に指定、またはポストのJSON版の場合された場合、または.json拡張子が与えられたか、受け入れている:アプリケーション/ JSONは、要求とともに送信されます。
<強い>サポートの
他のWebフレームワークのサポートを追加することはかなり簡単なはずですが、現在は交渉することは、フラスコとPylonsのをサポートしています。ます。
- のPythonます。
の要件のを見て>
コメントが見つかりません