0
votes

I am learning Flask and I have trouble understanding FlaskForm from Flask-WTF. This example is from the book Flask Web Development: Developing Web Applications with Python, Miguel Grinberg. Code below.

hello.py

class NameForm(FlaskForm):
    name = StringField('What is your name?', validators=[DataRequired()])
    submit = SubmitField('Submit')
 
@app.route('/', methods=['GET', 'POST'])
def index():
    name = None
    form = NameForm()
    if form.validate_on_submit():
        name = form.name.data
    return render_template('index.html', form=form, name=name)

index.html

{% import "bootstrap/wtf.html" as wtf %}
{% block page_content %}
<div class="page-header">
    <h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}!</h1>
</div>
{{ wtf.quick_form(form) }}
{% endblock %}

This simple application get name from the user and displays a personalized message. Suppose I have entered my name and click submit button. How it's possible that entered name is recived from the form object (instance of NameForm) and send to render

name = form.name.data

when before this, new instance of NameForm is assigned to the form variable?

form = NameForm()
1

1 Answers

1
votes

Without FlaskForm. You can get the name that submitted by user using Flask.request like following:

@app.route('/', methods=['GET', 'POST'])
def index():
    name = None
    name = request.form.get('name', None)

(you need append from Flask import request )

This means any library can get request values through the Flask.request object when that called from handler. And this is why FlaskForm does not need any arguments to get requested values (as long as it is called from a request handler).