搜尋

首頁  >  問答  >  主體

python - Flask Web Development 第四章 Web表单 为什么要用form.name.data = ''

@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'))
    
伊谢尔伦伊谢尔伦2783 天前674

全部回覆(1)我來回復

  • ringa_lee

    ringa_lee2017-04-17 16:06:59

    注意程式碼的具體意思,在flask中如果你使用修飾器的方式加入路由,需要判斷http的方法。
    在第一段程式碼並沒有顯性的判斷是get還是post方法,所以預設是get方法,get方法請求的時侯form.validate_on_submit()是不會驗證通過的,所以回傳的頁面name值為空(None),在你使用post方式提交表單的時候,如果驗證通過了,那麼name等於提交的值,至於為什麼要清掉form.name.data的值,那是因為你不清除的話,提交後返回的頁面中表單當中的name值會保留你之前填入的。而第二段判斷驗證過了使用了重定向頁面,所以清不清都無所謂,跟session沒關係

    回覆
    0
  • 取消回覆