【问题标题】:API call from one Django site to another从一个 Django 站点到另一个站点的 API 调用
【发布时间】:2013-09-27 15:29:23
【问题描述】:

我是 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 响应,其中包含查询字符串“SOMESTRING”的 3 个结果。

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

【问题讨论】:

  • 查看 urrlib2 mate。
  • 我可以看到我在之前的评论中犯了错误。它的 urllib2 不是 urrlib2 :P
  • 我先用 OAUth 尝试过,失败了,然后用 Requests 尝试过,最后用 urllib2 管理。只需这 3 行代码即可完成大部分工作:req = urllib2.Request(url, query_string); file = urllib2.urlopen(req); result = ast.literal_eval(file.read());
  • ast.literal_eval()? json.loads() 更适合您。 stackoverflow.com/a/9949553/102260 — 但说真的,请使用 Requests — 它会为您解码 JSON。 r = requests.get(url, params=query_string); r.json()——你就完成了。

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


【解决方案1】:

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

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

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 2018-06-15
    • 2011-06-03
    相关资源
    最近更新 更多