Advertisement
matacoder

Untitled

Nov 14th, 2020
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.75 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. @login_required
  12. def follow_index(request):
  13.     # информация о текущем пользователе доступна в переменной request.user
  14.     # ...
  15.     return render(request, "follow.html", {...})
  16.  
  17. @login_required
  18. def profile_follow(request, username):
  19.     # ...
  20.     pass
  21.  
  22.  
  23. @login_required
  24. def profile_unfollow(request, username):
  25.     # ...
  26.     pass
  27. Добавьте необходимые адреса в posts/urls.py:
  28. urlpatterns = [
  29.     # ...
  30.     path("follow/", views.follow_index, name="follow_index"),
  31.     path("<str:username>/follow/", views.profile_follow, name="profile_follow"),
  32.     path("<str:username>/unfollow/", views.profile_unfollow, name="profile_unfollow"),
  33. ]
  34. Теперь шаблоны.
  35. Создайте шаблон follow.html, куда будут выводиться посты авторов, на которых подписан текущий пользователь. За образец можете взять шаблон index.html, только замените заголовок.
  36. Добавьте в шаблоны index.html и follow.html виджет переключения лент menu.html:
  37. {% if user.is_authenticated %}
  38. <div class="row">
  39.     <ul class="nav nav-tabs">
  40.         <li class="nav-item">
  41.             <a class="nav-link {% if index %}active{% endif %}" href="{% url %}">Все авторы</a>
  42.         </li>
  43.         <li class="nav-item">
  44.             <a class="nav-link {% if follow %}active{% endif %}" href="/follow">Избранные авторы</a>
  45.         </li>
  46.     </ul>
  47. </div>
  48. {% endif %}
  49. Код index.html:
  50. {% extends "base.html" %}
  51. {% block title %}Последние обновления {% endblock %}
  52.  
  53. {% block content %}
  54. <div class="container">
  55.  
  56.     {% include "menu.html" with index=True %}
  57.  
  58.         <h1>Последние обновления на сайте</h1>
  59.  
  60.         {% for post in page %}
  61.             {% include "post_item.html" with post=post %}
  62.         {% endfor %}
  63.  
  64.         {% if page.has_other_pages %}
  65.             {% include "paginator.html" with items=page paginator=paginator%}
  66.         {% endif %}
  67.  
  68.     </div>
  69. {% endblock %}
  70. На странице профайла добавьте ссылку «Подписаться» в левое меню:
  71. <li class="list-group-item">
  72.     {% if following %}
  73.     <a class="btn btn-lg btn-light"
  74.             href="{% url 'profile_unfollow' profile.username %}" role="button">
  75.             Отписаться
  76.     </a>
  77.     {% else %}
  78.     <a class="btn btn-lg btn-primary"
  79.             href="{% url 'profile_follow' profile.username %}" role="button">
  80.     Подписаться
  81.     </a>
  82.     {% endif %}
  83. </li>
  84. Тестирование
  85. Напишите тесты, проверяющие работу нового сервиса:
  86. Авторизованный пользователь может подписываться на других пользователей и удалять их из подписок.
  87. Новая запись пользователя появляется в ленте тех, кто на него подписан и не появляется в ленте тех, кто не подписан на него.
  88. Только авторизированный пользователь может комментировать посты.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement