LINUX.ORG.RU

Впечатления рубиста от django


1

6

Долгое время писал под RoR и вот появилась работа под Django. Я поражён, это так неудобно.

1. По каждому чиху нужно писать импорты. На кой спрашивается? Это фреймвёрк для облегчения разработки или что?

2. Язык темплейтов это нечто ужасное. Вспоминаю ERB и как он прекрасен. Что бы написать темплейт надо учить этот корявый язык вместо того что бы использовать готовый, подсветки синтаксиса в темплейтах добиться не удалось.

3. Нет наследования всех контроллёров от одного (ApplicationController), таким образом совершенно не понятно как создать переменные доступные во всех темплейтах.


Вот это убожество из угловых скобок это удобно?


  <% for @item in @shopping_list %>
    <li><%= @item %></li>
  <% end %>

Не смеши людей!

yanka ★★
()

Это фреймвёрк для облегчения разработки или что?

Это фреймвёрк не только для облегчения новой разработки, но и для облегчения переработки.

AGUtilities ★★★
()
Ответ на: комментарий от thesis

Зачем это здесь?

Что бы поругать фреймворк, от этого обычно становится легче. Так сказать выплакаться. Может ещё придёт какой спец и аргументированно расскажет как ему нравится django, и расскажет как обойти все его неудобства. Как правило, я заметил, в таких темах быстрее найти ответ чем в темах «как это сделать?» т.к. у спецов по django проснётся гордость за него и желание защитить.

tyler19
() автор топика
Ответ на: комментарий от tyler19

т.к. у спецов по django проснётся гордость за него и желание защитить.

ты в этом уверен? у большинства твои сопли вызовут только ухмылку над очередным МД, не более

shrub ★★★★★
()
Ответ на: комментарий от yanka

Вот это убожество из угловых скобок это удобно?

Что убожеского? Всё логично. А темплейты в django это «разрыв темплейта шаблона». В view ф-ция вызывается со скобочками, а в темплейте без. И множество других нелогичных мелочей. В ERB всё предельно понятно с первого взгляда.

tyler19
() автор топика
Ответ на: комментарий от tyler19

В view ф-ция вызывается со скобочками, а в темплейте без. И множество других нелогичных мелочей. В ERB всё предельно понятно с первого взгляда

В темплейте вообще не должно быть никаких функций ,а только минимальная управляющая логика. Это ясно даже новичкам пишущим на пхп.

yanka ★★
()
Ответ на: комментарий от AGUtilities

Это фреймвёрк не только для облегчения новой разработки, но и для облегчения переработки.

Ruby в плане W/O — наследник Perl'а (хотя и улучшенный, не спорю). Так что писать рубистам о таком бесполезно, они свой выбор уже сделали :)

KRoN73 ★★★★★
()

Глупая тема

Ну давайте начнем писать посты, впечатления джависта о пхп или впечатления питониста об ассемблере . Это полный идиотизм . У каждого языка есть свой контекст . И разработчик на этом языке вырабатывает привычку к этому контексту и как говорил Александр Сергеевич - «привычка свыше на дана, замена счастию она»

yanka ★★
()
Ответ на: комментарий от yanka

В темплейте вообще не должно быть никаких функций

Я так понял, он про вызовы методов.

KRoN73 ★★★★★
()

Опять споры о том, на правом боку лучше спать или на левом. Борцуны такие борцуны.

(Мне нравится и Ruby + Rails, и Django + Python, и Yii + PHP. Все три связки использую время от времени. ЧЯДНТ?)

resurtm ★★★
()
Ответ на: комментарий от KRoN73

Ruby в плане W/O — наследник Perl'а (хотя и улучшенный, не спорю). Так что писать рубистам о таком бесполезно, они свой выбор уже сделали :)

С чего вы взяли то? Код на руби читается легко, я когда начинал только его изучать заглядывал часто в чужой код, в код стандартной библиотеки. Всё прекрасно понимал уже после прочтения маленького туториала.

tyler19
() автор топика
Ответ на: комментарий от yanka

В темплейте вообще не должно быть никаких функций

Теоретики! Изобретать кривой язык когда уже есть годный ни к чему, а разделение business vs. presentation это задача программиста. Python кстати совершенно непригоден для темплейтов.

И ещё:

4. Как же бесит писать render_to_response('template.html', { <список переменных здесь }, тут ещё какой то контекст без которого не всё работает) вместо использования @ переменных.

