Урок 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. Откройте Django shell командой:

    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 для Автоматического Создания Профиля Новых Пользователей

Мы не хотим, чтобы пользователи сами искали кнопку “создать профиль”. Настроим Django на автоматическое создание профиля с помощью 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 в Админке (Чтобы Легко Следить за Профилями)

Добавим 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})

Теперь ваши пользователи смогут редактировать свой профиль и добавлять уникальные данные, которые придают блогу больше индивидуальности.


Шаг 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 для Страницы Обновления Профиля

Добавьте маршрут 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. Теперь каждый пользователь может похвастаться биографией и фото, добавляя яркости вашему блогу.

На следующем уроке мы изучим новые способы настройки взаимодействия с пользователями. А пока наслаждайтесь результатом — пусть ваш блог наполняется яркими личностями и уникальными историями! 🧙‍♂️✨


Смотрите также