Урок 6: Профілі Користувачів – Бо Кожен Заслуговує на Свій Зоряний Час
Вітаю, майстре блогу! 🎉 Ви вже освоїли реєстрацію, вхід у систему і коментарі. Але давайте чесно, без профілів користувачів ваш блог нагадує вечірку, де всі у масках, але ніхто не знає, хто є хто. Пора дати вашим користувачам профіль, який вони можуть показувати з гордістю!
Сьогодні ми додамо профілі користувачів, щоб кожен ваш відвідувач мав свою унікальну ідентичність. Це як дати кожному зірковий бейджик із написом: “Так, я тут по праву, і у мене є думка!”
Крок 1: Активуйте Віртуальне Середовище (Ваша Зона Спокою)
Спершу переконайтеся, що ви в своєму віртуальному середовищі – де відбувається вся магія.
source venv/bin/activate
Якщо в терміналі з’явився (venv)
, ви офіційно в своїй зоні спокою. 🧘♂️
Крок 2: Встановіть Pillow (Для Чарівної Обробки Зображень)
Оскільки ми додаємо фото профілю, Django потребує бібліотеки Pillow для обробки зображень. Встановимо її, щоб Django міг використовувати ImageField
для профілів.
python3 -m pip install Pillow
Тепер, коли Pillow встановлено, Django готовий до обробки зображень!
Крок 3: Розширте Модель Користувача (Додаємо Трохи Характеру)
Модель користувача Django – це добре, але їй бракує характеру. Додамо профіль для кожного користувача, з полями для біографії, фото та всім, що тільки може забажати душа.
Шлях до файлу: myblog/blog/models.py
Додайте цей код під моделлю Comment
:
from django.contrib.auth.models import User
from django.db import models
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
bio = models.TextField(blank=True, null=True)
profile_picture = models.ImageField(upload_to='profile_pics/', blank=True, null=True)
def __str__(self):
return f"Профіль {self.user.username}"
user
: З’єднує цей профіль з користувачем Django.bio
: Місце для користувачів, де вони можуть написати про себе.profile_picture
: Бо хто ж не любить мати стильну фотографію?
Крок 4: Створіть та Застосуйте Міграції (Щоб Офіційно Оформити)
Давайте повідомимо Django, що у нас нова модель. Запустіть ці команди, щоб створити та застосувати міграції:
python3 manage.py makemigrations
python3 manage.py migrate
Тепер база даних Django офіційно визнає ваші профілі користувачів. Ура! 🎉
Крок 5: Створіть Відсутні Профілі (Без Зайвого Кодування)
Якщо у вас вже є користувачі, вони можуть ще не мати профілю. Щоб переконатися, що всі мають профіль, запустимо простий скрипт у Django shell, який створить профілі для відсутніх.
-
Відкрийте shell Django командою:
python3 manage.py shell
-
Виконайте цей код у Django shell:
from django.contrib.auth.models import User from blog.models import UserProfile for user in User.objects.all(): if not hasattr(user, 'profile'): UserProfile.objects.create(user=user) print(f'Профіль створено для {user.username}')
-
Вийдіть із shell командою:
exit()
Тепер кожен користувач має профіль, навіть якщо його створили раніше!
Крок 6: Додаємо Signals для Автоматичного Створення Профілів Нових Користувачів
Не хочемо, щоб користувачі шукали кнопку “створити профіль”. Зробимо це автоматично за допомогою signals, щоб кожен новий користувач отримував профіль автоматично.
Шлях до файлу: myblog/blog/signals.py
Створіть цей файл і додайте наступний код:
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from .models import UserProfile
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
Тепер кожного разу, коли реєструється новий користувач, Django автоматично створює профіль для нього. Магія!
Крок 7: Зареєструйте UserProfile в Admin (Щоб Мати Швидкий Доступ)
Додамо UserProfile
до адмінки, щоб ви могли побачити всі профілі користувачів на одній сторінці.
Шлях до файлу: myblog/blog/admin.py
Додайте цей код:
from django.contrib import admin
from .models import UserProfile
admin.site.register(UserProfile)
Тепер відкрийте панель адміністратора, щоб побачити всі профілі користувачів у вигляді галереї.
Крок 8: Створіть Форму Профілю (Бо Для Людей з Класом Потрібен Формуляр з Класом)
Щоб дозволити користувачам редагувати свій профіль, створимо для цього форму.
Шлях до файлу: myblog/blog/forms.py
Додайте цей код під CustomUserCreationForm
:
from .models import UserProfile
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['bio', 'profile_picture']
Крок 9: Додайте View для Редагування Профілю (Щоб Користувачі Могли Виблискувати)
Створимо view, який дозволить користувачам редагувати інформацію свого профілю.
Шлях до файлу: myblog/blog/views.py
Додайте цей код:
from django.contrib.auth.decorators import login_required
from .forms import UserProfileForm
from django.shortcuts import render, redirect
@login_required
def update_profile(request):
profile = request.user.profile
if request.method == 'POST':
form = UserProfileForm(request.POST, request.FILES, instance=profile)
if form.is_valid():
form.save()
return redirect('profile')
else:
form = UserProfileForm(instance=profile)
return render(request, 'profile/update_profile.html', {'form': form})
Цей view дозволяє користувачам оновлювати свій профіль: чудово підходить для додавання біографії “Я – людина з кішкою” або “Команда за ананас на піці”.
Крок 10: Створіть Шаблони для Профілю (Місце для Того, Щоб Блищати)
Давайте створимо шаблони для оновлення профілю.
Шлях до файлу:
myblog/
blog/
templates/
profile/
update_profile.html
Ось як може виглядати шаблон:
{% extends "base.html" %}
{% block title %}Оновити Профіль{% endblock %}
{% block content %}
<h2>Оновіть свій профіль</h2>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Зберегти Зміни</button>
</form>
{% endblock %}
Цей шаблон дозволяє користувачам завантажити фото профілю та додати біографію. Дуже стильно!
Крок 11: Додайте URL для View Оновлення Профілю
Додайте маршрут URL для доступу до сторінки редагування профілю.
Шлях до файлу: myblog/blog/urls.py
Додайте цей код:
from . import views
urlpatterns = [
path('', views.blog_index, name='blog_index'),
path('post/<int:pk>/', views.blog_post_detail, name='blog_post_detail'),
path('register/', views.register, name='register'),
path('profile/', views.update_profile, name='profile'),
]
Тепер користувачі можуть відвідати сторінку оновлення профілю за адресою /profile/
.
Крок 12: Перевірте Це! (Зірковий Момент Профілю)
Запустіть сервер і перевірте новий функціонал профілю:
python3 manage.py runserver
Перейдіть на /profile/
і спробуйте оновити свій профіль. Додайте біографію, завантажте фото профілю і дайте волю своїй унікальності.
Крок 13: Вийдіть з Віртуального Середовища (Прощавай, Зона Спокою)
Коли все зроблено, не забудьте вийти з віртуального середовища:
deactivate
Ласкаво просимо до реальності, з робочим функціоналом профілю та спільнотою користувачів, повною індивідуальностей.
Підсумок Уроку 6
Та-да! 🎉 Ви додали профілі користувачів до свого блогу на Django. Тепер у кожного є можливість показати свою біографію і фото, додаючи трохи особистості до вашого блогу.
На наступному уроці ми дослідимо ще більше способів налаштування взаємодії користувачів. Але на цей момент насолоджуйтеся профілями користувачів, які надають вашому блогу більше кольорів і унікальності! 🧙♂️✨
See also
- Урок 5: Реєстрація користувачів – Тільки обрані можуть залишати коментарі!
- Урок 4: Аутентифікація користувачів – Бо не кожен має доступ до святилища вашого блогу
- Урок 3: Форми – Як Просити Ввічливо Дані Від Користувачів (І Не Відлякати Їх)
- Lesson 2: Шаблон Model-View-Template (MVT) – Як MVC, але з магією і без головного болю
- Django: Веб-фреймворк, який перетворить тебе на кодового мага (Без жодних чаклунських книг)