tyler19
() автор топика
Ответ на: комментарий от KRoN73

И про Perl многие то же самое пишут :D

Какая часть руби конкретно трудночитаема? Приведите конкретный пример, не будьте голословным.

tyler19
() автор топика
Ответ на: комментарий от tyler19

Какая часть руби конкретно трудночитаема?

Любые закорючки, особенно, сильно меняющие поведение, затрудняют чтение.

KRoN73 ★★★★★
()
Ответ на: комментарий от tyler19

А меня бесит что любой блок в ruby должен быть закрыт end и что? По мне логика отступов куда более изящней . И что? Будем холливар разводить?

yanka ★★
()
Ответ на: комментарий от KRoN73

И про Perl многие то же самое пишут

ИЧСХ, совершенно справедливо.

redgremlin ★★★★★
()
Ответ на: комментарий от KRoN73

Любые закорючки, особенно, сильно меняющие поведение, затрудняют чтение.

Во во, их еще неудобно набирать , даже у тех у кого все хорошо со слепой печатью знают , что дотягиваться до верхнего цифрового ряда на клаве при одновременном зажиме Shift не совсем удобно.

yanka ★★
()
Ответ на: комментарий от KRoN73

Любые закорючки, особенно, сильно меняющие поведение, затрудняют чтение.

Ничего подобного. К примеру в Python возьмём любой идентификатор. При взгляде на код не понятно что это, в то время как в Ruby сразу понятно это instance variable (@var), class variable (@@var), глобальная переменная ($var). Где тут затруднение для чтения? Опять же окончания методов ещё больше упрощают чтение зачастую делая понятным предназначение метода уже по его названию: a.empty?, a.sort! и a.sort. Руби читается почти как английский.

tyler19
() автор топика
Ответ на: комментарий от yanka

А меня бесит что любой блок в ruby должен быть закрыт end и что? По мне логика отступов куда более изящней . И что? Будем холливар разводить?

Иногда бывает затруднительно понять где кончается класс или ф-ция. Код сливается в одно. Причём тут холи? Для вас django священна? А я то думал что мы всего лишь говорим о технологии, причём я аргументированно привожу её недостатки.

tyler19
() автор топика
Ответ на: комментарий от yanka

Во во, их еще неудобно набирать , даже у тех у кого все хорошо со слепой печатью знают , что дотягиваться до верхнего цифрового ряда на клаве при одновременном зажиме Shift не совсем удобно.

Печатать 'self' каждый раз удобнее? Не думаю что нажать @ медленнее чем печатать 4 буквы. Затруднений ни разу не испытывал, может вам стоит поменять клавиатуру? self через каждую строчку просто режет глаз, и андескоры постоянные - вот уж где закорючки.

tyler19
() автор топика
Ответ на: комментарий от tailgunner

А зачем ты пишешь на Django? Есть и другие фреймворки.

Задание такое.

tyler19
() автор топика
Ответ на: комментарий от AGUtilities

Ещё забыл сказать:

5. Сообщения об ошибках в Django это тихий ужас. Не понятно абсолютно ничего. Файл и строка с ошибкой указывают на какие то внутренние файлы джанги вместо того что бы указывать на ошибку в коде. Разобраться не реально. Видимо потому что она вся упихана eval'ами т.к. метапрограммирование на примитивном уровне.

tyler19
() автор топика

ТС всё правильно сказал. RoR для веба намного удобнее, как инструмент. И те, кто ценит своё время меня поймут. ТС вот понял. А тем кому пофапать на «питончик быстрее руби!!!11адынадын» своя дорога.

Alve ★★★★★
()

Плохой вброс, я думал будет лучше.

anonymous
()
Ответ на: комментарий от tyler19

Конкретнее об ошибках:

ViewDoesNotExist at /videos/

Could not import videos.views.index. View does not exist in module videos.views.

Ошибка была в том что строчку

[(cat.id, cat.name) for cat in Category.objects.all.order_by('name')]

надо было заменить на (пропустил () после all):

[(cat.id, cat.name) for cat in Category.objects.all().order_by('name')]

КТО ТО СМОЖЕТ ОБЪЯСНИТЬ О КАКОМ НАХРЕН VIEW.INDEX ШЛА РЕЧЬ В ОШИБКЕ?

