Django 5 для начинающих

Прогресс по курсу:  9/1004

10.8 Профили пользователей: Представления и формы.
2 из 2 шагов пройдено

Создание шаблонов profile_detail.html и profile_edit.html

Для этого создадим в папке templates папку accounts, а в ней два файла profile_detail.html и profile_edit.html.

Заполняем profile_detail.html следующим HTML кодом:

{% extends 'main.html' %}

{% block content %}
<div class="card border-0">
        <div class="card-body">
            <div class="row">
                <div class="col-md-3">
                    <figure>
                        <img src="{{ profile.avatar.url }}" class="img-fluid rounded-0" alt="{{ profile }}">
                    </figure>
                </div>
                <div class="col-md-9">
                     <h5 class="card-title">
                        {{ profile }}
                    </h5>
                    <div class="card-text">
                        <ul>
                            <li>Никнейм: {{ profile.user.username }}</li>
                            {% if profile.user.get_full_name %} <li>Имя и фамилия: {{ profile.user.get_full_name }}</li> {% endif %}
                            <li>Заходил: {{ profile.user.last_login }}</li>
                            <li>Дата рождения: {{ profile.birth_date }}</li>
                            <li>О себе: {{ profile.bio }}</li>
                        </ul>
                    {% if request.user == profile.user %} <a href="{% url 'profile_edit' %}" class="btn btn-sm btn-primary">Редактировать профиль</a> {% endif %}
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

И шаблон для редактирования профиля:

{% extends 'main.html' %}

{% block content %}
<div class="card mb-3 border-0 nth-shadow">
   <div class="card-body">
      <div class="card-title nth-card-title">
         <h4>Изменение профиля</h4>
      </div>
      <form method="post" enctype="multipart/form-data">
         {% csrf_token %}
         {{ user_form.as_p }}
         {{ form.as_p }}
         <div class="d-grid gap-2 d-md-block mt-2">
            <button type="submit" class="btn btn-dark">Подтвердить изменение профиля</button>
         </div>
      </form>
   </div>
</div>
{% endblock %}

Осталось лишь проверить проделанную работу. Переходим на страницу своего пользователя, в моем случае это выглядит следующим образом: http://127.0.0.1:8000/user/admin/

Нажмём кнопку Редактировать профиль. Давайте изменим аватарку пользователя, загрузим свою произвольную картинку, а также добавим имя и фамилию:

И подтвердим изменение профиля.

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


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

Так как в данный момент вход возможен только в админку, есть небольшой "косяк" - пользователь, у которого не установлен признак "Статус персонала", войти не сможет.

При этом в ошибке на это не указано, можно довольно долго биться:

Теперь пускает:

Изменен ilya kutaev

@ilya_kutaev, странно. А создавали пользователя до раздела 10.7 ? Может у вас сейчас при сохранении пользователя просто отработал сигнал и у него создался профиль?

@Илья_Перминов, Профиль сразу создается, я проверял. Кроме админа создал вечером вчера 2 пользователей, но не входил ими. Так и куда входить-то, вариант же входа только в админку на этом этапе, и он работает, когда Персонал добавляешь

@ilya_kutaev, обычные пользователи не могут входить в админку Django:

https://github.com/django/django/blob/stable/5.0.x/django/contrib/admin/forms.py#L22

@Дмитрий_Селезнев, Видимо, мы говорим об одном и том же.

У меня не получалось авторизоваться пользователем, пока не был установлен признак Staff - ошибку я приложил выше.
Возможно, это кому-то пригодится, кто захочет проверить работу не под админской учеткой

При переходе по ссылке открывается странный урл
https://http//127.0.0.1:8000/user/admin/

наверное должно быть всетаки http://127.0.0.1:8000/user/admin/ ?

@Николай_Петров, Спасибо, исправил, не заметил что криво ссылка добавилась.