Django测试中使用Client提交表单时如何快速获取错误信息?
在Django测试中用Client提交表单后快速获取错误信息的方法
当然有!不用费劲去解析response.content里的HTML,Django测试Client其实给我们留了更便捷的方式,能像直接操作表单实例那样拿到错误信息,下面给你两种实用方法:
方法一:从response上下文直接获取表单实例
当表单验证失败、视图返回原页面时(也就是你遇到的response.status_code=200的情况),Django会把带错误信息的表单实例放到模板渲染的上下文里。只要你的视图代码里把表单传给了模板(比如return render(request, 'xxx.html', {'form': form})),就能直接从response.context里取出它:
with open(good_path) as fp: data = { 'account': account_id, 'date': date, 'file': fp } response = client.post(reverse('myapp:form-page'), data) # 检查是否返回了表单页面 if response.status_code == 200: # 从上下文获取表单实例 form = response.context.get('form') if form: # 打印所有字段的错误信息 print(form.errors) # 打印表单级别的非字段错误(比如上传文件格式不合法这类全局错误) print(form.non_field_errors()) # 查看单个字段的具体错误 print(form.errors.get('file'))
这个表单实例和你在视图里创建的那个完全一样,所有form.errors、form.cleaned_data等属性都能正常使用,直接帮你定位问题。
方法二:手动实例化表单并验证
如果你的视图没有把表单放到上下文里(这种情况比较少见,但也存在),可以自己用提交的数据重新实例化表单并执行验证,结果和视图里的验证完全一致:
from myapp.forms import YourFormClass with open(good_path) as fp: # 注意规范写法:文件数据单独放到files参数里 data = { 'account': account_id, 'date': date } files = {'file': fp} response = client.post(reverse('myapp:form-page'), data=data, files=files) # 手动实例化表单并验证 form = YourFormClass(data=data, files=files) if not form.is_valid(): # 直接获取错误信息 print(form.errors)
这种方法相当于复现了视图里的表单验证流程,适合你想确认数据本身是否有问题的时候。
内容的提问来源于stack exchange,提问作者Ryan Skene
相关产品推荐
相关产品推荐

