2016-09-11 6 views
0

내 장난감 응용 프로그램의보기 설정이 있었다 :포스트/리디렉션/플라스크에 패턴을 얻기

@app.route('/', methods=['GET', 'POST']) 
def index(): 
    name = None 
    form = NameForm() 
    if form.validate_on_submit(): 
     name = form.name.data 
     form.name.data = '' 
    return render_template('index.html', form=form, name=name) 

내가 사용하는 경우는 다음과 같습니다 PRG :

@app.route('/', methods=['GET', 'POST']) 
def index(): 
    form = NameForm() 
    if form.validate_on_submit(): 
     session['name'] = form.name.data 
     return redirect(url_for('index')) 
    return render_template('index.html', form=form, name=session.get('name')) 

당신은 볼 수 있듯이 form.name.data = '' 라인은 첫 번째 버전의 입력 필드를 지우는 데 사용되지만 두 번째 버전에서는 필요하지 않습니다. 나는 Flask-WTF가 StringField의 텍스트를 새로운 form 인스턴스로 자동으로 전달할 것이라고 생각했지만 어떤 이유로 인해 그렇지 않았습니다.

내 질문 : PRG를 사용할 때 form.name.data을 다른 요청간에 더 이상 사용할 수없는 이유는 무엇입니까?

답변

1

완전히 새로운 요청이므로 리디렉션에 아무 것도 전달할 수 없습니다.

+0

첫 번째 버전에서 제출 버튼을 누르면 "이전"요청이 다시 전송된다는 것을 의미합니까? –

+0

현재 요청이 완료되고 응답을 보냅니다. 그러나 리디렉션은 브라우저에 새 페이지를 요청하는 명령으로, 새 요청과 처리기의 새 호출을 의미합니다. –

+0

첫 번째 버전에서는 사용자가 제출 버튼을 클릭 할 때마다 "완전히 새로운 요청"이 전송되지 않습니까? 즉, 첫 번째 버전에서'index' 핸들러가 실제로 한 번만 호출된다는 것을 의미합니까? –