gpt4 book ai didi

python - 在 Flask 的不同 wtfforms 中使用相同的变量名

转载 作者:太空宇宙 更新时间:2023-11-03 20:46:21 25 4
gpt4 key购买 nike

在我的 Flask 应用程序中,我实现了 2 个包含相同变量名称的新表单。两种表单均通过相同的 POST 请求提交。由于性别数据显示为出生日期,结果令人困惑。

class Date_of_birth(Form):
field_1 = DateField("Date of Birth", format="%Y-%m-%d")


class Gender(Form):
field_1 = SelectField("Gender", choices=[("Male", "Male"), ("Female", "Female")])

当我将变量名称更改为“field_1”和“field_2”以使它们不同时,它起作用了。

所以我假设多个包含相同变量名的 WTF 不能在单个 POST 请求中提交,而必须具有不同的变量名?如果是这样,为什么?

最佳答案

当网络浏览器将 HTML 表单数据发送回服务器时,它看起来像这样:

field_1=2000-01-01&field_1=Female

数据仅包含字段名称及其对应的值,因此如果存在多个字段名称冲突的表单,服务器无法确定将哪个名称/值对分配给哪个表单。因此,您需要在 html 中使用不同的字段名称,以确保服务器可以在 POST 上为正确的表单分配正确的值。

然而 wtforms 提供了这个问题的解决方案。 form class接受前缀参数:

prefix – If provided, all fields will have their name prefixed with the value

所以你可以像这样实例化你的表单:

dob = Date_of_birth(prefix='dob')性别 = 性别(前缀='性别')

输入元素 HTML 将包含前缀:

<input id="dob-field_1" name="dob-field_1" type="text" value="">

POST 数据也是如此:

dob-field_1=2000-01-01&gender-field_1=Female

wtforms 将根据前缀自动提取正确的值:

>>> # Post data is usually in a MultiDict - a kind of dict that can have
>>> multiple values for a single key.

>>> data = MultiDict([('dob-field_1', '2000-01-01'), ('gender-field_1', 'Female')])
>>> dob = Date_of_birth(data, prefix='dob')
>>> dob.validate()
True
>>> dob.data
{'field_1': datetime.date(2000, 1, 1)}


>>> gender = Gender(data, prefix='gender')
>>> gender.validate()
True
>>> gender.data
{'field_1': 'Female'}

关于python - 在 Flask 的不同 wtfforms 中使用相同的变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56575049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com