40 lines
4.3 KiB
Markdown
40 lines
4.3 KiB
Markdown
## Модель статьи
|
||
1.1. **`author`** (ForeignKey): Связывает поле с моделью пользователя, который создал статью.
|
||
2. **`title`** (CharField): Название статьи.
|
||
3. **`summary`** (TextField): Краткое описание статьи.
|
||
4. **`content`** (TextField): Полное содержание статьи.
|
||
5. **`created`** (DateTimeField): Дата и время создания статьи.
|
||
6. **`updated`** (DateTimeField): Дата и время последнего обновления статьи.
|
||
7. **`tags`** (TaggableManager): Поле для управления тегами, используется для категоризации статей.
|
||
8. **`favorites`** (ManyToManyField): Связь многие ко многим с моделью пользователя, используется для отслеживания избранных статей пользователей.
|
||
9. `**slug**` (SlugField): Уникальный идентификатор для URL статьи, генерируется автоматически на основе названия статьи.
|
||
## Сериализатор
|
||
|
||
1. **ArticleSerializer**:
|
||
- **`slug`:** (SlugField), уникальный идентификатор для URL статьи. Здесь он настроен как только для чтения (read-only).
|
||
- **`description`:** (CharField), отображает описание статьи и использует поле summary модели.
|
||
- **`body`:** (CharField), содержит полное содержание статьи и использует поле content модели.
|
||
- **`tagList`:** (TagListSerializerField), отображает теги статьи и использует поле tags модели. Он также настроен как только для чтения.
|
||
- **`createdAt`**(DateTimeField): с форматированием даты и времени в ISO 8601.
|
||
- `**updatedAt`**(DateTimeField): с форматированием даты и времени в ISO 8601.
|
||
- **`favorited` и `favoritesCount`** (SerializerMethodField): используются для получения информации о том, добавлена ли статья в избранное пользователем и сколько пользователей добавили эту статью в избранное соответственно.
|
||
- **`author`** (SerializerMethodField): с атрибутом read_only=True, который вызывает метод `get_author` для получения сериализованных данных об авторе статьи.
|
||
## Маршрутизатор
|
||
|
||
- **`article_router.register('articles', views.ArticleView, basename='articles')`**: Регистрация маршрута для представления `ArticleView` из `views.py` под именем 'articles'. `basename='articles'` указывает базовое имя для ссылок.
|
||
## Контроллер
|
||
|
||
1. ArticleView:
|
||
- Представление для работы с моделью статей.
|
||
- Использует `ModelViewSet`, который предоставляет CRUD-функциональность и многое другое.
|
||
- Включает методы `list`, `create`, `retrieve`, `update`, `destroy` для обработки соответствующих HTTP-запросов.
|
||
- Содержит дополнительные действия (`favorite`, `feed`) с использованием декоратора `@action`.
|
||
- `get_permissions`: Определяет разрешения для доступа к методам на основе типа действия.
|
||
- `list`: Получает список всех статей.
|
||
- `create`: Создает новую статью.
|
||
- `favorite`: Добавляет или удаляет статью из избранного.
|
||
- `feed`: Возвращает ленту статей для текущего пользователя.
|
||
- `retrieve`: Получает информацию о конкретной статье.
|
||
- `update`: Обновляет информацию о конкретной статье.
|
||
- `destroy`: Удаляет конкретную статью.
|