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

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

4.2 CRUD проект
4 из 12 шагов пройдено
0 из 60 баллов  получено

Задача 3

Задание:

Напишите функцию-представление, для приложения main_app, с именем user_profile, которая будет возвращать содержимое шаблона user_profile.html, предварительно получая в переменную profile_data запись из модели User и передавать её в шаблон.

id записи необходимо получить из параметра id HTTP-запроса методом GET.

Если запись не существует, необходимо вернуть сообщение о ошибке 404 с текстом <h2>User not found</h2>.


P.S. На экран ничего не нужно выводить, модель User необходимо импортировать из приложения main_app и при получении записи использовать менеджер по умолчанию, код модели:

class User(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField(default=18)
    phone = models.CharField(max_length=20)
    email = models.CharField(max_length=50)
Чтобы решить это задание откройте https://stepik.org/lesson/1146718/step/8

Напишите программу. Тестируется через stdin → stdout

Верно решили 63 учащихся
Из всех попыток 12% верных
Time Limit: 30 секунд
Memory Limit: 256 MB
Максимум 5 баллов за решение.

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

Очень крутая задача)

Чувствую тут просто критически нужна подсказка :)


1. Из django.shortcuts импортируем функцию render

2. Из main_app.models импортируем модель User

3. Из django.http импортируем HttpResponseNotFound

4. Создаем функцию user_profile, принимающую один обязательный параметр

5. В переменную user_id получаем параметр id из request при помощи метода GET (user_id = request.GET.get('id'))

6. В блоке try пытаемся получить в переменную profile_data запись из модели User, с id = user_id

7. В except, если запись не существует, возвращаем ошибку HttpResponseNotFound('текст указанный в условии')

8. возвращаем функцию render(request, 'название шаблона', {'переменная c записью из модели': значение})

1. id записи необходимо получить из параметра id HTTP-запроса методом GET.

2. получить в переменную profile_data запись из модели User по  id записи из п.1

3. вернуть содержимое шаблона user_profile.html

#1147531425, а что не так в решении?(

@Александр_Баринов, невнимательно прочитано условие задачи:

id записи необходимо получить из параметра id HTTP-запроса методом GET.

@Александр_Баринов, Информация как получать параметры из GET запроса в этой лекции

Изменен Илья Перминов

Совсем никаких идей уже не осталось. Почему возвращается неверный статус кода 404 в решении?

@Евгений_Куликов, не правильно понято условие:

Если запись не существует, необходимо вернуть сообщение о ошибке 404 с текстом <h2>User not found</h2>.

Посмотрите тут: https://stepik.org/lesson/1146718/step/2, на примере изменения или удаления записи, как обработать исключение.

@Дмитрий_Селезнев, Все-равно осталась проблема с ошибкой 404 в переделанном решении (

@Евгений_Куликов, в условии сказано что функция принимает параметр id HTTP-запроса метода GET, а в решении принимаете параметр pk, проверочный код про него не знает.

pk можно использовать в запросе вместо idUser.objects.get(pk=id).

И условие if profile_data.exists(): тут это не нужно, можно удалить эту строку, она бесполезна по причине того, что если запись отсутствует, то этот код никогда не будет выполнен, исключение будет вызвано раньше, на предыдущей строке кода.

@Дмитрий_Селезнев,  Наконец-то разобрался. Метод exists() и ключ pk я начал использовать в попытке побороть отказ в принятии решения. Спасибо!

Запись из модели - это означает, что мы должны передать в шаблон сам объект записи с помощью переменной " profile_data "?

"id записи необходимо получить из параметра id запроса GET." -  к чему тогда эта запись, если мы передаем весь объект?

AssertionError: user_profile() missing 1 required positional argument: 'id' - судя по ошибке в шаблон еще требуется передать "Id" - записи. Если это так, то с помощью какой переменной?

@Александр_Шаров, да, верно. А id записи передаётся методом GET.

AssertionError: user_profile() missing 1 required positional argument: 'id' - судя по ошибке в шаблон еще требуется передать "Id" - записи.

Проверочный код ведь не знает, что у функции user_profile() появился дополнительный(и не нужный) параметр id, соответственно при проверке функция запускается без него, что вызывает данную ошибку.

Добрый день, подскажите почему не проходит решение #1141139457 ? 

@Dmitriy_Novozhilov, вместо HttpResponse необходимо использовать HttpResponseNotFound.

И исключение должно быть User.DoesNotExist.

Добрый день. Подскажите, пожалуйста, как тут можно что-то вроде деббагинга проводить? Чтобы как-то пошагово отследить что вообще происходит.

А то, если решение не проходит, то начинается игра в угадайку без какого-либо понимания происходящего.

@Aleksandr_Gurov, Решение #1156923979 было почти верным. Только вы получаете QuerySet через filter, а нам нужен 1 объект, получайте его через get метод.

@Илья_Перминов, спасибо за подсказку)

А симулировать можно только путем создания проекта, запуска  сервера и отправкой GET-запроса из браузера? Других способов нет?

@Aleksandr_Gurov, это самый простой и наименее трудоёмкий способ.

Подскажите, что не так в моем решении #1130850679?

Изменен Агаси Мироян

@Агаси_Мироян, по условию в контексте передаётся переменная profile_data а не user_profile.

предварительно получая в переменную profile_data запись из модели User и передавать её в шаблон.

Изменен Дмитрий Селезнев

@Дмитрий_Селезнев, спасибо большое. Это-ж надо таким невнимательным быть!