Контрольна точка¶
Цей розділ — фінальна перевірка Кроку 1. Виконай практичні завдання, звір чеклист і переглянь таблицю частих помилок перед тим як переходити до Кроку 2.
Всі команди по порядку¶
# 1. Створити і активувати venv
python -m venv venv
source venv/bin/activate # Linux/Mac
# або: venv\Scripts\activate # Windows
# 2. Встановити Django
pip install -r requirements.txt
# або: pip install django
# 3. Створити проєкт (крапка важлива!)
django-admin startproject hello_project .
# 4. Застосувати початкові міграції
python manage.py migrate
# 5. Створити адміністратора
python manage.py createsuperuser
# 6. Перевірити адмін-панель
python manage.py runserver
# → http://localhost:8000/admin/
# 7. Створити додаток
python manage.py startapp hello_app
# 8. Зареєструвати hello_app у settings.py
# (додати 'hello_app' до INSTALLED_APPS)
# 9. Написати view-функції (views.py) і URL-маршрути (urls.py)
# 10. Підключити hello_app.urls до hello_project/urls.py (include)
# 11. Описати модель у models.py
# 12. Зробити міграцію
python manage.py makemigrations
# 13. Застосувати міграцію
python manage.py migrate
# 14. Зареєструвати модель в admin.py (@admin.register)
# 15. Фінальна перевірка
python manage.py runserver
# http://localhost:8000/ → Hello, Django!
# http://localhost:8000/about/ → текст
# http://localhost:8000/notes/ → список нотаток
# http://localhost:8000/admin/ → адмін-панель
Зміни у файлах¶
| Файл | Що ти зробив |
|---|---|
hello_project/settings.py |
Додав 'hello_app' в INSTALLED_APPS |
hello_app/models.py |
Написав модель Note (CharField, TextField, DateTimeField) |
hello_app/admin.py |
Зареєстрував NoteAdmin через @admin.register |
hello_app/migrations/0001_initial.py |
Автоматично згенеровано makemigrations |
hello_app/views.py |
Написав функції index(), about(), note_list() |
hello_app/urls.py |
Створив файл з app_name і маршрутами /, /about/, /notes/ |
hello_project/urls.py |
Підключив маршрути через include() |
hello_app/templates/hello_app/note_list.html |
Перший HTML-шаблон |
Часті помилки¶
| Помилка | Причина | Рішення |
|---|---|---|
AttributeError: 'super' object has no attribute 'dicts' |
Python 3.14 несумісний з Django 5.1 | pip install django --upgrade (встановить 5.2+) |
OperationalError: no such table: auth_user |
Міграції не запускались | python manage.py migrate |
OperationalError: no such table: hello_app_note |
migrate після makemigrations не запускався |
python manage.py migrate |
ModuleNotFoundError: No module named 'django' |
venv не активований або Django не встановлений | Активуй venv → pip install -r requirements.txt |
Page not found (404) на / |
Маршрут не зареєстрований | Перевір urls.py в обох файлах |
ImproperlyConfigured: Specifying a namespace... |
namespace= є в include(), але app_name відсутній у hello_app/urls.py |
Додай app_name = "hello_app" у hello_app/urls.py |
NameError: name 'Note' is not defined |
views.py не імпортує модель |
Додай from .models import Note у views.py |
Django не бачить hello_app |
Не додано в INSTALLED_APPS |
Додай 'hello_app' у settings.py |
django-admin: command not found |
Django не встановлений або venv не активований | Активуй venv, потім pip install django |
ModuleNotFoundError: No module named 'hello_project' |
Запускаєш не з кореня проєкту | Перейди в папку де є manage.py |
DisallowedHost |
ALLOWED_HOSTS не містить хост | Додай хост до ALLOWED_HOSTS у settings.py |
CSRF verification failed |
{% csrf_token %} відсутній у формі |
Додай {% csrf_token %} всередині <form> |
| Не зупиняється сервер | — | Натисни Ctrl + C у терміналі |
Практичні завдання¶
-
Пройди кроки 1–9 самостійно, отримай
Hello, Django!у браузері. -
Додай третій маршрут
/contact/з view-функцієюcontact(), яка повертає рядок з твоїм ім'ям та email. -
Додай маршрут
/greet/<str:name>/який повертає"Привіт, {name}!". -
Створи модель
Note, зроби міграцію, відкрий адмін-панель і додай 3 нотатки вручну. -
У Django shell: знайди нотатку з
id=2, зміни їїtitle, збережи. Перевір в адмін-панелі. -
(Бонус) Додай поле
is_pinned = models.BooleanField(default=False)до моделіNote. Зроби нову міграцію. Переконайся що поле з'явилось в адмін-панелі.
Чеклист самоперевірки¶
- [ ]
http://localhost:8000/→Hello, Django! - [ ]
http://localhost:8000/about/→ текст - [ ]
http://localhost:8000/notes/→ HTML-список нотаток - [ ]
http://localhost:8000/admin/→ адмін-панель (логін superuser) - [ ] Я розумію різницю між
startprojectіstartapp - [ ] Я знаю навіщо
makemigrationsіmigrate— два окремі кроки - [ ] Модель
Noteз'являється в адмін-панелі - [ ] Я можу виконати CRUD через Django shell (
create,filter,get,save,delete) - [ ] Я розумію як Django знаходить view за URL (URLconf ланцюг)
- [ ] Я знаю різницю між superuser / staff / regular user
- [ ]
render()приймаєrequest, шлях до шаблону і словникcontext - [ ] Шаблон лежить у
hello_app/templates/hello_app/(подвоєна папка — це правильно)
Підсумок концепцій¶
| Концепція | Де у коді |
|---|---|
| URL маршрут | hello_app/urls.py → path('about/', views.about) |
| View-функція | hello_app/views.py → def about(request): return HttpResponse(...) |
| Підключення app URLs | hello_project/urls.py → include('hello_app.urls') |
| Namespace | app_name = 'hello_app' + namespace='hello_app' |
| Зворотний URL | reverse('hello_app:about') або {% url 'hello_app:about' %} |
| Path converter | path('notes/<int:pk>/', ...) |
| Шаблон | hello_app/templates/hello_app/note_list.html |
| Контекст | render(request, 'шаблон.html', {'notes': queryset}) |
| Модель → БД | makemigrations + migrate |
| ORM CRUD | create, filter, get, .save(), .delete() |
| Адмін реєстрація | @admin.register(Note) у admin.py |
| MVT | Model → View → Template |
Далі¶
Крок 2 → Bootstrap Notes — Bootstrap 5, ModelForm, повноцінний CRUD з PRG-паттерном, перший notes_project.