Skip to main content
 首页 » 编程设计

python-3.x之WTF Forms Flask中的字段验证,重定向方法

2025年05月04日20www_RR

我正在尝试创建我的第一个 Flask Web 应用程序并发现以下问题,我有两个页面,第一页应该取玩家名称并将名称提供给下一页,但不幸的是,由于某种原因,名称验证不起作用,我可以将必填字段保留为空,然后使用空名称字段转到下一页。

flask 代码:

class ChooseName(FlaskForm): 
    first_player_name = StringField("Choose first player name: ", [DataRequired()]) 
    second_player_name = StringField("Choose second player name: ", [DataRequired()]) 
    button = SubmitField("Confirm") 
 
 
@app.route('/') 
def index(): 
    form = ChooseName() 
    if form.validate_on_submit(): 
        return redirect(url_for('mega')) 
    return render_template('TIC_TAC_TOE_index.html', form=form)  
 
 
@app.route('/game_page', methods=["GET", "POST"]) 
def mega(): 
    player1 = request.args.get('first_player_name') 
    player2 = request.args.get('second_player_name') 
    ...... 
    return render_template('mega.html', form=form, error=error, x=x,  
    turn=turn,tornado=tornado, renew=renew, player1=player1,player2=player2) 

HTML 模板:
<form action="{{url_for('mega')}}" method="get"> 
    {{ form.hidden_tag() }} 
    <h4>Please choose players names!</h4> 
    {{form.first_player_name.label}}  {{form.first_player_name}} <br> <br> 
    {{form.second_player_name.label}}  {{form.second_player_name}} <br> <br> 
    {{form.button}} <br> <br> 
</form> 

请您参考如下方法:

好好看看你的功能 super () ,您不会在下一页返回任何内容。您只是接受输入,但没有以任何形式返回它。

from wtforms import Form, StringField, validators, SubmitField 
from flask_wtf import FlaskForm 
from flask import Flask, render_template, request 
 
 
class ChooseName(FlaskForm): 
    first_player_name = StringField("Choose first player name: ", [validators.DataRequired()]) 
    second_player_name = StringField("Choose second player name: ", [validators.DataRequired()]) 
    button = SubmitField("Confirm") 
 
app = Flask(__name__) 
app.config['SECRET_KEY'] = "IT_IS_SECRET" 
 
@app.route('/') 
def index(): 
    form = ChooseName() 
    if form.validate_on_submit(): 
        return redirect(url_for('mega')) 
    return render_template('TIC_TAC_TOE_index.html', form=form) 
 
@app.route('/game_page', methods=["GET", "POST"]) 
def mega(): 
    player1 = request.args.get('first_player_name') 
    player2 = request.args.get('second_player_name') 
    return player1 + ' ' + player2 
 
 
if __name__ == '__main__': 
    app.run(port=5000,debug=True) 

尝试运行此代码,希望对您有所帮助。 :-)