Files
we_pro_dock/BACKEND/Общие правила.md
2024-05-14 11:39:33 +03:00

52 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ## Модель
1. **TimeStampedModel:**
- **created_at:** DateTimeField, автоматически устанавливает дату и время создания объекта.
- **updated_at:** DateTimeField, автоматически обновляется при каждом сохранении объекта.
- **author:** ForeignKey, связывает с моделью пользователя, который создал объект.
## Сериализатор
1. **ProfileSerializer**:
- `username` (CharField): Никнейм пользователя.
- `bio` (TextField): Биография пользователя.
- `image` (URLField): URL-адрес аватара пользователя.
- `following` (SerializerMethodField): Показывает, подписан ли текущий пользователь на пользователя, представленного данным профилем.
- Метод `get_following`: Возвращает булево значение, указывающее, подписан ли текущий пользователь на пользователя профиля.
2. **TagSerializer**:
- Сериализатор для добавления тегов.
- Содержит единственное поле `tags`, которое является списком строк.
## Контроллер
1. **TagView**:
- Представление для работы с тегами.
- Использует `GenericViewSet` и `ListModelMixin` для обработки только GET-запросов.
- Включает метод `list` для получения списка тегов.
```
class TagView(viewsets.GenericViewSet, mixins.ListModelMixin):
queryset = Tag.objects.all()
serializer_class = TagSerializer
http_method_names = ['get',]
```
2. Метод `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'.
## Права доступа и разрешения
1. **IsAuthenticated**: Требует, чтобы пользователь был аутентифицирован для доступа к представлениям.
2. **IsAuthenticatedOrReadOnly**: Позволяет только чтение неаутентифицированным пользователям.