Django – #36 – REST API cz. 11 – Rejestracja nowego użytkownika poprzez API

Wprowadzenie.

Rejestracja nowego użytkownika w naszej bazie danych może odbywać się na kilka sposobów. Może zdarzyć się tak, że logika biznesowa aplikacji oraz API, z którego będą korzystały aplikacje, będzie wymagała, aby rejestrowania nowego użytkownika było możliwe przy pomocy API. Dlatego w tym wpisie przedstawię jak zrealizować jakie założenie.

Zakres artykułu.

  • Rejestracja nowego użytkownika poprzez API

Rejestracja nowego użytkownika poprzez API

W pierwszym kroku w pliku serializers.py zaimportujmy model User, który dostarcza nam Django.

from django.contrib.auth.models import User 

Teraz stwórzmy klasę nowego serializera, który będzie obsługiwał model User. W tym serializerze będziemy musieli dodać dodatkowe argumenty do pola password. Argumenty należy dodać przy pomocy zmiennej extra_kwargs. Zmienna extra_kwargs jest słownikiem i jak możemy przeczytać w dokumentacji stanowi skrót pozwalający na określenie dowolnych dodatkowych argumentów słów kluczowych dla pól. Oznacza to, że nie trzeba jawnie deklarować pola w serializerze. Następnie w tej klasie musimy jeszcze nadpisać metodę create(), która to definiują, w jaki sposób tworzone są pełnoprawne instancje podczas wywoływania funkcji. Warto jeszcze zwrócić uwagę na tworzenie samego hasła i zastosowanie do tego celu metody set_password(). Metoda set_password(raw_password) przyjmuje jako argument surowe, czyli niezahashowane hasło, które wprowadza użytkownik i te hasło hashuje. Dopiero po tej czynności jesteśmy w stanie wywołać metodę save()

Więcej o innych metodach, które zaimplementowane są dla modelu User, możemy przeczytać w dokumentacji.

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password', 'email')
        extra_kwargs = {
            'password': {
                'write_only': True,
                'style': {'input_type': 'password'}
                }
            }
    
    def create(self, validated_data):
        user = User(email=validated_data['email'], username=validated_data['username'])
        user.set_password(validated_data['password'])
        user.save()
        return user

Po stworzeniu serializera zaimportujmy go w pliku z widokami views.py.

from .serializers import AuthorSerializer, BookSerializer, BorrowSerializer, BorrowReturnBookSerializer, UserSerializer
from rest_framework.permissions import IsAuthenticated, BasePermission, SAFE_METHODS, IsAdminUser, IsAuthenticatedOrReadOnly, AllowAny

W następnym kroku stwórzmy nową klasę widoku.

class UserCreate(generics.CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = (AllowAny, )

Ostatnim krokiem jest stworzenie ścieżki url przy pomocy metody path path(‘api/user/create’, views.UserCreate.as_view()).

from django.contrib import admin
from django.urls import path, include
from restapiapp import views

urlpatterns = [
    path('admin/', admin.site.urls),

    # API
    path('api/authors/', views.AuthorList.as_view()),
    path('api/books/', views.BookList.as_view()),
    path('api/borrows/', views.BorrowList.as_view()),
    path('api/borrows/<int:pk>/', views.BorrowRetrieveDestroy.as_view()),
    path('api/borrows/<int:pk>/return/', views.BorrowReturnBookUpdate.as_view()),
    path('api/borrows/<int:pk>/edit/', views.BorrowRetrieveUpdate.as_view()),

    path('api/user/create', views.UserCreate.as_view()), # new

    # DRF
    path('api-auth/', include('rest_framework.urls')),
]

Przejdźmy teraz do przetestowania aplikacji. Wprowadźmy do przeglądarki adres 127.0.0.1:8000/api/user/create.

W formularzu wprowadźmy pola UsernamePassword oraz Email address.

Strona powinna zwrócić nam informację z naszymi danymi, to jest username oraz email, przy czym zgodnie z tym, co dopisaliśmy w dodatkowych argumentach, nie wyświetli nam się password, ponieważ pole to ustawiliśmy jedynie do zapisu

Przejdźmy teraz do panelu administratora do tabeli, która zawiera naszych użytkowników. Sprawdźmy, czy baza ta zawiera nowo stworzonego użytkownik.

Jak możemy zobaczyć, w bazie danych znajduje się nowo stworzony użytkownik. Przejdźmy jeszcze do szczegółowych danych tego użytkownika.  

Zgodnie z oczekiwaniami, mamy uzupełnione pola Username, Email address oraz zahashowane Password.

Jeszcze na koniec zalogujmy się jako nasz nowy użytkownik.

W prawym roku na pasku nawigacyjnym widzimy nasz username

Autor artykułu
Dominik Bednarski

2 Replies to “Django – #36 – REST API cz. 11 – Rejestracja nowego użytkownika poprzez API

  1. Witam,
    Mam pytanie, tutaj nowego użytkownika może założyć każdy.
    A jak zrobić aby tylko użytkownik zalogowany mógł zakładać nowych użytkowników?
    Pozdrawiam

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.