Внедрение приложения в проект
В данной статье будут описаны шаги внедрения нового приложения в существующий проект.
Для редактирования проекта я использую редактор VScode.
1 Запускаем редактор с загруженным проектом и открываем файл manage.py во встроенном терминале.
Выполняем команду
python manage.py startapp название_приложения
В корневой папке проекта создается папка с именем приложения, в которую вложены стандартные файлы:
папка migrations: предназначена для хранения миграций - скриптов, которые позволяют синхронизировать структуру базы данных с определением моделей
__init__.py: указывает интерпретатору python, что текущий каталог будет рассматриваться в качестве пакета
admin.py: предназначен для административных функций, в частности, здесь производится регистрация моделей, которые используются в интерфейсе администратора
apps.py: определяет конфигурацию приложения
models.py: хранит определение моделей, которые описывают используемые в приложении данные
tests.py: хранит тесты приложения
views.py: определяет функции, которые получают запросы пользователей, обрабатывают их и возвращают ответ.
2 Для своего проекта я все приложения храню в папке modules. Поэтому сразу переношу папку приложения в modules. Теперь необходимо зарегистрировать ново приложение в проекте.
Для этого в файле apps.py приложения :
class FamilyConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'family' # первые строки создаются автоматически.
Внесем исправления
name = 'modules.family' # указываю, что приложение находится в папке modules
verbose_name = 'Семейное фото' # имя приложения
Далее откроем файл settings.py и добавим в конец массива INSTALLED_APPS наше приложение: 'modules.family.apps.FamilyConfig',
Этой записью мы регистрируем файл конфигурации нашего приложения в проекте.
3. Теперь создаем модели данных для нашего приложения.
Это ответственный шаг, неточности которого придется исправлять внесением изменений в базу данных и связных таблиц.
Я планирую создать приложения для семейного фотоальбома.
Каждая фотография должна содержать следующую информацию: фотографию, название, из какого альбома, кто автор, дата фотографии, когда размещена, координаты места, адрес места, описание, статус, дата редактирования, slug (это короткая метка, которая содержит только буквы, цифры, подчеркивания или дефисы. Обычно они используются в URL), ключевые слова, objects ( Кастомный менеджер для модели фотографии позволяющий делать необходимые выборки).
Фотографии будут раскладываться по альбомам. Для этого создаем древовидную базу альбомов со следующими полями: заголовок, слаг, описание, поле для иерархии альбомов (TreeForeignKey( #Поле TreeForeignKey ведет себя практически так же, как и обычные модели django.db.ForeignKey но он также отображает параметры иерархии дерева с вложенностью в формы Django.)
Добавим модель для возможности комментировать фотографии с полями
photo = models.ForeignKey(Photo, on_delete=models.CASCADE, verbose_name='Фото', related_name='comments_family')
author = models.ForeignKey(User, verbose_name='Автор комментария', on_delete=models.CASCADE, related_name='comments_author_family')
content = models.TextField(verbose_name='Текст комментария', max_length=3000)
time_create = models.DateTimeField(verbose_name='Время добавления', auto_now_add=True)
time_update = models.DateTimeField(verbose_name='Время обновления', auto_now=True)
status = models.CharField(choices=STATUS_OPTIONS, default='published', verbose_name='Статус поста', max_length=10)
parent = TreeForeignKey('self', verbose_name='Родительский комментарий', null=True, blank=True, related_name='children_family', on_delete=models.CASCADE)
4 Регистрируем модели в панели администратора
Если этого не сделать, то Django не выдаст ошибку, однако при работе с блогом возможности управлять моделью через панель администратора уже не будет, а это неудобно.
from mptt.admin import DraggableMPTTAdmin
from .models import Album, Photo, CommentPhoto
# Register your models here.
@admin.register(Album)
class AlbumAdmin(DraggableMPTTAdmin):
"""
Админ-панель модели альбома
"""
list_display = ('tree_actions', 'indented_title', 'id', 'title', 'slug')
list_display_links = ('title', 'slug')
prepopulated_fields = {'slug': ('title',)}
fieldsets = (
('Основная информация', {'fields': ('title', 'slug', 'parent')}),
('Описание', {'fields': ('description',)})
)
@admin.register(Photo)
class PhotoAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
@admin.register(CommentPhoto)
class CommentAdminPage(DraggableMPTTAdmin):
"""
Админ-панель модели комментариев
"""
list_display = ('tree_actions', 'indented_title', 'photo', 'author', 'time_create', 'status')
mptt_level_indent = 2
list_display_links = ('photo',)
list_filter = ('time_create', 'time_update', 'author')
list_editable = ('status',)
4 Проводим миграцию для изменения базы данных
Сохраняемся.
После добавления нового класса и его регистрации в панели администратора необходимо создать файлы миграции для Django и запустить их. Создаются они с помощью команды makemigrations, а реализуются через команду migrate. Обе команды пишем в терминале:
python
manage.
py
makemigrations
python
manage.
py
migrate
После завершения миграции переходим в панель администратора.
Если перейти по ссылке http://127.0.0.1:8000/admin/ то можно будет увидеть наше приложение и страницы для альбома и фото. Пока можно внести несколько альбомов. Страница для редактирования фото тоже есть, но т.к. в будущем будет привязка к карте, то вносить туда пока не стоит. На сайте будет форма с вводом координат и адреса из яндекс-карты.
В следующем шаге буу описывать создание страниц для отображения фото и их редактирования.
Категория: Создание приложения / Добавил: zabarinap / 5 февраля 2025 г. 15:32
Нет комментариев