从一个Django站点到另一个站点的API调用

时间:2013-09-25 16:04:18

标签: python django oauth-2.0 django-rest-framework

我是Python / Django的新手,但我为一个网站(siteA.com)设置了一个REST API,并希望其他网站(siteB.com)能够调用此API并显示一些结果。为此,我已将Django REST Framework和Django Auth2 Provider添加到siteA。我现在可以使用curl调用API来获取访问令牌:

curl -X POST -d "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=password&username=USERNAME&password=PASSWORD" http://www.siteA.com/oauth2/access_token   [1]

这给出了我想要的回复:

{"access_token": "72x63615xe29f4xfdadexbcd77x27b5fx0bceexx", "scope": "read", "expires_in": 86399, "refresh_token": "5fx80dx320cx3abe7d0x27d5f1x64e7x413x0f70"}

使用访问令牌,我现在可以调用API:

curl -v -H "Authorization: Bearer 72x63615xe29f4xfdadexbcd77x27b5fx0bceexx" "http://www.siteA.com/api/?q=SOMESTRING&per_page=3&page=1&sort=random"     [2]

这为我提供了一个JSON响应,其中包含3个查询字符串'SOMESTRING'的结果。

一切正常,但现在我想在siteB.com内进行这些调用。换句话说,我想创建一个页面,如果使用某个搜索查询调用,首先检查是否存在[1]中的访问令牌,然后获取搜索结果[2]并以JSON格式显示它们。我根本不知道该怎么做。试图从requests_oauth2使用OAuth2,但根本不知道将curl语句翻译成Python的正确方法。有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

如果您希望siteB.com公开siteA.com的API,请考虑django-rest-framework-proxy(一个不错的第三方软件包)。

如果您希望siteB.com在常规HTML页面中嵌入来自siteA.com API的结果,那么您需要获取数据的API,然后将其传递给通常的模板呈现方法。根据评论,您可以使用urllib2,但我建议使用优秀的Requests

我希望有所帮助。