首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >APIClient DRF不发送POST正文

APIClient DRF不发送POST正文
EN

Stack Overflow用户
提问于 2019-03-21 15:12:25
回答 2查看 867关注 0票数 1

我对Django相当陌生,在Laravel方面有着坚实的背景(如果你恰巧做了一个很棒的类比)

我正试图把一具身体传到终点,但我做不到。

我试过:

代码语言:javascript
复制
fake = Faker('pt_PT')
fake.add_provider(company)
client = APIClient()


class CompanyPostTestCase(APITestCase):
    def setUp(self):
        self.email = fake.email()
        self.username = str(fake.company()).split()[0]
        self.valid_payload = {
            'email': self.email,
            'password': '123',
            'username': self.username
        }

    def test_company_was_created(self):
        response = self.client.post('/v1/company/',
                                    self.valid_payload,
                                    # Also tried with content_type='application/json'
                                    format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

但是,在调试模式下执行时,response对象在_closable_objects中有POSTQueryDict: {},我假设没有指定body。此外,错误消息表示b'{"message":"You must provide a password"}',它清楚地显示身体没有被传递。

通过邮递员,我可以提出同样的请求,并创建一个没有任何问题的Company

任何解决这个问题的主意都是很棒的。

编辑也尝试过将valid_payload直接传递给client.post(),如下所示:

代码语言:javascript
复制
response = client.post('/v1/company/', data={
                                   'email': self.email,
                                   'password': '123',
                                   'username': self.username
                               },
                               format='json')

在那之后仍然不工作

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-21 15:18:10

客户端不是可能导致问题的CompanyPostTestCase的一部分。初始化内部函数可以解决这个问题。

代码语言:javascript
复制
class CompanyPostTestCase(APITestCase):
    def setUp(self):
        self.email = fake.email()
        self.username = str(fake.company()).split()[0]
        self.valid_payload = {
            'email': self.email,
            'password': '123',
            'username': self.username
        }



    def test_company_was_created(self):
        client = APIClient()
        response = client.post('/v1/company/',
                                    self.valid_payload,
                                    format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
票数 1
EN

Stack Overflow用户

发布于 2020-09-30 06:39:21

最近,我遇到了一个类似的问题,我发了一篇文章,以防万一它能帮助任何处于同样位置的人,因为这是一种痛苦的调试。

在我的例子中,结果是由于DRF的DEFAULT_PARSER_CLASSES在Django设置文件中指定了一个不正确的JSON解析器类。解决方案只是将其替换为默认的DRF解析器(rest_framework.parsers.JSONParser)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55283633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档