2013-11-14 7 views
2

Используя Flask, я могу получить данные request.form в функции poll(), но после перенаправления request.form пуст.Запрос на флягу пуст после перенаправления

Я уверен, что это намеренно, и я должен явно передать это, но как?

from flask import render_template, redirect, request 

from app import app 
from forms import PollForm 

@app.route('/poll', methods = ['GET', 'POST']) 
def poll(): 
    form = PollForm() 

    if form.validate_on_submit(): 
     print request.form # returns ImmutableMultiDict with data 
     return redirect('/details') 

    return render_template('poll.html', form=form) 

@app.route('/details') 
def details(): 
    print request.form # returns empty ImmutableMultiDict 
    return render_template('details.html') 
+0

Зачем вам нужно перенаправить? Почему бы просто не отобразить его на этой странице? – Blender

+0

@Blender Это обычная практика, чтобы делать все так? Я новичок в Flask и в интернете, но это имеет смысл. – Rohmer

ответ

2

Обычно для перенаправления с POST, но вам больше не нужны данные формы в функции деталей.

Вы должны обработать форму отправки в функции опроса, а затем перенаправить на детали, которые, как я предполагаю, будут отображать некоторые обновленные данные - например, из базы данных.

@app.route('/poll', methods = ['GET', 'POST']) 
def poll(): 
    form = PollForm() 
    if form.validate_on_submit(): 
     # use request.form to update your database 
     return redirect('/details') 
    return render_template('poll.html', form=form) 

@app.route('/details') 
def details(): 
    # query the database to show the updated poll 
    return render_template('details.html') 
1

Перенаправления в ответ на запрос POST является довольно стандартным, как он обращается странный браузер поведение вокруг закладок и продублировать формы представления. Техника даже имеет название и страницу Википедии: Post/Redirect/Get.

Для сохранения данных из запроса POST вам необходимо использовать некоторую форму постоянного хранилища для каждого пользователя. Возможными параметрами являются база данных, сеанс пользователя (flask.session) или файл cookie.

0

В этом конкретном случае я не уверен, зачем вам перенаправлять. Вы просто должны сделать:

@app.route('/poll', methods = ['GET', 'POST']) 
def poll(): 
    form = PollForm() 

    if form.validate_on_submit(): 
     return render_template('details.html', form = form) 

    return render_template('poll.html', form=form) 

Вам не нужны дополнительные избыточную вид только для отображения details.In вид сверху, ключ находится в строке

return render_template('details.html', form = form) 

Приведенный выше код поставляет детали формы to details.html, который затем может легко анализировать данные и отображать их по мере необходимости.

Однако, если вы действительно хотите использовать перенаправление, вы можете попробовать использовать что-то вроде ниже. Таким образом, вы можете передать form на перенаправление.

return redirect(url_for('details', form=form)) 
Смежные вопросы