Подтвердить что ты не робот

Django: лучшая практика для разделения проекта на приложения

Я действительно борюсь со всей этой идеей приложения. Я читал много руководств и руководств по стилю, и я знаю, что я должен попытаться создать специализированные приложения, которые делают ровно одну вещь. Все это имеет смысл, когда вы смотрите на какой-то простой учебный проект, но как только он попадает в сложный проект реальной жизни, я не могу определить, как я должен рисовать линии между различными приложениями.

Одна из проблем заключается в том, что я хочу иметь один сайт (или несколько сайтов), где пользователь видит много разных вещей. Материал, который должен быть из разных приложений, при соблюдении правил дизайна приложения. Как бы я понял что-то подобное? Моя первая идея состояла в том, чтобы создать одно приложение под названием ui, которое просто обрабатывает ВСЕ виды, которые фактически приводят к шаблону, а все остальные приложения предоставляют модели и вспомогательные функции. Но я боюсь, что приложение ui станет большим.

Чтобы дать вам небольшой пример: Позволяет ли я иметь сайт, на котором пользователь может выполнять следующие задачи:

  • Выберите тему
  • установить некоторые параметры для выбранного объекта
  • Загрузка файлов, связанных с его учетной записью
  • назначить некоторые загруженные файлы теме
  • записать некоторый звук, который будет связан с объектом

Прямо сейчас, я бы создал три приложения:

  • темы (содержит модель предмета и некоторые связанные модели)
  • ресурсы (содержит модель ресурсов, загружает файлы)
  • audio (обрабатывает всю запись и обработку звука)

Но тогда мне понадобится какое-то приложение main или ui, чтобы обрабатывать взаимодействие этих приложений и создавать фактический сайт, где все приложения каким-то образом задействованы.

Итак, есть ли "правильный" способ сделать это? Или есть какие-то шаблоны, которые я могу использовать? Я также благодарен за ссылки на хорошие ресурсы по этой теме, хотя я уже прочитал немало.

4b9b3361

Ответ 1

Вам просто нужно убедиться, что ваша структура имеет смысл для вас.

Нет необходимости создавать новое приложение для каждой функции, связанной с другой частью логики проекта.

Многоразовые приложения - это совсем другая история, их код в какой-то мере не должен знать о реализации.

Взгляните на структуру Django для вдохновения

Возможный макет для вашего примера:

project_root/
    project/
        __init__.py
        settings.py
        urls.py
        templates/
            app1/  # override stuff
        static/
        media/
    app1/
        __init__.py
        admin/  # as a package
            __init__.py
            subjects.py
            resources.py
            # etc
        models/  # as a package
            subjects.py
            resources.py
            # etc
        managers/
            __init__.py
            subjects.py
            resources.py
            # etc
        services/
            __init__.py
            audio.py  # upload handler etc
        views/
            __init__.py
            subjects.py
        urls/
            __init__.py
            subjects.py
        templates/
            app1/
                subject_list.html  # override at project level
        static/
            app1/
                css/
                    subject.css  # override at project level
    app2/
        __init__.py
        models.py  # holds a Member model or whatever you require
    manage.py

Ответ 2

Я думаю, что лучший способ разграничения приложения примерно эквивалентен тому, как вы ограничиваете класс на объектно-ориентированном языке программирования. Вместо переменных и методов вы думаете о моделях и представлениях соответственно:

модели - это состояние объекта, представления используются для просмотра и взаимодействия с состоянием объекта.

Мое эмпирическое правило: создает ли приложение инкапсулировать определенный набор моделей? Если это так, то я пытаюсь его создать.