HTML Forms#
HTML forms allow user inputs. These data is send from the client (e.g. the web browser) to the web server. The syntax is:
<form>
<!-- form elements -->
</form>
A HTML form contains one or many form elements. These elements can be
text input
The <input>
element#
The input element is a form element that allows the user to input data.
<form>
<input type="text" name="...">
</form>
There are different types
of input elements:
type=text
: Defines a text inputtype=password
: Defines a text input where characters are hidden.type=radio
: Defines a radio button input (select one out of N).type=submit
: Defines a submit button for submitting the form.
Note: The name
attribute is used as an identifier to access the form values.
Text input#
Radio input#
%%html
<form>
<input type="radio" name="color" value="red" checked> Red
<br>
<input type="radio" name="color" value="blue"> Blue
</form>
Interactive web applications with HTML forms#
Using the template, we can now create a HTML form with a POST
request
<!-- ./templates/login.html -->
<!doctype html>
<title>Login</title>
{% if error %}
<p style="color:red">{{ error }}</p>
{% endif %}
<form action="/login" method="POST">
Username:
<br>
<input type="text" name="username">
<br>
Password:
<br>
<input type="password" name="password">
<br>
<input type="submit" value="Submit">
</form>
# File: hello_world.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/login")
def login():
return render_template("login.html")
app.run()
Matches http://localhost:5000/login
Handling the POST
request.#
The form above sends a POST
request to the handle_login
URL.
We can use
@app.route('/handle_login', methods=['POST'])
to create a new Flask handler that accepts POST
requests.
We can then use the
flask.request
attribute to access the data contained the POST
request (here the username and password that the user provided in the form).
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/login")
def login():
return render_template("login.html")
@app.route("/login", methods=["POST"])
def handle_login():
# Acces the form data:
username = request.form["username"]
password = request.form["password"]
if username == "kate" and password == "dade":
return "You are logged in, Kate"
else:
error = "Invalid credentials"
return render_template("login.html", error=error)
app.run(port=5001)
Try it on http://localhost:5001/login