Flask单元测试中Flask-Testing提交表单后FlaskForm无法取值问题
问题原因
- 表单初始化参数错误
FlaskForm构造函数中,formdata参数才是用来接收表单提交数据(如request.form)的参数,你错误地将request.form传给了用于设置默认值的data参数,导致字段解析逻辑异常。 - 时间格式不匹配
DateTimeField默认使用%Y-%m-%d %H:%M:%S格式解析时间字符串,你提交的时间值没有秒数,不符合默认解析规则,解析失败后返回None。
修复方案
- 修正路由中的表单初始化代码
两种写法二选一即可:
# 写法1:FlaskForm自动读取请求中的表单数据,无需手动传参 form = BusinessTripProcessingForm() # 写法2:显式传入formdata参数 form = BusinessTripProcessingForm(formdata=request.form)
- 给DateTimeField指定匹配的时间格式
修改表单定义,指定和你提交数据匹配的格式:
class BusinessTripProcessingForm(FlaskForm): departure_time = DateTimeField('Exact departure date and time', format='%Y-%m-%d %H:%M') return_time = DateTimeField('Exact return date and time', format='%Y-%m-%d %H:%M')
- 可选优化:测试请求显式指定内容类型
测试时给POST请求加上表单类型声明,避免部分环境下解析异常:
response = self.client.post('/business_trip_request_processing/1', data=data, content_type='application/x-www-form-urlencoded')
内容的提问来源于stack exchange,提问作者Matija Lukic
相关产品推荐
相关产品推荐

