Flask-WTF ·
Form Fields ·
Validierung ·
CSRF-Schutz ·
File Upload ·
Rendering
Flask-WTF ist die Standard-Erweiterung für Formularverarbeitung in Flask. Sie bietet integrierte Validierung, CSRF-Schutz und einfache Integration mit WTForms.
Flask-WTF ist die offizielle Erweiterung für Formulare. Sie basiert auf WTForms und fügt CSRF-Schutz, Datei-Upload und Integration mit Flask hinzu.
| Befehl | Beschreibung |
|---|---|
| pip install flask-wtf | Flask-WTF installieren (inkl. WTForms) |
| pip install email-validator | Für EmailField-Validierung |
| SECRET_KEY | Für CSRF-Schutz erforderlich |
validate_on_submit() prüft sowohl CSRF-Token als auch alle Validatoren – das ist die einfachste und sicherste Methode zur Formularverarbeitung.
WTForms bietet eine Vielzahl von Feldtypen für verschiedene Eingabetypen – von Text über Zahlen bis zu Datumsauswahl und Auswahllisten.
| Feld | HTML-Tag | Beschreibung |
|---|---|---|
| StringField | <input type="text"> | Text-Eingabe |
| PasswordField | <input type="password"> | Passwort-Eingabe |
| TextAreaField | <textarea> | Mehrzeilige Texteingabe |
| IntegerField | <input type="number"> | Ganzzahlen |
| FloatField | <input type="number" step="any"> | Gleitkommazahlen |
| BooleanField | <input type="checkbox"> | Checkbox (True/False) |
| SelectField | <select> | Dropdown-Auswahl |
| RadioField | <input type="radio"> | Radio-Buttons |
| DateField | <input type="date"> | Datum (datetime.date) |
| DateTimeField | <input type="datetime-local"> | Datum + Uhrzeit |
| FileField | <input type="file"> | Datei-Upload (mit Flask-WTF) |
| SubmitField | <input type="submit"> | Absende-Button |
| HiddenField | <input type="hidden"> | Verstecktes Feld |
SelectField können die choices auch dynamisch aus einer Datenbank geladen werden – z.B. aus einer SQLAlchemy-Query.
Validatoren prüfen, ob die eingegebenen Daten bestimmten Regeln entsprechen. WTForms bietet eine Reihe eingebauter Validatoren und erlaubt benutzerdefinierte Validierungsfunktionen.
| Validator | Beschreibung |
|---|---|
| DataRequired() | Feld darf nicht leer sein |
| Optional() | Feld ist optional (überspringt andere Validatoren) |
| Email() | Prüft auf gültige Email-Adresse |
| Length(min, max) | Prüft Länge von Strings |
| NumberRange(min, max) | Prüft Zahlenbereich |
| EqualTo(fieldname) | Prüft Gleichheit mit anderem Feld |
| Regexp(regex) | Prüft mit regulärem Ausdruck |
| URL() | Prüft auf gültige URL |
| AnyOf(values) | Wert muss in Liste enthalten sein |
| NoneOf(values) | Wert darf nicht in Liste enthalten sein |
CSRF-Schutz verhindert Cross-Site Request Forgery-Angriffe. Flask-WTF aktiviert den Schutz automatisch, wenn ein SECRET_KEY gesetzt ist.
SECRET_KEY muss sicher und geheim sein! Verwenden Sie für die Produktion eine zufällige, lange Zeichenfolge (z.B. secrets.token_hex(32)).
Datei-Upload wird mit FileField und den Validatoren FileRequired und FileAllowed realisiert. Die hochgeladene Datei wird über request.files abgerufen und gespeichert.
secure_filename() aus werkzeug.utils, um den Dateinamen zu bereinigen und Sicherheitslücken zu vermeiden. Konfigurieren Sie MAX_CONTENT_LENGTH für die maximale Dateigröße.
Rendering zeigt Formularfelder und Fehlermeldungen im Template an. Mit form.hidden_tag() werden CSRF-Token eingefügt. Die Felder können mit CSS-Klassen gestaltet werden.
Flask-Bootstrap oder Bootstrap-Flask verwenden, die automatisch Bootstrap-stilisierte Formulare generieren.
FlaskForm
StringField
DataRequired
csrf_token
FileField
form.hidden_tag()
form.validate_on_submit() ·
StringField(validators=[DataRequired()]) ·
{{ form.hidden_tag() }}