tyler19
() автор топика
Ответ на: комментарий от yanka

Вот это убожество из угловых скобок это удобно?

Как говорил один знакомый безопасник: «В армии главное — единообразность». Использовал EP (аналог ERB для perl) — реально удобно. А логическая перегруженность шаблонов, так такое и на smarty и просто на html+js можно сделать.

helios ★★★★★
()
Ответ на: комментарий от KRoN73

И про Perl многие то же самое пишут :D

И это тоже правда. Проблемы единого форматирования, обфускации и молодняка здесь не рассматриваются.

helios ★★★★★
()
Ответ на: комментарий от yanka

Любые закорючки, особенно, сильно меняющие поведение, затрудняют чтение.

Многозначность лучше многословности.

даже у тех у кого все хорошо со слепой печатью знают , что дотягиваться до верхнего цифрового ряда на клаве при одновременном зажиме Shift не совсем удобно.

Вы пишите код со скоростью 200 символов в минуту? Сомневаюсь.

Вылородень как-то писал, мол средняя скорость программиста — 40 строк в час. Я бы поднял до 100 (для perl/ruby/python/php), но всё равно остаётся туча времени на печать символов. И если часть из них помогут сделать мысль более выразительной — хвала им и почёт.

helios ★★★★★
()
Ответ на: комментарий от yanka

А вот это что? <%= render mytext %>

сравни {{ mytext }}

На вашей джанге это будет так:

{% include mytext %}

Если там вообще можно хранить название партиала в переменной mytext, я уже ни в чём не уверен что касается этих идиотских джанговых темплейтов.

tyler19
() автор топика

У Ruby и ROR есть один существенный недостаток , это как родовая травма - код запутанный и непрозрачный .Код python семантически прозрачный , даже самые сложные вещи легко читаются.

yanka ★★
()
Ответ на: комментарий от helios

И это тоже правда. Проблемы единого форматирования, обфускации и молодняка здесь не рассматриваются.

Что по поводу проблемы маразматических для языка высокого уровня вложенных массивов? А по поводу проблемы что некоторые типы данных преобразуются неявно приводя к бессмыссленным результатам?

tyler19
() автор топика
Ответ на: комментарий от yanka

У Ruby и ROR есть один существенный недостаток , это как родовая травма - код запутанный и непрозрачный .Код python семантически прозрачный , даже самые сложные вещи легко читаются.

Голословное утверждение. Жду аргументов, которых я со своей стороны много привёл. В чём заключается запутанность и непрозрачность кода так и не было разъяснено. По моим личным ощущениям я более простого для чтения кода не видел нигде. Но видимо вам не нравится что не надо писать импорты по каждому чиху и переливать переменные из одной в другую без толку.

tyler19
() автор топика
Ответ на: комментарий от tyler19

Что по поводу проблемы маразматических для языка высокого уровня вложенных массивов? ...

что там не так с массивами у тебя?

// как это всё сильно смахивает на плач молодого утёнка, лол :)

shty ★★★★★
()
Ответ на: комментарий от tyler19

у меня не подсвечивается код шаблонов, я не читаю как рендерить шаблоны в документации, я отношу к проблемам джанги синтаксис питона, я не прочитал что такое и зачем контексты и/или изза незнания языка не осилил сделать наследование вьевов или не посмотрел в доках на cbv(которые говно %) ). Ты хочешь чтоыб ктото на это ответил?

zz ★★★★
()
Ответ на: комментарий от tyler19

Что по поводу проблемы маразматических для языка высокого уровня вложенных массивов?

Как и в любом языке, реально отличающемся от остальных, в perl есть свои моменты, требующие осознания. Подобно парадигмам программирования, такие моменты признаются (и осознаются) не всеми (man неосиляторство).

Так вот именно таким моментом является вопрос разыменования. То есть у нас есть переменная (то бишь некая абстракция над данными) и её надо представить в некотором виде.

Пример:

my %hash = (green => apple, yellow => banana);
my $ref = \%hash; # <- делаем ссылку, что спокойно воспринимается публикой
print $ref->{green}; # что воспринимается публикой как "omg! это хак, шаманство, извращение"
print $$ref{green}; # это же -- синтаксический сахар. Отпугивает всех слабых духом.

То есть реально у нас есть переменные и возможность их разыменовать. Такой подход позволяет единообразно и эффективно работать не только с вашими драгоценными 2-мерными массивами, но и с произвольной структурой данных.

Даже объекты — в конечном счёте package'ы с возможностью разыменования в хеш/массив/скаляр и функции.

Такую простоту и мощь стоит таки понять.

Есть ещё 1 фундаментальный вопрос (в рамках perl) — контекст. Но это в следующих сериях.

helios ★★★★★
()
Ответ на: комментарий от helios

То есть реально у нас есть переменные и возможность их разыменовать. Такой подход позволяет единообразно и эффективно работать не только с вашими драгоценными 2-мерными массивами, но и с произвольной структурой данных.

Вот я ничего не понял, с какими такими произвольными структурами? Пример пожалуста. А в плане массивов о которых я говорил, если можно написать a[x][y] в руби зачем использовать пёрл?

tyler19
() автор топика
Ответ на: комментарий от helios

Такую простоту и мощь стоит таки понять

Но лучше бы допилили Perl 6, который по спеку куда вкуснее всех этих руби с питонами вместе взятыми :)

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

Но лучше бы допилили Perl 6, который по спеку куда вкуснее всех этих руби с питонами вместе взятыми :)

Привет тебе, добрый человек! :-D
Сам я не всё в perl6 приемлю. В частности, объектная система мне претит. Но бесконечные массивы, take/gather (какого чёрта я их пробовал — сейчас мне их жутко не хватает) и прочие реально крутые штуки из perl 6 мне очень, ну очень хочется в продакшен.

Однако, боюсь, что и этот язык станет языком «readonly» — так его описывают пара моих знакомых — хороших программистов.

helios ★★★★★
()

Прошу простить меня за столь нескромную просьбу, но не могли бы вы также описать и позитивные впечатления в контексте сабжа (если есть таковые), для полноты картины?

ivanzoid
()
Ответ на: комментарий от tyler19

Пример пожалуста.

Мусье, для Вас — всегда!
Вновь иду по проклятой земле.^W Прилетел нам JSON/XML/любая иная структура данных — нам хватит множества подряд идущих целых чисел для доступа (массив), либо всего остального (при адекватной «норме») --хешей чтобы описать ключи-значения. Так, есть у нас запрос пользователя:

{
  method => 'get'
  params => {
    a => 12,
    b => 23,
    file => [
      0 => {},
      1 => {
        size => 12,
        type => 'plain/text',
      },
    ]
  }
}


Тогда для того, чтобы получить тип файла мы должны получить данную структуру параметром и дойти вглубь до элемента (логично?). И это будет выглядеть так: $struct = shift; $struct->{params}-{file}->[1]->{type} — довольно очевидный способ манипулировать данными.

А в плане массивов о которых я говорил, если можно написать a[x][y] в руби зачем использовать пёрл?

Так и ви будете удивлены:

h@h ~ $ perl -e 'my @a = (0,[0,00], 1,[1,10], 2,[2,20], 3, [3,30]); print $a[1][1];'
0
h@h ~ $ perl -e 'my @a = (0,[0,00], 1,[1,10], 2,[2,20], 3 [3,30]); print $a[1]->[1];'
0


То есть можно обращаться к элементу массива $a[x][y], что отличается от раби буквально на 1 шекель^W доллар.

helios ★★★★★
()
Последнее исправление: helios (всего исправлений: 2)
Ответ на: комментарий от helios

Это наз-ся объект в адекватных языках программирования высокого уровня. Зачем мне это ваше $struct->{params}-{file}->[1]->{type} когда можно struct.params.file[1].type?

tyler19
() автор топика
Ответ на: комментарий от yanka

Весь день холивар про руби ждал)

Чем {{}} лучше <%%> ?) Помоему одинаково (4 символа). Плюс, думается, примеры не равнозначны. В первом случае будет выведен шаблон (но не всегда) название которого храниться в переменной mytext, а во втором случае, я подозреваю, будет выведено то, что хранится в переменной mytext.

special-k ★★★★
()
Ответ на: комментарий от tyler19

$struct->{params}->{file}->[1]->{type}

Сокращается до:

$struct->{params}{file}[1]{type}
Это наз-ся объект в адекватных языках программирования высокого уровня

Нет, во всех языках программирования это называется хэш, вложенный в массив, который лежит в хэше, который тоже лежит в хэше, который тоже лежит в хэше.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.