Flask

Flask-WTF je knihovna pro Flask a Python, usnadňující tvorbu a zpracovávání formulářů.

Příklad použití FlaskWTF pro tvorbu formuláře. Jak se vlastně formulář vytvoří. Z knihovny flask_wtf se naimportuje FlaskForm, pomocí kterého se objekty začleňují do formuláře. Z knihovny wtforms se naimportují do formuláře pole, která budeme používat, například StringField,PasswordField. Dále máme možnost validovat vkládaná data z input políček, k tomu slouží validátory a knihovna wtforms.validators:

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField
from wtforms.validators import InputRequired, Length

app = Flask(__name__)
app.config['SECRET_KEY'] = "secret-key"

class LoginForm(FlaskForm):
        username = StringField('username', validators=[InputRequired("Username is required"), Length(min=5,max=10, message="mezi 5 a 10")])
        password = PasswordField('password', validators=[InputRequired(message="Password is required")])

@app.route('/login', methods=["GET", "POST"])
def form():
        form = LoginForm()

        if form.validate_on_submit():
            return("The username is %s, Password is %s" % (form.username.data,form.password.data,))
        return render_template('login.html', form=form)

if __name__ == "__main__":
    app.run(port=8000, debug=True)

Zobrazení contentu bude v login.html, který zobrazí dva inputy pro username, password a ještě tlačítko na potvrzení.

{% from "_render_field.html" import render_field %}
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<form method="POST" action="{{ url_for('form') }}">
{{ form.csrf_token }}
{% if form.csrf_token.errors %}
{% endif %}
{{ render_field(form.username)}}
{{ render_field(form.password)}}
<button type="submit" class="btn btn-primary">Submit</button>
</body>
</html>

Protože je kód pro username a password v podstatě totožný, může se použít macro, aby došlo k zpřehlednění kódu.

{% macro render_field(field) %}
<p>
{{ field.label }}
{{ field(**kwargs) | safe }}
</p>
<p>
{% for error in field.errors %}
{{ error }}
{% endfor %}
</p>
{% endmacro %}

U tlačítka pro submit, občas chceme validovat, jestli ten kdo formuláře odklikává není bot. Dá se použít recaptcha od Googlu. Použití je snadné, do aplikace přidáme se stránek recaptchy public a private key.

app = Flask(__name__)
...
app.config['RECAPTCHA_PUBLIC_KEY'] = '6Lcx37AZAAAAALQpXge980gwlB_067Q0lFEfYO-Y'
app.config['RECAPTCHA_PRIVATE_KEY'] = '6Lcx37AZAAAAAm7as4idKCw4UHmryEFN7QTIa9_'

Recaptchu pak vložíme do kódu ve FlaskForm formuláři, podobně jako vkládáme username a password:

{{ form.recaptcha }}