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 № 1Django 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