为了账号安全,请及时绑定邮箱和手机立即绑定

Flask.test_client().post 和 JSON 编码

Flask.test_client().post 和 JSON 编码

慕容森 2021-11-23 16:19:08
我正在为 Flask 应用程序中的 JSON 端点编写测试用例。import unittestfrom flask import jsonfrom app import create_appclass TestFooBar(unittest.TestCase):    def setUp(self):        self.app = create_app('testing')        self.app_context = self.app.app_context()        self.app_context.push()    def test_ham(self):        resp = self.client.post('/endpoint',                                headers={'Content-Type': 'application/json'},                                data=json.dumps({'foo': 2,                                                 'bar': 3}))        assert resp.status_code == 200    def test_eggs(self):        resp = self.client.post('/endpoint', data={'foo': 5,                                                   'bar': 7})        assert resp.status_code == 200    def test_ham_and_eggs(self):        with self.app.test_client() as self.client:            self.test_ham()            self.test_eggs()只是为了了解发生了什么,POST在上面的代码中发送消息的两种方式都有意义吗?特别是,在第一种情况下,我是双 JSON 编码吗?或者,简单地说,test_ham和之间有什么区别test_eggs?有没有?
查看完整描述

1 回答

?
MM们

TA贡献1886条经验 获得超2个赞

您不是对 JSON 进行双重编码,不,因为data不会将任何内容编码为 JSON。test_ham发布 JSON,test_eggs没有。

从 Flask 1.0 开始,Flask 测试客户端支持直接发布 JSON,通过json关键字参数,使用它来减少样板代码:

def test_ham(self):
    resp = self.client.post('/endpoint', json={'foo': 2, 'bar': 3})    
    assert resp.status_code == 200

请参阅Flask测试文档章节的测试 JSON API部分

json在测试客户端方法中传递参数会将请求数据设置为 JSON 序列化对象并将内容类型设置为application/json

传递字典以data生成不同类型的请求,application/x-www-form-urlencoded编码请求就像<form method="POST" ...>表单一样会从浏览器中生成,并且必须通过对象访问foobar值。在需要发布 JSON 时不要使用它。request.form


查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 283 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信