вторник, 6 ноября 2012 г.

Сравнение Django с Rails

Сравнение Django с Rails.

Браузер через адрес URL отправляет запрос серверу.
В составе URL могут содержаться передаваемые параметры, через запрос GET или POST (site.com/list/?page=2&section=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)

Комментариев нет:

Отправить комментарий