Как вы на самом деле используете одноразовое приложение django в проекте?

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

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

Кроме того, я посмотрел здесь:

Как повторно использовать приложение многократного использования в Django - он не объясняет, как на самом деле использовать его в самом проекте

и здесь:

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


Чтобы лучше объяснить это, позвольте мне сделать это на примере (обратите внимание, что это не то, что я на самом деле создаю).

Я создаю проект, который действует как Reddit. У меня будут пользователи, ссылки и голосования/баллы. Исходя из этого грубого примера, я захочу повторно использовать 3 (произвольные) сторонние приложения: пользователь, голосование/точки и ссылки.

Я решил использовать каждый из них как любой другой пакет python (что означает, что они будут рассматриваться как пакет, и ни один из их кодов не должен быть затронут) [будет ли этот метод действительно работать? Или вы должны иметь возможность редактировать сторонние приложения для создания проекта?)

С помощью этих приложений в рамках моего проекта я буду использовать основное приложение для обработки всего материала шаблона (что означает, что все, что я вижу на интерфейсе, будет в одном приложении).

Затем я либо использую то же самое основное приложение для пользовательской логики (в views.py), либо я разберу эту логику между различными приложениями (но все равно буду использовать одно приложение только для интерфейса).

Из 3 пунктов выше, применима ли эта структура (или она может работать)?


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

Что бы я написал в models.py? Как я могу интегрировать вещи из трех многоразовых приложений в основной файл models.py?

Как я могу ссылаться на многоразовые приложения в views.py? Давайте возьмем пример contrib.auth

В этом встроенном приложении для выхода из системы я бы написал:

from django.contrib.auth import authenticate, login, logout
@login_required
def user_logout(request):
logout(request)

return HttpResponseRedirect('/home/')

Несмотря на то, что приведенный выше код прост, в основном, как это сделать с любым многоразовым приложением?

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

Ответ 1

TL; DR:

Нет, и это зависит...

Некоторые (очень) распространенные многоразовые приложения

... это все повторно используемые приложения Django, которые поставляются вместе с Django (большинство из них не было, в определенный момент времени)

Хорошо, некоторые другие повторно используемые приложения, которые не поставляются с Django:

Это действительно многократно используемые приложения, и не меньше. Подобных приложений очень много.

Как они это делают?

Для меня ваш вопрос больше похож на то, "как мне создавать приложения многократного использования", чем "как их использовать". На самом деле их использование сильно отличается от приложения к приложению, потому что они делают разные вещи. Существует только одно правило: RTFM.

Часто они полагаются на одно или несколько из следующего:

  • дополнительные значения в settings.py
  • добавление (обычно одно include) в urls.py
  • подклассы и/или миксины для моделей, форм, полей, представлений и т.д.
  • теги шаблонов и/или фильтры
  • команды управления
  • ...

Это все мощные способы, которые ваше приложение может предоставить функциональность другим приложениям. Нет никакого рецепта (AFAIK), чтобы сделать приложение многократного использования, потому что есть так много различных сценариев, чтобы рассмотреть. Все зависит от того, что именно должно делать ваше приложение.

Многоразовые приложения обеспечивают функциональность

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

Не все должно быть многоразовым

Очевидно, что хотя многие приложения "в принципе" можно использовать повторно, часто это не имеет особого смысла, потому что это намного быстрее объединять все вместе (и заставить их просто "работать вместе").

Ответ 2

Я не уверен, почему вы думаете, что вам нужно основное приложение для "frontend". Точкой многоразового приложения является то, что он заботится обо всем, вы просто добавляете (обычно) один URL-адрес, чтобы включить urls.py приложения, а также свои собственные шаблоны и стиль, если требуется.

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

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

Обычно вы не будете редактировать стороннее приложение, что очень затрудняет интеграцию обновлений. Просто установите приложение в свой virtualenv (вы используете virtualenv, конечно!) С помощью pip, который поместит его в каталог lib, и вы сможете ссылаться на него так же, как и на любое другое приложение. Убедитесь, что вы добавили его в INSTALLED_APPS.