2013-01-11 5 views
8

私はItemというDBテーブルを持っています。項目はstatus属性を持っている、それは私のウェブサイトでFlaskでリダイレクトする

new 
todo 
doing 
done 

のいずれかになります。私は、アイテムのテーブルを示す2つのビューがあります。

  • ビュー1は、すべてアイテム(ステータス列付き)です。
  • ビュー2 は、ステータスがtodoのアイテムを示します。

アイテムステータスに応じて、ユーザーが実行できるアクションがいくつかあります(「todo」への移動、「move to to」、「done to done」)。

ビュー1とビュー2を考えてみると、それらは共通してステータスがtodoのアイテムが含まれています。だから、私は両方のボタンに

/Item/<id>/moveToDoing 

のidにリンクするボタンを持っています。id - Itemのステータスは "doing"に設定されています。

ここで、ユーザーがボタンをクリックした場所(表示1または表示2)にリダイレクトされるようにします。

私の質問は以下のとおりです。

  1. フラスコでこれを行うには?私は http://flask.pocoo.org/snippets/62/と思っています。これは私が必要としているものではありません。 私はここでは公式でPOSTリクエストをしていないからです。 (私は?)
  2. 私はこれを正しいやり方にしているのですか、それとも普通にそれを解決するかについての条約がありますか?どこに戻って、それがユーザーをリダイレクトしますhttp://flask.pocoo.org/docs/reqcontext/

    def redirect_url(default='index'): 
        return request.args.get('next') or \ 
          request.referrer or \ 
          url_for(default) 
    

    パラメータなしのビュー

    def some_view(): 
        # some action 
        return redirect(redirect_url()) 
    

    でそれを使用してください:

+1

ないが、なぜ ' – greatghoul

答えて

22

私はここで推奨されるヘルパー関数を使用しています彼はから来た(request.referrer)。 getパラメータnextを追加してURLを指定することができます。これは例えばoauthに便利です。

instagram.authorize(callback=url_for(".oauth_authorized", 
               next=redirect_url(), 
               _external=True)) 

私はまた、いくつかの理由

REDIRECT_URL(「another_view」)

のための参照元があってはならない場合は、基本的にリンクされスニペットは同じですが、確実にすることによって、より安全にし、デフォルトのビューを追加しました別のホスト上の悪意のある攻撃者のページにリダイレクトされることはありません。あなたの質問のための

+5

/' /アイテム/ /のmoveToにURLを設計しない 'request.referrer'は、私は感謝、シンプルなバックボタン/リンクのために必要なものです! –

関連する問題