Российский Новый Университет
Опубликован: 25.01.2016 | Доступ: свободный | Студентов: 2234 / 161 | Длительность: 16:40:00
Лекция 7:

Чтение и комментирование

< Лекция 6 || Лекция 7: 123 || Лекция 8 >

Добавление и удаление читателей

Давайте создадим метод post() для профиля, чтобы добавлять и удалять читателей, основано на параметрах:

def post(self, request, username):
    follow = request.POST['follow']
    user = User.objects.get(username= request.user.username)
    userProfile = User.objects.get(username=username)
  userFollower,status=UserFollower.objects.get_or_create(user=userProfile)
    userFollower.count += 1
    userFollower.save()
    if follow == 'true':
        #follow user
        userFollower.followers.add(user)
    else:
        #unfollow user
        userFollower.followers.remove(user)
    return HttpResponse(json.dumps(""), 
content_type="application/json")

Это простая функция, которая проверяет параметры, чтобы добавлять или удалять пользователей из списка читателей.

Часть кнопки подписки в файле profile.html должны быть обновлены с именами классов, так, что мы можем переключать функциональность событий JavaScript, как показано ниже:

<p class="navbar-text navbar-left">
        <span class="glyphicon glyphicon-user"> </span>  {{ profile.username }}'s Profile Page
         {% if profile.username != user.username %}
              <span class="btn btn-xs btn-default follow-btn" title="Click 
to follow {{ profile.username }}" value="{{ following }}" 
username="{{ profile.username }}">
             <span class="glyphicon glyphicon-plus"></span><span class="follow-text">
                 {{ following|yesno:"Unfollow,Follow" }}
             </span></span>
         {% endif %}
    </p>

Наконец, создадим файл Javascript c именем profile.js, который вызывает метод post () в зависимости от нажатой кнопки "Читать"/ "Перестать читать":

$(".follow-btn").click(function () {
    var username = $(this).attr('username');
    var follow = $(this).attr('value') != "True";
    $.ajax({
        type: "POST",
        url:  "/user/"+username+"/",
        data: { username: username , follow : follow  },
        success: function () {
            window.location.reload();
        },
        error: function () {
            alert("ERROR !!");
        }
    })
});

Не забудьте добавить этот файл JavaScript в файл profile.html в конец страницы, как показано следующим кодом:

{% block js %}
    <script src="{% static 'js/profile.js' %}"></script>
{% endblock %}

Отображение пользователя, на которого чаще всего подписываются

После того, как мы реализовали функцию для читателей, мы можем двигаться дальше с новым дизайном страницы где мы отобразим список пользователей, на которые наиболее часто подписываются. Логика этой страницы могут быть использованы для разработки страницы, на которой отображается наибольшее количество комментариев.

Основные компоненты для дизайна этой страницы будут:

  • Представление: файл users.html
  • Представление: файл users.html
  • Отображение URL

Добавьте следующее содержимое в файл users.html:

{% extends "base.html" %}
{% load staticfiles %}
{% block navbar %}
<p class="navbar-text navbar-right">
<span class="glyphicon glyphicon-user"x/span>
{{ user.username }}
</p>
{% endblock %}
{% block content %}
<div class="row clearfix">
<div class="col-md-12 column">
{% for userFollower in UserFollowers %}
<div class="well">
<span class="username">{{ userFollower.user.username }}</span>
<span class="count text-muted"> ({{ userFollower.count }} followers)</span>
</div>
{% endfor %}
</div>
</div>
{% endblock %}

И следующий класс в контроллер:

class MostFollowedUsers(View):
    def get(self, request):
        userFollowers = UserFollower.objects.order_by('-count')[:2]
        params = dict()
        params['userFollowers'] = userFollowers
        return render(request, 'users.html', params)

Следующая строка сортирует пользователей по количеству читателей:

userFollowers = UserFollower.objects.order_by('-count1)

Нам нужно обновить URL-представление, как показано ниже:

url(r’^mostFollowed/$', MostFollowedUsers.as_view()),

Вот и все! Мы сделали страницу со списком пользователей по числу читателей. Если подсчет затягивается, можно ограничить список с помощью базового синтаксиса списка Python:

userFollowers = UserFollower.objects.order_by('-count1) [: 10]

Будет выведен топ-10 пользователей.

Контрольные вопросы

  1. Для чего требуется проверка, читает ли пользователь того пользователя, профиль которого он посетил?
  2. Какую информацию необходимо сохранить в случае, когда пользователь читает другого пользователя?
  3. Какие компоненты необходимы для страницы, где отображается список пользователей, которых наиболее часто читают?
  4. Что требуется для базовой аутентификации?
  5. Как вывести 10 самых читаемых пользователей?

Упражнения

Упражнение 1.

Поменяйте иконку пользователя

Упражнение 2.

Доработайте систему комментирования

Упражнение 3.

Добавьте возможность отображения общего количества твитов для конкретного пользователя

Упражнение 4.

Доработайте страницу входа пользователя с тем, чтобы была возможность проверки

Список тем курсовых работ

  • Создание прототипа системы модерации твитов
  • Разработка прототипа системы регистрации пользователей
  • Создание продвинутой системы комментирования
  • Разработка продвинутого профиля пользователя
  • Разработка прототипа системы ведения пользовательских блогов
  • Разработка прототипа сервиса мгновенного обмена собщениями
  • Разработка прототипа веб-сервиса для хранения изображений
  • Разработка прототипа веб-сервиса электронной почты
  • Разработка прототипа сервиса для ведения списка ежедневных дел
  • Разработка прототипа сервиса для учета рабочего времени

Краткие итоги

  • Создали модель данных UserModel
  • Создали страницу входа в систему
  • Создали страницу входа в систему
  • Рассмотрели стратегии реализации возможности чтения твитов других пользователей
  • Реализовали возможность чтения твитов других пользователей.
  • Реализовали возможность добавления и удаления читателей
  • Реализовали модель входа пользователя
  • Узнали, как можно отобразить пользователя, который имеет наибольшее количество читателей
  • Разработали страницу, на которой отображается наибольшее количество комментариев
  • Реализовали возможность комментирования твитов
< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Константин Боталов
Константин Боталов

Вроде легкие вопросы и ответы знаю правильные, но система считает иначе и правильные ответысчитает неправильными. Приходится выполнть по несколько раз. Это я не правильно делаю или тест так составлен?

Владимир Филипенко
Владимир Филипенко

Листинг показывает в 4-ой лекции, что установлен Django 1.8.4. Тут же далее в этой лекции указаны настройки, которые воспринимает Django 1.7 и младше.