Статьи

Django для разработчика Rails

Django — самая популярная среда разработки веб-приложений на Python. Многие люди считают это Python’s Rails. Если вы опытный разработчик Rails, эта статья поможет вам начать создавать приложения Django и поможет сопоставить концепции Rails с Django.

Что мне нужно для начала?

Мы предполагаем, что вы опытный разработчик и поэтому не тратите время на объяснение основ, таких как установка Django или Python. Если вам нужна помощь с этим, пожалуйста, посмотрите здесь . Мы также не будем фокусироваться на создании базового приложения с использованием Django. Документы Django уже охватывают это, если вам нужна помощь, прочитайте эту статью .

Если вы все еще читаете, я предполагаю, что вы можете создать базовое приложение Django, и теперь вы хотите отобразить свои концепции Rails на Django. Давайте начнем.

Вы говорите MVC, я говорю MTV

Rails — это фреймворк MVC. Вы записываете свои взаимодействия с данными в app/models/model_name.rb , пишете свои контроллеры в app/controllers/controller_name.rb и визуализируете данные, используя представление из app/views/ . Django — это структура MVC, но она отличается от стандартной терминологии MVC.

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

Так в

Rails : Controller — это код ruby, который решает, какие данные будут показаны.
Django : View — это код Python, который определяет, какие данные будут показаны.

и

Rails : представления решают, как данные отображаются. Это может быть код erb или haml.
Джанго : Шаблоны решают, как данные отображаются. Это HTML с тегами Django.

Джанго называет это архитектурой MTV и более подробно об этом в своих часто задаваемых вопросах .

По крайней мере, модели одинаковы?

Вы бы на это надеялись, но тогда жизнь не была бы такой веселой. В Rails db/schema.rb является db/schema.rb источником для вашей схемы базы данных. Чтобы добавить новую модель или внести изменения в существующую модель, вы создаете и запускаете миграцию, которая меняет схему. Файл schema.rb генерируется автоматически из текущего состояния базы данных. Как правило, вы не будете редактировать schema.rb вручную. Вы сохраняете проверки моделей и бизнес-логику в app/models/model_name.rb .

В Django официальным источником схемы базы данных является app_name/models.py . Чтобы создать новую таблицу, отредактируйте файл models.py и затем выполните команду syncdb или migrate . Вам понадобится очень популярное южное приложение для команды migrate.

В Rails БД является schema.rb источником, и schema.rb из него schema.rb . В Django, models.py является models.py источником и DB синхронизируется из него.

Не в сложных отношениях

В Rails вы можете моделировать отношения внешнего ключа через has_many , belongs_to , has_one , has_and_belongs_to_many . В Django вы указываете их в качестве атрибутов на ваших моделях в качестве models.ForeignKey , models.OneToOneField , models.ManyToManyField . В Django вам нужно указать только одну сторону отношения, другой объект Model автоматически получит связанные методы. Вот отображение.

own_to -> ForeignKey
имеет _ многие -> (не требуется, поскольку Django автоматически добавляет их после получения ForeignKey)
has_one -> OneToOneField (необходимо указать только на одной из моделей)
has_and_belong_to_many -> ManyToManyField (необходимо указать только на одной из моделей)

Модельные объекты и наборы запросов.

Как только вы определили модель, у них есть много эквивалентных методов. Допустим, у вас есть модель User в Rails и Django.

Rails : User.create (..)
Django: User.objects.create (..)

Сохранение модели после внесения некоторых изменений

Rails : user.save!
Django : user.save()

Отношения запросов Django и Rails AR также в значительной степени эквивалентны, предлагая аналогичные методы.

Рельсы : Model.find (10)
Django : Model.objects.get (id = 10)

Rails : Model.where (.. условия)
Django : Model.objects.filter (.. условия)

Rails : Model.order («создан в»)
Django : Model.objects.orderby («созданный_ат»)

Большая разница в том, что в Django методы находятся на менеджере. (Обычно называемые objects ) вместо самого класса Model.

Маршрутизация и настройка

В Rails файлы конфигурации находятся в config/* и каждая среда, такая как разработка, тестирование и производство, получает свой собственный файл конфигурации. В Django большая часть конфигурации находится в settings.py . Rails помещает маршрутизацию в config/routes.rb Django помещает rouring / dispatch в urls.py и основан на регулярных выражениях.

Шаблоны и представления

Представления Rails — это файлы ERB или haml. Шаблоны Django имеют теги шаблонов, которые соответствуют помощникам Rails, а тег шаблона Django {% include ..%} соответствует частям Rails.

Еще несколько отображений.

Сервер разработки

Rails : сервер рельсов
Django : сервер python manage.py

Консоль разработки

Рельсы : рельсы консольные
Django : оболочка python manage.py

Миграция базы данных

Rails : rake db: создать && rake db: migrate
Django : перенос python manage.py syncdb && python manage.py

Задания

Django поставляется со скриптом manage.py, который выполняет множество действий, доступных на rails / rake.

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

Rails : config / rout.rb
Джанго : urls.py

Callbacks

Rails : обратные вызовы (например, перед сохранением)
Django : сигналы (например, preave) или методы переопределения жизненного цикла, такие как .save

Наблюдатели

Рельсы : наблюдатели
Джанго : сигналы

Пользовательские задачи

Rails : пользовательские грабли
Django : пользовательские команды управления

Что дальше?

Эта статья должна дать вам достаточно указателей, чтобы применить свои знания Rails, чтобы начать работать над Django. Эта статья специально не является публикацией Rails vs Django. Rails и Django — это потрясающие фреймворки, и знание Django может дать вам ценные идеи и идеи для лучшей работы с Rails, даже если вы никогда не используете Django на производстве.

Я хотел бы услышать ваше мнение о сходстве и различиях между Rails и Django в разделе комментариев. Спасибо за прочтение!