Можливості Laravel і Django: який фреймворк вибрати 8 Можливості Laravel і Django: який фреймворк вибрати 9 Можливості Laravel і Django: який фреймворк вибрати 10

Знайомство з Laravel і Django: що вибрати

#Розробка

Автор: Віктор Морщ, Developer/PHP support

Матеріали статті підготовлені в рамках внутрішньої програми менторства і навчання фахівців команди Evergreen.

Фреймворки Laravel і Django — це два великих "комбайни" для розробки веб-додатків. Вони мають потужний функціонал в частині бекенду, власні системи роутингу, ORM-системи, адмінку, широке ком'юніті. У Laravel при цьому ще є маса сторонніх сервісів для збірки фронту і бібліотека додатків, які постійно розвиваються і підтримуються авторами. Давайте поговоримо про деякі можливості цих програмних платформ.  

Для початку трохи статистики

Останніми роками на Laravel і Django припадає по 10-15% запитів на Stack Overflow, що стосуються веб-фреймворків. На Github Ларавел має більше переглядів і більше зірок: 

оцінки на Github

Джерело: github.com

 "Дерево" пов'язаних технологій на Stack Overflow виглядає доволі цікаво: Laravel знаходиться в самому низу і близько до блоку фронтенд-технологій (React, Angular тощо), поруч з MySQL і Node.js. Django бачимо вгорі схеми, через Python веде зв'язок в сторону Linux, Docker, Kubernetes, AWS та інших. Ці зв'язки будуються на базі пошукових запитів користувачів, і можна припустити, що аудиторія Джанго і Ларавел не вельми перетинається. Але така статистика не означає автоматично, що користувачі Laravel активно взаємодіють з JS і фронтом, а ті хто пишуть на Django, не мають з ними справи. Адже, наприклад, для односторінкового застосунку байдуже, що на бекенді: Django, Laravel чи щось інше.

дерево пов'язаних технологій Stack Overflow

Джерело: stackoverflow.com

Моделі: що по коду

Підходи до моделей в Laravel і Django відрізняються. У Laravel модель — це певна "інструкція" як працювати з таблицями в базі.

представлення моделі в Ларавел

Бачимо, що у сутності Account є зв'язок belongsToMany з сутністю loyalty_action. Моделі в Ларавел можуть бути як прості, так і великі і містити приховані поля, прослуховування подій. Структура тут декларується окремими міграціями. Лежать моделі в папці App.

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

представлення моделі в DjangoТут описуються поля і стандартні функції, які допомагають взаємодіяти з базою. Також інформація з фрагмента коду вище використовується при валідації запитів до методів API сутності Project. У структурі проекту також знайдемо папку migrations — міграції генеруються з моделей

У Laravel модель фактично складається тільки з функцій, а самі поля не описує.

Вам буде цікаво: Low-Code і Zero-Code: як ви можете створювати кастомні додатки без програмістів

ORM-системи

ORM-система Laravel називається Eloquent ORM. Синтаксис у Eloquent ORM SQL-подібний: 

фрагмент синтаксису Eloquent ORM

Ми отримуємо примірник QueryBuilder викликаючи статичний метод whereHas (а також where (), query () або інший метод у будь-якої моделі). Далі умови сюди додаються через чейнінг. Where () передбачає декілька варіантів аргументів: або 2 змінні (першою йде назва поля, другим очікуване значення — вважається, що між ними стоїть "дорівнює"), 3 змінні (тоді передається ще оператор '>' або '<', '=' , like тощо). Як аргумент може передаватися також функція для групування умов. Такий підхід має плюси

  • синтаксис схожий на SQL, у ньому простіше зорієнтуватися;
  • завдяки чейнінгу можна сховати частину запиту всередині методів моделі;
  • безліч фіч Laravel, що роблять роботу із запитами більш зручною і лаконічною (наприклад, scope).

Django ORM

ORM система Django спирається на два методи: filter і exclude. Як можна здогадатися з назви, перший залишає у вибірці тільки те, що потрапляє під умови в нього передані, другий навпаки "виключає". Для методів filter і exclude використовується свій синтаксис іменованих аргументів (не схожий на SQL-запити), який дозволяє взаємодіяти з полями моделі просто по їх назві, а для переходу до вкладених сутностей використовується подвійне нижнє підкреслення, наприклад, timetable_ _schedule_ _code = self.userprofile .education_form.code

