/ / Django аутентифікація та дозволи - python, django, django-rest-frame

Аутентифікація та дозволи Django - python, django, django-rest-framework

Я опублікував запитання щодо SO щодо аутентифікації та дозволів Django, хоча воно вже є. Моє запитання:

У мене готовий бекенд з великою кількістю переглядів,моделі та серіалізатори від DRF. Тепер я хочу застосувати автентифікацію до свого додатку та створити RESTful apis, які споживаються на передній панелі. Тож сумніви у мене є

  • Як працює автентифікація? Чи створює Django різні таблиці моделей для кожного свого користувача?
  • Якщо так, то як я можу отримати дані на користувача від Django?

Зараз йде другий випадок

  • Якщо вище два істинні, то як я можу використовувати дозвіл в DRF для обслуговування лише тих даних, які стосуються конкретного користувача?

Сподіваюся, мої запитання зрозумілі. Якщо ні, запропонуйте мені зміни. Мені також подобаються приклади (якщо такі є) про те, як це все відбувається.

Крім того, якщо ви хочете побачити оригінальний пост.

Відповіді:

0 для відповіді № 1

Джанго використовує таблицю auth_user щоб зберегти користувача та пароль

Django має API для перевірки is_authenticated


Django rest frame використовує таблицю authtoken_token

Рамка відпочинку Django має API rest_framework.authtoken.views.obtain_auth_token з цією ж метою

У DRF для дозволів ви можете зробити щось на кшталт нижче.

class UserDetail(generics.RetrieveUpdateDestroyAPIView):
"""
User Detail API
"""
permission_classes = ("check_permission1", "check_permission2",) ### you can define your permissions using this

0 для відповіді № 2

Як працює автентифікація? Чи створює Django різні таблиці моделей для кожного свого користувача?

Ні, Django не створює різних модельних таблиць для кожного свого користувача. Самі користувачі зберігаються як запис у User-Модель. Отже, щоб мати дані для кожного користувача, ви повинні додати іноземний ключ у вашій моделі даних певному користувачеві.

class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL)
text = models.TextField()

Отже, як тільки ваш користувач увійшов (автентифіковано), ви просто фільтруєте Пост-модель відповідно до зареєстрованого користувача. У DRF ви можете виконати цю фільтрацію з дозволами:

class PostList(generics.ListCreateAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
permission_classes = (IsOwner,)


class IsOwner(permissions.BasePermission):
"""
Custom permission to only allow owners of an object to see it.
"""

def has_object_permission(self, request, view, obj):
return obj.author == request.user

Я сподіваюсь, це допоможе