【问题标题】:How can I count the number of unique hits on a graphene query如何计算石墨烯查询的唯一命中数
【发布时间】:2020-09-12 07:29:23
【问题描述】:

我搜索了一下找不到合适的解决方案。 我想计算石墨烯查询的唯一命中数。 如果重要的话,前端是 react + apollo。 有什么推荐吗?

让我澄清一下这个问题; 我想计算石墨烯查询/端点(graphql;不是 db)的唯一命中数(ip&user agent&whatever)。

【问题讨论】:

  • 必须编写一个中间件来提取操作名称并相应地更新数据库/存储。编写中间件非常容易,我还没有找到其他方法。

标签: graphene-python


【解决方案1】:

如果我理解正确,您希望将唯一点击数计算到 DB。我认为最适合您的解决方案应该使用Django Debug Middleware。如果您正确添加了调试中间件,您将需要添加到您的查询中:

_debug {
    sql {
      rawSql
    }
  }

_debug 部分之后,您将对 DB 进行清晰的 SQL 查询。

【讨论】:

  • 澄清了问题,抱歉造成混淆。
【解决方案2】:

您可以利用DjangoObjectType 提供的get_node 函数。 我假设您已经使用DjangoObjectType 来定义您的节点并且YourCustomModel 有一个名为view_count 的字段。

您可以这样做:

from graphene_django import DjangoObjectType
    
class YourCustomNode(DjangoObjectType):
    class Meta:
        model = YourCustomModel
        interfaces = (graphene.relay.Node,)
        filter_fields = {
            ...
        }
    
    @classmethod
    def get_node(cls, info, id):
        queryset = cls.get_queryset(cls._meta.model.objects, info)
        try:
            obj = YourCustomModel.objects.get(id=id)
            obj.view_count += 1
            obj.save(update_fields=['view_count', ])
            return queryset.get(pk=id)
        except cls._meta.model.DoesNotExist:
            return None

【讨论】:

  • 您甚至可以再添加一次尝试...除了在第一个尝试中以确保 YourCustomModel.objects.get(id=id) 存在。
猜你喜欢
  • 2020-07-27
  • 2020-09-03
  • 1970-01-01
  • 2019-12-20
  • 2019-01-23
  • 2020-08-11
  • 2020-10-05
  • 2023-04-06
  • 2019-12-08
相关资源
最近更新 更多