This commit is contained in:
Mikan
2025-05-19 17:22:00 +03:00
parent a0a337045b
commit d8545bb7cf
6 changed files with 83 additions and 3 deletions

View File

@@ -8,4 +8,6 @@ django-autoslug
transliterate transliterate
pytest-django pytest-django
pytest pytest
django-filter django-filter
djangorestframework-simplejwt
djoser

View File

@@ -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",
},
}

View File

@@ -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
View 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
View 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")),
]

View File

@@ -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