flask 單個表單多個提交按鈕 --


單個表單多個提交按鈕

 

在某些情況下,可能需要為一個表單添加多個提交按鈕。比如在創建文章的表單中添加發布按鈕和存草稿的按鈕。當用戶提交表單時,需要在視圖函數中根據按下的按鈕來做出不同的處理。

下面例子中創建了一個表單,save按鈕用於保存,publish表示發布,正文字段使用TextAreaField字段。

 

forms.py:

class NewPostForm(FlaskForm):
    title = StringField('Title', validators=[DataRequired(), Length(1,50)])
    body = TextAreaField('Body', validators=[DataRequired()])
    save = SubmitField('Save') # 保存按鈕
    publish = SubmitField('Publish') # 發布按鈕
 
        

當表單數據通過POST請求提交時,Flask會把表單數據解析到request.form字典。如果表單中有兩個提交字段,那么只有被單擊的提交字段才會出現在這個字典中。當我們對表單類實例或特定的字段屬性調用data屬性時,WTForms會對數據做進一步處理。對於提交字段的值,它會將其轉換為布爾值:被單擊的提交字段的值將是True,違背單擊的值則是False。

基於這個機制,我們可以通過提交按鈕字段的值來判斷當前被單擊的按鈕。

例子:app.py:判斷被單擊的提交按鈕

 

from forms import NewPostForm


@app.route('/two-submits', methods=['GET', 'POST'])
def two_submits():
    form = NewPostForm()
    if form.validate_on_submit():
        if form.save.data:  # 保存按鈕被單擊
            #進行保存
            flash('You click the "Save" button.')
        elif form.publish.data:  # 發布按鈕被單擊
            # 提交
            flash('You click the "Publish" button.')
        return redirect(url_for('index'))
    return render_template('2submit.html', form = form)

 

 

訪問127.0.0.1:5000/two-submits,當點擊某個按鈕時,重定向后的頁面的提示信息中會包含你單擊的按鈕名稱。

 

 

 

有些時候,還需要在表單添加非提交按鈕。比如添加一個返回主頁的取消按鈕。因為這類按鈕和表單處理過程無關,最簡單的方式是直接在HTML模板中手動添加。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM