Упрощенная аутентификация пользователей с помощью 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/