python - Flask Web Development 第四章 Web表单 为什么要用form.name.data = ''
伊谢尔伦
伊谢尔伦 2017-04-17 16:04:59
0
1
685
@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)
    

在if语句中,这个form.name.data被赋值给局部变量name且表单域的数据属性通过赋值为空字符串而被清除。

问题一:
在上述代码中,为什么需要清除form.name.data

问题二:

如下代码,为什么使用session的时候,就不需要清空form.name.data?

from flask import Flask, render_template, session, redirect, url_for

@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'))
    
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

모든 응답(1)
左手右手慢动作

코드의 구체적인 의미에 주의하세요. 데코레이터를 사용하여 플라스크에 경로를 추가하는 경우 http 메서드를 결정해야 합니다.
첫 번째 코드에서는 get 메서드인지 post 메서드인지 명시적인 판단이 없으므로 기본적으로 get 메서드가 요청되면 form.validate_on_submit()이 확인되지 않으므로 반환됩니다. post 메소드를 사용하는 경우 페이지 이름 값이 비어 있습니다. Form을 제출할 때 검증에 성공하면 이름은 제출된 값과 동일합니다. form.name.data의 값을 지워야 하는 이유는 이를 지우지 않으면 제출 후 반환된 페이지의 양식은 이전에 작성한 내용을 유지합니다. 두 번째 문단은 검증을 거쳐 리다이렉트 페이지를 사용하였기 때문에 명확하지 않아도 상관없으며 세션과 관련이 없습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