#10. Ограничения доступа (permissions) | Уроки по Django REST Framework

  Рет қаралды 45,549

selfedu

selfedu

2 жыл бұрын

Практический курс по Django: stepik.org/a/183363
Добавляем ограничение доступа для нашего API с помощью стандартных классов: IsAuthenticated, IsAdminUser, IsAuthenticatedOrReadOnly. А также создание собственных классов permission. Методы has_permission() и has_object_permission().
Телеграм-канал: t.me/django_selfedu
Инфо-сайт: proproprogs.ru/django
drfsite-10.zip: github.com/selfedu-rus/rest-f...
Ограничение доступа: www.django-rest-framework.org...

Пікірлер: 99
@Gleb_Pastushenko
@Gleb_Pastushenko 5 ай бұрын
Лучшее из того, что мне удалось найти на ютуб по DRF. Спасибо! Особый талант - это умудриться рассказать кратко без воды и при этом не забыть про важные нюансы.
@ivmmos
@ivmmos 2 ай бұрын
Django 5: User заменить на get_user_model(), добавить импорт from django.contrib.auth import get_user_model
@thebalu9804
@thebalu9804 2 жыл бұрын
Сергей , у Вас просто уникальный контент. Спасибо за структурное и понятное объяснение материала. За Ваше бесценное время. Незнаю что вас сподвигло выпускать обучающие ролики. Но этим Вы даёте возможность обучиться людям достойной профессии .
@steefsteefler5760
@steefsteefler5760 6 ай бұрын
Спасибо большое! Очень нужным делом занимаетесь!
@vladmaltsev3238
@vladmaltsev3238 2 жыл бұрын
Спасибо большое за великолепную подачу информации)
@user-yu7vi7dc9r
@user-yu7vi7dc9r 2 жыл бұрын
Сергею, автору канала, огромное спасибо! Пусть у него всё будет так, как он захочет (с) Чайф
@thirdbyron
@thirdbyron 2 жыл бұрын
Реально круто объясняешь. Въехал в тему полностью
@mikhailtochenov981
@mikhailtochenov981 2 жыл бұрын
Спасибо, очень полезно, как раз изучаю эту тему
@dadyx85
@dadyx85 Жыл бұрын
Это я удачно нашёл материал. Как раз на ЯП DRF изучаем и проект с пермишенами.
@AlexMedovnik
@AlexMedovnik Жыл бұрын
Урок - бомба! Спасибо)
@user-xm5se6yz4y
@user-xm5se6yz4y Жыл бұрын
блин, самое простое и понятное объяснение permissions)
@zvd1660
@zvd1660 Жыл бұрын
Очень полезное видео, спасибо!
@iam_foreman
@iam_foreman Жыл бұрын
Сергей, спасибо большое!
@AleksandrMaltsev-jm8ph
@AleksandrMaltsev-jm8ph Жыл бұрын
Очень круто!!!Большое спасибо
@user-wp9os7ce9l
@user-wp9os7ce9l 10 ай бұрын
Огромное спасибо! Очень понятно😇😇😇
@eugene_mountainland
@eugene_mountainland Жыл бұрын
Очень круто, спасибо)
@ccjx_space
@ccjx_space Жыл бұрын
Класс, побольше бы таких профессиональных людей
@andredru4278
@andredru4278 10 ай бұрын
Спасибо. Интересно и понятно.
@weyzem
@weyzem 5 ай бұрын
Было бы очень интересно увидеть уроки в связке Front-Back, в качестве фронта например ReactJS.
@srgtmn
@srgtmn 2 жыл бұрын
Красота...
@stayingaliveable
@stayingaliveable 10 ай бұрын
спасибо за видео!!!!!
@donfedor007
@donfedor007 2 жыл бұрын
Интересно с своими пермишинами.
@unaibekovbakhyt6517
@unaibekovbakhyt6517 2 жыл бұрын
Благодарю
@tamagiltamagil339
@tamagiltamagil339 8 ай бұрын
Спасибо!
@dodokwak
@dodokwak 2 жыл бұрын
Спасибо.
@zakirovio
@zakirovio Жыл бұрын
разработка и настройка API нравится больше, чем работа с шаблонами)
@OxoTHuK13
@OxoTHuK13 8 ай бұрын
Так шаблоны для отображения в бразуере в любом случае нужны. Другой вопрос, что или эти шаблоны рендерятся на бэке средствами джангиста, или шаблоны рендерятся на фронте средствами фронтэндера.
@zakirovio
@zakirovio 8 ай бұрын
@@OxoTHuK13 дефолтные джанговские шаблоны редко где используются в современной разработке. Сейчас джанга пользуется с батарейкой дрф, для разработки апи в основном, фронт полностью делают на js. Даже на одном митапе по питону говорили, что в некоторых компаниях использование темплейтов являются плохим тоном, так как фронтендерам придется с этим разбираться..
@OxoTHuK13
@OxoTHuK13 8 ай бұрын
@@zakirovio я с этим ни в коем разе не спорю. Я писал о том, что шаблоны в любом случае нужны (или на бэке, или на фронте).
@zakirovio
@zakirovio 8 ай бұрын
@@OxoTHuK13 согласен, нужны) просто я выразил что бэк мне нравится больше, чем фронт и шаблонизатор джанго)
@OxoTHuK13
@OxoTHuK13 8 ай бұрын
​@@zakirovio я, видимо, вас совсем наоборот понял: что вам не нравится разрабатывать шаблоны на бэке и проще отдавать JSON на фронтэнд, а там уж фронтендер сам отрисовывает шаблоны так, как ему больше нравится. Я, кстати, за такой подход - и нагрузка на сервер меньше и фронтендер без работы не останется ))))
@sergejg4773
@sergejg4773 Жыл бұрын
Thanks!
@JohnKannedy
@JohnKannedy 11 ай бұрын
Спасибо
@user-li1bj9vn9i
@user-li1bj9vn9i 2 жыл бұрын
Поздавляю Серегей с 50тыс. подпищиков
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Спасибо! ))
@WolfKrugerr
@WolfKrugerr Жыл бұрын
А какой класс нужно использовать, чтобы брать объекты из одной модели и добавлять в другую? Я так понимаю CreateAPIView просто создает новый объект с нуля. А мне нужно взять существующий. Объясните пожалуйста.
@TheFrostChanel
@TheFrostChanel 2 жыл бұрын
А с вьюсетом получается не выйдет ограничить у нас доступ ?
@user-xv7sh6lp7o
@user-xv7sh6lp7o 2 жыл бұрын
👍
@Anonim-im6ln
@Anonim-im6ln Жыл бұрын
👍👍👍🧡
@milord3089
@milord3089 2 жыл бұрын
Здравствуйте Сергей, хотел вас поправить в 13.20 минуте вы говорите что obj.user это пользовать который есть базе данных, точнее будет сказать что в параметре obj, подразумевается экземпляр модели Women, которую мы передаем через запрос. Т.е запись может изменять только тот пользователь, который создал этот пост. Спасибо за познавательный контент.
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Да, все верно, спасибо!
@johnmazepa
@johnmazepa 3 ай бұрын
01:40 - в кадр не попала строчка №1 с импортом стандартной джанго-модели "Юзер": from django.contrib.auth.models import User Добавьте себе и все заработает как и должно.
@andrewharazdowskyy4771
@andrewharazdowskyy4771 2 жыл бұрын
Уважаемый Сергей! Не имея глубоких познаний в Django - никогда не рисковал самостоятельно подойти к вопросу permissions. Но после двухчасового побуквенного осмысления Вашего урока могу сказать только - Большое Спасибо! Теперь уже буду пробовать самостоятельно. Считаю эту тему одной из наиболее практически-полезных. В Вашем курсе ООП мне очень понравился пошаговый мониторинг (debug) выполнения программы - например - создание экземпляра класса - метод new - метод init и так далее и просмотром текщих параметров в контрольных точках. Возможны ли такие подходы при желании детально-глубоко разобраться в DRF? Спасибо!
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Спасибо! В целом, да, почему бы и нет. Если что то непонятно, ключайте Debug. Успехов!
@mrduckvc
@mrduckvc Жыл бұрын
Я тут смотрю и думаю, это же всё уже реализовано в django admin, у которой я подозреваю тоже есть api . Появляется вопрос, а можно ли использовать api админки?
@ablivion4457
@ablivion4457 6 ай бұрын
Здравствуйте! Как можно изменить ответ {"detail": "Учетные данные не были предоставлены" }, который появляется в случае если доступ какому либо пользователю запрещен?
@jamjam3337
@jamjam3337 5 ай бұрын
😎
@3955006
@3955006 11 ай бұрын
Сергей, это справедливо и для viewset?
@MrCipec
@MrCipec Жыл бұрын
Подскажите, как реализовать функционал, когда каждый пользователь может видеть только свои записи? Хочу сделать заметки, которые видны только автору. Пока что придумал только вариант, когда после аутентификации у пользователя фильтруются записи по его id.
@tenelokis
@tenelokis Жыл бұрын
Ты должен сделать аутентификацию и авторизацию перво наперво, затем на уровне ORM джанго сделать запросы к БД и отфильтровать записи по пользователям которые их оставляли со своей учетной записи
@user-to3xq3wv3e
@user-to3xq3wv3e 2 жыл бұрын
Доброго дня большое спасибо за Ваш контент! Скажите пожалуйста, на канале есть рубрика "по заявкам"? У меня есть вопрос (из двух частей) который я ни как не могу одолеть. Представим что у меня есть, как всегда, блог, посты в нем и пользователи разделенные на три группы (1я группа, 2я-группа и админ). Я - админ и мне надо поменять автора у конкретного поста, НО выбрать нового автора для поста мне надо не из всех пользователей, а только из тех которые принадлежат одной из двух групп... т.е. в форме, в списке пользователей только пользователи 1й группы. И как правильно это реализовать? Через вьюхи, формы, серриализаторы или как-то по другому? Спасибо за внимание.
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Есть канал по Django (ссылка под видео)
@Sergey-cz7ym
@Sergey-cz7ym Жыл бұрын
11:40 а зачем нужна проверка на request.user? ведь можно делать проверку только на админа : return bool(request.user.is_staff) Ведь если админ то полюбому будет юзером. Возможно это как то связанно с безопасностью. Кто нибудь может обьяснить?
@13mufasa
@13mufasa Жыл бұрын
скорее всего если пользовать не аутентифицирован, то request.user = None, а у None нет никаких свойств, в т.ч. is_staff, поэтому будет вызвано исключение
@alekseirukhmanov9123
@alekseirukhmanov9123 Жыл бұрын
Добрый вечер, а каким образом отработал класс IsOwnerOrReadOnly- мы ведь зашли под пользователем root и отредактировали 9-ю запись, но для 9-ой записи root это не owner
@zakirovio
@zakirovio Жыл бұрын
root это admin, при изменении структуры базы мы по умолчанию задали владельцем каждой записи 1 -- в таблице User это админ
@kolobokgaming4093
@kolobokgaming4093 2 жыл бұрын
Начал изучать DRF и ни как не могу понять, как пользователю отправлять картинки, заранее отформатированные сервером. Пока что смог сделать только отправку url и потом уже уменьшаю размер с помощью css(
@selfedu_rus
@selfedu_rus 2 жыл бұрын
лучше их заранее уменьшать, если это thumbai или делать средствами css, иначе, сервер загнется ))
@ahil7800
@ahil7800 Жыл бұрын
Добрый день, Сергей. Спасибо за ваши уроки. По ДРФ это вообще лучшее что есть из видео и текстового материала. Подскажите такой вопрос - разрешения на уровне групп юзеров в ДРФ не действуют? Я раздал разрешения группам, но всё равно все пользователи получают доступ к методам post, put, delete.
@selfedu_rus
@selfedu_rus Жыл бұрын
Здравствуйте! Я сейчас так с ходу это не скажу. Проще будет спросить это в группе телеграм-канала по Django (ссылка под этим видео).
@denis5232
@denis5232 Жыл бұрын
Разобрался, там мы работам с объектом отдельно что бы все заработало надо использовать def has_object_permission(self, request, view, obj): вместо has_permission
@user-kp8pf9hh4b
@user-kp8pf9hh4b 2 жыл бұрын
Привет, из-за чего может сыпаться ошибка django.db.utils.ProgrammingError: column "user_id" does not exist
@selfedu_rus
@selfedu_rus 2 жыл бұрын
поле user_id не существует
@iamg00d90
@iamg00d90 Жыл бұрын
Сергей, добрый день, спасибо за Ваш труд!!! У меня вопрос: WomenAPIUpdate, при попытке админ/не рег. пользователь пишет: HTTP 405 Method Not Allowed Allow: PUT, PATCH, OPTIONS Content-Type: application/json Vary: Accept { "detail": "Метод \"GET\" не разрешен." } в чем может быть причина, я код так же скопировал из оф док спасибо
@zhop2062
@zhop2062 Жыл бұрын
Тоже самое :( Решили как-то проблему?
@iamg00d90
@iamg00d90 Жыл бұрын
@@zhop2062 , нет, особо не занимался вопросом, но поверхностно ответа нет на форумах, нужно копать
@user-wq1js3en3o
@user-wq1js3en3o Жыл бұрын
Обратите внимание, чтобы класс WomenAPIUpdate наследовался от RetrieveUpdateAPIView, а не от UpdateAPIView
@Gleb_Pastushenko
@Gleb_Pastushenko 5 ай бұрын
Скажите, пожалуйста, а планируются видеоуроки по Celery и по написаниям тестов для Django?
@selfedu_rus
@selfedu_rus 5 ай бұрын
Тесты есть в курсе по Django на Stepik. А Celery, возможно, потом. Сейчас идет курс по C/C++.
@user-ls1ee6rv9w
@user-ls1ee6rv9w 2 жыл бұрын
Вот прикол с запятой на 5:15, я теперь запомнил, что она нужна, но почему без нее не работает?)))
@selfedu_rus
@selfedu_rus 2 жыл бұрын
без запятой это уже будет не кортеж, а просто круглые скобки
@TBRAK78
@TBRAK78 Жыл бұрын
ok, мы реализовали права доступа на уровне отдельных классов, а как это реализовать на основании ViewSet?
@TBRAK78
@TBRAK78 Жыл бұрын
Отвечу сам на свой вопрос из документации имеем следующее, в класс свой ViewSet добавляем def def get_permissions(self): if self.action == 'list': permission_classes = [IsAuthenticated] else: permission_classes = [IsAdmin] return [permission() for permission in permission_classes] или как вариант, можно проверить по типу запроса (Как пример): def get_permissions(self): if self.request.method == 'GET': permission_classes = [permissions.AllowAny] elif self.request.method == 'PUT': permission_classes = [permissions.IsAuthenticated] else: permission_classes = [permissions.IsAdminUser] print([permission() for permission in permission_classes]) return [permission() for permission in permission_classes] и ещё добавлю, что бы искать не пришлось =). что может быть action, кроме, list retrieve - for HTTP GET requests to retrieve a single object list - for HTTP GET requests to retrieve a list of objects create - for HTTP POST requests to create a new object update - for HTTP PUT requests to update an existing object partial_update - for HTTP PATCH requests to update an existing object partially destroy - for HTTP DELETE requests to delete an existing object
@obyeboshen
@obyeboshen 6 ай бұрын
Наверное вместо двух вьюх и двух разрешений лучше сделать общее представление RetrieveUpdateDestroy с разрешением на чтение всем (или только авторизованным), изменение и удаление админу и авторам. А то у нас по итогу менять записи админы не могут, да и код дублируется
@user-lt5qw6br5w
@user-lt5qw6br5w 6 ай бұрын
Спасибо огромное! Очень понятно все объясняете :) Возник вопрос - а в самом Django, без DRF, как можно настроить права доступа на уровне записей?
@selfedu_rus
@selfedu_rus 6 ай бұрын
Спасибо! См. про это урок 72 нового плейлиста по Django.
@user-lt5qw6br5w
@user-lt5qw6br5w 6 ай бұрын
@@selfedu_rus Да, новый курс по Django я посмотрела, спасибо огромное за него! Это действительно лучший курс по Django из всех, которые я смотрела. Но в этом уроке (72) описаны общие разрешения для групп и для пользователей. А интересует именно возможность в Django (без DRF) указать доступ к объектам модели (записям таблицы БД) по какому-то условию, вот как например в этом уроке по DRF (obj.user == request.user)
@user-di5gy9je9x
@user-di5gy9je9x 2 ай бұрын
а как обычного пользователя наделить правами админа?
@selfedu_rus
@selfedu_rus 2 ай бұрын
это уровень Django
@user-qi3ux5qx9y
@user-qi3ux5qx9y 9 ай бұрын
1:49 - Подскажите пожалуйста. У меня ошибка возникает если я не объявляю класс User. А если объявляю эту модель то пишет что: django.db.utils.IntegrityError: The row in table 'man_man' with primary key '1' has an invalid foreign key: man_man.user_id contains a value '1' that does not have a corresponding value in man_user.id.
@selfedu_rus
@selfedu_rus 9 ай бұрын
вопрос в ТГ-канал по Django
@-D.K.-
@-D.K.- 8 ай бұрын
0:33 откуда вы импортировали класс или функцию User скажите пожалуйста кто нибудь ?
@selfedu_rus
@selfedu_rus 8 ай бұрын
это стандартная модель пользователей в Django
@-D.K.-
@-D.K.- 8 ай бұрын
@@selfedu_rus Вот так ?: from django.contrib.auth.models import User
@selfedu_rus
@selfedu_rus 8 ай бұрын
да )
@OxoTHuK13
@OxoTHuK13 8 ай бұрын
@@selfedu_rus стандартная-то она конечно стандартная, но ее надо импортировать. А вы это не показали ни в видео, ни на сайте. Пришлось с гит-хаба качать ваш проект и смотреть, откуда вы импортировали данную модель.
@andsprei
@andsprei Жыл бұрын
а как сделать что бы один пользователь мог создать только одну статью?
@alexandr6307
@alexandr6307 2 жыл бұрын
Как мне кажется, чтобы сохранять текущего юзера автором статьи, лучше в классе WomenListView переопределить метод perform_create: def perform_create(self, serializer): serializer.save(user=self.request.user)
@alexandr6307
@alexandr6307 2 жыл бұрын
А да, и чтобы туда-сюда не гонять в админ-панель, чтобы выходить и логиниться, в папке проекта в файле urls.py в urlpatterns добавьте строчку: path('api-auth/', include('rest_framework.urls')),
@zergzerg4844
@zergzerg4844 7 ай бұрын
@@alexandr6307 что-то не может найти такой роут , пишет not found
@alekseynikolaev3208
@alekseynikolaev3208 4 ай бұрын
Подскажите пожалуйста. После изменения модели (user = models.ForeignKey(User, verbose_name='Пользователь', on_delete=models.CASCADE), при попытке провести миграцию, выходит ошибка: NameError: name 'User' is not defined. Как исправить?
@lymarv1185
@lymarv1185 4 ай бұрын
у вас модель пользователя имеет такое имя ?
@alekseynikolaev3208
@alekseynikolaev3208 4 ай бұрын
Она стандартно так названа, разве нет? Как можно проверить? По крайней мере, если смотреть в бд, то там таблица с пользователями названа auth_user.@@lymarv1185
@alekseynikolaev3208
@alekseynikolaev3208 4 ай бұрын
Разобрался, спасибо) Забыл импортировать просто)@@lymarv1185
@sergejstreck7026
@sergejstreck7026 21 күн бұрын
@@lymarv1185 а модель пользователя вообще откуда взялась?
@lymarv1185
@lymarv1185 21 күн бұрын
@@sergejstreck7026 а вы кому дограничивать доступ собрались ? Логично же юзеру
@green1278dramost5
@green1278dramost5 Жыл бұрын
Сергей, извините за странный вопрос, вы живёте в Ульяновске?
@rd288
@rd288 Жыл бұрын
Информация полезная но очень много воды. Я смотрю x2 и то с перемотками. Но в общем и целом спасибо большое за уроки
@ibrahimoglu
@ibrahimoglu 2 жыл бұрын
👍
УГАДАЙ ГДЕ ПРАВИЛЬНЫЙ ЦВЕТ?😱
00:14
МЯТНАЯ ФАНТА
Рет қаралды 2,6 МЛН
Looks realistic #tiktok
00:22
Анастасия Тарасова
Рет қаралды 104 МЛН
Beautiful gymnastics 😍☺️
00:15
Lexa_Merin
Рет қаралды 12 МЛН
HAPPY BIRTHDAY @mozabrick 🎉 #cat #funny
00:36
SOFIADELMONSTRO
Рет қаралды 17 МЛН
Django API Authentication using JWT Tokens
37:06
Scalable Scripts
Рет қаралды 173 М.
УГАДАЙ ГДЕ ПРАВИЛЬНЫЙ ЦВЕТ?😱
00:14
МЯТНАЯ ФАНТА
Рет қаралды 2,6 МЛН