Сравнение Django с Rails.
Браузер через адрес URL отправляет запрос серверу.
В составе URL могут содержаться передаваемые параметры, через запрос GET или POST (site.com/list/?page=2§ion=5).
Сервер принимает URL и разбирает его на составляющие, извлекая параметры.
Далее сервер вызывет Контроллер (класс) --> Акшон контроллера (метод), который извлекает данные из базы данных посредством Модели и подставляет их в шаблон Вью.
Вью переджается обратно браузеру.
Ответ сервера состоит из тела - обычно это текст веб-страницы и заголовков, содержащих информацию: тип содержимого, дата и время последнего изменения страницы, как долго страница может сохраняться в локальном кэше, - предназначенную для распознавания страницы браузером.
Страница может содержать статический контент и хранится в папке public. В этом случае Django и Rails не активируются, так как страница сразу забирается сервером из папки.
Отличительной особенностью Django от Rails является то, что в Django application_controller.rb - это view.py, а schema.rb - это model.py. routes.rb соотвествует urls.py. Шаблоны вместо папки views размещаются в папке templates. Акшоны везде размещаются внутри классов контроллеров в качестве функций-методов. В их задачу входит получение данных из базы данных и подстановки их в шаблоны. В HTML-шаблонах одинаково используются лэйауты, партиалы, форматтеры-хелперы и код Python или Ruby для создания циклов и условий. Вызов данных из таблиц базы данных везде осуществляется через точеную нотацию.
В Django есть встроенная админка для наполнения данными базы данных. В Rails для этих целей служит метод scaffold.
Создание проекта в папке.
Перейти в консоли в папку, где будет располагаться папка с новым проектом.
Набрать в консоли:
django-admin.py startproject mysite = rails new mysite
Перейти в папку с созданным проектом.
Создание Модели - Вью - Контроллера.
Перейти в папку проекта.
Набрать в консоли:
manage.py startapp main = rails generate controller Main
Запуск сервера.
Перейти в папку проекта.
Набрать в консоли:
manage.py runserver = rails server
Адрес сервера.
http://127.0.0.1:8000/ = http://localhost:3000/
Урлы.
url.py = config/routes.rb
Настройка и подключение базы данных.
settings.py раздел DATABASES = config/database.yml
Создание таблиц базы данных.
Перейти в папку проекта.
Набрать в консоли:
manage.py sqlall main = rake db:migrate
manage.py syncdb = rake db:migrate (raker db:seed - для заполнения таблиц контентом)
Регистрация Модели - Вью - Контроллера.
settings.py = app/controllers/main_controller.rb
Описание столбцов таблиц модели базы данных.
main/models.py = db/migrate/20121026085014_add_password_salt.rb
db/shema.rb
app/models/main.rb
Все взаимодействия с моделями базы данных в Django производятся исключительно в файлах models.py, включая валидацию и связывание таблиц друг с другом через внешние ключи, тогда как в Rails таблицы базы данных создаются с помощью миграций, заполняются с помощью seeds.rb, а валидация и связь таблиц через внешние ключи производится в модели app/models/main.rb.
Модели.
Модели функции каждой модели необходимо вручную импортировать в каждый контроллер (view). = Все функции всех моделей из app/models/ сразу доступны всем контроллерам.
Контроллеры.
main/view.py = app/controllers/main_controller.py
Все контроллеры обязательно необходимо вручную прописывать в файл settings.py в раздел INSTALLED_APPS. = Контроллеры не надо никуда прописывать. Они сразу доступны сайту.
HTML-шаблоны.
main/templates/arhive.html = app/views/main/index.html.erb
Путь открытия страницы.
urls --> main/urls.py --> view.py --> main/templates/archive.html
=
config/routes.rb --> app/controllers/main_controllers.rb --> MainController Action index --> app/views/main/index.html.erb
Переход через URL --> Controller --> Action --> View.
match 'main', :to => 'main#archive' = url(r'^main/$', 'main.views.archive')
Запуск скриптов из консоли.
manage.py shell = rails console
Запуск интерпретатора без фреймворка.
python = irb
Подстановка партиалов в шаблоны.
Основной шаблон.
layout.html
{% block archive %}
{% endblock %}
Партиал.
archive.html
{% extends "layout.html" %}
{% block archive %}
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.body }}</p>
<p>{{ post.timestamp }}</p>
{% endfor %}
{% endblock %}
=
Основной шаблон.
layout.html.erb
<%= render(:partial => 'archive') %>
Партиал.
_archive.html.erb
<% for post in posts %>
<h2><%= post.title %></h2>
<p><%= post.body %></p>
<p><%= post.timestamp %></p>
<% end %>
Форматтеры - Хелперы.
<p>{{ post.timestamp|date:"l, F jS" }}</p> = <p><%=h display_date( post.timestamp) %></p>
Типы данных базы данных.
= :binary
BooleanField = :boolean
NullBooleanField = равное Null
= :date
DatetImeField = :datetime
= :decimal
= :float
IntegerField = :integer
primary_key = :primary_key
SlugField =
ForeignKey =
CharField = :string
TextField = :text
= :time
= :timestamp
EmailField =
URLField =
IPAdressField =
FileField =
FilePathField =
ThumbnailImagField =
Внешние ключи баз данных.
Пример связи моделей таблиц базы данных в Django, через внешний ключ.
class Author (models.Model):
name = models.CharField(max_length=100)
class Book (models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author)
Пример связи моделей таблиц базы данных в Rails, через внешний ключ.
class Author < ActiveRecord::Base
has_many :books
class Book < ActiveRecord::Base
belongs_to :author
Пример связи моделей таблиц базы данных в Django many to many.
class Author (models.Model):
name = models.CharField(max_length=100)
class Book (models.Model):
title = models.CharField(max_length=100)
author = models.ManyToManyFieldAuthor)
Комментариев нет:
Отправить комментарий