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

4.6 KiB
Raw Permalink Blame History

## Модель

Этот класс добавляет автоматические поля времени создания (created_at), времени обновления (updated_at) и ссылку на автора (author) ко всем моделям, которые наследуют его.

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

  3. IsOwnerOrCollaborator:

    • Позволяет редактирование задач только владельцу задачи или соисполнителям.
    • Метод has_object_permission проверяет, что запросы на изменение (методы, отличные от GET, HEAD и OPTIONS) выполняются только для владельца задачи или соисполнителей.
  4. CanViewTodoDetail:

    • Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным.
    • Метод has_object_permission проверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным.