【发布时间】: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