auth
This commit is contained in:
@@ -9,3 +9,5 @@ transliterate
|
||||
pytest-django
|
||||
pytest
|
||||
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/
|
||||
"""
|
||||
import os
|
||||
from datetime import timedelta
|
||||
from pathlib import Path
|
||||
|
||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||
@@ -43,6 +44,8 @@ INSTALLED_APPS = [
|
||||
'rest_framework',
|
||||
"django_filters",
|
||||
'drf_yasg',
|
||||
'djoser',
|
||||
'rest_framework_simplejwt',
|
||||
"core.apps.CoreConfig",
|
||||
'users.apps.UsersConfig',
|
||||
"employees.apps.EmployeesConfig",
|
||||
@@ -171,4 +174,31 @@ REST_FRAMEWORK = {
|
||||
"PAGE_SIZE": 10,
|
||||
|
||||
"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/outreach/', include("outreach.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/', 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