在Django Rest Framework中测试,重现这个卷曲请求?

时间:2014-09-30 10:25:48

标签: python django curl django-rest-framework

我正在尝试对Django Rest Framework(测试链接)进行一些测试并重现此卷曲调用:

curl -X POST -d "grant_type=password&username=<user_name>&password=<password>"
http://<client_id>:<client_secret>@127.0.0.1:8000/v1/token/

这就是我的尝试:

  def test_oauth2_token_for_user(self):
        """
        Test Django OAuth Toolkit and make a request for am access token.
        """
        self.client.credentials(HTTP_AUTHORIZATION='grant_type ' + "password&username=<user_name>&password=<password")
        response = self.client.post('/api/token/')

有人能告诉我从哪里开始。我不确定如何发送标头grant_type=password&username=<user_name>&password=<password>并使用用户名和密码格式化URL。

2 个答案:

答案 0 :(得分:2)

那不是标题。这是完全正常的POST数据,正如test client documentation所示 - 您可以将字典作为第二个参数传递给post

response = self.client.post('/api/token/',
       {'grant_type': 'password', 'username': username, 'password': password})

答案 1 :(得分:1)

我无法通过django的测试客户端发送到api发送帖子数据和授权数据的方法。

我的解决方案是使用LiveServerTestCase(https://docs.djangoproject.com/en/1.10/topics/testing/tools/#liveservertestcase)设置测试并使用请求库发布:

 class AuthTest(LiveServerTestCase):

    def test_auth(self):
        # ...
        requests.post(
            http://localhost:8082/o/token/,
            dict(username="myuser",
                 password="mypass",
                 grant_type="password"
                 ),
            auth=(MYAPP.client_id, MYAPP.client_secret)
        )