1

Pyramidでは、GETによるリクエストの送信は、次のようなURLを作成することで実行できます。

@view_config(route_name="test")
def test(request):
    return HTTPFound("http://test.com/redirect_to_another_test?a=1")

しかしHTTPFound、POSTでそれを行うことはできないようですが、どうすればそれを行うことができますか?誰かがこれについてアイデアを持っていますか?ありがとう!

4

1 に答える 1

6

Pyramidやその他のサーバーサイドフレームワークや言語ではこれを行うことはできません。

サンプルコードはフォーム送信を示していません。コードはHTTPリダイレクトを示しています。これは、ブラウザに別のURLにアクセスするように指示している、つまり、ブラウザにリクエストを再送信するように指示しています。

このStackOverflowの質問では、これと同じ概念について説明していますが、ASPではPythonではなく-Response.RedirectでGetの代わりにPOSTを使用しますか?

GETまたはPOSTを介してPyramidで「リクエストを送信」する場合は、、、などのライブラリを使用する必要がありurllib2ますrequests。そのような場合、ライブラリはPyramidサーバーをリクエストの「送信者」として機能させます。

ユーザー/ウェブブラウザにPOSTでリクエストを送信させたい場合は、ブラウザにそれを行わせるために、いくつかの凝ったフットワーク/トリックを行う必要があります。

それを達成するための可能な方法は次のとおりです。

  • JavaScript AJAXフォーム送信を使用し、JSONを介してエラーコードまたは命令を返し、JavaScriptライブラリにPOSTを介して同じフォームを再送信するように指示します。
  • ユーザーをフォームデータが入力されたGETページにリダイレクトし(GET引数を介して)、JavaScriptを使用してPOSTオンロードを介してフォームを再送信します

サーバー側の言語では、POSTでリクエストを再送信するようにブラウザに指示することはできません。ブラウザはそのようには機能しません。

また、「ほとんどのブラウザ」は、元のブラウザがPOSTであったとしても、通常、GETを介してフェッチされるリダイレクトリクエストを解釈することを知っておく必要があります。これは仕様ではありません-特定のリダイレクトコードはPOSTをPOSTに保つことになっています-しかし、ブラウザはすべての仕様に準拠しているわけではありません。意図的にGETからPOSTに切り替えるHTTPステータスコードやコマンドもありません。

于 2012-09-26T20:27:23.783 に答える