Урок 6: Профілі Користувачів – Бо Кожен Заслуговує на Свій Зоряний Час


Урок 6

Урок 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, який створить профілі для відсутніх.

  1. Відкрийте shell Django командою:

    python3 manage.py shell
    
  2. Виконайте цей код у 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}')
    
  3. Вийдіть із 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