3.4 KiB
3.4 KiB
## Модель
- 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: Позволяет только чтение неаутентифицированным пользователям.