6

プロジェクトのFlaskについてもっと知りたいのですが、サンプルコードに「GET」と「POST」のメソッドがリストされている理由を誰かが説明してくれるのではないかと思います。リクエストは「POST」でしたか?

@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != app.config['USERNAME']:
            error = 'Invalid username'
        elif request.form['password'] != app.config['PASSWORD']:
            error = 'Invalid password'
        else:
            session['logged_in'] = True
            flash('You were logged in')
            return redirect(url_for('show_entries'))
    # Note that nowhere do we seem to care about 'GET'...
    return render_template('login.html', error=error)
4

2 に答える 2

8

GETメソッドとPOSTメソッドは、どちらも関数によって処理されます。

  • GETを使用するとlogin.html、ユーザーがログインするためのログインフォーム()が返されます。これは関数の最後の行です。

  • POSTを使用する場合、フォームは提供されたログイン/パスワードを使用して検証されます。その後、ユーザーは別のページ(のURL show_entries)にリダイレクトされるか、ログインフォームが関連エラーとともにもう一度送信されます。

'いつPOSTを使用し、いつGETを使用しますか?を読む必要があります。ログインフォームの処理にPOSTが使用される理由と、ログインフォームの送信にGETが使用される理由の詳細については、'を参照してください。

于 2012-05-21T13:50:12.897 に答える
5

return render_template('login.html', error=error) ハンドラーですGET

論理について考えてください:

  1. if request.method =='POST':
    1. クレデンシャルを確認し、エラーメソッドを設定します
    2. クレデンシャルエラーがない場合は、正しいリダイレクトを返します
  2. コードのPOSTセクションにエラーがあった場合render_templateはそれらのエラーを取得し、そうでない場合Noneはメソッドの最初から取得します。エラーが発生した場合は、おそらく単純な古いログインフォームが表示されるだけだと思いNoneますrender_template

Note: I've never used flask, but I understand python

于 2012-05-21T13:46:07.890 に答える