📖 Scenario: You are building a simple web app where users can submit their favorite fruit through a form.
🎯 Goal: Create a Flask app that receives form data from a POST request and extracts the submitted fruit name in the route.
📋 What You'll Learn
Create a Flask app with a route to display a form
Add a form with a single input named 'fruit'
Create a POST route to receive the form submission
Access the form data in the route using Flask's request object
💡 Why This Matters
🌍 Real World
Web apps often need to collect user input through forms and process it on the server.
💼 Career
Understanding how to access form data in routes is essential for backend web development with Flask.
Progress0 / 4 steps
1
Set up Flask app and form route
Write code to import Flask and create an app instance called app. Then define a route / that returns a simple HTML form with a single input named fruit and a submit button.
Flask
Hint
Remember to import Flask and create the app instance. The form should use POST method and have an input named 'fruit'.
2
Add POST route to receive form data
Add a new route /submit that accepts only POST requests. Import request from Flask to access form data.
Flask
Hint
Use @app.route with methods=['POST'] to create the POST route.
3
Access the form data in the POST route
Inside the submit function, use request.form to get the value of the input named fruit and store it in a variable called fruit_name.
Flask
Hint
Use request.form['fruit'] to get the submitted fruit value.
4
Return a response showing the submitted fruit
Complete the submit function by returning a string that says "You submitted: " followed by the value of fruit_name.
Flask
Hint
Use an f-string to include fruit_name in the returned string.
Practice
(1/5)
1. In Flask, which object do you use to access data submitted from an HTML form inside a route function?
easy
A. flask.formdata
B. request.args
C. session.data
D. request.form
Solution
Step 1: Recall the Flask object for accessing form data
When a user submits a form, the data is sent in the HTTP request body, accessible via request.form. request.args is for URL query parameters, session.data and flask.formdata are not valid Flask objects for form data.
Final Answer:
request.form -> Option D
Quick Check:
Form data = request.form [OK]
Hint: Use request.form to get form fields in Flask routes [OK]
Common Mistakes:
Confusing request.form with request.args
Trying to access form data from session
Using incorrect Flask objects like flask.formdata
2. Which of the following is the correct way to get the value of a form field named username inside a Flask route?
easy
A. username = request.form.get('username')
B. username = request.args['username']
C. username = request.form['user']
D. username = request.data['username']
Solution
Step 1: Identify the safe way to access form field 'username'
The correct way to safely get a form field is request.form.get('fieldname'), which returns None if missing. request.args is for URL parameters, not form data; request.form['user'] uses wrong field name; request.data is raw data, not a dict.
Final Answer:
username = request.form.get('username') -> Option A
Quick Check:
Use request.form.get('field') for form fields [OK]
Hint: Use request.form.get('fieldname') to safely access form data [OK]
Common Mistakes:
Using request.args for form data
Using wrong field name in request.form
Trying to index request.data as a dict
3. What will be the output of this Flask route when a POST request with form data {'email': 'user@example.com'} is sent?
Step 1: Trace the route execution with provided form data
The code accesses the 'email' key directly from request.form, which contains the form data sent. The form data includes 'email' with value 'user@example.com', so no error occurs and the value is returned in the string.
Final Answer:
Email received: user@example.com -> Option C
Quick Check:
Direct key access with existing field returns value [OK]
Hint: Direct key access works if field exists, else KeyError [OK]
Common Mistakes:
Assuming request.form is empty
Expecting get() behavior with direct indexing
Confusing form data with query parameters
4. Identify the error in this Flask route code that tries to get a form field named age:
from flask import Flask, request
app = Flask(__name__)
@app.route('/age', methods=['POST'])
def age():
age = request.form.get(age)
return f"Age: {age}"
medium
A. Using variable age instead of string 'age' in get()
B. Missing methods=['POST'] in route decorator
C. Using request.args instead of request.form
D. Returning age without converting to int
Solution
Step 1: Locate the error in request.form.get() call
The code uses request.form.get(age) where age is a variable not defined yet, causing a NameError. Correct usage requires string key: request.form.get('age').
Final Answer:
Using variable age instead of string 'age' in get() -> Option A
Quick Check:
Use string keys in request.form.get('field') [OK]
Hint: Always quote form field names as strings in get() [OK]
Common Mistakes:
Passing variable instead of string key
Forgetting to specify POST method
Using request.args for form data
5. You want to create a Flask route that safely handles a form submission with optional field nickname. If the field is missing, it should return "No nickname provided". Which code snippet correctly implements this?
hard
A. nickname = request.form['nickname']
if not nickname:
return "No nickname provided"
return f"Nickname: {nickname}"
B. nickname = request.form.get('nickname')
if nickname is None:
return "No nickname provided"
return f"Nickname: {nickname}"
C. nickname = request.args.get('nickname')
if nickname == '':
return "No nickname provided"
return f"Nickname: {nickname}"
D. nickname = request.form.get('nickname', '')
if nickname == None:
return "No nickname provided"
return f"Nickname: {nickname}"
Solution
Step 1: Select code snippet for safe optional form field handling
request.form.get('nickname') returns None if missing, avoiding KeyError. Compare with is None to return fallback. Others fail: B uses direct indexing (KeyError if missing); C uses request.args (wrong for form); D defaults to '' so == None fails.
Final Answer:
nickname = request.form.get('nickname')
if nickname is None:
return "No nickname provided"
return f"Nickname: {nickname}" -> Option B
Quick Check:
Use get() and check None for optional form fields [OK]
Hint: Use get() and check None to handle missing form fields safely [OK]
Common Mistakes:
Using direct indexing without checking existence
Using request.args for form data
Comparing default '' with None incorrectly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.