Рубрики
Без рубрики

Django – Обновить профиль пользователя

В этой окончательной части серии мы собираемся создавать и отображать форму, где пользователи могут обновлять … Теги с Python, Django, WebDev, учебником.

В этом Финал Часть серии мы собираемся создавать и отображать форму, где пользователи могут обновить свой профиль. Это то, на конец этого учебника будет выглядеть страница профиля.

Чтобы создать формы, мы собираемся использовать Моделка . Моделка Позволяет нам создавать формы, которые взаимодействуют с конкретной моделью внутри базы данных.

forms.py

from django import forms

from django.contrib.auth.models import User
from .models import Profile


class UpdateUserForm(forms.ModelForm):
    username = forms.CharField(max_length=100,
                               required=True,
                               widget=forms.TextInput(attrs={'class': 'form-control'}))
    email = forms.EmailField(required=True,
                             widget=forms.TextInput(attrs={'class': 'form-control'}))

    class Meta:
        model = User
        fields = ['username', 'email']


class UpdateProfileForm(forms.ModelForm):
    avatar = forms.ImageField(widget=forms.FileInput(attrs={'class': 'form-control-file'}))
    bio = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 5}))

    class Meta:
        model = Profile
        fields = ['avatar', 'bio']
  • UpdateUserform Взаимодействует с пользовательской моделью, чтобы пользователи обновили свое имя пользователя и адрес электронной почты.
  • ОбновлениеProfileform Взаимодействует с моделью профиля, чтобы пользователи обновили свой профиль.
  • Мы также дали поля на загрузку.

Теперь давайте обновим представление, чтобы добавить формы, которые мы только что создали.

views.py

from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.decorators import login_required

from .forms import UpdateUserForm, UpdateProfileForm


@login_required
def profile(request):
    if request.method == 'POST':
        user_form = UpdateUserForm(request.POST, instance=request.user)
        profile_form = UpdateProfileForm(request.POST, request.FILES, instance=request.user.profile)

        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save()
            messages.success(request, 'Your profile is updated successfully')
            return redirect(to='users-profile')
    else:
        user_form = UpdateUserForm(instance=request.user)
        profile_form = UpdateProfileForm(instance=request.user.profile)

    return render(request, 'users/profile.html', {'user_form': user_form, 'profile_form': profile_form})
  • Вы должны быть знакомы с большинством вещей, которые мы сделали в вышеуказанном коде, но для рекомендации, в основном то, что он делает импортировать необходимые формы и создавать экземпляры этих форм в зависимости от того, является ли запрос получить или пост.
  • Если форма представлена (запрос – это пост), нам нужно пройти в почтовых данных в формах. Но для формы профиля есть данные файла/изображения с запросом. Данные файла размещены в запрос. Файлы Поэтому нам нужно пройти в этом тоже.
  • Затем он заполняет поля формы с текущей информацией о зарегистрированных пользователей I.e. Пользовательская форма ожидает экземпляра пользователя, так как он работает с моделью пользователя, поэтому мы говорим instance = prequest.user Хотя для формы профиля мы проходим в случае модели профиля, сказав экземпляр = request.user.profile Отказ

Наконец давайте обновим шаблон для отображения форм

Профиль .html.

{% extends "users/base.html" %}
{% block title %}Profile Page{% endblock title %}
{% block content %}
    
{% if user_form.errors %} {% endif %}
{% csrf_token %}
{{ user_form.username }} {{ user_form.email }}
Change Password
{{ profile_form.avatar }}
{{ profile_form.bio }}


{% endblock content %}
  • Обратите внимание на мертвую ссылку для изменения пароля. Мы обновим его позже в конце этого урока, когда мы добавляем функциональность изменения пароля в наше приложение.

Изменение размера изображений в Джангу

Большие изображения сохранены только для показать масштабируемую/меньшую версию его на странице профиля, могут привести к запуску нашего приложения. Мы можем смягчить эту проблему, используя подушка Чтобы изменить размер большого изображения и переопределить его с измененным цветом/меньшим изображением.

Теперь, чтобы сохранить это измененное изображение, нам нужно переопределить Сохранить () Способ, который представляет собой метод, который существует для всех моделей, и он используется для сохранения экземпляра модели.

Почему нам нужно переопределить этот метод?

Это потому, что нам нужно индивидуальное спасение поведения.

Открыть Models.py и добавьте следующее внутри Профиль модель.

models.py

from PIL import Image

# resizing images
def save(self, *args, **kwargs):
    super().save()

    img = Image.open(self.avatar.path)

    if img.height > 100 or img.width > 100:
        new_img = (100, 100)
        img.thumbnail(new_img)
        img.save(self.avatar.path)

Какой вышеуказанный код имеет :

  • Сохранить загруженное изображение
  • Откройте изображение и проверьте, имеет ли он размер более 100 пикселей. Если у него есть, измените размер изображения и сохраните его в том же пути, оно изначально было сохранено (переопределение исходного большого изображения). Следовательно, когда приложение запущено, браузер больше не получает это большое изображение для отображения пользователю.

Изменить пароль

Обычно на странице профиля пользователи должны иметь возможность изменить свой пароль. Это будет действительно просто, потому что мы обсудили, как пользователи могут сбросить свой пароль, если они это забудут, и процесс будет в значительной степени похоже.

У Django есть вид, называемый PasswordChangeView который позволяет пользователям изменять свой пароль. Давайте создадим наш собственный взгляд, который будет распространяться из этого и переопределить некоторые атрибуты класса.

views.py

from django.urls import reverse_lazy
from django.contrib.auth.views import PasswordChangeView
from django.contrib.messages.views import SuccessMessageMixin


class ChangePasswordView(SuccessMessageMixin, PasswordChangeView):
    template_name = 'users/change_password.html'
    success_message = "Successfully Changed Your Password"
    success_url = reverse_lazy('users-home')
  • Так как это похоже на то, что мы сделали здесь При сбросе пароля не собираюсь объяснить это здесь, но не стесняйтесь спрашивать, есть ли какая-то путаница.

Теперь иди к проекту urls.py и создать маршрут для этого мнения.

user_management/urls.py

from django.urls import path
from users.views import ChangePasswordView

urlpatterns = [
    path('password-change/', ChangePasswordView.as_view(), name='password_change'),
]

Наконец создайте шаблон для просмотра.

juste_password.html.

{% extends "users/base.html" %}
{% block content %}
    

Change Your Password

{% if form.errors %} {% endif %}
{% csrf_token %}
{% endblock content %}

Хорошо,

  • Запустите сервер разработки и запустите обычную команду Python Manage.py. runserver. в вашем терминале.
  • Перейдите в Localhost, играйте со страницей профиля и администратора.

Вот это для серии. Я рад, что смог написать это здесь. Я благодарю вас все за ваше время и отзывы!

Вы можете найти готовое приложение в гадость

Оригинал: “https://dev.to/earthcomfy/django-update-user-profile-33ho”