Ограничение пользователей на изменение собственных файлов в django REST
Как поживаете? Я совсем новичок в Django и rest. Я заинтересован в написании проекта, который ограничивает пользователей в изменении их собственных задач (мой проект - управление задачами). Я знаю, что я должен использовать DjangoModelPermissions, но к сожалению, он не работает в моем проекте... он не возвращает никакой ошибки, но и не работает. Спасибо за помощь
Урлы моих приложений:
path("api/",views.ListTaskAPIView.as_view(),name="all_task"),
path('api/<int:pk>/', views.TaskDetailView.as_view(), name='detail_task'),
path("api/create/", views.CreateTaskAPIView.as_view(), name="create_task"),
path("api/update/<int:pk>/", views.UpdateTaskAPIView.as_view(), name="update_task"),
path("api/delete/<int:pk>/", views.DeleteTaskAPIView.as_view(), name="delete_task"),
Модели :
class Task(models.Model):
title=models.CharField(max_length=250)
text=models.TextField()
user=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False)
status=models.ForeignKey('Status',on_delete=models.SET_NULL,null=True)
startDate=models.DateTimeField(auto_now_add=True)
endDate=models.DateField(null=True)
def __str__(self):
return self.title
class Status(models.Model):
name=models.CharField(max_length=250)
def __str__(self):
return self.name
serializer:
from rest_framework import serializers
from .models import Task,Status
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = ['title', 'text', 'status', 'endDate']
class StatusSerializer(serializers.ModelSerializer):
class Meta:
model = Status
fields = '__all__'
Просмотров:
class ListTaskAPIView(generics.ListAPIView):
serializer_class = TaskSerializer
model= Task
template="task_list.html"
def get_queryset(self):
"""
Optionally restricts the returned purchases to a given user,
by filtering against a `username` query parameter in the URL.
"""
query = self.request.GET.get('search')
if query:
object_list = self.model.objects.filter(Q(title__icontains=query) | Q(text__icontains=query))
else:
object_list = self.model.objects.all()
return object_list
class CreateTaskAPIView(CreateAPIView):
"""This endpoint allows for creation of a todo"""
queryset = Task.objects.all()
serializer_class = TaskSerializer
permission_classes = [IsAuthenticatedOrReadOnly]
class UpdateTaskAPIView(UpdateAPIView):
"""This endpoint allows for updating a specific todo by passing in the id of the todo to update"""
queryset = Task.objects.all()
serializer_class = TaskSerializer
permission_classes = (DjangoModelPermissions, )
class DeleteTaskAPIView(DestroyAPIView):
"""This endpoint allows for deletion of a specific Todo from the database"""
queryset = Task.objects.all()
serializer_class = TaskSerializer
permission_classes = (DjangoModelPermissions, )
Настройки :
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.DjangoModelPermissions',
],
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication', # enables simple command line authentication
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
)
}