You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django REST Framework接口被访问时自动增加浏览量计数

实现方法

你只需要修改views.py中的FeedDetail视图类即可,推荐使用Django的F表达式实现原子更新,避免高并发场景下浏览计数不准确的问题:

第一步:导入依赖

在views.py顶部添加导入:

from django.db.models import F
from rest_framework.response import Response

第二步:重写视图逻辑

有两种可选的改写方式,效果一致:

方式1:重写retrieve方法

class FeedDetail(generics.RetrieveAPIView):
    queryset = Feed.objects.all()
    serializer_class = FeedSerializer

    def retrieve(self, request, *args, **kwargs):
        instance = self.get_object()
        # 原子更新浏览量
        Feed.objects.filter(pk=instance.pk).update(view=F('view') + 1)
        # 刷新实例获取最新的浏览量数值返回给前端
        instance.refresh_from_db()
        serializer = self.get_serializer(instance)
        return Response(serializer.data)

方式2:重写get_object方法(更简洁)

class FeedDetail(generics.RetrieveAPIView):
    queryset = Feed.objects.all()
    serializer_class = FeedSerializer

    def get_object(self):
        instance = super().get_object()
        Feed.objects.filter(pk=instance.pk).update(view=F('view') + 1)
        instance.refresh_from_db()
        return instance

注意说明

  • 上述两种写法都会先执行DRF默认的权限、认证校验,只有校验通过的合法请求才会触发浏览量更新,不会出现未授权访问刷浏览量的问题
  • 不要直接使用instance.view += 1再调用save()的写法,这种方式在多并发场景下会出现计数丢失的问题,F表达式的更新操作在数据库层面执行,是原子操作,计数更准确

内容的提问来源于stack exchange,提问作者Andi Fathul Mukminin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:48:03