序列化 – 如何在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转换小数值.我不得不为会话组装字典并将这些值重新组织为字符串,这对我来说感觉像是一块垃圾,但由于序列化的限制,我不知道更好的方法.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |