18

ItemというDBテーブルがあります。アイテムにはstatus属性があり、次のいずれかになります。

new
todo
doing
done

私のウェブサイトには、アイテムの表を示す2つのビューがあります。

  • ビュー1には、すべてのアイテムが表示されます(ステータス列付き)。
  • ビュー2には、ステータスがのアイテムのみtodoが表示されます。

アイテムのステータスに応じて、ユーザーが実行できる特定のアクションがあります(「todoに移動」、「doingに移動」、「doneに移動」)。

ビュー1とビュー2を検討すると、どちらにもステータスがのアイテムが含まれているという共通点がありますtodo。したがって、両方に、次のURLにリンクするボタンがあります。

/Item/<id>/moveToDoing

ここで、id-アイテムのステータスは「実行中」に設定されます。

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

私の質問は次のとおりです。

  1. Flaskでこれを行う方法は?ここにフォーミュラーを使用したPOSTリクエストがないため、http://flask.pocoo.org/snippets/62/は必要なものではないと感じ ています。(するべきか?)
  2. 私はこれを正しい方法で行っていますか、それとも通常それを解決する方法についての慣習がありますか?
4

1 に答える 1

43

ここで推奨されているヘルパー関数を使用しています: 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())

パラメータを指定しないと、ユーザーは元の場所 ( ) にリダイレクトされますrequest.referrer。get パラメータnextを追加して、URL を指定できます。これは、たとえば oauth に役立ちます。

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

何らかの理由でリファラーが存在しない場合のデフォルト ビューも追加しました。

redirect_url('.another_view')

リンクしたスニペットは基本的に同じことを行いますが、別のホスト上の悪意のある攻撃者のページにリダイレクトされないようにすることで、より安全になります.

于 2013-01-11T14:15:43.030 に答える