#20. Делаем авторизацию пользователей на сайте | Django уроки
ฝัง
- เผยแพร่เมื่อ 8 ก.พ. 2025
- Практический курс по Django: stepik.org/a/1...
Django урок 20. Узнаете как реализовать авторизацию пользователей на сайте, как проверить, является ли пользователь уже авторизованным (свойство is_authenticated). Класс представления LoginView и форма AuthenticationForm. Метод get_success_url() и параметр LOGIN_REDIRECT_URL. Функции login() и logout(). Метод form_valid().
Телеграм-канал: t.me/django_se...
Инфо-сайт: proproprogs.ru...
lesson-20-coolsite.zip: github.com/sel...
Об авторизации: djbook.ru/rel3...
Русскоязычная документация по Django 3: djbook.ru/rel3.0/
Официальный сайт по Django: www.djangoproj...
Мужик, пишу на эмоциях. Ты просто лучший! Я две недели делаю проект, а проблем куча, особенно с регистрацией и этими формами. Сам я новичок в джанго, да и в целом в пайтоне, но тебе просто респект, всё дословно разжевал, это очень круто. А ещё больший респект за то что ссылку на гитхаб со своим проектом оставил, и ещё и по уроках разбил. Это достойно уважения! Удачи тебе)
Спасибо! Смотрите другой плейлист на этом канале по Django 4, там куда больше информации. Успехов!
Тот случай, когда изучение материала приносит удовольствие! Спасибо!
С 2013 года начинал изучать Python + Django, на долго меня не хватало, ленился очень часто, но вот смотрю уроки от этого автора и снова хочется начать изучать. Лайк за видео.
как продвинулись?
многие новички не понимают что сначала надо найти ту книгу или автора которого лично ты легче воспринимаешь. а не долбиться в бездарно составленный материал. поэтому например в советское время учебники английского в школе вызывали отвращение этим заниматься из-за того что там сразу давали учить неправильные глаголы. И ты думал: если такая хуйня в начале то что будет дальше и бросал. лично мне ещё мешала легкая боль в спине: начал учиться на диване поставив на колени доску с ноутом -процесс прям попёр. в общем, ищите удобную позу. а, и ещё, я в наушниках автора лучше воспринимаю-шумы посторонние не отвлекают.
Дружище, что я хочу сказать. Дай Бог тебе здоровья, очень ты полезные вещи делаешь в жизни
Ох кто бы знал сколько различных уроков я просмотрел по программированию за 5 лет, уже мидл php разработчиком(на битриксе) стал, но впервые встречаю такие классные уроки! Спасибо Сергей, решил на этом курсе немного знания расширить. Это действительно лучшая подача информации!
Спасибо, Сергей! Все отлично, как обычно у Вас.
Спасибо за урок!! Комментарии под Вашими видео тоже полезно почитать, всякие нюансы для себя подмечаешь тоже)
Огромное спасибо автору за время которое тратит на создание такого замечательного контента!
Единственный канал на ютубе который делает именно гайд, а не непонятно что
Супер урок. То что нужно. Все детали интересовавшие упомянуты, как будто по моему запросу снималось :)
Отличное видео! Всё ясно и с первого раза, и так на протяжении всего курса.
Огромное спасибо за этот и предыдущий уроки! Полдня ковырялся сегодня с регистрацией / авторизацией пользователей, только у вас нашел нормальные объяснения и рабочие (!!!) примеры.
Отличные уроки, очень часто смотрю, пересматриваю, параллельно учусь в Skillbox. Спасибо большое!
Скилбокс говно. Кстати, как успехи
Большое спасибо за этот замечательный и подробный учебный туториал!!
Вы лучший. У меня есть просьба. Делайте уроки о kivy🙏🙏🙏
Однозначно лайк, большое спасибо за внятное разъяснение!
Супер, спасибо за ваши уроки!
Спасибо за труд, преподавание на высшем уровне
Спаси за урок, Сергей!
спасибо большое за видео очень классно я щас делаю проект и это видео мне очень помогает
Спасибо Вам за урок!
бесконечная благодарность
По данным урокам дописываю диплом, спасибо *большое*!👍
В данном курсе очень не хватает урока о редактировании данных пользователя. Допустим есть кабинет и там сменить пароль или логин и т.д.
+ тоже диплом по этому курсу пишу))
@@sashacakc3503 ебать у вас дипломы)
Всё бы хорошо, но всё-таки Авторизация и Аутентификация - разные вещи.
Тут делается аутентификация - вход пользователей. А вот авторизация - нет. Немножко авторизации было, когда в одном из предыдущих видео было сокрытие пункта меню для неаутентифицированных пользователей.
Офигеть! Впервые дохожу так далеко.
Наверно это чарующий голос или магия какая.
Аааа молодой человек а лицензия на колдуньство иииимеется?
Или вы так проездом? 😀
Можно еще не переопределять метод form_valid, в нем и так обьект создается, а переопределить get_success_url. Модель юзера в self.object находится. Но это все мелочи, просто хвастаюсь, что разобрался в этом непростой тем))
может кому не понятно будет, вот так записывается
def get_success_url(self):
# | user4
print(self.request, '|', self.object)
login(self.request, user=self.object)
return reverse_lazy('home')
Спасибо!
Я сделал рендеринг главного меню через inclusion_tag, если вы сделали так же, то вам не передается контекст с request.user.username
Вам нужно:
1) передать в inclusion_tag флаг takes_context=True
2) в функции, которую пишете внутри декоратора, первым аргументом передать контекст
3) присвоить context['menu']: menu
4) вернуть контекст
Вот как следует написать:
@register.inclusion_tag('women/show_menu.html', takes_context=True)
def show_menu(context):
"""вот такое для проверки, аутентикейтед юзер или нет"""
m = MENU.copy()
print(context['request'].user)
if not context['request'].user.is_authenticated:
m.pop(1)
print('НЕ АВТОРИЗОВАН')
else:
print('АВТОРИЗОВАН')
context['menu'] = m
return context
Здесь принты - просто для проверки что у вас за юзер.
В шаблоне (пользовательский кусок) можно к этим параметрам обращаться так:
if user.is_authenticated
@@pavels4490 Извиняюсь за вопрос, но зачем такие "городульки"? Достаточно в контекст передать объект request и user, которые можно прокинуть через базовый шаблон {% show_show_menu request user %}
Спасибо, я бы сам не разобрался с этим)
Блин, я уже всю голову сломал, почему у меня не работает, а на видео работает! Спасибо вам!
@@pavels4490 чел, спасибо, я бы сам не догадался, и оставалось бы гуглить вечность, хотя откуда ноги растут я уже понял, но как сделать не понял)
Я так ждал что ты тут расскажешь о том как сделать смену пароля
Так впадлу самому форму писать 😹😹😹
Думал сделаю ctrl C ctrl V и готово 😹
Спасибо за уроки, просто вышка!!! Но вот я не могу понять, а чем отличаются reverse и redirect
redirect делает перенаправление по сформированному маршруту, а reverse только формирует маршрут (без перенаправления)
@@selfedu_rus А чем тогда отличаются redirect от reverse_lazy, и когда какой использовать?
@@selfedu_rus подозреваю, имелось ввиду когда что использовать. Для меня это тоже пока не ясно, так понял reverse нужно в классах, а redirect в функциях, верно?
Спасибо.
Спасибо за урок! Подача информации на высоте, но мне кажется, что это очень простой вариант регистрации/авторизации и не очень подходит для реального сайта. Нужна хоть минимальная защита. Было не плохо сделать подтверждение е-мэил или хотя бы капчу (а лучше все вместе). Кроме того сейчас большая проблема (лично у меня) придумать Логин. Все нормальные уже заняты, приходится писать БуквыЦифры. Кажется вполне логичным, когда для аутентификации используется е-мэил и пароль.
есть сайты-генераторы логинов
Спасибо за уроки! При создании собственного проекта возник вопрос: необходимо, чтобы после авторизации пользователя происходило перенаправление на home/. Как это можно реализовать?
не работает почему то атрибут label, поля имеют название по умолчание и не изменяються: Username, Password, в html файле указывал {{ f.label }} и так же {{ f.label_tag }}, не работает
Еще шаманил в forms.py самом классе авторизации пробовал и так как на видео и с классом Meta в котором указыва fields labels, ничего не меняет
хз столкнулся ли с этим кто то еще но надеюсь кому то поможет
если у вас при логауте возникает ошибка maximum recursion depth exceeded while calling a python object нужно при импорте logout переопределить её имя с помощью as
как минимум это то решение которое я нашел
Почему я открыл ссылку из описания на рускоязычную документацию джанго, а там Мелстрой...
А как же Separation of Concerns? В Django хорошей практикой является разделение функциональности на отдельные приложения в соответствии с их ответственностью и предназначением. Почему бы не вынести авторизацию в отдельное приложение?
Все верно, см. новый плейлист по Django, там именно так.
Всем привет, а тема с созданием поста от авторизованного пользователя, я так понимаю была не раскрыта, может кто подскажет, как это сделать?
А не дублирует ли код метод get_context_data?
я не верю что столько мало лайков у видео.
👍
Кто может объяснить когда, что лучше использовать reverse, reverse_lazy, redirect, вроде бы один и тот же функционал отрабатывают эти методы, но так и не пойму, почему в разных местах кода вызываются разные функции в видео
Функции reverse и reverse_lazy строят маршруты. Причем, вторая функция reverse_lazy строит его не сразу, а только в момент когда маршрут действительно необходим. Функция redirect относится к перенаправлениям на другой URL.
Извините вопрос не совсем по теме если я создал класс для личных кабинетов пользователей в models и во views(DetailView) хочу их выводить с помощью pk к чему мне pk привязать?(Говорят к id-порядковому номеру в БД нельзя)
Для меня оказалось неочевидным, что LoginView передаёт в шаблон объекты request, form, user и, возможно ещё что-то.
request - это то, что последний раз пришло от клиента, там метод передачи, словарь с данными запроса, и ещё куча всего.
form - это наша форма, её можно итерировать по полям
user - это что такое, и как с этим работать?
В описании LoginView вообще ни слова о том, что передаётся в шаблон, как так?! Плз объясните, что именно, или дайте ссылку. Описание объекта user, какие у него методы и свойства тоже не нашёл никакого.
P.S.: Документация джанго на мой взгляд плохая, хоть и большая, запутанные вещи описаны ещё более запутанно, в ответе зачастую возникает ещё больше вопросов. Для сравнения: недавно изучал pandas, любой метод описан очень подробно, с кучей отличных примеров на все случаи жизни, и любая статья читается как утренняя газета.
да полностью согласен
Как всегда спасибо за классный урок, но есть маленькая проблемка. При запросе страницы логина, класс-представление начинает ругаться и говорить, мол не может найти шаблон registration/login.html. И это несмотря на то, что я четко прописывал атрибут template_name и указывал путь к другому шаблону. Когда я создал шаблон registration/login.html - все заработало. Подскажите, в чем проблема? Может, что-то нужно указать в settings.py? Или это какие-то приколы Django 4.0? Заранее спасибо.
P.S. И да, вообще на работает метод get_success_url. Тут я вообще без понятия, в чем дело(
Это в телеграм-канал вопрос. Так то должно работать. Видимо, какие то детали.
объясните пожалуйста почему в классе добавления нового поста используется обычная переменная success_url, а при авторизации надо использовать перенаправление функции get_success_url???😭
Я уже детали кода не помню. Лучше спросите в телеграм-канале сообщество.
Разобрался? Тоже сейчас на этом моменте задумался
Потому что класс CreateView наследуется от класса ModelFormMixin у которого есть атрибут success_url. А класс LoginView наследуется от других классов, но у него есть метод get_success_url, который мы и переопределяем.
@@НикитаМинеев-л8о 🙂🔫
У меня почему то не проверяется user.is_authenticated на главной странице, то есть когда я вхожу в свой аккаунт, почему то на других страницах это видно, а на главной нет. То же самое когда выхожу из аккаунта: подскажите, что делать?
у меня вивод словарей в классе представления токо так работает
z = {**context, **c_def}
return z
по другому ошибка
от версий Python зависит
Хороший урок для начинающих, однако есть одно замечание. Автор упорно излагает материал, проводя параллель между авторизацией и аутентификацией. На самом же деле, это далеко не так. Само is_authenticated как бы намекает, что это именно аутентификация, то есть выяснение информационной системой, аутентифицирован = распознан ли пользователь как свой в её пределах. Что же касается авторизации, это процесс наделения уже аутентифицированного пользователя назначенными ему в ИС правами (authorize). Про то, что у разных пользователей (групп) могут быть разные права в пределах ИС, мы, разумеется, помним? Чёткое разделение и применение этих понятий оградит в дальнейшем от многих логических ловушек, и тому подобного.
У меня почему-то на английском пишет "username" and "password" а не на русском, и ошибки тоже на английском
В файле settings.py нужно установить переменную LANGUAGE_CODE = 'ru'
@@selfedu_rus о супер, заработало, я уже хотел переопределять Label в формах. Спасибо
Так это функционал аутентификация а не авторизации(