/ / Uwierzytelnianie Django i uprawnienia - python, django, django-rest-framework

Uwierzytelnianie i uprawnienia Django - python, django, django-rest-framework

Wysłałem pytanie dotyczące SO dotyczące uwierzytelniania i uprawnień Django, nawet jeśli jest ono już tam. Moje pytanie brzmi,

Mam gotowy backend z wieloma widokami,modele i serializatory z DRF. Teraz chcę zastosować uwierzytelnianie w mojej aplikacji i utworzyć aplet RESTful, który jest konsumowany w interfejsie. Więc mam wątpliwości

  • Jak działa uwierzytelnianie? Czy Django tworzy różne tabele modeli dla każdego użytkownika?
  • Jeśli tak, w jaki sposób mogę pobrać dane na użytkownika z Django?

Teraz jest drugi przypadek

  • Jeśli powyżej dwa są prawdziwe, to w jaki sposób użyć uprawnienia w DRF do obsługi tylko danych, które są istotne dla konkretnego użytkownika?

Mam nadzieję, że moje pytania są jasne. Jeśli nie, zasugeruj mi zmiany. Lubię też kilka przykładów (jeśli w ogóle) dotyczących tego, jak to wszystko się dzieje.

Ponadto, jeśli chcesz zobaczyć Oryginalny post.

Odpowiedzi:

0 dla odpowiedzi № 1

Django używa tabeli auth_user aby zapisać użytkownika i hasło

Django ma API do sprawdzenia is_authenticated


Django używa struktury restrykcji authtoken_token

Struktura odpoczynku Django ma interfejs API rest_framework.authtoken.views.obtain_auth_token w tym samym celu

W DRF, dla uprawnień możesz zrobić coś takiego poniżej.

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

0 dla odpowiedzi nr 2

Jak działa uwierzytelnianie? Czy Django tworzy różne tabele modeli dla każdego użytkownika?

Nie, Django nie tworzy różnych tabel modeli dla każdego z użytkowników. Sami użytkownicy są zapisywani jako wpis w User-Model. Aby mieć dane dla każdego użytkownika, należy dodać klucz obcy w modelu danych do konkretnego użytkownika.

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

Więc gdy użytkownik jest zalogowany (uwierzytelniony), po prostu filtrujesz post-model według zalogowanego użytkownika. W DRF możesz zrobić to filtrowanie z uprawnieniami:

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

mam nadzieję, że to pomoże