Flask-WTF

Why WTF Useful?

WTF is useful due to the following factors.

  • The form elements are sent along with the request object from the client side to the server side. Server-Side script needs to recreate the form elements since there is no direct mapping between the client side form elements and the variables to be used at the server side.
  • There is no way to render the HTML form data at real time.

The WT Forms is a flexible, form rendering, and validation library used to provide the user interface.

Install Flask-WTF

To use the WT forms, we need to install the flask-wtf library which can be installed using pip installer.

$ pip install flask-wtf   

The module contains a Form class which is considered as the parent class for all the form related operations.

The standard form fields are listed below.

SNForm FieldDescription
1TextFieldIt is used to represent the text filed HTML form element.
2BooleanFieldIt is used to represent the checkbox HTML form element.
3DecimalFieldIt is used to represent the text field to display the numbers with decimals.
4IntegerFieldIt is used to represent the text field to display the integer values.
5RadioFieldIt is used to represent the radio button HTML form element.
6SelectFieldIt is used to represent the select form element.
7TextAreaFieldIt is used to represent text area form element.
8PasswordFieldIt is used to take the password as the form input from the user.
9SubmitFieldIt provides represents the <input type = ‘submit’ value = ‘Submit’> html form element.

Consider the following example.

Example

In this example, we will create a form using flask WTF module. First, we will create a form class named as forms.py and we will import those form elements into the module formexample.py.

forms.py

from flask_wtf import Form  

from wtforms import TextField, IntegerField, TextAreaField, SubmitField, RadioField, SelectField  

from wtforms import validators, ValidationError  

  

class ContactForm(Form):  

   name = TextField("Candidate Name ",[validators.Required("Please enter your name.")])  

   Gender = RadioField('Gender', choices = [('M','Male'),('F','Female')])  

   Address = TextAreaField("Address")  

     

   email = TextField("Email",[validators.Required("Please enter your email address."),  

   validators.Email("Please enter your email address.")])  

     

   Age = IntegerField("Age")  

   language = SelectField('Programming Languages', choices = [('java', 'Java'),('py', 'Python')])  

  

   submit = SubmitField("Submit")

formexample.py

from flask import Flask, render_template, request, flash  

from forms import ContactForm  

app = Flask(__name__)  

app.secret_key = 'development key'  

  

@app.route('/contact', methods = ['GET', 'POST'])  

def contact():  

   form = ContactForm()  

   if form.validate() == False:  

      flash('All fields are required.')  

   return render_template('contact.html', formform = form)  

  

  

  

@app.route('/success',methods = ['GET','POST'])  

def success():  

   return render_template("success.html")  

  

if __name__ == '__main__':  

   app.run(debug = True)

contact.html

<!doctype html>  

<html>  

   <body>  

      <h2 style = "text-align: center;">Registration Form</h2>  

          

      {% for message in form.name.errors %}  

         <div>{{ message }}</div>  

      {% endfor %}  

        

      {% for message in form.email.errors %}  

         <div>{{ message }}</div>  

      {% endfor %}  

        

      <form action = "http://localhost:5000/success" method = "POST">  

           

            {{ form.hidden_tag() }}  

              

            <div style = "font-size:18px;" font-weight:bold; margin-left:150px;>  

               {{ form.name.label }}<br>  

               {{ form.name }}  

               <br>  

               {{ form.Gender.label }} {{ form.Gender }}  

               {{ form.Address.label }}<br>  

               {{ form.Address }}  

               <br>  

               {{ form.email.label }}<br>  

               {{ form.email }}  

               <br>  

               {{ form.Age.label }}<br>  

               {{ form.Age }}  

               <br>  

               {{ form.language.label}}<br><br>  

               {{ form.language }}  

               <br><br>  

               {{ form.submit }}  

            </div>  

              

         </fieldset>  

      </form>  

   </body>  

</html>

Success.html


  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <title></title>  
  5. </head>  
  6. <body>  
  7. <h1>Form posted successfully</h1>  
  8. </body>  
  9. </html>  

Output:

Flask-WTF

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *