加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

序列化 – 如何在Flask会话中存储WTForm表单?

发布时间:2020-12-20 13:52:39 所属栏目:Python 来源:网络整理
导读:我需要在会话中存储表单的结果,但我一直得到TypeError:对于datetimes和Decimal字段,XXX不是 JSON可序列化的.在请求之间保留表单数据的正确方法是什么? 这是我的表格: class GiftRequestForm(Form): giftee_name = StringField('Name',[validators.Require
我需要在会话中存储表单的结果,但我一直得到TypeError:对于datetimes和Decimal字段,XXX不是 JSON可序列化的.在请求之间保留表单数据的正确方法是什么?

这是我的表格:

class GiftRequestForm(Form):
    giftee_name = StringField('Name',[validators.Required(),validators.length(min=4,max=25)])
    giftee_age = IntegerField('Age',validators.NumberRange(min=0,message="Age must be greater than 0")])
    giftee_sex = RadioField('Gender',[validators.Required()],choices=[('0','Male'),('1','Female')])
    giftee_relationship = StringField('Relationship',max=25)],description='Fill in the blank: The recipient is my _____.')
    event = StringField('Event',max=80)])
    event_date = DateField('Event Date',format='%Y-%m-%d',description="Well have it to you at least four days before the event date.")
    budget = DecimalField('Budget $',message="Budget must be greater than 0")])

在我看来,我只想做:

form = GiftRequestForm()
...
session['gift_request_form'] = form

这根本不起作用,因为看起来GiftRequestForm似乎不是JSON可序列化的.不幸的是,这也不起作用:

session['gift_request_form'] = form.data

因为我的字典中的元素是日期时间和十进制类型.所以我总是得到一个TypeError:datetime.date(2015,9,2)不是JSON可序列化的,或类似于Decimal字段的东西.

这似乎是一种标准模式 – 但我很难让它发挥作用.我该怎么做?

解决方法

您可以在将日期和小数存储在会话中之前将其转换为字符串.然后使用 strptime将日期时间从会话中的字符串转换回需要访问它的日期,并使用 Decimal转换小数值.我不得不为会话组装字典并将这些值重新组织为字符串,这对我来说感觉像是一块垃圾,但由于序列化的限制,我不知道更好的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读