auth
This commit is contained in:
@@ -8,4 +8,6 @@ django-autoslug
|
|||||||
transliterate
|
transliterate
|
||||||
pytest-django
|
pytest-django
|
||||||
pytest
|
pytest
|
||||||
django-filter
|
django-filter
|
||||||
|
djangorestframework-simplejwt
|
||||||
|
djoser
|
||||||
@@ -10,6 +10,7 @@ For the full list of settings and their values, see
|
|||||||
https://docs.djangoproject.com/en/4.2/ref/settings/
|
https://docs.djangoproject.com/en/4.2/ref/settings/
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
from datetime import timedelta
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||||
@@ -43,6 +44,8 @@ INSTALLED_APPS = [
|
|||||||
'rest_framework',
|
'rest_framework',
|
||||||
"django_filters",
|
"django_filters",
|
||||||
'drf_yasg',
|
'drf_yasg',
|
||||||
|
'djoser',
|
||||||
|
'rest_framework_simplejwt',
|
||||||
"core.apps.CoreConfig",
|
"core.apps.CoreConfig",
|
||||||
'users.apps.UsersConfig',
|
'users.apps.UsersConfig',
|
||||||
"employees.apps.EmployeesConfig",
|
"employees.apps.EmployeesConfig",
|
||||||
@@ -171,4 +174,31 @@ REST_FRAMEWORK = {
|
|||||||
"PAGE_SIZE": 10,
|
"PAGE_SIZE": 10,
|
||||||
|
|
||||||
"DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"],
|
"DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"],
|
||||||
|
|
||||||
|
"DEFAULT_AUTHENTICATION_CLASSES": (
|
||||||
|
"rest_framework_simplejwt.authentication.JWTAuthentication",
|
||||||
|
"rest_framework.authentication.SessionAuthentication", # Сессионная аутентификация
|
||||||
|
),
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SIMPLE_JWT = {
|
||||||
|
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=30),
|
||||||
|
"REFRESH_TOKEN_LIFETIME": timedelta(days=1),
|
||||||
|
}
|
||||||
|
|
||||||
|
DJOSER = {
|
||||||
|
"LOGIN_FIELD": "login", # Используем поле login вместо username
|
||||||
|
"USER_CREATE_PASSWORD_RETYPE": True,
|
||||||
|
"SET_PASSWORD_RETYPE": True,
|
||||||
|
"PASSWORD_RESET_CONFIRM_URL": "password/reset/confirm/{uid}/{token}",
|
||||||
|
"USERNAME_RESET_CONFIRM_URL": "username/reset/confirm/{uid}/{token}",
|
||||||
|
"ACTIVATION_URL": "activate/{uid}/{token}",
|
||||||
|
"SEND_ACTIVATION_EMAIL": False, # Отключаем отправку email, если не нужно
|
||||||
|
"SERIALIZERS": {
|
||||||
|
"user_create": "users.serializers.AccountSerializer",
|
||||||
|
"user": "users.serializers.AccountSerializer",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ urlpatterns = [
|
|||||||
path('api/v1/events/', include("events.urls")),
|
path('api/v1/events/', include("events.urls")),
|
||||||
path('api/v1/outreach/', include("outreach.urls")),
|
path('api/v1/outreach/', include("outreach.urls")),
|
||||||
path('api/v1/surveys/', include("surveys.urls")),
|
path('api/v1/surveys/', include("surveys.urls")),
|
||||||
|
path('api/v1/users/', include("users.urls")),
|
||||||
|
|
||||||
path('docs/swagger<format>/', schema_view.without_ui(cache_timeout=0), name='schema-json'),
|
path('docs/swagger<format>/', schema_view.without_ui(cache_timeout=0), name='schema-json'),
|
||||||
path('docs/swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
|
path('docs/swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
|
||||||
|
|||||||
22
users/serializers.py
Normal file
22
users/serializers.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
from rest_framework import serializers
|
||||||
|
from djoser.serializers import UserCreateSerializer
|
||||||
|
from .models import Account, Role
|
||||||
|
|
||||||
|
class RoleSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Role
|
||||||
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
|
class AccountSerializer(UserCreateSerializer):
|
||||||
|
role = serializers.PrimaryKeyRelatedField(queryset=Role.objects.all(), required=False)
|
||||||
|
|
||||||
|
class Meta(UserCreateSerializer.Meta):
|
||||||
|
model = Account
|
||||||
|
fields = ["id", "login", "role", "is_staff", "is_active", "first_name", "last_name", "middle_name", "phone", "email"]
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
user = super().create(validated_data)
|
||||||
|
user.set_password(validated_data["password"])
|
||||||
|
user.save()
|
||||||
|
return user
|
||||||
13
users/urls.py
Normal file
13
users/urls.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
from django.urls import path, include
|
||||||
|
from rest_framework.routers import DefaultRouter
|
||||||
|
from .views import AccountViewSet, RoleViewSet
|
||||||
|
|
||||||
|
router = DefaultRouter()
|
||||||
|
router.register(r"users", AccountViewSet, basename="user")
|
||||||
|
router.register(r"roles", RoleViewSet, basename="role")
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path("", include(router.urls)),
|
||||||
|
path("auth/", include("djoser.urls")),
|
||||||
|
path("auth/", include("djoser.urls.jwt")),
|
||||||
|
]
|
||||||
@@ -1,3 +1,15 @@
|
|||||||
from django.shortcuts import render
|
from rest_framework import viewsets
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
|
||||||
|
from djoser.views import UserViewSet as DjoserUserViewSet
|
||||||
|
from .models import Account, Role
|
||||||
|
from .serializers import AccountSerializer, RoleSerializer
|
||||||
|
|
||||||
# Create your views here.
|
class AccountViewSet(DjoserUserViewSet):
|
||||||
|
queryset = Account.objects.all()
|
||||||
|
serializer_class = AccountSerializer
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
class RoleViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = Role.objects.all()
|
||||||
|
serializer_class = RoleSerializer
|
||||||
Reference in New Issue
Block a user