140500
This commit is contained in:
51
BACKEND/Общие правила.md
Normal file
51
BACKEND/Общие правила.md
Normal file
@@ -0,0 +1,51 @@
|
||||
## ## Модель
|
||||
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**: Позволяет только чтение неаутентифицированным пользователям.
|
||||
|
||||
Reference in New Issue
Block a user