2013-11-12 2 views
1

Пользователь может создать событие. Для этого случая он может пригласить некоторых гостей и добавить их к этим гостям.Как получить количество просмотров определенного события?

Теперь я хочу узнать количество общего количества просмотров для этого конкретного события. Я написал django-view для получения сведений о мероприятии, могу ли я реализовать cProfile в этом представлении и могу подсчитать количество просмотров? А также общее количество просмотров для всех событий. Как реализовать это?

Если я могу реализовать cProfile, скажите, пожалуйста, как это сделать!

ответ

1

Я не совсем уверен, что вы имеете в виду Cprofile, но вы можете отслеживать, какие гости смотрели событие в модели:

Пример models.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 для представления гостей. Затем в вашем view.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 }) 

Edit - сосчитать вид отдельного события

Это может быть достигнуто более просто, добавьте поле счетчика в 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 }) 

Это будет считаться необработанным количеством раз, когда приложение django запрашивается для просмотра данного объекта Event. Для выполнения этого поведения можно создать собственный класс промежуточного программного обеспечения: https://docs.djangoproject.com/en/dev/topics/http/middleware/#writing-your-own-middleware, это было бы удобно, если вы хотите использовать поведение для нескольких методов представления, например.

Если вы хотите провести подсчет на уровне шаблона, примерно так: https://github.com/thornomad/django-hitcount, может быть, более полезно.

Это больше похоже на то, что вы искали?

Я с удовольствием адаптирую/объясняю это больше, если это необходимо.

+0

Привет, Генри, спасибо за ответ, это даст мне только пользователей, которые просмотрели события. Что делать, если один и тот же пользователь просматривает событие десять раз? поэтому я хочу, чтобы количество раз вызывалось определенное событие. Я могу просто сделать так, предположим, что я вызываю viewEvent каждый раз, когда пользователь хочет увидеть событие, тогда я хочу подсчитать количество раз, когда вызывается функция viewEvent. – RaviKiran

+0

@ user2936254 Я изменил функцию просмотра, чтобы сделать это. –

Смежные вопросы