Advertisement
matacoder

Финальное задание спринт 6

Sep 12th, 2020 (edited)
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.81 KB | None | 0 0
  1. Финальное задание
  2. Осталось добавить в проект систему подписки на авторов и создать ленту их постов.
  3. Задача вам знакома: создайте модель, напишите view-функцию, добавьте в urls.py новые пути, подготовьте шаблоны.
  4. Клонируйте репозиторий hw05_final и скопируйте в него код из репозитория hw04_tests, в котором вы работали в этом спринте.
  5. Можно приступать к заданию.
  6. Модель Follow должна иметь такие поля:
  7. user — ссылка на объект пользователя, который подписывается. Укажите имя связи: related_name="follower"
  8. author — ссылка на объект пользователя, на которого подписываются, имя связи пусть будет related_name="following"
  9. Напишите view-функцию страницы, куда будут выведены посты авторов, на которых подписан текущий пользователь.
  10. Ещё две view-функции нужны для подписки на интересного автора и для того, чтобы отписаться от надоевшего графомана:
  11.  
  12.  
  13.  
  14. @login_required
  15. def follow_index(request):
  16.     # информация о текущем пользователе доступна в переменной request.user
  17.     # ...
  18.     return render(request, "follow.html", {...})
  19.  
  20. @login_required
  21. def profile_follow(request, username):
  22.     # ...
  23.     pass
  24.  
  25.  
  26. @login_required
  27. def profile_unfollow(request, username):
  28.     # ...
  29.     pass
  30.  
  31.  
  32.  
  33.  
  34.  
  35. Добавьте необходимые адреса в posts/urls.py:
  36.  
  37. urlpatterns = [
  38.     # ...
  39.     path("follow/", views.follow_index, name="follow_index"),
  40.     path("<str:username>/follow/", views.profile_follow, name="profile_follow"),
  41.     path("<str:username>/unfollow/", views.profile_unfollow, name="profile_unfollow"),
  42. ]
  43.  
  44.  
  45.  
  46.  
  47. Теперь шаблоны.
  48. Создайте шаблон follow.html, куда будут выводиться посты авторов, на которых подписан текущий пользователь. За образец можете взять шаблон index.html, только замените заголовок.
  49. Добавьте в шаблоны index.html и follow.html виджет переключения лент menu.html:
  50.  
  51.  
  52.  
  53. {% if user.is_authenticated %}
  54. <div class="row">
  55.     <ul class="nav nav-tabs">
  56.         <li class="nav-item">
  57.             <a class="nav-link {% if index %}active{% endif %}" href="{% url %}">Все авторы</a>
  58.         </li>
  59.         <li class="nav-item">
  60.             <a class="nav-link {% if follow %}active{% endif %}" href="/follow">Избранные авторы</a>
  61.         </li>
  62.     </ul>
  63. </div>
  64. {% endif %}
  65.  
  66.  
  67.  
  68.  
  69. Код index.html:
  70.  
  71.  
  72.  
  73.  
  74. {% extends "base.html" %}
  75. {% block title %}Последние обновления {% endblock %}
  76.  
  77. {% block content %}
  78. <div class="container">
  79.  
  80.     {% include "menu.html" with index=True %}
  81.  
  82.         <h1>Последние обновления на сайте</h1>
  83.  
  84.         {% for post in page %}
  85.             {% include "post_item.html" with post=post %}
  86.         {% endfor %}
  87.  
  88.         {% if page.has_other_pages %}
  89.             {% include "paginator.html" with items=page paginator=paginator%}
  90.         {% endif %}
  91.  
  92.     </div>
  93. {% endblock %}
  94.  
  95.  
  96.  
  97. На странице профайла добавьте ссылку «Подписаться» в левое меню:
  98.  
  99.  
  100.  
  101. <li class="list-group-item">
  102.     {% if following %}
  103.     <a class="btn btn-lg btn-light"
  104.             href="{% url 'profile_unfollow' profile.username %}" role="button">
  105.             Отписаться
  106.     </a>
  107.     {% else %}
  108.     <a class="btn btn-lg btn-primary"
  109.             href="{% url 'profile_follow' profile.username %}" role="button">
  110.     Подписаться
  111.     </a>
  112.     {% endif %}
  113. </li>
  114.  
  115.  
  116.  
  117.  
  118.  
  119. Тестирование
  120. Напишите тесты, проверяющие работу нового сервиса:
  121. Авторизованный пользователь может подписываться на других пользователей и удалять их из подписок.
  122. Новая запись пользователя появляется в ленте тех, кто на него подписан и не появляется в ленте тех, кто не подписан на него.
  123. Только авторизированный пользователь может комментировать посты.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement