LINUX.ORG.RU

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


1

5

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

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

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

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

★
Ответ на: комментарий от dictator

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

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

если смотреть ширше, то и в руби не всё так гладко, подводных камней хватает и там ;-)

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

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

Ruby настолько эллегантен что для него не требуется гигантских IDE, достаточно простого текстового редактора с подстветкой синтаксиса. В то время как для ваших языков нужны отдельные IDE для комфортной работы.

какое отношение autoimp имеет к IDE? :)

Видимо ваши людии просто незнакомы с Ruby. После знакомства с Ruby синтаксис любого другого языка кажется ущербным.

Да? А я вот Lisp/Scheme/Clojure люблю. Мне они больше нравятся, чем Python. Ruby может в этом потягаться с Lisp?

Жду бенчмарков т.к. ваше сообщение голословно.

мне лень, тебе нужно подтверждение, так сделай его сам :)

Задача фреймвёрка это сделать так что бы программист писал только тот код который делает его приложение уникальным, используя готовый код для общих часто требующихся вещей. В RoR мне достаточно сесть и написать метод в контроллёре. В Django мне надо написать 10 строчек автоимпортов, создать urls.py и писать туда для каждого URL (и там тоже несколько строчек импортов), все переменные переложить в хэш для отправки в темплейт, указать путь к этому темплейту в settings.py.

Фреймворк - это модное название такого устоявшегося термина как «библиотека», задача у него одна - дать кучу готовых инструментов для быстрой разработки.

Причём туда надо писать полный путь начиная от /. Что за хер?

Иди почитай документацию для начала :)

Как переносить потом на другую машину?

Если у тебя нет опыта деплоя Django, то зачем ты создал этот топик? Твои посты выглядят глупыми из-за незнания ни Django, ни Python. Пиши на RoR, если тебе это нравится. Мне вот нравится Python + Flask/Pyramid и он быстрее всех Django/RoR вместе взятых :)

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

Иди почитай документацию для начала :)

В комментариях из файла settings.py ясно указано что необходим полный путь.

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

Да? А я вот Lisp/Scheme/Clojure люблю. Мне они больше нравятся, чем Python...

Можно узнать чем именно они больше нравятся?!

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

В комментариях из файла settings.py ясно указано что необходим полный путь.

http://bit.ly/RNhu0Y

Еще глупые вопросы будут?

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

Дочитал. И это все?

мне еще медведей позвать и с цыганами тебе сплясать?

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

{ <список переменных здесь }


Это не список, а хэш. По сути так передается отдельное локальное пространство имен для шаблона, т.к. в Python неймспейсы представлены хэшами.
И это как раз pythonic для тех, кто понимает.

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

Утиная типизация же. Если по коду «x» складывается с «y», то это значит, что они поддерживают соответствующие методы (__add__ и возможно __radd__), и большего нам и знать не нужно. Если с типами случится косяк, то достаточно строгая типизация это прозрачно укажет (в отличие от языков, которые грешат «удобным» автоприведением типов). И никакие @%$ по большому счету не нужны. Так что тут питон опять же последователен.
В конце концов всегда можно найти определение переменной и посмотреть из чего она сделана, ты сам написал, что программист непосредственно на кодинг мало времени тратит. Заодно и код лучше поймешь.

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

Это не список, а хэш. По сути так передается отдельное локальное пространство имен для шаблона, т.к. в Python неймспейсы представлены хэшами. И это как раз pythonic для тех, кто понимает.

Меня вот совсем не радует переливать данные в этот хэш. Если в rails я напишу просто

@x = 1
@y = 2
@z = 3

то в Django мне надо писать:

import
import
import
import
import
import
import
import

dict = {}
dict['x'] = 1
dict['y'] = 2
dict['z'] = 3

return render_to_response('template.html', dict, context_instance=RequestContext(request))

Сравните насколько менее удобен для разработки django.

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

Пиши на RoR, если тебе это нравится. Мне вот нравится Python + Flask/Pyramid и он быстрее всех Django/RoR вместе взятых :)

Не корректно сравнивать микрофреймвёрк и полноценный фреймвёрк. После того как ты в flask напишешь велосипед для реализации того что есть в RoR насколько быстрым он станет? Сравнивай тогда с sinatra.

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

используй венгерскую нотацию, перепиленную на свой лад)) ivSomething - instance variable, cvSomething - class variable, итп. Можешь туда же типы впилить, iviSomething - instance variable of integer type =) Любое извращение за твои нервы.

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

холиварить тут бессмысленно, это не фича джанги, это фича питона



dict = {}
dict['x'] = 1
dict['y'] = 2
dict['z'] = 3

return render_to_response('template.html', dict, context_instance=RequestContext(request))

в пирмиде это будет так

@view_config(renderer="path/to/template", route_name="my_route_name")
def view1(request):
    dict = {}
    dict['x'] = 1
    dict['y'] = 2
    dict['z'] = 3

    return dict

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

в джанге так никто не пишет. юзают либо direct_to_template, либо декоратор вроде такого http://djangosnippets.org/snippets/821/

Ну надо же, мне ещё надо в какой то djangosnippets лезть для такого элементарного действия что бы искать там костыль для джанги. Во всей документации джанги ясное дело ни слова об этом.

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

используй венгерскую нотацию

Нет уж, возвращаюсь в RoR. Закончил кое как проект на джанге.

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

холиварить тут бессмысленно, это не фича джанги, это фича питона

Это не фича, эта баг.

в пирмиде это будет так

Я в курсе, писать не меньше всего.

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

про direct_to_template там есть, про декоратор это уже и самому можно додуматься

