#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...

ความคิดเห็น • 83

  • @VelialRider
    @VelialRider หลายเดือนก่อน +1

    Мужик, пишу на эмоциях. Ты просто лучший! Я две недели делаю проект, а проблем куча, особенно с регистрацией и этими формами. Сам я новичок в джанго, да и в целом в пайтоне, но тебе просто респект, всё дословно разжевал, это очень круто. А ещё больший респект за то что ссылку на гитхаб со своим проектом оставил, и ещё и по уроках разбил. Это достойно уважения! Удачи тебе)

    • @selfedu_rus
      @selfedu_rus  หลายเดือนก่อน

      Спасибо! Смотрите другой плейлист на этом канале по Django 4, там куда больше информации. Успехов!

  • @siarheiulas6969
    @siarheiulas6969 2 ปีที่แล้ว +5

    Тот случай, когда изучение материала приносит удовольствие! Спасибо!

  • @ВладимирЖуков-ы9е
    @ВладимирЖуков-ы9е 4 ปีที่แล้ว +36

    С 2013 года начинал изучать Python + Django, на долго меня не хватало, ленился очень часто, но вот смотрю уроки от этого автора и снова хочется начать изучать. Лайк за видео.

    • @marat_shaydulin
      @marat_shaydulin ปีที่แล้ว

      как продвинулись?

    • @showrun4747
      @showrun4747 ปีที่แล้ว +1

      многие новички не понимают что сначала надо найти ту книгу или автора которого лично ты легче воспринимаешь. а не долбиться в бездарно составленный материал. поэтому например в советское время учебники английского в школе вызывали отвращение этим заниматься из-за того что там сразу давали учить неправильные глаголы. И ты думал: если такая хуйня в начале то что будет дальше и бросал. лично мне ещё мешала легкая боль в спине: начал учиться на диване поставив на колени доску с ноутом -процесс прям попёр. в общем, ищите удобную позу. а, и ещё, я в наушниках автора лучше воспринимаю-шумы посторонние не отвлекают.

  • @gost548
    @gost548 2 ปีที่แล้ว +6

    Дружище, что я хочу сказать. Дай Бог тебе здоровья, очень ты полезные вещи делаешь в жизни

  • @СтаниславАрдашев-т5е
    @СтаниславАрдашев-т5е 3 ปีที่แล้ว +12

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

  • @friend1cat
    @friend1cat 4 ปีที่แล้ว +12

    Спасибо, Сергей! Все отлично, как обычно у Вас.

  • @pilina_
    @pilina_ 2 ปีที่แล้ว +2

    Спасибо за урок!! Комментарии под Вашими видео тоже полезно почитать, всякие нюансы для себя подмечаешь тоже)

  • @dmitryzagorevskiy507
    @dmitryzagorevskiy507 3 ปีที่แล้ว +9

    Огромное спасибо автору за время которое тратит на создание такого замечательного контента!

  • @Витяня-н8г
    @Витяня-н8г ปีที่แล้ว +1

    Единственный канал на ютубе который делает именно гайд, а не непонятно что

  • @johk2293
    @johk2293 2 ปีที่แล้ว +1

    Супер урок. То что нужно. Все детали интересовавшие упомянуты, как будто по моему запросу снималось :)

  • @KravaDota
    @KravaDota ปีที่แล้ว +1

    Отличное видео! Всё ясно и с первого раза, и так на протяжении всего курса.

  • @vagrius
    @vagrius 3 ปีที่แล้ว +1

    Огромное спасибо за этот и предыдущий уроки! Полдня ковырялся сегодня с регистрацией / авторизацией пользователей, только у вас нашел нормальные объяснения и рабочие (!!!) примеры.

  • @artur.tokranov
    @artur.tokranov 3 ปีที่แล้ว +4

    Отличные уроки, очень часто смотрю, пересматриваю, параллельно учусь в Skillbox. Спасибо большое!

    • @dzhegutin9876
      @dzhegutin9876 2 ปีที่แล้ว

      Скилбокс говно. Кстати, как успехи

  • @АрсланАтаев-ж6р
    @АрсланАтаев-ж6р 3 ปีที่แล้ว +1

    Большое спасибо за этот замечательный и подробный учебный туториал!!

  • @dreamonn_1665
    @dreamonn_1665 4 ปีที่แล้ว +11

    Вы лучший. У меня есть просьба. Делайте уроки о kivy🙏🙏🙏

  • @ИльяСтупин-ц5ц
    @ИльяСтупин-ц5ц 3 ปีที่แล้ว +2

    Однозначно лайк, большое спасибо за внятное разъяснение!

  • @ВиталийКалиниченко-х8э
    @ВиталийКалиниченко-х8э 3 ปีที่แล้ว +2

    Супер, спасибо за ваши уроки!

  • @ИванКабаченко-ч8ф
    @ИванКабаченко-ч8ф 2 ปีที่แล้ว +1

    Спасибо за труд, преподавание на высшем уровне

  • @Timur_play_time
    @Timur_play_time 3 ปีที่แล้ว +1

    Спаси за урок, Сергей!

  • @END-gt7yl
    @END-gt7yl 2 ปีที่แล้ว +1

    спасибо большое за видео очень классно я щас делаю проект и это видео мне очень помогает

  • @donfedor007
    @donfedor007 4 ปีที่แล้ว +2

    Спасибо Вам за урок!

  • @stamina1097
    @stamina1097 2 ปีที่แล้ว +2

    бесконечная благодарность

  • @Radag0nn563
    @Radag0nn563 2 ปีที่แล้ว +5

    По данным урокам дописываю диплом, спасибо *большое*!👍
    В данном курсе очень не хватает урока о редактировании данных пользователя. Допустим есть кабинет и там сменить пароль или логин и т.д.

  • @eret666
    @eret666 ปีที่แล้ว +4

    Всё бы хорошо, но всё-таки Авторизация и Аутентификация - разные вещи.
    Тут делается аутентификация - вход пользователей. А вот авторизация - нет. Немножко авторизации было, когда в одном из предыдущих видео было сокрытие пункта меню для неаутентифицированных пользователей.

  • @pozystark
    @pozystark 3 ปีที่แล้ว +1

    Офигеть! Впервые дохожу так далеко.
    Наверно это чарующий голос или магия какая.
    Аааа молодой человек а лицензия на колдуньство иииимеется?
    Или вы так проездом? 😀

  • @АлексейПаршин-ч7е
    @АлексейПаршин-ч7е 3 ปีที่แล้ว +6

    Можно еще не переопределять метод form_valid, в нем и так обьект создается, а переопределить get_success_url. Модель юзера в self.object находится. Но это все мелочи, просто хвастаюсь, что разобрался в этом непростой тем))

    • @FriskesTV
      @FriskesTV 2 ปีที่แล้ว +1

      может кому не понятно будет, вот так записывается
      def get_success_url(self):
      # | user4
      print(self.request, '|', self.object)
      login(self.request, user=self.object)
      return reverse_lazy('home')

  • @1Chitus
    @1Chitus ปีที่แล้ว +2

    Спасибо!

  • @portador-portador
    @portador-portador 3 ปีที่แล้ว +7

    Я сделал рендеринг главного меню через inclusion_tag, если вы сделали так же, то вам не передается контекст с request.user.username
    Вам нужно:
    1) передать в inclusion_tag флаг takes_context=True
    2) в функции, которую пишете внутри декоратора, первым аргументом передать контекст
    3) присвоить context['menu']: menu
    4) вернуть контекст

    • @pavels4490
      @pavels4490 3 ปีที่แล้ว +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

    • @АлександрБольшеголов
      @АлександрБольшеголов 2 ปีที่แล้ว +1

      @@pavels4490 Извиняюсь за вопрос, но зачем такие "городульки"? Достаточно в контекст передать объект request и user, которые можно прокинуть через базовый шаблон {% show_show_menu request user %}

    • @nickhughes7081
      @nickhughes7081 2 ปีที่แล้ว

      Спасибо, я бы сам не разобрался с этим)

    • @tobeqa.tofeellife.2976
      @tobeqa.tofeellife.2976 2 ปีที่แล้ว

      Блин, я уже всю голову сломал, почему у меня не работает, а на видео работает! Спасибо вам!

    • @leva1672
      @leva1672 5 หลายเดือนก่อน

      @@pavels4490 чел, спасибо, я бы сам не догадался, и оставалось бы гуглить вечность, хотя откуда ноги растут я уже понял, но как сделать не понял)

  • @crazyhowling2203
    @crazyhowling2203 3 ปีที่แล้ว +2

    Я так ждал что ты тут расскажешь о том как сделать смену пароля
    Так впадлу самому форму писать 😹😹😹
    Думал сделаю ctrl C ctrl V и готово 😹

  • @maksus1997maks2310
    @maksus1997maks2310 3 ปีที่แล้ว +4

    Спасибо за уроки, просто вышка!!! Но вот я не могу понять, а чем отличаются reverse и redirect

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +2

      redirect делает перенаправление по сформированному маршруту, а reverse только формирует маршрут (без перенаправления)

    • @Manu-ei6tn
      @Manu-ei6tn 2 ปีที่แล้ว

      @@selfedu_rus А чем тогда отличаются redirect от reverse_lazy, и когда какой использовать?

    • @glieseb-yo4sk
      @glieseb-yo4sk 2 ปีที่แล้ว

      @@selfedu_rus подозреваю, имелось ввиду когда что использовать. Для меня это тоже пока не ясно, так понял reverse нужно в классах, а redirect в функциях, верно?

  • @sainco3036
    @sainco3036 4 ปีที่แล้ว +1

    Спасибо.

  • @rostislavmalyshev1775
    @rostislavmalyshev1775 3 ปีที่แล้ว +1

    Спасибо за урок! Подача информации на высоте, но мне кажется, что это очень простой вариант регистрации/авторизации и не очень подходит для реального сайта. Нужна хоть минимальная защита. Было не плохо сделать подтверждение е-мэил или хотя бы капчу (а лучше все вместе). Кроме того сейчас большая проблема (лично у меня) придумать Логин. Все нормальные уже заняты, приходится писать БуквыЦифры. Кажется вполне логичным, когда для аутентификации используется е-мэил и пароль.

    • @showrun4747
      @showrun4747 ปีที่แล้ว

      есть сайты-генераторы логинов

  • @владКучеров-о1б
    @владКучеров-о1б 2 ปีที่แล้ว +1

    Спасибо за уроки! При создании собственного проекта возник вопрос: необходимо, чтобы после авторизации пользователя происходило перенаправление на home/. Как это можно реализовать?

  • @bub2728
    @bub2728 2 ปีที่แล้ว +2

    не работает почему то атрибут label, поля имеют название по умолчание и не изменяються: Username, Password, в html файле указывал {{ f.label }} и так же {{ f.label_tag }}, не работает
    Еще шаманил в forms.py самом классе авторизации пробовал и так как на видео и с классом Meta в котором указыва fields labels, ничего не меняет

  • @rayphantom
    @rayphantom ปีที่แล้ว +2

    хз столкнулся ли с этим кто то еще но надеюсь кому то поможет
    если у вас при логауте возникает ошибка maximum recursion depth exceeded while calling a python object нужно при импорте logout переопределить её имя с помощью as
    как минимум это то решение которое я нашел

  • @lelopsi
    @lelopsi 4 หลายเดือนก่อน +1

    Почему я открыл ссылку из описания на рускоязычную документацию джанго, а там Мелстрой...

  • @NataliaSenchkovskaia
    @NataliaSenchkovskaia ปีที่แล้ว +1

    А как же Separation of Concerns? В Django хорошей практикой является разделение функциональности на отдельные приложения в соответствии с их ответственностью и предназначением. Почему бы не вынести авторизацию в отдельное приложение?

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว

      Все верно, см. новый плейлист по Django, там именно так.

  • @yurakgn
    @yurakgn 2 ปีที่แล้ว +1

    Всем привет, а тема с созданием поста от авторизованного пользователя, я так понимаю была не раскрыта, может кто подскажет, как это сделать?

  • @КостяГорохов-б6с
    @КостяГорохов-б6с 3 ปีที่แล้ว +2

    А не дублирует ли код метод get_context_data?

  • @umni_kot
    @umni_kot 2 ปีที่แล้ว +1

    я не верю что столько мало лайков у видео.

  • @ibrahimoglu
    @ibrahimoglu 3 ปีที่แล้ว +1

    👍

  • @koltdota
    @koltdota ปีที่แล้ว +1

    Кто может объяснить когда, что лучше использовать reverse, reverse_lazy, redirect, вроде бы один и тот же функционал отрабатывают эти методы, но так и не пойму, почему в разных местах кода вызываются разные функции в видео

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว

      Функции reverse и reverse_lazy строят маршруты. Причем, вторая функция reverse_lazy строит его не сразу, а только в момент когда маршрут действительно необходим. Функция redirect относится к перенаправлениям на другой URL.

  • @vitaliiananiev5038
    @vitaliiananiev5038 2 ปีที่แล้ว +1

    Извините вопрос не совсем по теме если я создал класс для личных кабинетов пользователей в models и во views(DetailView) хочу их выводить с помощью pk к чему мне pk привязать?(Говорят к id-порядковому номеру в БД нельзя)

  • @glieseb-yo4sk
    @glieseb-yo4sk 2 ปีที่แล้ว +1

    Для меня оказалось неочевидным, что LoginView передаёт в шаблон объекты request, form, user и, возможно ещё что-то.
    request - это то, что последний раз пришло от клиента, там метод передачи, словарь с данными запроса, и ещё куча всего.
    form - это наша форма, её можно итерировать по полям
    user - это что такое, и как с этим работать?
    В описании LoginView вообще ни слова о том, что передаётся в шаблон, как так?! Плз объясните, что именно, или дайте ссылку. Описание объекта user, какие у него методы и свойства тоже не нашёл никакого.
    P.S.: Документация джанго на мой взгляд плохая, хоть и большая, запутанные вещи описаны ещё более запутанно, в ответе зачастую возникает ещё больше вопросов. Для сравнения: недавно изучал pandas, любой метод описан очень подробно, с кучей отличных примеров на все случаи жизни, и любая статья читается как утренняя газета.

    • @snappesisnappes
      @snappesisnappes 2 ปีที่แล้ว

      да полностью согласен

  • @DmytroLarin
    @DmytroLarin 2 ปีที่แล้ว +1

    Как всегда спасибо за классный урок, но есть маленькая проблемка. При запросе страницы логина, класс-представление начинает ругаться и говорить, мол не может найти шаблон registration/login.html. И это несмотря на то, что я четко прописывал атрибут template_name и указывал путь к другому шаблону. Когда я создал шаблон registration/login.html - все заработало. Подскажите, в чем проблема? Может, что-то нужно указать в settings.py? Или это какие-то приколы Django 4.0? Заранее спасибо.
    P.S. И да, вообще на работает метод get_success_url. Тут я вообще без понятия, в чем дело(

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว

      Это в телеграм-канал вопрос. Так то должно работать. Видимо, какие то детали.

  • @Михаил-ц2у4п
    @Михаил-ц2у4п 2 ปีที่แล้ว +1

    объясните пожалуйста почему в классе добавления нового поста используется обычная переменная success_url, а при авторизации надо использовать перенаправление функции get_success_url???😭

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว

      Я уже детали кода не помню. Лучше спросите в телеграм-канале сообщество.

    • @lenya1212
      @lenya1212 2 ปีที่แล้ว

      Разобрался? Тоже сейчас на этом моменте задумался

    • @НикитаМинеев-л8о
      @НикитаМинеев-л8о 2 ปีที่แล้ว

      Потому что класс CreateView наследуется от класса ModelFormMixin у которого есть атрибут success_url. А класс LoginView наследуется от других классов, но у него есть метод get_success_url, который мы и переопределяем.

    • @snappesisnappes
      @snappesisnappes 2 ปีที่แล้ว

      @@НикитаМинеев-л8о 🙂🔫

  • @max1mka124
    @max1mka124 2 ปีที่แล้ว

    У меня почему то не проверяется user.is_authenticated на главной странице, то есть когда я вхожу в свой аккаунт, почему то на других страницах это видно, а на главной нет. То же самое когда выхожу из аккаунта: подскажите, что делать?

  • @ПавлоКабай
    @ПавлоКабай 3 ปีที่แล้ว +1

    у меня вивод словарей в классе представления токо так работает
    z = {**context, **c_def}
    return z
    по другому ошибка

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว

      от версий Python зависит

  • @laticalamonzi2814
    @laticalamonzi2814 ปีที่แล้ว +1

    Хороший урок для начинающих, однако есть одно замечание. Автор упорно излагает материал, проводя параллель между авторизацией и аутентификацией. На самом же деле, это далеко не так. Само is_authenticated как бы намекает, что это именно аутентификация, то есть выяснение информационной системой, аутентифицирован = распознан ли пользователь как свой в её пределах. Что же касается авторизации, это процесс наделения уже аутентифицированного пользователя назначенными ему в ИС правами (authorize). Про то, что у разных пользователей (групп) могут быть разные права в пределах ИС, мы, разумеется, помним? Чёткое разделение и применение этих понятий оградит в дальнейшем от многих логических ловушек, и тому подобного.

  • @romanp1521
    @romanp1521 4 ปีที่แล้ว

    У меня почему-то на английском пишет "username" and "password" а не на русском, и ошибки тоже на английском

    • @selfedu_rus
      @selfedu_rus  4 ปีที่แล้ว

      В файле settings.py нужно установить переменную LANGUAGE_CODE = 'ru'

    • @romanp1521
      @romanp1521 4 ปีที่แล้ว +1

      @@selfedu_rus о супер, заработало, я уже хотел переопределять Label в формах. Спасибо

    • @valk9819
      @valk9819 3 ปีที่แล้ว

      Так это функционал аутентификация а не авторизации(