Упрощенная аутентификация пользователей с помощью Django и Simplejwt[Вход, Регистрация]

Привет, разработчики! В этом блоге вы узнаете, как создать API аутентификации пользователей, входа в систему и регистрации в djangorestframework с использованием SimpleJWT.

Source Code:- https://github.com/ShivamRohilllaa/DjangoRestFramework-UserAuthentication/
Post Link:- https://pythondjangogeek.com/django/streamlined-user-authentication-with-django-and-si/

Надеюсь, вы, ребята, знаете, как создать проект django, поэтому я пропущу эти шаги и перейду непосредственно к коду.

Создайте виртуальную среду,

python3 -m venv envname

Установите эти пакеты: -

django
djangorestframework
djangorestframework-simplejwt

Добавьте restframework в установленные приложения в файле settings.py:

INSTALLED_APPS = [
    'rest_framework',
]

и добавьте эти настройки для rest_framework и simpleJWT.

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}    
SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(days=15),
    'AUTH_HEADER_TYPES': ('Bearer',),
    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
}

Создайте модель для ученика

class Student(models.Model):
    auth = models.OneToOneField(User, on_delete=models.CASCADE, related_name='student_profile')
    name = models.CharField(max_length=100)
    email = models.EmailField(max_length=100)
    def __str__(self):
        return self.name

и теперь мы создадим сериализаторы регистрации пользователей и профилей пользователей для регистрации и входа в систему.

from rest_framework import serializers
from userapp.models import Student
from django.contrib.auth.models import User
class UserSignupSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email', 'password')
    extra_kwargs = {
        'first_name': {'required': True, 'allow_blank': False},
        'last_name': {'required': True, 'allow_blank': False},
        'email': {'required': True, 'allow_blank': False},
        'password': {'required': True, 'allow_blank': False},        
    }    

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'first_name', 'last_name', 'email', 'username')

Теперь напишите представления для использования сериализаторов.

from django.shortcuts import render
from .models import Student
from .serializers import UserSignupSerializer, UserSerializer
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import User
@api_view(['POST'])
def signup(request):
    data = request.data
    serializer = UserSignupSerializer(data=data)
    if serializer.is_valid():
        if not User.objects.filter(username=data['email']).exists():
            user = User.objects.create(first_name=data['first_name'], last_name=data['last_name'], username=data['email'], email=data['email'], password=make_password(data['password']))
            user.save()
            student = Student.objects.create(auth=user, name=data['first_name'], email=data['email'])
            return Response({'message':'User Created Successfully'}, status=status.HTTP_201_CREATED)
        else:
            return Response({'message':'User Already Exists'}, status=status.HTTP_400_BAD_REQUEST)
    else:
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@api_view(['GET'])
def login(request):
    data = request.data
    if User.objects.filter(username=data['email']).exists():
        user = User.objects.get(username=data['email'])
        if user.check_password(data['password']):
            return Response(UserSerializer(instance=user).data, status=status.HTTP_200_OK)
        else:
            return Response({'message':'Invalid Password'}, status=status.HTTP_400_BAD_REQUEST)
    else:
        return Response({'message':'User Does Not Exist'}, status=status.HTTP_400_BAD_REQUEST)

Теперь сопоставьте эти представления в urls.py.

urlpatterns = [
    path('signup/', views.signup, name='signup'),
    path('login/', views.login, name='login'),

и для тестирования этих конечных точек используйте Postman и передайте эти ответы

для использования API регистрации

{
"first_name": "demo",
"last_name": "demo",
"email": "[email protected]",
"password": "demo"
}

для входа

{
"email": "[email protected]",
"password": "demo"
}

Исходный код

Source Code:- https://github.com/ShivamRohilllaa/DjangoRestFramework-UserAuthentication/

Спасибо
Шивам Рохилла | Python-разработчик

DM me your queries:-
https://www.linkedin.com/in/shivamrohillaa/