Student Tasks¶
Практичні завдання до Notes Chat App — трьох рівнів складності.
Рівень 1 — Мінімальне¶
Додайте нове поле до моделі Note, створіть і застосуйте migration, покажіть поле у detail template.
Кроки:
- Додайте поле у
notes_app/models.py(наприклад,color = models.CharField(max_length=7, default='#808080', blank=True)). - Створіть migration:
docker compose run --rm web python manage.py makemigrations. - Застосуйте:
docker compose run --rm web python manage.py migrate. - Покажіть поле у
templates/notes_app/note_detail.html.
Критерії:
- migration файл існує у
notes_app/migrations/. manage.py checkпроходить без помилок.- template відображає поле без помилок.
- Існуючі тести проходять:
docker compose run --rm web python manage.py test notes_app.tests.test_models -v 2.
Рівень 2 — Основне¶
Додайте archive/unarchive flow через service, view, URL і тест.
Кроки:
Noteвже має полеis_archived— використайте його.- Додайте функцію у
notes_app/services.py(аналогtoggle_pin). - Додайте selector у
notes_app/selectors.pyдля отримання архівованих нотаток. - Додайте view у
notes_app/views.py. - Додайте URL у
notes_app/urls.py. - Додайте тест у
notes_app/tests/test_services.pyабоtest_views.py.
Критерії:
- Бізнес-логіка у
services.py(не у view). - Read query у
selectors.py. - Access rules протестовані (неможливість архівувати чужу нотатку).
- Всі існуючі тести проходять.
Рівень 3 — Advanced¶
Відновіть async HTTP demo або виправте Docker production blockers.
Варіант A: Async HTTP demo¶
Поточний стан: async_views.py, async_selectors.py, async_services.py відсутні у working tree.
Реалізуйте async view для списку нотаток:
- Використайте async def note_list_async(request).
- ORM wrap через database_sync_to_async.
- Зареєструйте URL.
- Напишіть тест.
Варіант B: Production Docker¶
- Перенесіть
SECRET_KEYу environment variable. - Додайте
DEBUG=Falseрежим з коректнимALLOWED_HOSTS. - Видаліть
DebugExceptionMiddlewareабо обмежте умовоюif settings.DEBUG. - Замініть
uvicorn --reloadна production команду. - Задокументуйте всі зміни.
Критерії (обидва варіанти):
- Команда задокументована.
- Тести / checks проходять, або blocker чесно описаний.
- Існуючі features не ламаються.