Heim >Backend-Entwicklung >Python-Tutorial >[Python] Verwenden Sie WTForms, um Formulare variabler Länge zu verarbeiten

[Python] Verwenden Sie WTForms, um Formulare variabler Länge zu verarbeiten

大家讲道理
大家讲道理Original
2016-11-07 10:20:331921Durchsuche

Frage gesehen auf Zhihu: Können die WTForms von Python Flask Formen mit variabler Länge verarbeiten?

Problembeschreibung

form中的元素会变多。
比如有一个表格:
我喜欢的东西: 可以增加任意个物品(这几个物品填在不同的框),然后提交。
实现这个需求,需要用到FieldList

Ein einfaches Beispiel:

from wtforms import Form
from wtforms.fields import FieldList, StringField
class MyForm(Form):
    names = FieldList(StringField('名称'), label='物品列表', min_entries=1)

Formulardaten senden:

names-0=苹果
names-1=梨
names-2=香蕉

JSON-Daten senden:

{"names": ["苹果", "梨", "香蕉"]}

Anzeige der Ausgabeergebnisse:

print(form.names.data)
# ['苹果', '梨', '香蕉']

Das Folgende ist ein komplizierteres Beispiel:

from wtforms import Form
from wtforms.fields import FieldList, FormField, StringField, IntegerField
class ProductForm(Form):
    name = StringField('名称')
    count = IntegerField('数量')
class MyForm(Form):
    products = FieldList(FormField(ProductForm), label='产品列表', min_entries=1)

Formulardaten senden:

products-0-name=Iphone6
products-0-count=1
products-1-name=小米手机
products-1-count=2

Senden JSON-Daten:

{"products": [{"name": "Iphone6", "count": 1}, {"name": "小米手机", "count": 2}]}

Das Ausgabeergebnis zeigt:

print(form.products.data)
# [{'name': 'Iphone6', 'count': 1}, {'name': '小米手机', 'count': 2}]

Dann stellt sich die Frage: Was ist der Schlüssel zur Dynamik?


Ja, es ist die Nummer, die mit 0 im Feldnamen beginnt, den Sie sehen.

Was soll ich tun, wenn ich einen Artikel hinzufügen möchte?

Die größte Zahl plus 1 ist es!

Der js-Code in HTML ist der Schlüssel zur Erzielung von Dynamik. Der relevante Code wird hier nicht nur auf den Python-Teil gezeigt.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn