LINUX.ORG.RU

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


1

6

Долгое время писал под 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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.