4.6 KiB
## Модель
Этот класс добавляет автоматические поля времени создания (created_at), времени обновления (updated_at) и ссылку на автора (author) ко всем моделям, которые наследуют его.
- TimeStampedModel:
- created_at: DateTimeField, автоматически устанавливает дату и время создания объекта.
- updated_at: DateTimeField, автоматически обновляется при каждом сохранении объекта.
- author: ForeignKey, связывает с моделью пользователя, который создал объект.
Сериализатор
-
ProfileSerializer: -
username(CharField): Никнейм пользователя. -bio(TextField): Биография пользователя. -image(URLField): URL-адрес аватара пользователя. -following(SerializerMethodField): Показывает, подписан ли текущий пользователь на пользователя, представленного данным профилем. - Методget_following: Возвращает булево значение, указывающее, подписан ли текущий пользователь на пользователя профиля. -
TagSerializer:
- Сериализатор для добавления тегов.
- Содержит единственное поле
tags, которое является списком строк.
Контроллер
- TagView:
- Представление для работы с тегами.
- Использует
GenericViewSetиListModelMixinдля обработки только GET-запросов. - Включает метод
listдля получения списка тегов.
class TagView(viewsets.GenericViewSet, mixins.ListModelMixin):
queryset = Tag.objects.all()
serializer_class = TagSerializer
http_method_names = ['get',]
- Метод
favoriteс декоратором@actionдля добавления/удаления статьи из избранного.
@action(detail=True, methods=['post'])
def favorite(self, request, id=None):
article = self.get_object()
if article.favorites.filter(id=request.user.id).exists():
article.favorites.remove(request.user)
else:
article.favorites.add(request.user)
article.save()
serializer = self.get_serializer(article)
return Response(serializer.data)
Маршрутизатор
-
DefaultRouterиз библиотекиrest_framework.routersавтоматически создает маршруты для представлений на основе их названий и методов (например, GET, POST, PUT, DELETE). За вас обрабатывается большая часть создания URL-путей, что делает код более модульным и менее подверженным ошибкам. -
register('tags', views.TagView): Регистрация маршрута для представленияTagViewизviews.pyпод именем 'tags'.
Права доступа и разрешения
-
IsAuthenticated: Требует, чтобы пользователь был аутентифицирован для доступа к представлениям.
-
IsAuthenticatedOrReadOnly: Позволяет только чтение неаутентифицированным пользователям.
-
IsOwnerOrCollaborator:
- Позволяет редактирование задач только владельцу задачи или соисполнителям.
- Метод
has_object_permissionпроверяет, что запросы на изменение (методы, отличные от GET, HEAD и OPTIONS) выполняются только для владельца задачи или соисполнителей.
-
CanViewTodoDetail:
- Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным.
- Метод
has_object_permissionпроверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным.