Итоги работы
Что сделали в модуле
| Тема | Главное |
|---|---|
| Система пользователей | User, хэши паролей, группы и права, request.user |
| Вход и выход | django.contrib.auth.urls, шаблоны registration/, выход только POST |
| Защита страниц | @login_required, LoginRequiredMixin, permission_required |
| Регистрация | UserCreationForm + login() |
| Вход по email | свой бэкенд в AUTHENTICATION_BACKENDS |
| Сообщения и сессии | messages, request.session, modified = True |
| Профили | OneToOneField, ImageField + Pillow, MEDIA_*, request.FILES |
| Своя модель пользователя | AbstractUser, AUTH_USER_MODEL с первого дня |
| OAuth 2.0 | social-auth-app-django, ключи из окружения, пайплайн |
| Дизайн | Bootstrap 5: сетка, navbar, карточки, формы, сообщения |
Схема модуля account
account/
├── authentication.py EmailAuthBackend
├── forms.py UserRegistrationForm, UserEditForm, ProfileEditForm
├── models.py Profile (или User(AbstractUser))
├── pipeline.py create_profile для social-auth
├── views.py dashboard, register, edit
├── urls.py include("django.contrib.auth.urls") + свои маршруты
└── templates/
├── account/ dashboard.html, register.html, edit.html
└── registration/ login.html, logged_out.html, password_*.html
Чек-лист
- Объясню разницу между аутентификацией и авторизацией.
- Знаю, почему нельзя
User.objects.create(password=...). - Понимаю, как сессия связывает браузер с пользователем.
- Умею загружать файлы через форму.
- Понимаю, что сайт получает при входе через OAuth и чего не получает.
Что дальше
Наш блог умеет отдавать HTML людям. Но мобильному приложению или фронтенду на React нужен не HTML, а данные в JSON. В следующем модуле построим для блога REST API на Django REST Framework.
Практика решено 0 из 5
Пользователь забыл пароль. Какой набор встроенных view решает задачу?
Что из этого — хорошие практики работы с пользователями?
Расставьте по порядку, что происходит при входе пользователя по логину и паролю.
-
Браузер получает cookie
sessionidи редирект наLOGIN_REDIRECT_URL -
authenticate()перебираетAUTHENTICATION_BACKENDSи проверяет пароль по хэшу - Пользователь отправляет форму входа (POST с csrf_token)
-
login()записывает id пользователя в сессию -
На следующих запросах middleware восстанавливает
request.userиз сессии
Контрольное задание: view-класс DashboardView на основе TemplateView с шаблоном
account/dashboard.html, доступный только вошедшим пользователям (миксин).
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView
class DashboardView(LoginRequiredMixin, TemplateView):
template_name = "account/dashboard.html"
Убедитесь, что в вашем блоге работают регистрация, вход по логину и по email, выход, сброс пароля (письмо в консоли), редактирование профиля с аватаром и вход через GitHub. Нажмите, когда проверите.
Войдите, чтобы отмечать пройденные уроки.