通过ExtJS.request.Ajax POST向Flask API提交表单中的日期

时间:2017-07-14 02:30:41

标签: ajax datetime extjs flask flask-wtforms

为什么日期如此皇家PITA:

我有一个带有日期选择器的ExtJS(版本6.2.0)表单面板:

filepath = "somefile"
line_offsets = []

with open(filepath, "r") as file:
    while True:
        posn = file.tell()
        line = file.readline()
        if not line:  # end-of-file?
            break
        line_offsets.append(posn)  # Remember where line started.
        """ Process line """

我通过Ext.request.Ajax调用在我的控制器中提交:

{
    allowBlank:false,
    fieldLabel: 'Consent Date',
    name: 'consent_date',
    emptyText: 'consent_date',
    //inputType: 'date',
    xtype: 'datefield',
    //maxValue: new Date(),
    format: 'm/d/Y',
    submitFormat: 'm/d/Y'
}

问题是,无论表单面板中的submitFormat如何,它总是呈现提交的consent_date格式为:onNewPatientFormSubmit: function () { var formPanel = this.lookupReference('newPatientForm'), form = formPanel.getForm(), url = 'http://127.0.0.1:5000/mrnconsentview/api/create'; if (form.isValid()) { values = form.getFieldValues(true); console.log('form'); console.log(form); console.log(values); form.reset(); Ext.MessageBox.alert( 'Thank you!', 'Your inquiry has been sent. We will respond as soon as possible.' ); Ext.Ajax.request({ method: 'POST', cors: true, timeout: 6000000, //default is 30 seconds useDefaultXhrHeader: false, url: url, params: values, headers: { 'Accept': 'application/json' }, disableCaching: false, success: function (response) { json = Ext.decode(response.responseText); console.log('json'); console.log(json); console.log(response); if (response.status === 200) { console.log(json.items); } else { Ext.MessageBox.alert('Error', response.message); } } }); } } ,因此,我的Ajax表单提交中的JSON如下所示: Fri Jan 02 1995 00:00:00 GMT-0600 (CST)

在服务器上更糟糕(Flask,带有wtforms),它看起来像:{mrn: "testing12345", consent_date: Mon Jan 02 1995 00:00:00 GMT-0600 (CST)}因此,因为它没有将它看作日期时间对象而产生扼流......来自服务器的响应是< / p>

1995-01-02T00:00:00

我可以对它进行后期处理,但我更愿意这样做而不必这样做。 (我尝试使用python datetime方法进行最小的后期处理,但放弃了...... ala:{ "error_details": { "consent_date": [ "Not a valid datetime value" ] }, "message": "Validation error" } 并收到错误:t = datetime.datetime.strptime(dict(request.form)['consent_date'][0], "%Y-%m-%dT%H:%M:%S.%f")

1 个答案:

答案 0 :(得分:2)

您应该使用getValues表单方法。 getFieldValues不会将submitFormat帐户纳入帐户。

  

getFieldValues :..这类似于getValues,除了这个方法   收集特定于类型的数据值(例如,日期字段的日期对象)   而getValues只返回提交的字符串值。

     

getValues :..这类似于getFieldValues,只是此方法仅收集提交的字符串值,而   getFieldValues收集特定于类型的数据值(例如Date对象)   对于日期字段。)