【问题标题】:Parsing dates using WTForms Flask - Python使用 WTForms Flask 解析日期 - Python
【发布时间】:2018-10-06 18:21:17
【问题描述】:

嗨,我已经成功使用 WTForms 很长一段时间了。

问题在于如何解析日期。

我一直习惯根据表单数据给变量赋值如下

firstname = form.firstname.data

这会将表单数据中的用户输入存储到我的名为“firstname”的变量中,它工作得很好,我的问题是日期方面。

我有以下代码

WTForms 类

class BookingForm(Form):
start_date = DateField('Start Date', format='%m/%d/%Y')
end_date = DateField('End Date', format='%m/%d/%Y')

预订路线

@app.route('/book/', methods=['GET','POST'])
@login_required
def book():
try:
    form = BookingForm(request.form)

    if request.method == "POST" and form.validate():
        start_date = form.start_date.data
        end_date = form.end_date.data
        # I Have also tried form.start_date.data.strftime('%m-%d-%Y') with no luck
 ...

HTML 模板 {jinja}

<div class="col-md-4">
     {{ render_date_field(form.start_date) }}
</div>
<div class="col-md-4">
     {{ render_date_field(form.end_date) }}
</div>

我也在 python 中使用日期时间

from datetime import datetime

我一直在尝试关注许多关于如何将用户输入表单中的日期解析为变量的文档,但没有成功,有人知道正确的语法吗?

谢谢

【问题讨论】:

  • 在浏览器中填写表单时必须强制执行指定的日期格式。您的日期格式为“%m/%d/%Y”。使用此格式的开始日期的示例日期为 10/06/2018wtf 将其解析为 2018-10-06 并存储在 form.start_date.data

标签: python python-3.x datetime flask flask-wtforms


【解决方案1】:

form.date_created.data 返回一个datetime.date 对象。

monthdayyear 属性将这些值存储为整数。无需导入datetime即可解决此问题。

您可以使用date.strftime('%m-%d-%y') 获取字符串表示形式,例如"10-22-18"

form = BookingForm(request.form)  
if request.method == "POST" and form.validate():
    start_date = form.start_date.data
    end_date = form.end_date.data

    # print(type(start_date))   -> <class 'datetime.date'>

    start_month = start_date.month
    start_day = start_date.day
    start_year = start_date.year

    start_date_str = start_date.strftime('%m-%d-%y')
    # and so on...

查看 WTForms Documentation 的 DateField。

class wtforms.fields.DateField(default field arguments, format='%Y-%m-%d')
        Same as DateTimeField, except stores a datetime.date.

您可以在文档中查看有关 date 对象的更多信息 Python Docs

提示:如果您尝试过print(type(start_date)) 来查看打印的内容,您可能会自己弄清楚。

【讨论】:

  • 我试过使用“print(type(start_date))”,但我得到 None 作为回报,显然烧瓶错误是“必须是字符串或只读缓冲区,而不是 None”谢谢为您提供帮助
  • 如果state_dateNone,那么听起来您一开始就没有获得表单数据。解析不是你的问题。您可以做两件事:(1) 考虑使用 pdbflask-debugtoolber 之类的东西来找出哪里出了问题。 (2) 另一个检查位置是在浏览器的开发工具中的 Network 选项卡中,查看是否使用预期的请求参数发出 POST 请求。
  • 好的,我发现我有一个错字并已修复...感谢您的帮助,另一方面,您建议使用 html 日期时间选择器将日期存储在数据库中还是只是顶部带有 jquery 层的文本字段?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 2017-01-19
  • 2016-01-09
  • 2021-01-22
  • 1970-01-01
相关资源
最近更新 更多