1

用户可以创建事件。对于该事件,他可以邀请一些客人并将他们添加到该客人中。

现在我想知道该特定事件的总视图数。我编写了一个 django-view 来获取事件详细信息,我可以在该视图上实现 cProfile 并计算视图数吗?还有所有事件的视图总数。如何实现这个?

如果我可以实现 cProfile 请告诉我该怎么做!

4

1 回答 1

1

我不太清楚您所说的 cProfile 是什么意思,但您可以跟踪哪些客人查看了模型中的事件:

一个示例模型.py:

from django.db import models
from django.contrib.auth.models import User

class Event(models.Model):
    title = models.CharField(max_length=100)
    datetime = models.DateTimeField()

class EventInvite(models.Model):
    event = models.ForeignKey(Event)
    guest = models.ForeignKey(User)
    accepted = models.BooleanField(default=False)
    viewed = models.BooleanField(default=False)

这用于django.contrib.auth.models.User代表客人。然后在您的views.py 中更新EventInvite对象,如果客人不接受,则在客人查看事件时更新该对象。

from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required
from eventsApp import Event, EventInvite    

@login_required
def viewEvent(request, event_pk):
    event = Event.objects.get(pk=event_pk)
    eventInvite = EventInvite.objects.get(event=event,guest=request.user)
    eventInvite.viewed = True
    eventInvite.save()

    return render_to_response("eventView.html", { 'event' : event })

编辑 - 计算单个事件的观看次数

这可以更简单地实现,在Event模型中添加一个计数器字段:

from django.db import models
from django.contrib.auth.models import User

class Event(models.Model):
    title = models.CharField(max_length=100)
    datetime = models.DateTimeField()
    num_views = models.IntegerField()

然后在事件视图中,每次加载给定对象的视图时递增计数器:

def viewEvent(request, event_pk):
    event = Event.objects.get(pk=event_pk)
    event.num_views += 1
    event.save()

    return render_to_response("eventView.html", { 'event' : event })

Event这将计算 django 应用程序被请求查看给定对象的原始次数。如果需要,可以创建自定义中间件类来执行此行为:https ://docs.djangoproject.com/en/dev/topics/http/middleware/#writing-your-own-middleware ,如果例如,您希望在多个视图方法中使用该行为。

如果您希望在模板级别执行计数,如下所示:https ://github.com/thornomad/django-hitcount ,可能更有用。

这更像是你要找的吗?

如果需要,我很乐意对其进行更多调整/解释。

于 2013-11-12T17:49:10.667 回答