Как ограничить один метод просмотра Django для работы всего за один период? - PullRequest
1 голос
/ 21 августа 2011

Модель вопроса имеет поле view_counts для подсчета количества просмотров одного вопроса.

и нажмите кнопку, чтобы связать метод

def count_views(request, question_id):
    question = Question.objects.get(pk=question_id)

    if request.is_ajax():
        question.views_count = question.views_count + 1
        question.save()  
    else:
        url = '/error/show_error/4'
        return HttpResponseRedirect(url)  

    count = question.views_count

    json = simplejson.dumps(count)

    return HttpResponse(json, mimetype='application/json')


    $('.question a').click(function () {
        pk = $(this).attr('pk');
        $.get("/question/count_views/" + pk, function(data) {
            location.href='/question/show_question/' + pk;
        });   
    });  

<div class='question'>{{ forloop.counter }}. [{{ question.country }}] <a pk={{ question.pk }}>{{ question.question }}</a></div>

но если клиент с тем же ip щелкнет тот же вопрос через 5 минут, количество просмотров не будет увеличено

как это реализовать?

Это так же, как в stackoverflow, вы не можете редактировать один комментарий за 5 секунд.

1 Ответ

0 голосов
/ 21 августа 2011

Прими мой совет с крошкой соли, я довольно плохо знаком с django и python, и я не проверял это, но я хотел бы реализовать это следующим образом:

Создать новыймодель:

class LastViewed(models.Model):
    ip = models.IPAddressField()
    last_view = models.DateField()
    question = models.ForeignKey(Question)

    class Meta:
        unique_together = ('ip', 'question',)

Затем, прежде чем count_views увеличивает значение, он должен запросить таблицу LastViewed, чтобы проверить время последнего доступа:

question = Question.objects.get(pk=question_id)
request_ip = request.META['REMOTE_ADDR']
last = LastViewed.objects.get(ip=request_ip)

if request.is_ajax() and (last.last_view - datetime.datetime.now() < datetime.timedelta(minutes=5)):
    question.views_count = question.views_count + 1
    question.save()
else:
    # etc

Надеюсь, это поможет вам составить общее представление окак это сделать, я пропустил код, чтобы фактически добавлять / обновлять новые записи в таблице LastViewed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...