де саме повинна бути розміщена дітова логіка python


26

Я тільки почав вивчати Django / Python / Веб-розробка. Ця проблема мене хвилює вже деякий час.

Я створюю програму з декількома шаблонами в Django. У мене є view.py, який в основному просто надає відповіді на відповідні шаблони, і у мене є model.py, де я структурував свою БД. В одному з моїх шаблонів мені потрібно завантажити зображення (що я в змозі зробити), і мені потрібно запустити логіку, засновану на особливостях завантаженого зображення (ще не зроблено). Ця логіка передбачає безліч важких розрахунків. Після виконання обчислень логіка повинна повернути деяку оброблювану інформацію (координати) в шаблон.

Мені вдалося успішно виконати всі ці дії в автономному додатку python для настільних комп'ютерів, що викликає файли python один за одним. Однак, оскільки зараз я хочу зробити це веб-додатком, я почав використовувати рамку Django.

Я здійснив багато пошукових запитів, але все ще не в змозі зрозуміти, де саме слід розмістити цей файл Python, що містить всю логіку. Чи повинен я мати інший файл на основі класу (logic.py)і викликати його з view.py? Я погуглив і виявив, що багато розробників розміщують свою ділову логіку у своїх models.py на Django. Однак я вважаю, що це інтуїтивно не так, оскільки модель повинна виключно спілкуватися із задньою частиною. Будь-яка допомога буде вдячна. Дякуємо заздалегідь.



Знайдено статтю, яка широко обговорює цю тему (маючи на увазі піраміду, а не джанго). Має кілька розумних відтінків: nando.oui.com.br/2014/04/01/…
kratenko

Відповіді:


16

Я здійснив багато пошукових запитів, але все ще не в змозі зрозуміти, де саме слід розмістити цей файл Python, що містить всю логіку.

Існує ряд варіантів, залежно від ваших вимог:

  1. Додайте логіку, наприклад, Imageмоделі. Це корисна опція, якщо вам потрібно зберігати метадані на кожне зображення в базі даних, і кожен екземпляр моделі (кожне зображення) обробляється сам собою.

  2. Додайте логіку як звичайний Imageклас Python , наприклад у файл, який називається image.py. Ніщо в Django не обмежує додавання логіки, окрім тієї в модулях viewsабо models. Це хороший варіант, якщо логіка зображення є центральним компонентом програми Django (наприклад, програма обробки зображень).

  3. Створіть окремий проект Python, який забезпечує логіку, а потім зателефонуйте йому зі своїх поглядів. Не забудьте встановити цей проект у середовищі додатка Django Python. Ця опція є дійсною, якщо метою вашого програми Django є завантаження та перегляд зображень або показ результатів обробки зображень у відповідь на запит користувача, але там, де обробка зображень може використовуватися і в інших проектах.

  4. Створіть окрему програму, яка обробляє запити асинхронно і запускається окремо від програми Django. Цей параметр корисний, якщо вам потрібно від'єднати обробку зображень від циклу запитів програми, обробити велику кількість зображень або там, де кожен обчислення займає занадто багато часу для вирішення протягом часу циклу запиту (скажімо, не більше ніж 500 мс до 1 с) .

Я вважаю, що це інтуїтивно не так, оскільки модель повинна спілкуватися виключно із задньою частиною.

У Джанго немає нічого, що вимагає, щоб модель спілкувалася із зворотним кінцем, а точніше, з базою даних. Я думаю, ви змішуєте семантику того, що Django зазвичай вважає моделлю (а саме - абстрагування однієї або декількох таблиць у базі даних), а також термін модель як конструкторська конструкція (наприклад, як у дизайні, керованому доменом).


Спасибі! Це було дуже глибоко. Я вважаю, що варіант номер 3 для мене повинен бути досить хорошим. :)
adrita

Добре оцінювати відповідь негативною, але, будь ласка, додайте коментар, щоб я міг її покращити
miraculixx

5

Даніел Грінфельд, співавтор "Дві совки Джанго", рекомендує, щоб бізнес-логіка повинна бути в моделях ", коли це можливо, або у формах, якщо потрібно". Що стосується можливого дубліката Барта, джанго може бути схожим на MVC, але це Як не пояснено тут, в офіційній документації на django faq @adrita, я думаю, вам, можливо, потрібно буде переглянути офіційну документацію, щоб допомогти вам краще зрозуміти поняття моделей, поглядів та шаблонів.


дякую за ваші пропозиції
детально

Радий, що це виправили, @miraculixx дав ґрунтовне пояснення. Якщо ви перебуваєте на fb, приєднуйтесь до рамкової групи django python.
diek

2

В офіційних документах Django https://docs.djangoproject.com/en/1.11/ написано:

Django має концепцію "поглядів", щоб інкапсулювати логіку, відповідальну за обробку запиту користувача та повернення відповіді. Знайдіть усе, що вам потрібно знати про перегляди за посиланнями нижче:

Джанго рекомендує логіку містити в поглядах.


3
Це не обов'язково те саме, що ділова логіка.
Перше прізвище

1
Я не згоден з таким тлумаченням документації Джанго. В іншому випадку в документації про Джанго (наприклад, для Model.clean()) це мається на увазі трохи чіткіше, що (якщо ми просто реалізуємо проект Джанго в реальному світі на моделях, шаблонах та переглядах) - ділова логіка (або, принаймні, валідація) належить до модельний шар. Зауважте, що я не включав форми в це спрощення, які також є прийнятними.
Kye R
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.