2012-05-21 3 views
6

Я пытаюсь узнать больше о Flask для проекта, и мне интересно, может ли кто-нибудь объяснить мне, почему в примере кода перечислены методы «GET» и «POST», когда он только пытается обработать логин если запрос был «POST»?Почему метод входа в флэшку использует «GET»?

@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) 

ответ

8

GET и POST методы, как обрабатываются вашей функции.

  • Когда GET используется форма Логин (login.html) возвращается к пользователю войти в систему. Это последняя строка функции.

  • Когда используется POST, форма проверяется с использованием предоставленного логина/пароля. После этого пользователь либо перенаправляется на другую страницу (url для show_entries), либо форма входа в систему отправляется в другое время со связанной ошибкой.

Вы должны прочитать «When do you use POST and when do you use GET?» для получения более подробной информации о том, почему POST используется для обработки формы входа и почему GET используется для его отправки.

5

return render_template('login.html', error=error)является обработчик для GET.

Подумайте о логике:

  1. если request.method == 'POST':
    1. Проверить мандатной, Set метод ошибки
    2. Если нет учетных ошибок не возвращать правильный редирект
  2. если были ошибки в разделе POST кода render_template, эти ошибки возникают, в противном случае он получает None с начала метода. Я предполагаю, что если ошибка None в render_template, она, вероятно, просто отображает форму входа в систему.

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

Смежные вопросы