Skip to main content

取消收藏和收藏列表接口实现

本文介绍了如何实现取消收藏和收藏列表接口的功能。

取消收藏接口

为了实现取消收藏功能,我们需要获取用户的相关信息,并根据接口规则在URL中追加一个数字来表示要取消收藏的电影ID。

具体实现过程如下:

  1. 在接收请求时,通过URL中追加的数字获取电影ID,将其赋值给变量PK(Primary Key)。

  2. 使用获取到的PK作为条件,从数据库中获取要取消收藏的电影。

  3. 如果电影存在,则将其从用户的收藏列表中移除,并返回取消收藏成功的消息。

  4. 如果电影不存在,则返回电影信息不存在的错误消息。

  5. 如果出现其他情况导致取消电影失败,则返回取消电影失败的错误消息。

dx_movie/account/views.py

def destroy(self, request, pk):
user = request.user
profile = Profile.objects.get(user=user)
try:
movie = Movie.objects.get(id=pk)
if movie not in profile.movies.all():
return Response({'message': '未收藏该电影'})
profile.movies.remove(movie)
return Response({'message': '取消收藏成功'})
except ObjectDoesNotExist:
return Response('message': '电影信息不存在')
except:
return Response({'message': '取消收藏失败'})
代码解析
  • 先获取用户信息
  • 判断电影id是否已经在收藏列表中,这里通过profile.movies.all()来获取所有收藏的电影id。如果不存在,则提示未收藏该电影
  • 如果该电影在收藏列表,则使用profile.movies.remove()删除电影
  • 如果电影id不存在,则提示电影信息不存在
  • 否则提示取消收藏失败

测试取消收藏电影接口

使用Postman测试取消收藏电影接口:

warning
  • URL最后有一个"/"
  • 请求的Header中需要添加Authorization参数,并携带有效的JWT token。

取消收藏成功效果如下图所示。

图52-取消收藏成功

删除后,查看数据库中的profile_movie表,该数据已经被删除。如下图所示。

图52-数据表中记录被删除

收藏列表接口

收藏列表接口用于展示用户收藏的所有电影信息。

具体实现过程如下:

  1. 获取用户的相关信息。

  2. 通过用户的收藏列表获取所有的电影信息,并赋值给变量Movies。

  3. 使用序列化器(Serializer)将Movies序列化为数据。

  4. 返回序列化后的数据作为响应,展示用户收藏的所有电影。

list方法代码如下:

dx_movie/account/views.py
    def list(self, request):
user = request.user
profile = Profile.objects.get(user=user)
movies = profile.movies.all()
serializer = MovieSerializer(movies, many=True)
return Response(serializer.data)

测试收藏电影列表接口

以上就是取消收藏和收藏列表接口的实现。通过这些接口,用户可以方便地管理自己的收藏电影列表。

使用Postman测试取消收藏电影接口:

warning
  • 请求的Header中需要添加Authorization参数,并携带有效的JWT token。

收藏接口如下图所示。

图52-收藏列表接口?