【问题标题】:Consume an API in Django REST, server side, and serve it ,client side, in Angular在 Django REST 中使用 API,服务器端,并在 Angular 中为客户端提供服务
【发布时间】:2021-04-16 15:33:11
【问题描述】:
我有一个使用 API 客户端的 Angular 应用程序。由于这样做是不好的做法(我不想公开我的 API 凭据),所以我决定在 myapp 变大之前拆分为后端/前端。
我成功地将我的 Angular 实现到 Django REST 框架应用程序中,并且一切正常。
但现在我需要更改我的 API 逻辑并让 DRF 使用外部 API
我有:
Angular 扩展数据
现在我有:
Django/Angular 扩展数据
我需要什么:
Angular Django ext 数据
但是我很困惑如何完成它。我有在 DRF 中设置 API 端点的经验,但仅适用于 DRF 中模型的数据。我也知道如何在 Django 中使用 API。
但是如何链接两个 API 调用呢?
我是否必须创建一个模型来存储查询和响应?
即使返回的数据一直是json,我是否需要编写序列化程序?
现在我的前端将如何获得来自外部 API 的数据?
我需要有人向我解释这项任务的模式是什么。
【问题讨论】:
标签:
django
angular
api
django-rest-framework
【解决方案1】:
假设您有一个 FBV 映射到 django 中的 URL,如下所示:
url: /api/animals/<str:key>
@add_decorators_as_needed
def animals_view(request, key=None):
data = requests.get(f'{API_URL}/{key}?api_key={API_KEY}') # grab data from ext provider
json_data = ... # convert to json or do other manipulations
return json_data # return data to the frontend
然后在前端,您的 Angular 应用程序中,您可以对您的 django 应用程序的 /api/animals/cow url 执行一个 get 请求,并从外部提供程序检索一头牛的数据,而不会暴露您的 API_KEY。
所以流程是这样的:
Angular 从 Django 请求数据,Django 从外部提供者那里获取数据,如果需要,进行一些数据处理,然后将该数据返回给 Angular。您不必在数据库中存储任何内容(但您当然可以这样做,例如记录一些内容,这是可选的)。