Flask (und andere Frameworks) können WTForm nutzen um das erstellen von Formularen zu vereinfachen.
class InvoiceForm(FlaskForm):
customer = StringField("Kunde")
Die Feld-Klassen (hier "StringField") haben in der Regel nur Attribute die man in der Regel (also das minimale Set) für dieses HTML-Element setzen wird - hier also den Namen, man könnte auch einen Anzeige-Wert setzen oder einen Default-Wert.
In meinem Fall fehlte mir das Attribut um ein Feld "readonly" zu machen.
class InvoiceForm(FlaskForm):
customer = StringField("Kunde", render_kw={"readonly": "True"})
Für diese Fälle kann in jeder Feldklasse das Attribut "render_kw" gesetzt werden.
Dieses nimmt ein Ditctionary entgegen, der Key ist zu setzende HTML-Attribut und der Wert der Wert der diesem HTML-Attribut zugewiesen werden soll.
Das resultierende HTM sähe also so aus:
<input id="customer" name="customer" type="text" readonly="True"></input>
"render_kw" kann also benutzt werden um beliebige zusätzliche Attribute in einem Form-Element zu setzen.
class InvoiceForm(FlaskForm):
customer = StringField("Kunde", render_kw={"readonly": "True", "whatever":"whoever"})
<input id="customer" name="customer" type="text" readonly="True" whatever="whoever"></input>
|
⚠
|
Das Setzen von readonly in render_kw wirkt sich nur in der Darstellung im Browser aus.
Diese Einschränkung lässt sich (im Browser oder in dem man keinen Browser nutzt um es zu senden) einfach umgehen und das Feld auf einen beliebigen Wert setzen.
Das das Feld nicht geändert wurde/werden kann muss auf Server-Seite (also in Flask usw) sichergestellt werden.
Flask reicht render_kw einfach durch, daraus resultieren keine Validatoren/Cheks! Das muss anderweitig sichergestellt werden.
Vertraue niemals Daten die von Außen kommen!
|