我如何使用Django与外部API连接表?



我在数据库中有一个表,我保存了一些用户观看的电影。就像这样:

tmdb_id         view_date       user_id
464052          15/02/2021      1
602269          14/02/2021      2

字段tmdb_id是The Movies Data Base网页中电影的id。我可以使用他的API并发送这个ID作为参数来获取这部电影的详细信息。

在Django中,我有这样的视图:

class MovieViewView(APIView):
permission_classes = (IsAuthenticated,)
def get(self, request, format=None):
queryset = MovieView.objects.all()
serializer_class = MovieViewSerializer(queryset, many=True)
return Response(serializer_class.data)

当我请求一个GET到这个视图时,我得到这样的东西:

[
{
"tmdb_id": "464052",
"view_date": "2021-02-15",
"user": 1
},
{
"tmdb_id": "602269",
"view_date": "2021-02-14",
"user": 2
}
]

但是我想用TMDB API得到这样的东西:

[
{
"title": "Wonder Woman 1984",
"view_date": "2021-02-15",
"user": 1
},
{
"title": "The Little Things",
"view_date": "2021-02-14",
"user": 2
}
]

我知道如何使用python请求单独获得此数据,但我想知道如何将其与我的表连接。这可能吗?

我想你有几个选择:

  1. 根据上面的响应,如果你有字段不像电影标题那样改变,当你在数据库中插入电影并设置标题、导演等时,从API中获取标题可能更容易。这是确保读取查询快速可靠的好方法,因为您不依赖于外部API
  2. 的正常运行时间。
  3. 如果你想显示更多的动态数据,比如评级,你将不得不在读取时调用API。我的意见是,你应该在视图中进行调用,并在那里补充你的响应,因为你使用的数据仅用于演示,或者定义一个"标题"。属性方法,当您使用movie.title并定义一个自定义序列化器来使用它时,该方法在模型上进行api调用

第二个选项也可以通过SerializerMethodField

来实现

自定义序列化器以显示电影的标题。最好的方法是在数据库中添加title字段。

最新更新