2011-12-20 17 views
1

私はユーザーがデータを投稿できるサイトを作っています。新しい投稿を追加するには、ユーザーはフォーム - >プレビュー - >投稿ページの3つの状態を通過する必要があります。私は、すでに「投稿済み」ページに到達した後、ブラウザの「戻るボタン」を使ってプレビューページに戻ることをユーザーに制限したい(代わりに、空のフォームページにリダイレクトする必要があります)。どのように私はDjangoでこの動作を実装できますか?ブラウザ「戻るボタン」(別のページにリダイレクトする)を使用して、前のページに戻ることを制限する方法はありますか?

答えて

3

あなたがユーザーのブラウザを制限してコントロールしているので、Djangoからこのような動作を得る方法がわかりません。しかし、JavaScriptであなたが使用することができます。

window.location.replace(url); 

ので作業から戻るボタンを防止すること、歴史を削除しますました。

What's the difference between window.location= and window.location.replace()?

アイデア:あなたのプレビューページから、提出し、すべてが成功した場合、あなたの投稿のページへwindow.location.replaceするためにAJAXを使用し

は、ウィンドウの位置については、このスタックオーバーフローの質問を参照してください。

0

これはブラウザ技術を使って対処する方法については話すことができませんが、djangoではセッションでフラグを設定するだけで済みます。

# posted_page view 
request.session['posted_page_visited'] = True 

# preview_page view 
if request.session.get('posted_page_visited'): 
    del request.session['posted_page_visited'] 
    return http.HttpResponseRedirect("form_page") 
+0

私は確かにあなたのアプローチを試みましたが、別の問題があります。 「戻るボタン」をクリックしてプレビューページに戻ると、ページのヘッダーに 'Cache-Control:no-cache'を指定しても、サーバーから何らかの形でページがロードされません。プレビューページを強制的にどのように強制することができるかについての考え方は、常にサーバーからロードされますか?どうも。 – tamakisquare

-1

Djangoのform wizardあなたが欲しいものを行う必要があります。

  1. ユーザー訪問:それはここでは

    仕組み

    は、ユーザーがウィザードを使用する方法のための基本的なワークフローですウィザードの最初のページで、フォームに記入して提出します。

  2. サーバーはデータを検証します。無効な場合は、エラーメッセージとともにフォームが再度表示されます。有効な場合、サーバーは のバックエンドに現在の状態を保存し、 次の手順にリダイレクトします。
  3. ステップ1と2は、ウィザードの後続のフォームごとに繰り返します。
  4. ユーザーがすべてのフォームを送信し、すべてのデータが検証されると、ウィザードでデータが処理されます。 データベースに保存したり、電子メールを送信したり、アプリケーションが行う必要があるすべてのデータを処理します。
+0

あなたの解決策が私の質問に全く答えていないので、あなたは私の質問を持っていないと思います。私の実装は既にDjangoのフォームプレビューアプリを採用しているので、ワークフローはそこにあります。 – tamakisquare

+0

フォームのプレビューはフォームウィザードとは異なり、重要な部分はセッション管理です。私はあなたの問題を理解しています。 –

関連する問題