2011-07-14 1 views
0

私はPython 2.5でCGIスクリプトを作成しています。HTTP POST要求がPython/CGIで送信された後に、ブラウザがページをリフレッシュするのを避ける方法

私のcgiスクリプトを使用すると、ユーザーはHTMLフォームにデータを入力し、更新を押してデータを正常に追加できます。しかし、ユーザーがブラウザの更新ボタンを押すと、前に入力したデータが再び追加されることが判明しました。これは私が探している動作ではないので、HTTP POST/GET要求後にメインページに戻ってユーザーをリダイレクトできることが大好きです。 pythonで

print "Location: www.website.here" 

ライン:

これは使用することにより、自然もちろん可能です。しかし、ユーザーに情報を表示できるようにするために、各リフレッシュ間にメッセージを格納できるようにする必要があるため、これを行うことはできません。

これらのメッセージは基本的に検証エラーメッセージです。ユーザーが間違ったデータを入力してサブミットすると、マイページがリロードしてエラーメッセージを表示する必要があります。私はこの問題を解決していますが、上記の行を使用してリダイレクトする必要がある場合、これを緩和します。

私の質問は、CGIとPythonを使ってhtmlページをリフレッシュするためのオプションを削除する可能性のある他の方法があるか、これをすべて間違って見ていて、後でメッセージを保存する方法を見つけようとすべきですか? HTMLリダイレクト?

+1

[ウィキペディアの記事](http://en.wikipedia.org/wiki/Post/Redirect/Get)を見て、必要に応じて質問を書き直してください。 –

答えて

1

私はあなたが実際に2つのシナリオを前提としている:

  1. は、ユーザーがデータを正しく入力します。ページをリロードすると、追加されたデータが再び追加されます(間違っています)。ユーザーは開始ページにリダイレクトされる可能性があります。
  2. ユーザーがデータを正しく入力しなかった(エラーメッセージがあります)。再ロードすると、同じメッセージが再び表示されます。リダイレクトは容認できない。

リダイレクトを発行できるのは、データが有効である場合のみで、それ以外の場合はエラーメッセージを表示するとします。

CGIスクリプトをFlask、Bottle、Django、Pyramidなどの最新のWebフレームワークに移行するオプションがある場合は、そうすることをお勧めします。これはセッション状態と一般的により便利で近代的な環境を提供します。

+0

ああ、この質問を更新するのを忘れました... Helgi、これは、データが有効であればページをリダイレクトし、それ以外の場合はページを再描画し、適切なエラーメッセージを表示するというアプローチです。 現在、CGIから現代のフレームワークにアップグレードするオプションはありません。 –

0

これを行う一般的な方法は、特定のユーザーの保留中のメッセージをそのユーザーのセッションに関連付けられたサーバーに保存し、次にそのユーザーにページを配信するときに表示することです。

このようなメッセージは、「Flashメッセージ」(Adobe Flashとは関係ない)または「セッションメッセージ」と呼ばれることがよくあります。

Djangoでこれを行う方法については、the Django documentationを参照してください。

0

"プレスリフレッシュ"でデータが追加されているので、あなたの質問は非常に混乱します。あなたのフォームがPOSTかGETを介して提出されたかどうかは言及していません(それはまったく提出されますか?)。

積極的に守らなければ、二重入力からあなたを守るものはありません(ユーザーはいつでもリロードできます)。 1つの方法は、独自の番号でフォームを配信し、その番号の提出をすでに受け入れているかどうかを確認することです。

あなたが直面しているもう1つの問題は、HTTPと同じくらい古いものです。セッションの状態です。セッションIDやCookieで始めるのではなく、いくつかのページでデータを運ばなければならない場合は、すべての状態を常にURLに追加してください。

新しいアプローチでは、送信ボタンがクラシックではなく、別の(論理的な)接続で送信するJavaScriptを実行し、結果を待つAJAXを使用します。 は、既存のHTMLページの中の何かを変更して、ユーザーが結果を見ることができるようにします(例えば、目立つ場所に段落を追加するなど)。

関連する問題