【发布时间】:2021-02-28 06:44:51
【问题描述】:
我正在为 Django 项目构建一个 RESTful 接口,我需要利用外部 API 来允许客户端和前端仅引用一个 Django API,而无需外部 API 的详细信息。
因此,我希望将外部 API 数据返回到可浏览的 API 页面,就像我自己的基于视图的 API 一样。
如何将来自外部 API 的 JSON 响应序列化到可浏览的 API 网页渲染器?
例如,我希望 mysite.fake/thing/details 返回与 externalapi.fake/thing/details 返回相同的 JSON,如下所示:
{"thing_id": "900404", "description": "Thing description", "value": "100.00", "location": "Bin 401"}
并将其显示在 DRF 的可浏览 API 中。
目前,我正在使用:
@api_view(('GET',))
@renderer_classes((JSONRenderer,))
def thing_finder(request, thing_id):
"""
Get the current location for a thing
http://localhost:8000/thing/find/9900404
:param request: HTTP Request object
:param thing_id: String - the thing ID
:return: JSON - The Thing location JSON
"""
a, b = THING_API_AUTH
if request.method == 'GET':
payload = {'thing_id': thing_id}
r = requests.get(THING_API_AUTH, auth=HTTPBasicAuth(a, b), params=payload)
if r.status_code == 200:
data = json.loads(r.text)
serializer = ThingFinderSerializer(data)
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response({"error": "Request failed"}, status=r.status_code)
在settings.py我包括:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
]
}
这可行(我认为),但它不会将结果格式化为 Browsable API。相反,我得到一个未格式化的页面,其中包含 JSON 转储到其中。我是否缺少模板要求?浏览器中的 URL 错误? settings.py 中的 BrowsableAPIRenderer 是否不足以默认呈现到 Browsable API? TIA。
【问题讨论】:
标签: python json django django-rest-framework python-requests