Flask form.validate_on_submit () не отвечает - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь создать приложение Flask, в котором вы можете найти термин 'car_name', и оно вернет шаблон HTML, в котором car_name заменено на 'car_name'. form.validate_on_submit () не имеет ошибок, но когда вы нажимаете кнопку «Отправить», ничего не происходит. Я смотрел на подобные вопросы, но они все об ошибках, а у меня ничего не происходит (без ошибок, но и без ответа). Любая помощь будет очень признателен, спасибо.

Это мой основной код приложения:

from flask_wtf import FlaskForm
from flask import Flask, flash, render_template, request, redirect
from wtforms import Form, StringField, SelectField, SubmitField
from wtforms.validators import Required


#Flask application object
app = Flask(__name__)
app.config['SECRET_KEY'] = 'jacky'


class SearchForm(FlaskForm):
    motor_name = StringField("", validators=[Required()])
    submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
@app.route('/home') 
def index():
    form = SearchForm()
    print(form.errors)
    motor_name = None
    if form.validate_on_submit():
        motor_name = form.motor_name.data
        return redirect(url_for('car', car_name=motor_name))
    return render_template('homepage.html', form=form)


@app.route('/car/<car_name>', methods=['GET', 'POST'])
def car(car_name):
return render_template('carpage.html', car_name=car_name)

И это домашняя страница. html код

{{ form.csrf_token }}
{{ form.protein_name.label }} {{ form.protein_name() }}
{{ form.submit() }}

1 Ответ

1 голос
/ 15 января 2020

Я нашел 3 ошибки в коде и увидел сообщения об ошибках при запуске кода в console / termina / cmd.exe.

Первое: вы использовали proteine_name вместо motor_name в шаблоне.

Второе: вы забыли <form method="POST"></form>

Третье: вы забыли импортировать url_for

Странно, что вы не видели ошибок.


Я использовал render_template_string вместо render_template только для упрощения запуска кода со всеми в одном файле.

from flask_wtf import FlaskForm
from flask import Flask, flash, render_template, request, redirect, url_for, render_template_string
from wtforms import Form, StringField, SelectField, SubmitField
from wtforms.validators import Required


#Flask application object
app = Flask(__name__)
app.config['SECRET_KEY'] = 'jacky'


class SearchForm(FlaskForm):
    motor_name = StringField("", validators=[Required()])
    submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
@app.route('/home') 
def index():
    form = SearchForm()
    print(form.errors)
    motor_name = None
    if form.validate_on_submit():
        motor_name = form.motor_name.data
        return redirect(url_for('car', car_name=motor_name))
    return render_template_string('''<form method="POST">
{{ form.csrf_token }}
{{ form.motor_name.label }} {{ form.motor_name() }}
{{ form.submit() }}
</form>''', form=form)


@app.route('/car/<car_name>', methods=['GET', 'POST'])
def car(car_name):
    print('car_name:', car_name)
    #return render_template('carpage.html', car_name=car_name)
    return render_template_string('car_name: {{car_name }}', car_name=car_name)

app.run()
...