Це означає, що у GradeBook є поле timetable, яке містить сутність з полем schedule, яке в свою чергу містить сутність з полем type, а вже воно містить поле code.приклад синтаксису Django ORM

Також для нерівностей є можливість додавати на кінець назви аргументу через подвійне нижнє підкреслення isnull, gte, lte тощо. Підхід відрізняється від підходу в Laravel, але який з них складніший — відповісти важко, швидше, це справа звички і уподобань розробника

Рекомендуємо: Моделі життєвого циклу, принципи і методології розробки програмного забезпечення

Laravel Controllers

В Ларавел контролери лежать у папці http/Controllers/Api. В контролерах Ларавел немає нічого надзвичайного, все просто і зрозуміло. контролер Laravel

Django Controllers

У Django підхід відрізняється, контролери називаються views. Тут прийнято використовувати вбудовані дженерики (generic views), що містять набір певних готових рішень, приклад нижче:

 приклад дженерика в Django

Бачимо, що клас успадковується від TemplateView — це джангівський дженерик, який вміє рендерити шаблон і передавати в контекст цього шаблону змінні, отримані з запиту. Також цей клас успадковується від BaseView. BaseView — об'єкт, який домішує до відповіді стандартні речі, в нашому випадку — meta-теги і так далі. Дженерики дозволяють імперативно домогтися потрібного результату на противагу більш декларативному підходу у Ларавел.

Маршрутизація

У Ларавел маршрути визначені файлами в папці routes, що лежить в корені проекту: api.php, channels.php, console.php, web.php. У web потрапляють звичайні роути, які мають повертати шаблони. Channels.php потрібен для realtime-з'єднань, наприклад, веб-сокетів. Через console.php можна створювати консольні команди для Artisan — інтерфейсу командного рядка, що входить до складу Ларавел.

Найпростіший маршрут в Laravel складається з URL і функції-замикання. Роути також можна групувати через метод group — задавати префікс шляху для наборів маршрутів, а не вказувати для кожного окремо. Сюди спочатку передається якийсь масив з настройками, префікс для URL'а, namespace, тип запиту (get, post) тощо. В контролери також можна передавати аргументи {id}, шаблонні шляхи

метод group в Laravel

Зручно, що роути лежать в одному файлі — сильно не заплутаєшся.

У Джанго в кожної програми в головній папці є файл urls.py, в якому задані шляхи:

відображення роутів в Джанго

Також деякі дженерики дозволяють генерувати набір URL'ів для себе:

приклад urlpatterns в Django

Можемо підключити сюди інший файл urls або роут, згенерований дженериком. Підхід до маршрутизації тут схожий, але адреси розкидані по різних файлах, що на практиці може не завжди бути зручно.

Адміністрування

Django має дуже зручний вбудований інтерфейс адміністратора, який автоматично генерується під час створення програми. У Laravel немає вбудованої адмінки, але для неї існують готові консолі, наприклад, Laravel Nova від розробників платформи. Nova — це single page application, і встановлюється вона буквально однією командою. Nova платна, проте ви знайдете безліч безкоштовних адміністративних панелей або можна зібрати власну, як це зробили ми.

інтерфейс панелі адміністратора Laravel Nova

Джерело: nova.laravel.com

Спеціально для вас: Celery & Flower: побудова і налаштування черг

Що краще: Django чи Laravel?

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

Порівняно з Ларавел, який зручний і інтуїтивний, Джанго спочатку мені здавався незрозумілим і заплутаним. Але якщо втягнутися в дженерики і деякі інші особливості, то і з ним працювати буде комфортно. Плюс в тому, що компоненти не потрібно писати з нуля — просто імпортуй і використовуй.

Laravel дуже гнучкий в тому плані, що під нього є багато інструментів, заточених під ті чи інші потреби, наприклад, Telescope — помічник для налагодження додатків, а також велике ком'юніті. Django більш монолітний, вважається, що він не дуже підходить для невеликих проектів. У будь-якому разі вибір кращого інструменту буде залежати від ваших завдань і вимог.

Якщо вам потрібна допомога в розробці або реалізації ідеї, звертайтеся до нас.

05.05.2021
Зображення, використані в статті, були взяті з відкритих джерел і використовуються як ілюстрації.
Хочете обговорити ваш проект або замовити розробку?
Надіслати
Цей сайт є українською мовою. Ви можете переключити мову у меню, або зробити це зараз.