Всем здравствуйте. В этом блоге я объясняю, как выполнить аутентификацию JWT (вход и регистрация) с помощью Django REST Framework. Давайте начнем.
1. Создание приложения Django и установка Django REST Framework
Итак, теперь давайте создадим простой проект Django. Я создаю проект django с именем jwtauthloginandregister
. После его создания я просто выполняю миграцию, чтобы внести изменения в нашу модель в базе данных.
$ django-admin startproject jwtauthloginandregister $ python3 manage.py migrate $ python3 manage.py runserver
Теперь давайте установим django rest framework и django rest JWT.
$ pip3 install djangorestframework markdown django-filter djangorestframework_simplejwt
После установки не забудьте добавить их в раздел Установленные.
jwtauthloginandregister/settings.py
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', # Add this line ]
Также добавьте класс аутентификации по умолчанию как JWTAuthentication.
jwtauthloginandregister/settings.py
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_simplejwt.authentication.JWTAuthentication', ], }
Настройка JWT завершена, но сейчас мы не можем использовать ее, потому что не вызывали ее в urls.py
файле уровня проекта. Давай сделаем это.
jwtauthloginandregister/sestting.py
from django.conf.urls import url from django.contrib import admin from django.urls import path from rest_framework_simplejwt import views as jwt_views urlpatterns = [ url(r'^admin/', admin.site.urls), path('api/token/', jwt_views.TokenObtainPairView.as_view(), name='token_obtain_pair'), path('api/token/refresh/', jwt_views.TokenRefreshView.as_view(), name='token_refresh'), ]
2. Создайте приложение для аутентификации.
Django JWT предоставляет нам API входа по умолчанию. Но он не предоставляет нам API для регистрации. Приходится делать это вручную. Для этого я создаю новое приложение account
в нашем проекте.
$ python3 manage.py startapp account
Как обычно, после создания приложения я регистрирую его в разделе «Установленные приложения».
jwtauthloginandregister/settings.py
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'account', # Add this line ]
Теперь создайте новый файл в приложении account
и просто включите URL-адрес в urls.py
файл уровня проекта.
jwtauthloginandregister/urls.py
urlpatterns = [ url(r'^admin/', admin.site.urls), path('api/token/', jwt_views.TokenObtainPairView.as_view(), name='token_obtain_pair'), path('api/token/refresh/', jwt_views.TokenRefreshView.as_view(), name='token_refresh'), path('account/', include('account.urls')), ]
Теперь мы успешно настроили наше приложение. Теперь приступим к созданию нашего API регистрации.
3. Создайте просмотры аутентификации.
Для этого я создаю два файла api.py
и serializer.py
, где api.py
- первая точка контакта из urls.py
файла.
account/api.py
from rest_framework import generics, permissions, mixins from rest_framework.response import Response from .serializer import RegisterSerializer, UserSerializer from django.contrib.auth.models import User #Register API class RegisterApi(generics.GenericAPIView): serializer_class = RegisterSerializer def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.save() return Response({ "user": UserSerializer(user, context=self.get_serializer_context()).data, "message": "User Created Successfully. Now perform Login to get your token", })
В serializer.py
RegisterSerializer обрабатывает регистрацию пользователей. UserSerializer используется для получения определенных значений пользователей.
account/serializer.py
from rest_framework import serializers from rest_framework.permissions import IsAuthenticated from django.db import models from django.contrib.auth.models import User from django.contrib.auth import authenticate from django.contrib.auth.hashers import make_password # Register serializer class RegisterSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('id','username','password','first_name', 'last_name') extra_kwargs = { 'password':{'write_only': True}, } def create(self, validated_data): user = User.objects.create_user(validated_data['username'], password = validated_data['password'] ,first_name=validated_data['first_name'], last_name=validated_data['last_name']) return user # User serializer class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = '__all__'
После создания этих классов просто сопоставьте конечную точку api с urls.py
нашего вновь созданного приложения.
account/urls.py
from django.conf.urls import url from django.urls import path, include from .api import RegisterApi urlpatterns = [ path('api/register', RegisterApi.as_view()), ]
После создания откройте свой почтальон и отправьте запрос на http: // localhost: 8000 / account / api / register
Теперь после регистрации просто войдите, чтобы получить токен JWT. Теперь вы можете сделать запрос на сервер с этим токеном. Для входа отправьте запрос на http: // localhost: 8000 / api / token /
JWT также обрабатывает ошибки входа в систему.
Если вы хотите узнать об основах аутентификации JWT, посетите мой предыдущий блог.
В моем следующем блоге я продемонстрирую, как использовать разрешения и анализировать вложенный JSON.
Не стесняйтесь обращаться ко мне по любым вопросам. Электронная почта: [email protected]. Linkedin: https://www.linkedin.com/in/sjlouji/
Полный код можно найти на моем Github: https://github.com/sjlouji/Medium-Django-Rest-Framework-JWT-auth-login-register.git
Удачного кодирования!