from django.views.generic.simple import direct_to_template

def mega_view(request):
 return direct_to_template(request, "templ.html",
   {"x": 1, "y": 2, "z": 3})

либо с декоратором:

from mytools import render

@render("templ.html")
def mega_view(request):
 return {"x": 1, "y": 2, "z": 3}

обычно так и делают. а как в рельсах это будет выглядеть?

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

Не корректно сравнивать микрофреймвёрк и полноценный фреймвёрк.

я и не сравнивал

После того как ты в flask напишешь велосипед для реализации того что есть в RoR насколько быстрым он станет?

зачем мне реализовывать все что есть в RoR?

Сравнивай тогда с sinatra.

я не знаю что такое sinatra, если тебе нужно, то сравни сам.

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

Я в курсе

тогда тебе нужен web2py, это единственный питоновский фрейворк который делает автоимпорт «для облегчения». За что вебтупаевцы регулярно выхватывают виртуальных виздулей в питон комьюнити.

bismi ★
()

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

Руби головного мозга. Сперва хоть мало мальски разберись и хотя бы Tutorial джанговский пройди, а потом пиши.

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

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

Все три знаешь слабо? =)

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

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

Пиши s вместо self, какая разница?

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

Ну slim, согласна, очень питонично и вроде есть даже форки под python (mint!)

От себя замечу, не знаю как другим, но мне удобней сверстать html макет , а уж потом делать из него темплейт. Для несложных страниц slim хорош, но сомневаюсь, что это удобно при сложной верстке ...

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

а как в рельсах это будет выглядеть?

В рельсах во вьюхе доступны переменные класса контролера. Т.е. в контролере:

@foo = Model.find(xx)

во вью:

@foo.field
Reaper ★★
()
Ответ на: комментарий от yanka

От себя замечу, не знаю как другим, но мне удобней сверстать html макет , а уж потом делать из него темплейт. Для несложных страниц slim хорош, но сомневаюсь, что это удобно при сложной верстке ...

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

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

Все три знаешь слабо? =)

В Yii активный контрибьютор. RoR ковыряю в свободное время по вечерам. На Django одно готовое веб-приложение поддерживаю и допиливаю по мере надобности клиенту.

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

Руби головного мозга. Сперва хоть мало мальски разберись и хотя бы Tutorial джанговский пройди, а потом пиши.

Вы думаете я его не читал?

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

Нет, может мне не повезло, но даже на не большом не дефолт круд проекте ~100k LoC - хуже говна не ел за всю свою жизнь.

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

Больше говна чем любой PHP framework вообще затруднительно отыскать. Если уж и использовать PHP то только для сайта визитки.

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

Смотря кто делал изначально приложение. Говно слепить можно и на Symfony2.

У нас сейчас 150 000 LoC. Всё очень и очень приятно.

resurtm ★★★
()
Ответ на: комментарий от tyler19
dict = {}
dict['x'] = 1
dict['y'] = 2
dict['z'] = 3

Я совсем не знаю руби, но подозреваю, что там тоже можно писать избыточно, особенно если хочется назло, как-то так:

my a = 0;

if (defined(a)) {
   ...
}

А если почитать доки, то можно писать удобнее.

К тому же один из принципов питона: явное лучше неявного. Но если на принципы питона плевать — можно юзать функцию locals()

def my_view(req):
     intances = InstModel.objects.filter(...).order_by(...)
     today = ...
     next_month = ...
     return render(req, 'path/to/template.html', locals())

В шаблоне будут доступны переменные instances, next_month и today.

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

Пишу в обычном VIM. И синтаксис подсвечивается и автокомплиты работают и это всего лишь VIM. ЧЯДНТ?

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

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

Некоторые и про PHP много интересного пишут. Не будем пальцем показывать.

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

Мне кажется это настолько очевидно, что тот, кто этого сразу не видит, уже безнадёжен. И что-то такому доказывать уже смысла нет.

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

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

А какое отношение заявленное имеет к «неосиляторству»? o_O

Или ты думаешь, что считать синтаксис языка непрозрачным и неэргономичным может только тот, кто язык «не осилил»? Тогда у меня для тебя плохие новости :)

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

У Ruby и ROR есть один существенный недостаток , это как родовая травма - код запутанный и непрозрачный

Подписываемся не читая что ли?

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

Подписываемся не читая что ли?

А что тебе не нравится? То, что человек только один существенный недостаток нашёл? Или ты считаешь, что осиливший любой язык принципиальо не будет его считать запутанным и непрозрачным? :)

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

Так вот, о чем бишь я.

Код на Руби синтаксически состоит практически полностью из методов и блоков. Рассуждать про неэргономичность Руби — это примерно как рассуждать про неэргономичность лиспов, тикля или Io. Что говорит исключительно о характеристиках программиста, а не о характеристиках языка.

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

sort of win

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

Пришёл потроллить, а дымиться у самого начало, лол.

jessey
()
Ответ на: комментарий от geekless

Код на Руби синтаксически состоит практически полностью из методов и блоков

А речь не о структурной логике, а о синтаксисе.

Рассуждать про неэргономичность Руби — это примерно как рассуждать про неэргономичность лиспов, тикля или Io.

Кстати, да. Хороший пример. Тоже отвратительные языки :)

Что говорит исключительно о характеристиках программиста

Да ни разу. Ужасный синтаксически язык может иметь массу поклонников. И, наоборот, чистый, понятный и строгий язык может не быть популярным.

Характеристика читаемости синтаксиса языка никак прямо не связана ни с популярностью, ни с лёгкостью освоения…

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