Как добавить лайки в блог

Михаил Попов    13.11.2015 04:09    Модели     нет комментариев

Как добавить лайки в блог

Продолжаю развивать свой блог. Статьи о том, как я начинал его делать можно посмотреть тут и тут. У Вадима Полшкова подсмотрел добавление лайков в блог. Также увидел тоже самое у Сергея Ганжелы. В общем стадный инстинкт сработал и мне захотелось того же. Только интереснее, так что решил сделать 2 пальца - один вверх, в другой вниз, т.к. я хочу и положительные моменты рассматривать и отрицательные. 

Чтобы хранить количество лайков и дислайков, добавляем 2 значения в модель Article в модуле models.py. Это будут числовые поля, по умолчанию равны нулю:

class Article(Record):
    ...
    likes = models.IntegerField(verbose_name='Нравится', default=0)
    dislikes = models.IntegerField(verbose_name='Не нравится', default=0)

Теперь добавляем изменения в views.py, чтобы можно было увеличивать значения. После нажатия на кнопку, будем возвращаться обратно на ту же страницу. Чтобы это сделать, будем передавать в параметрах запроса GET в параметре next значение текущей страницы. Может быть это можно сделать как то проще, но я не знаю как. Может быть кто подскажет.

def add_like(request, slug):
    try:
        article = get_object_or_404(Article, slug=slug)
        article.likes += 1
        article.save()
    except ObjectDoesNotExist:
        return Http404
    return redirect(request.GET.get('next', '/'))


def add_dislike(request, slug):
    try:
        article = get_object_or_404(Article, slug=slug)
        article.dislikes += 1
        article.save()
    except ObjectDoesNotExist:
        return Http404
    return redirect(request.GET.get('next', '/'))

Немного меняем urlpatterns в urls.py, чтобы работали наши новые ссылки на addlike и adddislike:

# coding: utf-8
from django.conf.urls import url
from blog.views import all_articles, one_article, one_article_by_slug, add_like, add_dislike
urlpatterns = [
    url(r'^$', all_articles, name='all_articles'),
    url(r'^(?P<art_id>d+)$', one_article, name='one_article'),
    url(r'^(?P<slug>S+)/addlike/$', add_like, name='add_like'),
    url(r'^(?P<slug>S+)/adddislike/$', add_dislike, name='add_dislike'),
    url(r'^(?P<slug>S+)/$', one_article_by_slug, name='one_article_by_slug'),
]

И немного меняем шаблон формы нашей статьи в файле post.html:

{% extends 'main.html' %}
{% block content %}
    {% load disqus_tags %}
    <div>
        <p>
        <h3>{{ object.title }}</h3>
        <small><i class="fa fa-user" title="Автор"></i> Михаил Попов&nbsp;&nbsp;&nbsp;
            <i class="fa fa-calendar-o" title="Дата публикации"></i> {{ object.add_date|date:"d.m.Y" }}
            <i class="fa fa-clock-o" title="Время публикации"></i> {{ object.add_date|time:"H:i" }}&nbsp;&nbsp;&nbsp;
            <i class="fa fa-tags" title="Тэги"></i> {{ object.tags.all|join:", " }}&nbsp;&nbsp;&nbsp;
            <i class="fa fa-comments-o" title="Комментарии"></i>
            <a href="{{ object.get_absolute_url }}#disqus_thread"
               data-disqus-identifier="{{ object.get_absolute_url }}">нет комментариев</a></small>
        </p>
        {{ object.body|safe }}
        {% disqus_num_replies %}
        <table width="100%">
            <tr>
                <td width="50%">
                    <a href="{{ object.get_absolute_url }}addlike/?next={{ object.get_absolute_url|urlencode:"" }}"><i
                            style="color:#449d44" class="fa fa-thumbs-o-up fa-2x"></i></a> <span
                        class="lead">{{ object.likes }}</span>
                    &nbsp;&nbsp;&nbsp;
                    <a href="{{ object.get_absolute_url }}adddislike/?next={{ object.get_absolute_url|urlencode:"" }}"><i
                            style="color:#942a25" class="fa fa-thumbs-o-up fa-2x fa-rotate-180"></i></a> <span
                        class="lead">{{ object.dislikes }}</span></td>
                <td width="50%">{% include "social.html" %}</td>
            </tr>
        </table>
        <br>
    </div>
    {% include "disqus.html" %}
{% endblock %}

Напомню, что теперь я использую fonts-awesome, который прикрутил еще во время работы над регистрацией через социальные сети. Его использование получается довольно хорошим. У этого шрифта довольно много возможностей, в частности тут я использую один и тот же символ, но поворачиваю его на 180 градусов, просто указав в классе символа дополнительный класс.

class="fa fa-thumbs-o-up fa-2x fa-rotate-180"

Также можно увеличивать символы, вращать их онлайн, обо всем этом написано в описании к библиотеке шрифта. Для программиста, желающего украсить свой скучный сайт - это просто находка.

В следующей статье рассмотрим, как сделать защиту от накрутки лайков, а также добавление лайков без перезагрузки страницы. В этом нам поможет javascript и библиотека jQuery.

Про жизнь и увлечения Как зарегистрировать пользователя через социальные сети

2     0

blog comments powered by Disqus