В Django 5-ой версии была убрана возможность логаута через GET-запрос. Из-за чего представленная в видео реализация стала выдавать ошибку 405 "method not allowed (GET)". Обойти её можно заменив строку Logout К примеру на {% csrf_token %} Log out
вы мой спаситель😭 очень приятно и грамотно объяснили, из той кучи, которую я пересмотрела, ваш ролик действительно информативный и хорошо снят, спасибо огромное!!!
Спасибо за видео. Довольно интересно, но советую когда пишешь код и/или что-то делаешь, не делай так быстро. Начинающему будет довольно сложно успеть за тобой. Ну и не ленись хоть немножко объяснять свои шаги, не только что ты делаешь, но и для чего это.
@@wstanley В целом всё хорошо, но обязательно по работай над скоростью, иногда, очень часто, ты делаешь вс1ё очень быстро, тебе как знающему человеку может показаться что всё ок, а вот новичок, забьёт на просмотр уже после первых двух минут
нажмите шестеренку на видео справа внизу и выставьте скорость воспроизведения поменьше. некоторых авторов надо замедлять, но большинство я без проблем слушаю на скорости 1.5
В представлении регистрации метод post можно сократить на самом деле. Метод save() и так возвращает нам юзера (как я понял): def post(self, request): form = UserCreationForm(request.POST) if form.is_valid(): user = form.save() login(request, user) return redirect('index')
Да, form.save() возвращает пользователя, но перед тем как логинить пользователя в системе надо запустить функцию authenticate() она не просто проверяет пароль и логин и возвращает пользователя, она пытается пройти аутентификацию во всех своих механизмах аутентификации нашего приложения. По умолчанию оно одно - [django.contrib.auth.backends.ModelBackend] но этот механизм можно расширять и написать еще несколько механизмов при необходимости, для защиты от атак например. А функция authenticate() на вход принимает сырой пароль, не хешированый поэтому мы получаем его с формы password = form.cleaned_data.get('password1'). Ну в принципе, если расширять систему не планируется, то при регистрации можно этот пункт пропустить, но не стоит. :) Ссылка почитать - docs.djangoproject.com/en/4.0/topics/auth/customizing/#specifying-authentication-backends
@@wstanley Ну, я вот только что снова все пересмотрел, и все абсолютно понятно. Не помню что мне тогда показалось запутанным, наверное просто запутался в тех auth формах.
Ничего, просто зажимаешь ctrl и наводишь мышку, кликом перейдет к функции. Но если функция в подключенной библиотеке то надо указать ему интерпритатор и все
Добрый день, спасибо за то, что достаточно подробно показали процесс написания ВСЕГО кода, позволяет лучше понять что и как делать) Но у меня стало выдавать ошибку на странице сайта: Using the URLconf defined in project.urls, Django tried these URL patterns, in this order: admin/ [name='home'] users/ The current path, accounts/, didn’t match any of these. Можете подсказать, в чем проблема? Я только только начал изучать django, всё перерыл и никак не могу вкурить на что смотреть, чтобы понять в чем проблема и главное как это исправлять. Буду очень благодарен, если поможете)
В самом начале после создания модели, не получается сделать миграцию, выводит целый пак ошибок, при этом в настройках при написании AUTH_USER_MODEL = 'user.User' так же выводит ошибку + подсказки не вылезают при написании. Можешь подсказать в чем дело?
Добрый день! Из ошибки ничего не понятно, надо весь трейсбек смотреть, загрузите весь трейсбек сюда dpaste.org/ либо обратитесь в группу в телеге t.me/pydjango/805214 там всегда помогут и быстрее
Спасибо большое, но как-то сложно получается шаблоны в проекте обработка в приложении и user в приложении часть урлов в проекте другая часть в приложении с одной стороны для глаз было бы проще если все лежала в приложении user. Ну чтобы при добавлении других приложений регистрация была немного другой. Так же интересно как можно расширит модель пользователя ну допустим дата рождения, телефонный номер, и какое-нибудь свойство связанная через forenkey либо другая связка И как посетителя без авторизации редиректить на регистрацию допустим для отображения информации нам всегда нужен пользователь,
Всегда пожалуйста! Часть урлов в проекте, а часть в приложении, возможно тебе пока сложно воспринимается т.к. не привык еще. Т.е. в джанге написана уже логика регистрации и если что-то надо изменить то не стоит переписывать всю ее, а можно только часть переопределить и работать с этим. У меня в голове это уложено и нормально воспринимается. Более того если ты в будущем будешь использовать библиотеки для авторизации там тоже все скрыто и при кастомизации так же переопределяют частично. Про расширение юзера немного затронуто в роликах "один к одному" и "многие ко многим". Думаю запишу ролики про кастомизацию пользователя следующими. Для редиректа на регистрацию не авторизованного пользователя используй декоратор login_required например, вот ссылка - docs.djangoproject.com/en/4.0/topics/auth/default/#the-login-required-decorator
Это в документации по джанге прописано, что всегда необходимо переопределять пользователя, чтобы в будущем если понадобится его доработать не больно было. Правило хорошего тона, такое
Ответьте буду благодарен за ответ, а как вы возвращаете страничку home.html, если вы не пишете во views функцию для её возврата? Мне вот этот момент вообще не понятен. У вас вот такой путь path(' ', TemplateView.as_view(template_name='home.html'), name='home'). Разве не нужно вот так путь path(' ', views.home, name='home')? В чём разница не могу понять
Доброе утро! В данном случае нам представление нужно только для того чтобы отдать шаблон, для этого в джанге написан TemplateView он тоже наследуется от базового View github.com/django/django/blob/main/django/views/generic/base.py#L220 Просто его удобно можно использовать прям в урле Если например требуется еще и контекст какойто передавать, то необходимо будет прописывать в view его и расширять ссылка в доке - docs.djangoproject.com/en/4.1/ref/class-based-views/base/#templateview
@@wstanley тобиж не нужно писать ничего во views? А то я пересмотрел несколько раз и не видел, чтобы вы писали во views просто через урлы можно передать шаблон?
я же импортирую с самой джанги TemplateView там и написано все github.com/django/django/blob/main/django/views/generic/base.py#L220 Это типо заготовка стандартная для простого рендера шаблона, в джанге много заготовок для быстрой разработки есть
Спасибо за видео! В форме логинации - вывод ошибок - разве он не реализован по умолчанию? ты делаешь вывод ошибок сам. но если этого не делать - все работает также. Или я что-то не понимаю? Или дело в версии джанги?
насколько я разобрался в контекстной переменной {{ form }} уже содержатся все сообщения об ошибках. отдельно их обрабатываем конечно, если формируем поля формы вручную {{ form.username }} ...
Блин, точно, косяк))) А кстати мой вызов их и не отображает, спасибо за замечание, какие-то моменты упускаю из виду. По формам собирался плейлист сделать пока руки не дошли
Покажи как сделать личный кабинет с каким-то дополнительным функционалом который не доступен для неавторизированных пользователей (например добавление товаров в корзину или в избранное) буду очень признателен
@@wstanley чтобы админ мог добавлять товары разных категорий в каталог, удалять, менять цену через админ панель. А пользователь на главной странице мог эти товары добавлять в избранные и/или в корзину и в своем личном кабинете видеть список этих товаров
В админке такое не делают обычно. Для таких целей кабинет создают, но можно попробовать показать как вдминка кастомизуется, но вот только со временем у меня сейчас напряг большой. Может к концу лета вернусь к записи роликов
Здравствуйте, переадресация после логина происходила на user/login/, потому попробовал вместо LOGIN_REDIRECT_URL = '' написать LOGIN_REDIRECT_URL = 'blog:home', не пойму чего так, из-за того , что несколько приложений? Спасибо за видео
Извините опять я вас беспокою, у меня высвечивает ошибка перехода на домашнюю страницу Template does'not exists, но делаю абсолютно всё, как вы в чём может быть проблема?
Доброе Утро! Ошибка у вас явная "Шаблон не найден" следовательно либо шаблона(templates/name_template.html) нету по указанному пути, либо указали не правильно путь либо имя к шаблону, это частая но довольно простая ошибка, стоит лишь внимательно посмотреть
Не получается перейти к файлу contrib.auth.urls 6:13 комбинацией (alt + левая кнопка мыши). Выяснил, что не могу так сделать, если путь указан внутри кавычек (то есть зеленым цветом написан), в остальных случаях переход работает. Есть ли какой-нибудь альтернативный способ перейти к файлу ? Сама проблема возможно в версии PyCharm
Добрый день, возможно пайчарм настроить надо, в сеттингах есть настройки django по поиску найдите и укажите там путь к настройкам и manage.py, еще стоит указать виртуальное окружение в настройках. Больше я в проекте ничего не настраиваю. Кстати может это зависит от версии пайчарма, посмотрите какая у вас версия
CreateView это просто представление, отображающее форму для создания объекта, который наследуется от базового View и других классов. Для лучшего понимания в ролике использовал именно наследование от базового View. На основе базового View можно любое представление собрать. Если в form не написать actions то запрос уйдет по пути на котором находится страница, если же надо данные отправить на конкретный урл то actions необходимо прописать про actions - webref.ru/html/form/action про CreateView - docs.djangoproject.com/en/4.1/ref/class-based-views/generic-editing/#createview
@@wstanley ответ достойнейший я потерял дар речи, можно поинтересоваться у вас сколько заняло у вас изучение Джанго, как учились ну книги там, документации и тдтп?
@@nomadicus77 Я когда в питон пришел у меня уже было понимание как работают веб фреймворки, поэтому основные принципы я понимал, view, model тд Смотрел в основном открытые уроки в сети, на англ в том числе с субтитрами и без. Книг по джанго не читал, самое большое понимание работы данго дала документация, я ее просто постронично за обедом каждый день читал и применял на практике, документация очень хорошая. И самое гдавное это не бояться залазить в сам код джанги и разбираться как там все устроено, для этого стоит ООП изучить, опять же на ютюбе много видео по ООП питона
Доброго времени суток, csrf токен защищает от подделок межсайтового запроса. Если удалить мидлевар CsrfViewMiddleware в settings то его можно не добавлять при запросах. Но лучше не удалять. docs.djangoproject.com/en/4.0/ref/csrf/#module-django.middleware.csrf
после добавления формы на страницу логин появляется эта ошибка:Reverse for 'login' not found. 'login' is not a valid view function or pattern name. помогите пожалуйста
поздравляю ты создал бесконечную рекурсию и достиг ее предела))) Видимо ты импортируешь модули рекурсивно(но это не точно). Смотреть код надо. Если тебе оперативная помощь нужна то обратись в эту группу телеги t.me/pydjango тут всегда помогут
Подскажите пожалуйста, как добавить форму авторизации на главной странице, то есть не через ссылку, а при входе на сайт (главная страница) выходила форма авторизации
Доброго дня, Вам просто надо в представлении(view) которое рендерит главную страницу получить форму(form = AuthenticationForm()) авторизации и передать ее в шаблон в контексте context = {'form': form}, а в шаблоне соответственно обработать, как мы сделали это в login.html
@@wstanley А можно мне ссылку, где это можно посмотреть? Через accounts/login могу настроить, а через главную страницу index никак не могу. Опыта маловато, что-то не понимаю
@@ГузельЗаитова-й1ы Вот залил на гитхаб - github.com/djangouroki/form_login_in_home но если хочется чтобы помогли побыстрее, то лучше спрашивать в группе телеграмма t.me/pydjango
@@wstanley Работает с функциями и классами, но слова, которые в кавычках отказывается воспринимать как отдельный модуль, наверное думает, что это обычная строка. Но все равно очень благодарен.
Добрый день! Спасибо за видео! У Вас в видео возникала ошибка "...object has no attribute '_meta'" после регистрации, которую Вы решили добавлением "1" к имени поля пароля. В моем случае добавление единицы не помогает. Как думаете, в чем может быть проблема?
Добрый день! Если это на 22:45 то надо именно password1 так как именно под таким именем приходит пароль с формы. А что решили это очень хорошо, надеюсь решение нужное )))
@@wstanley я уже перерешала=))) посмотрела Ваше видео, где решается эта проблема. Теперь всё совсем ок! На самом деле большое спасибо! Хорошие видео. Мало достойного современного контента на эту тему.
можно вопрос, на 1:44 ты прописал [BASE_DIR / 'templates'], а я в учебнике смотрел, что надо писать [os.path.join(BASE_DIR, 'templates')] можно узнать в чем отличие
я тоже побуксовал на этом, показалось что папка templates внутри project, но оказалось надо на одном уровне. для новичка шаг вправо шаг влево - все, расстрел, час дебаггинга )))
Спасибо за видео, у меня проблема такова что когда выполняю миграцию у меня выходит ошибка Warning (staticfiles.W004), и указывает что нету папки static. Может быть проблема в том что я делал миграцию для другого приложения в этом же проекте, но users же тоже другое приложение, буду благодарен за помощь
Нашел для себя решение, просто в урлах копирую нужную вьюшку, вставляю в свои урлы, а прокижываю туда путь к своему шблону, но почему то имя должно быть другим, ни как по дефолту, тогда все норм
Здравствуйте, столкнулся с проблемой переопределения html файла сброса пароля, всё написано точь-в-точь, как у вас, но помимо приложения users, так же имеется ещё два. Возможно это повлияло, но всё же проблема остаётся для меня загадкой, поделитесь, пожалуйста, мыслями по этому поводу, если такие имеются. Спасибо вам за видео!)
@@wstanley да в общем то разобрался вроде, пришлось добавить path в urls.py path('password-reset/', auth_views.PasswordResetView.as_view(template_name='registration/override_password_reset_form.html'), name='password_reset'), С кастомным url и кастомным названием тимплейта, помогает для всех страниц: password_reset, password_reset_done, password_reset_confirm, password_reset_complete. Единственное не особо понятно почему для login не потребовалось производить данные операции. И да спасибо за видео, очень хорошо получается объяснять показывая от начала и до конца все действия.
@@FriskesTV потому что view Login реализован в джанге и мы просто подключили урл и положили шаблон там где он его и ищет и все заработало. Ваш комментарий попал почему то на проверку, только сегодня его увидел
по какой-то причине у меня не хотела мигрироваться модель с юзером в уже существующую бд, пришлось всю бд сносить и мигрировать с уже созданной моделью. кто будет повторять в уже существующем проекте учтите это.
все правильно, бд при миграции привязывается к таблице юзера, соответственно если таблицу юзера поменять то миграции не пройдут, поэтому у джанги есть совет всегда переопределять таблицу юзера, чтобы в дальнейшем не попасть в такую ситуацию. Мне казалось я говорил об этом в каком-то уроке
не надо бутстрап. не все хорошо знают как он работает и не все помнят названия стилей и их параметры это только запутает новичков. вообще ничего лишнего не надо, а то некоторые начинают уроки с установки виртуальной машины и настройки путти для тех кто на виндоус
блин я незнаю почему, но на 11:57 возникает ошибка метод не работает path('register/', Register.view(), name='register'), ^^^^^^^^ NameError: name 'Register' is not defined хотя в views все прописал
Доброе утро! Нет такого урла в джанго, по крайней мере я не вижу или покажите где вы его нашли? github.com/django/django/blob/main/django/contrib/auth/urls.py тот список что вы показываете уже видимо расширен урлом регистрации users/ register/ [name='register'] выводится он на странице 404
Надо курсор установить на название и нажать, должно выпасть меню, в этом меню есть все пункты того что можно сделать с выбранным(куда установлен курсор) элементом. Ссылки: www.jetbrains.com/idea/guide/tips/alt-enter/ ruclips.net/video/caUTeTSzG5M/видео.html
Доброго дня! Думаю пайчарм не видит у вас виртуальное окружение, его надо насстроить Settings -> Project -> python interpreter. Добавить и указать где брать библиотеки. Я дополнительного ничего не настраивал в пайчарме
django.contrib.auth.urls, не видно urls по ссылке users, к сожалению :( перейти в папку через ctrl тоже не получается. можешь код можно как-то иначе записать?
Доброго дня! Может ошибку допустил синтаксическую? Должен видеть. Виртуальное окружение в ИДЕ подключил если, он должен сам путь подставить. Спроси в группе в телеге t.me/pydjango там помогут быстрее
Привет,я новичок в выб разработке,и меня давно мучает такой вопрос,допустим я хочу создать такой сайт как яндекс кью И когда ты заходишь на сайт,у них показывают разные темы,и там внизу стоит кнопка ответить,и когда ты нажимаешь на кнопку и там открывается форма ответа,когда ты комментируешь это сайт понимает и сохраняет это к тому обновлении которому ты ответил Форму авторизации понять то можно,там если максимум два и три поля, и это отслеживать очень легко Например input login и пароль Но я не понимаю как в крупных сайтах отслеживают огромные действия Или они все действие проверяют с if и else Например,если понять какой именно запрос был отправлен из форумы,я пока новичок и делаю так если ровно delete значит надо удалить,а если create надо создать
В Django 5-ой версии была убрана возможность логаута через GET-запрос. Из-за чего представленная в видео реализация стала выдавать ошибку 405 "method not allowed (GET)". Обойти её можно заменив строку
Logout
К примеру на
{% csrf_token %}
Log out
Ок, поправим в следующих видео, спасибо
Лучший, я столько часов с этим провозился...
Боже, дай Бог тебе здоровья, я потратил 3 часа на решение проблемы...
thanks bro
Спасибо за ролик. Крутой материал по современному Джанго. Потому что устаревшей инфы полно, а новой мало на рутубе
Спасибо за отзыв! Значит буду ещё ролики записывать)))
огромное спасибо. Без Вас я бы никогда не разобрался с регистрацией/авторизацией в джанге. Мегареспект
Пожалуйста! :)
Большое спасибо за видео. Очень информативный и современный разбор, отдельное спасибо за ссылки на документацию 😊
Спасибо за отзыв!
@@wstanley Как вы решили ошибку Manager isn't available; 'auth.User' has been swapped for 'users.User'? На 18:53
вы мой спаситель😭 очень приятно и грамотно объяснили, из той кучи, которую я пересмотрела, ваш ролик действительно информативный и хорошо снят, спасибо огромное!!!
Ты просто невероятен. Спасибо за подробный и качественный материал ! 10 авторизаций из 10 !
Спасибо! Скоро продолжу видео писать!
Спасибо за видео! Все наглядно и понятно, теперь понимаю, куда дальше лезть и в чем разбираться!
Вам спасибо за отзыв!
Спасибо за видео. Довольно интересно, но советую когда пишешь код и/или что-то делаешь, не делай так быстро. Начинающему будет довольно сложно успеть за тобой. Ну и не ленись хоть немножко объяснять свои шаги, не только что ты делаешь, но и для чего это.
Спасибо за фидбек, вроде стараюсь все детально рассказать, опыта в преподавании информации видимо не хватает. Обращу на этот момент внимание.
@@wstanley В целом всё хорошо, но обязательно по работай над скоростью, иногда, очень часто, ты делаешь вс1ё очень быстро, тебе как знающему человеку может показаться что всё ок, а вот новичок, забьёт на просмотр уже после первых двух минут
нажмите шестеренку на видео справа внизу и выставьте скорость воспроизведения поменьше. некоторых авторов надо замедлять, но большинство я без проблем слушаю на скорости 1.5
Спасибо большое! Надеюсь, будут еще выпуски...
Будут обязательно, но позже. Сейчас совсем времени не хватает.(((
Невероятно качественный контент, благодарю
Спасибо за отзыв
Очень хорошие видео! Спасибо за вашу работу!
Спасибо за отзыв! :)
Впервые пишу отзывы. Спасибо за видео!!!
Очень приятно! Рад что видео нравятся :)
В представлении регистрации метод post можно сократить на самом деле. Метод save() и так возвращает нам юзера (как я понял):
def post(self, request):
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect('index')
Да, form.save() возвращает пользователя, но перед тем как логинить пользователя в системе надо запустить функцию authenticate() она не просто проверяет пароль и логин и возвращает пользователя, она пытается пройти аутентификацию во всех своих механизмах аутентификации нашего приложения. По умолчанию оно одно - [django.contrib.auth.backends.ModelBackend] но этот механизм можно расширять и написать еще несколько механизмов при необходимости, для защиты от атак например. А функция authenticate() на вход принимает сырой пароль, не хешированый поэтому мы получаем его с формы password = form.cleaned_data.get('password1'). Ну в принципе, если расширять систему не планируется, то при регистрации можно этот пункт пропустить, но не стоит. :) Ссылка почитать - docs.djangoproject.com/en/4.0/topics/auth/customizing/#specifying-authentication-backends
Спасибо, немного все запутано, но думаю с практикой все уложется)
Всегда пожалуйста! А что конкретно запутано? На что обратить внимание мне, чтобы понятнее в дальнейшем стало?
@@wstanley Ну, я вот только что снова все пересмотрел, и все абсолютно понятно. Не помню что мне тогда показалось запутанным, наверное просто запутался в тех auth формах.
Здравствуйте, спасибо большое за видео. Очень информативно и полезно, но возник вопрос. Можно ли прописывать стили для встроенных форм?
добрый вечер! видео очень полезное!
Добрый! Рад что видео приносит пользу, скоро вернусь к записи уроков
спасибо за видео очень полезно
Спасибо за отзыв! Скоро вернусь к записи видео, будет еще много полезного :)
А что надо сделать с pycharm ом , что бы по функциям и модулям так легко переключаться? Чтоб они как ссылки подсвечивались.
Ничего, просто зажимаешь ctrl и наводишь мышку, кликом перейдет к функции. Но если функция в подключенной библиотеке то надо указать ему интерпритатор и все
Спасибо за урок. Было полезно. Единственное не могу понять, почему у меня не меняется template для password_reset
template_name надо указать у класса, если я правильно понял и шаблон должен лежать по этому путь, ну и путь существовать)))
Добрый день, спасибо за то, что достаточно подробно показали процесс написания ВСЕГО кода, позволяет лучше понять что и как делать)
Но у меня стало выдавать ошибку на странице сайта: Using the URLconf defined in project.urls, Django tried these URL patterns, in this order:
admin/
[name='home']
users/
The current path, accounts/, didn’t match any of these.
Можете подсказать, в чем проблема? Я только только начал изучать django, всё перерыл и никак не могу вкурить на что смотреть, чтобы понять в чем проблема и главное как это исправлять. Буду очень благодарен, если поможете)
В самом начале после создания модели, не получается сделать миграцию, выводит целый пак ошибок, при этом в настройках при написании AUTH_USER_MODEL = 'user.User' так же выводит ошибку + подсказки не вылезают при написании. Можешь подсказать в чем дело?
Thanks for the great content. Awesome, dude!
You're welcome!
Как вы решили ошибку Manager isn't available; 'auth.User' has been swapped for 'users.User'? На 18:53
Вроде долее рассказываю, надо чтобы в форме наш пользователь был, т. К. Мы его переопределили
У меня ошибка, 'main.user', but app 'main' (main я так назвал изначально) doesn't provide model 'user'. Что делать?
Добрый день! Из ошибки ничего не понятно, надо весь трейсбек смотреть, загрузите весь трейсбек сюда dpaste.org/ либо обратитесь в группу в телеге t.me/pydjango/805214 там всегда помогут и быстрее
Там при регистрации, можно добавить типо ещё никнейм , год рождения и т.д если да , то в какой строчке кода можно добавить этл
Надо добавить эти поля в модель User после надо добавить их в форму UserCreateForm вроде называется. И в описание админки в файле admin
Спасибо большое, но как-то сложно получается шаблоны в проекте обработка в приложении и user в приложении часть урлов в проекте другая часть в приложении с одной стороны для глаз было бы проще если все лежала в приложении user.
Ну чтобы при добавлении других приложений регистрация была немного другой.
Так же интересно как можно расширит модель пользователя ну допустим дата рождения, телефонный номер, и какое-нибудь свойство связанная через forenkey либо другая связка
И как посетителя без авторизации редиректить на регистрацию допустим для отображения информации нам всегда нужен пользователь,
Всегда пожалуйста! Часть урлов в проекте, а часть в приложении, возможно тебе пока сложно воспринимается т.к. не привык еще. Т.е. в джанге написана уже логика регистрации и если что-то надо изменить то не стоит переписывать всю ее, а можно только часть переопределить и работать с этим. У меня в голове это уложено и нормально воспринимается. Более того если ты в будущем будешь использовать библиотеки для авторизации там тоже все скрыто и при кастомизации так же переопределяют частично. Про расширение юзера немного затронуто в роликах "один к одному" и "многие ко многим". Думаю запишу ролики про кастомизацию пользователя следующими. Для редиректа на регистрацию не авторизованного пользователя используй декоратор login_required например, вот ссылка - docs.djangoproject.com/en/4.0/topics/auth/default/#the-login-required-decorator
Здравствуй, дорогой автор! Подскажи пожалуйста, а зачем в видео переопределяется модель User? Никак не могу понять
Это в документации по джанге прописано, что всегда необходимо переопределять пользователя, чтобы в будущем если понадобится его доработать не больно было. Правило хорошего тона, такое
@@wstanley спасибо за ответ! Теперь понятно)
Ответьте буду благодарен за ответ, а как вы возвращаете страничку home.html, если вы не пишете во views функцию для её возврата? Мне вот этот момент вообще не понятен. У вас вот такой путь
path(' ', TemplateView.as_view(template_name='home.html'), name='home'). Разве не нужно вот так путь
path(' ', views.home, name='home')? В чём разница не могу понять
Доброе утро! В данном случае нам представление нужно только для того чтобы отдать шаблон, для этого в джанге написан TemplateView он тоже наследуется от базового View github.com/django/django/blob/main/django/views/generic/base.py#L220
Просто его удобно можно использовать прям в урле
Если например требуется еще и контекст какойто передавать, то необходимо будет прописывать в view его и расширять
ссылка в доке - docs.djangoproject.com/en/4.1/ref/class-based-views/base/#templateview
@@wstanley тобиж не нужно писать ничего во views? А то я пересмотрел несколько раз и не видел, чтобы вы писали во views просто через урлы можно передать шаблон?
я же импортирую с самой джанги TemplateView там и написано все github.com/django/django/blob/main/django/views/generic/base.py#L220
Это типо заготовка стандартная для простого рендера шаблона, в джанге много заготовок для быстрой разработки есть
@@wstanley спасибо вам❤️
Спасибо за видео!
В форме логинации - вывод ошибок - разве он не реализован по умолчанию?
ты делаешь вывод ошибок сам. но если этого не делать - все работает также.
Или я что-то не понимаю? Или дело в версии джанги?
Имеешь ввиду в шаблоне? Шаблон же полностью создаем сами.
Либо дай ссылку на код где вывод ошибок? github.com/djangouroki/authenticate_basic
насколько я разобрался в контекстной переменной {{ form }} уже содержатся все сообщения об ошибках. отдельно их обрабатываем конечно, если формируем поля формы вручную {{ form.username }} ...
Содержит, мы их с формы и показываем ```{{ form.errors.error }}``` в шаблоне
@@wstanley можно не доставать самим из формы. контекст при выводе {{form}} отрабатывает - сам все показывает.
Блин, точно, косяк))) А кстати мой вызов их и не отображает, спасибо за замечание, какие-то моменты упускаю из виду. По формам собирался плейлист сделать пока руки не дошли
Покажи как сделать личный кабинет с каким-то дополнительным функционалом который не доступен для неавторизированных пользователей (например добавление товаров в корзину или в избранное) буду очень признателен
Именно в админке джанго?
@@wstanley чтобы админ мог добавлять товары разных категорий в каталог, удалять, менять цену через админ панель. А пользователь на главной странице мог эти товары добавлять в избранные и/или в корзину и в своем личном кабинете видеть список этих товаров
В админке такое не делают обычно. Для таких целей кабинет создают, но можно попробовать показать как вдминка кастомизуется, но вот только со временем у меня сейчас напряг большой. Может к концу лета вернусь к записи роликов
Здравствуйте, переадресация после логина происходила на user/login/, потому попробовал вместо LOGIN_REDIRECT_URL = '' написать LOGIN_REDIRECT_URL = 'blog:home', не пойму чего так, из-за того , что несколько приложений? Спасибо за видео
В логин_редирект_урл надо писать просто сам урл, захардкодить
Вот тут почитайте, можно именованый урл но через реверс походу. docs.djangoproject.com/en/4.0/ref/settings/#logout-redirect-url
Извините опять я вас беспокою, у меня высвечивает ошибка перехода на домашнюю страницу Template does'not exists, но делаю абсолютно всё, как вы в чём может быть проблема?
Доброе Утро! Ошибка у вас явная "Шаблон не найден" следовательно либо шаблона(templates/name_template.html) нету по указанному пути, либо указали не правильно путь либо имя к шаблону, это частая но довольно простая ошибка, стоит лишь внимательно посмотреть
Не получается перейти к файлу contrib.auth.urls 6:13 комбинацией (alt + левая кнопка мыши). Выяснил, что не могу так сделать, если путь указан внутри кавычек (то есть зеленым цветом написан), в остальных случаях переход работает. Есть ли какой-нибудь альтернативный способ перейти к файлу ? Сама проблема возможно в версии PyCharm
Добрый день, возможно пайчарм настроить надо, в сеттингах есть настройки django по поиску найдите и укажите там путь к настройкам и manage.py, еще стоит указать виртуальное окружение в настройках. Больше я в проекте ничего не настраиваю. Кстати может это зависит от версии пайчарма, посмотрите какая у вас версия
для создания пользователя есть так же базовый класс CreateView , и сейчас в
CreateView это просто представление, отображающее форму для создания объекта, который наследуется от базового View и других классов. Для лучшего понимания в ролике использовал именно наследование от базового View. На основе базового View можно любое представление собрать. Если в form не написать actions то запрос уйдет по пути на котором находится страница, если же надо данные отправить на конкретный урл то actions необходимо прописать
про actions - webref.ru/html/form/action
про CreateView - docs.djangoproject.com/en/4.1/ref/class-based-views/generic-editing/#createview
@@wstanley ответ достойнейший я потерял дар речи, можно поинтересоваться у вас сколько заняло у вас изучение Джанго, как учились ну книги там, документации и тдтп?
@@nomadicus77 Я когда в питон пришел у меня уже было понимание как работают веб фреймворки, поэтому основные принципы я понимал, view, model тд Смотрел в основном открытые уроки в сети, на англ в том числе с субтитрами и без. Книг по джанго не читал, самое большое понимание работы данго дала документация, я ее просто постронично за обедом каждый день читал и применял на практике, документация очень хорошая. И самое гдавное это не бояться залазить в сам код джанги и разбираться как там все устроено, для этого стоит ООП изучить, опять же на ютюбе много видео по ООП питона
@@wstanley спасибо ❤️
приветствую. спасибо за видео. для чего нужно использовать csrf_token в шаблонах?
Доброго времени суток, csrf токен защищает от подделок межсайтового запроса. Если удалить мидлевар CsrfViewMiddleware в settings то его можно не добавлять при запросах. Но лучше не удалять. docs.djangoproject.com/en/4.0/ref/csrf/#module-django.middleware.csrf
после добавления формы на страницу логин появляется эта ошибка:Reverse for 'login' not found. 'login' is not a valid view function or pattern name. помогите пожалуйста
Нету урла login надо его добавить, либо его джанго не видит
@@wstanley а где его добавить?
4:51 прописываю урлы ruclips.net/video/ke0f3bKl03w/видео.html&lc=UgxQUoMtWwDFxI7jRvZ4AaABAg
@@wstanley когда я прописываю урлы возникает эта ошибка: maximum recursion depth exceeded while calling a python object django
поздравляю ты создал бесконечную рекурсию и достиг ее предела))) Видимо ты импортируешь модули рекурсивно(но это не точно). Смотреть код надо. Если тебе оперативная помощь нужна то обратись в эту группу телеги t.me/pydjango тут всегда помогут
Подскажите пожалуйста, как добавить форму авторизации на главной странице, то есть не через ссылку, а при входе на сайт (главная страница) выходила форма авторизации
Доброго дня, Вам просто надо в представлении(view) которое рендерит главную страницу получить форму(form = AuthenticationForm()) авторизации и передать ее в шаблон в контексте context = {'form': form}, а в шаблоне соответственно обработать, как мы сделали это в login.html
@@wstanley А можно мне ссылку, где это можно посмотреть? Через accounts/login могу настроить, а через главную страницу index никак не могу. Опыта маловато, что-то не понимаю
@@ГузельЗаитова-й1ы Вот залил на гитхаб - github.com/djangouroki/form_login_in_home но если хочется чтобы помогли побыстрее, то лучше спрашивать в группе телеграмма t.me/pydjango
@@wstanley Спасибо большое! Вы мне реально помогли! Низкий поклон!
Как сделать переход в модуль, который делает автор на 6:15?
пайчарм должен видеть твое виртуальное окружение, после чего наводишь мышкой с зажатым ctrl левый клик
@@wstanley Работает с функциями и классами, но слова, которые в кавычках отказывается воспринимать как отдельный модуль, наверное думает, что это обычная строка. Но все равно очень благодарен.
Привет, подскажи пожалуйста как плагин называется для пайчарма что ты нажимаешь на переменную и проваливаешься в него для просмотра свойств и тд?
Никаких плагинов не ставил, все стандартное. Проваливаюсь в функции, ctrl+левая кнопка мыши
@@wstanley спасибо!
вот я создал файл password_reset_form и там написал фому csrf токены и т.д но все равно он переодит по шаблону джанго а не по моему что делать?
Немного не понял что значит - "он переодит по шаблону джанго а не по моему" ?
@@wstanley у меня та же проблема, все сделано как в видео, password_reset переопределяет на джанговскую форму а не на html который мы создали.
после изменения на password1 все равно кидает ошибку: 'AnonymousUser' object has no attribute '_meta'
не подскажешь что делать?
нашел ошибку, пропустил 1 букву в username))
отлично! :):):)
Спасибо
а как изменить страницу /users/reset/MQ/set-password/
Доброго дня! Так же как и любую, создать урл, добавить view и определить шаблон
Добрый день! Спасибо за видео!
У Вас в видео возникала ошибка "...object has no attribute '_meta'" после регистрации, которую Вы решили добавлением "1" к имени поля пароля. В моем случае добавление единицы не помогает. Как думаете, в чем может быть проблема?
Я решила проблему перенаправлением на страницу авторизации, логин в функции убрала =)
Добрый день! Если это на 22:45 то надо именно password1 так как именно под таким именем приходит пароль с формы. А что решили это очень хорошо, надеюсь решение нужное )))
@@wstanley я уже перерешала=))) посмотрела Ваше видео, где решается эта проблема. Теперь всё совсем ок! На самом деле большое спасибо! Хорошие видео. Мало достойного современного контента на эту тему.
Спасибо за приятный слова, рад что видео приносит пользу! Значит буду еще записывать, только позже)))
можно вопрос, на 1:44 ты прописал [BASE_DIR / 'templates'], а я в учебнике смотрел, что надо писать [os.path.join(BASE_DIR, 'templates')] можно узнать в чем отличие
С версии джанги 3.1 на сколько я помню в сеттингах используется pathlib для работы с путями и os там нету уже, посмотрите доку
я тоже побуксовал на этом, показалось что папка templates внутри project, но оказалось надо на одном уровне. для новичка шаг вправо шаг влево - все, расстрел, час дебаггинга )))
Сходу подписка и лукас
Почему не выводит {{User}} в шаблоне?
Привет! С маленькой буквы должно выводить
Спасибо за видео, у меня проблема такова что когда выполняю миграцию у меня выходит ошибка Warning (staticfiles.W004), и указывает что нету папки static. Может быть проблема в том что я делал миграцию для другого приложения в этом же проекте, но users же тоже другое приложение, буду благодарен за помощь
Непонятно, нужно больше конкретики. Напиши в группу в телеграмме, там сразу помогут. Ссылка в описании канала есть
@@wstanley спасибо, я уже решил, почему то оно конфликтовало с уже созданной таблицей, не знаю можно ли два раза миграцию провести в одном проекте
А в чем может быть проблема, я создал так же шаблон к примеру password_reset_form, но его дажнго не подхватывает, использует дефолтный
Нашел для себя решение, просто в урлах копирую нужную вьюшку, вставляю в свои урлы, а прокижываю туда путь к своему шблону, но почему то имя должно быть другим, ни как по дефолту, тогда все норм
Звучит разумно :)
@@MrSunTrope а можно по подробнее. Что-то не могу разобраться.
@@viktorbenda489 там есть способ проще, просто поставь свое приложение users к примеру на первом месте в installed apps
@@MrSunTrope оПааа! круто, спасибо.
👍👍👍👍
Thank you bro!
Здравствуйте, столкнулся с проблемой переопределения html файла сброса пароля, всё написано точь-в-точь, как у вас, но помимо приложения users, так же имеется ещё два. Возможно это повлияло, но всё же проблема остаётся для меня загадкой, поделитесь, пожалуйста, мыслями по этому поводу, если такие имеются. Спасибо вам за видео!)
Доброго дня! Проверьте именоварие файлов, есть ли одинаковые имена. Либо правильно ли введено имя шаблона. Больше догадок нет, надо код смотреть :)
такая же проблема, не переопределяется password_reset_form.html, всё равно бросает на админку
Покажите код, залейте на гитхаб, посмотрю. Должно все работать. Что-то где-то упустили просто
@@wstanley да в общем то разобрался вроде, пришлось добавить path в urls.py
path('password-reset/', auth_views.PasswordResetView.as_view(template_name='registration/override_password_reset_form.html'), name='password_reset'),
С кастомным url и кастомным названием тимплейта, помогает для всех страниц: password_reset, password_reset_done, password_reset_confirm, password_reset_complete. Единственное не особо понятно почему для login не потребовалось производить данные операции.
И да спасибо за видео, очень хорошо получается объяснять показывая от начала и до конца все действия.
@@FriskesTV потому что view Login реализован в джанге и мы просто подключили урл и положили шаблон там где он его и ищет и все заработало. Ваш комментарий попал почему то на проверку, только сегодня его увидел
по какой-то причине у меня не хотела мигрироваться модель с юзером в уже существующую бд, пришлось всю бд сносить и мигрировать с уже созданной моделью. кто будет повторять в уже существующем проекте учтите это.
та же самая проблема была, спасибо огромное, что ты поделился как это исправить
все правильно, бд при миграции привязывается к таблице юзера, соответственно если таблицу юзера поменять то миграции не пройдут, поэтому у джанги есть совет всегда переопределять таблицу юзера, чтобы в дальнейшем не попасть в такую ситуацию. Мне казалось я говорил об этом в каком-то уроке
спасибо, весь день голову ломал
Если бы еще бутстрап бахнул вообще было не 10/10 , а 11/10)
Спасибо за отзыв! :)
не надо бутстрап. не все хорошо знают как он работает и не все помнят названия стилей и их параметры это только запутает новичков. вообще ничего лишнего не надо, а то некоторые начинают уроки с установки виртуальной машины и настройки путти для тех кто на виндоус
Почему то не работает регистрация
Должно все работать, смотрите что-то упустили
спасибо
Миллион лайков! Помог исправить: Manager isn't available; 'auth.User' has been swapped for 'users.User'.
Бесконечно благодарен!
блин я незнаю почему, но на 11:57 возникает ошибка метод не работает
path('register/', Register.view(), name='register'),
^^^^^^^^
NameError: name 'Register' is not defined
хотя в views все прописал
Ты класс из вьюшек не импортировал скорее всего
@@MrSunTrope да не, я в этой же папке в views создал class Registet
Вероятнее всего что-то с импортом, раз класс не видит он
ошибка при миграции выходит почему
Доброго дня! какая ошибка?
@@wstanley скажи пожалуйста ТГ я тебе скину ошибку просто незнаю как тут сказать
Пиши вопросы по джанге в эту группу t.me/pydjango там всегда помогут, я тоже там есть и помогаю когда есть время. Не всегда я у ПК
@@wstanley хорошо спасибо большое
Как ты так быстро пишешь {%%}?
Пишу { потом % остальное пайчарм сам добавляет)))
Я начинающий, 12:04 зачем нам создавать url для регистрации, если он есть в стандартоном списке (последняя строка)?
admin/
[name='home']
users/ login/ [name='login']
users/ logout/ [name='logout']
users/ password_change/ [name='password_change']
users/ password_change/done/ [name='password_change_done']
users/ password_reset/ [name='password_reset']
users/ password_reset/done/ [name='password_reset_done']
users/ reset/// [name='password_reset_confirm']
users/ reset/done/ [name='password_reset_complete']
users/ register/ [name='register']
Доброе утро! Нет такого урла в джанго, по крайней мере я не вижу или покажите где вы его нашли? github.com/django/django/blob/main/django/contrib/auth/urls.py тот список что вы показываете уже видимо расширен урлом регистрации users/ register/ [name='register'] выводится он на странице 404
@@wstanley Т.е. ещё не реализовано, но на страницу 404 они добавили как пример. Спасибо.
Нет, если он выводится значит уже реализован, но в пустой джанге его нет. Значит вы его добавили :)
Очень медленно я бы ускорил процесс выполнения
Что именно медленно?
0:59 что нажали то бы импортировать библеотеку
Alt + enter и выбор импортировать в меню
@@wstanley ноу меня ничего не входит когда нажимаю на Alt+ Enter
Надо курсор установить на название и нажать, должно выпасть меню, в этом меню есть все пункты того что можно сделать с выбранным(куда установлен курсор) элементом.
Ссылки:
www.jetbrains.com/idea/guide/tips/alt-enter/
ruclips.net/video/caUTeTSzG5M/видео.html
)
'django.contrib.auth.urls' как выполнить переход в этот файл? если зажать ктрл не выделяет слово для перехода. pycharm professional
Вы решили эту проблему. В чем причина?
Доброго дня! Думаю пайчарм не видит у вас виртуальное окружение, его надо насстроить Settings -> Project -> python interpreter. Добавить и указать где брать библиотеки. Я дополнительного ничего не настраивал в пайчарме
удалось найти решение?
django.contrib.auth.urls, не видно urls по ссылке users, к сожалению :(
перейти в папку через ctrl тоже не получается. можешь код можно как-то иначе записать?
В IDE интерпретатор укажи и по ctrl будет переходить, не понял про записать код((
Блин у меня почему то не видит django.contrib.auth.urls, нифига в браузере не показывает урлы
Доброго дня! Может ошибку допустил синтаксическую? Должен видеть. Виртуальное окружение в ИДЕ подключил если, он должен сам путь подставить. Спроси в группе в телеге t.me/pydjango там помогут быстрее
возможно вы не дописали - from django.urls import path, include
какие ошибки показывает?
Привет,я новичок в выб разработке,и меня давно мучает такой вопрос,допустим я хочу создать такой сайт как яндекс кью
И когда ты заходишь на сайт,у них показывают разные темы,и там внизу стоит кнопка ответить,и когда ты нажимаешь на кнопку и там открывается форма ответа,когда ты комментируешь это сайт понимает и сохраняет это к тому обновлении которому ты ответил
Форму авторизации понять то можно,там если максимум два и три поля, и это отслеживать очень легко
Например input login и пароль
Но я не понимаю как в крупных сайтах отслеживают огромные действия
Или они все действие проверяют с if и else
Например,если понять какой именно запрос был отправлен из форумы,я пока новичок и делаю так если ровно delete значит надо удалить,а если create надо создать
Привет, передают номер поста в скрытом поле например, или ид поста в урл запроса передают. По разному делают. Когда опыта станет больше поймешь
@@wstanley Спасибо
Вообще ничего не ясно- галопом по европам. Сам что то пишет быстро и говорит что он печатает.
Если ты в курсе работы джанги, то всё понятно. Другое дело, что тому, кто в курсе, это не очень интересно.
Короче говоря - видео не для новичка
спасибо за видео очень полезно
Спасибо за отзыв!
создал так же шаблон к примеру password_reset_form, но его дажнго не подхватывает, использует дефолтный, в чем может быть проблема?
Прописать в классе View template_name="путь к шаблону", либо в сетингах подключить шаблоны
Убедитесь в том что кастомный html файл точно лежит в папке templates/registration