Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Django vs Zend Framework

Hej.

Stanąłem przed dylematem przejścia z php/zend_framework na python/django.

Czy ktoś ma doświadczenie z jednym i z drugim i mógł by przedstawić racjonalne zalety django nad zendem ?

Wszędzie czytam, że kto przejdzie z php na pythona, ten już nie wróci spowrotem.
Wszystko super, ale nigdzie nie doszukałem się konkretnych powodów.
A spór przypomina mi nieustanny dialog o wyższości linuxa nad windowsem, albo maka nad pc'tem.

Interesują mnie biznesowe zastosowania (biblioteki), filozofia programowania (warstwy, separacja kodu, zasób technologii, web2.0, SOA, dostęp do BD), oraz wydajność.

Z góry dziekuje
Maciej.

konto usunięte

Temat: Django vs Zend Framework

Cześć, django.pl zrób sobie tutorial'a to zobaczysz różnicę.

w skrócie
+ http://djangoplugables.com/projects/ - gotowce
+ models, newforms, admin, etc
+ python :)

"Framework webowy dla perfekcjonistów (z terminami)
Django ułatwia szybsze tworzenie aplikacji webowych z mniejszą ilością kodu"

Korzystałem z ZF, Django - obecnie używam pylons ;)
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Django vs Zend Framework

Marcin Baran:
Cześć, django.pl zrób sobie tutorial'a to zobaczysz różnicę.

No zrobiłem już wcześniej, i nie wiele więcej wiem.

W ZF poza może panelem administracyjnym wszystko jest, bibliotek też od groma.

To że są różnice w składniach, drobne w filozofii to oczywiste.
Chodzi mi o komentarz praktyków - w czym zrobie szybciej średnio złożony projekt ? Co sprawia trudność (tak ogólnie) a co jest super-ułatwieniem ...

Panel administracyjny w django - wygląda na ciekawe rozwiązanie, tylko czy nie jest to przerost formy - czy nie odbiera zbytnio sfobody tego co chcemy zrobić ?
Mapowanie bazy danych na obiekty ... czy ideą jest wyłącznie pozbycie się SQL'a z kodu ? czy ma to bardziej racjonalne zastosowanie.

Wszystkie odczucia mile widziane, co kogo drażni, co komu przypadło do gustuMaciej Filipiak edytował(a) ten post dnia 06.07.09 o godzinie 09:04
Piotr Maliński

Piotr Maliński Programista
Python/Django

Temat: Django vs Zend Framework

Maciej Filipiak:

Panel administracyjny w django - wygląda na ciekawe rozwiązanie, tylko czy nie jest to przerost formy - czy nie odbiera zbytnio sfobody tego co chcemy zrobić ?

Można go modyfikować do własnych potrzeb. Dodawać CSSy/JSy, modyfikować szablony, czy też wpływać jakie dane są w nim wyświetlane konfigurując dany model. Generalnie jest to Panel Admin dla finalnego użytkownika zarządzającego serwisem i generalnie się sprawca.
Mapowanie bazy danych na obiekty ... czy ideą jest wyłącznie pozbycie się SQL'a z kodu ? czy ma to bardziej racjonalne zastosowanie.

Zabezpieczanie wprowadzanych danych, łatwa obsługa relacji, niezależność od typu bazy danych, możliwość generowania i walidowania np. formularzy dla danego modelu lub jego fragmentu :)

Uwzględnij też że w Pythonie jest bardzo dużo bibliotek "trzecich" nie powiązanych bezpośrednio z aplikacjami www, a i te, które wykorzystuje się w serwisach www też oferują sporo.
- obróbka grafiki: PIL
- PDFy, raporty: Reportlab, Pisa
- czytanie,zapisywanie do XLS: xlrd i xlwt
- pełnotekstowe wyszukiwanie: Whoosh (Python), Xapian (API), Solr (~API), Sphinx
- wykresy "naukowe": matplotlib
- wykrywanie twarzy na zdjęciach: openCV (API) :)
- Comet: np. Orbited
- geolokalizacja: geoip-python :)
itd.Piotr Maliński edytował(a) ten post dnia 06.07.09 o godzinie 12:25
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Django vs Zend Framework

Dzięki Piotr

W sumie tylko z tym panelem administracyjnym nie spotkałem się po stronie PHP.

konto usunięte

Temat: Django vs Zend Framework

Maciej Filipiak:
Hej.

Stanąłem przed dylematem przejścia z php/zend_framework na python/django.

Czy ktoś ma doświadczenie z jednym i z drugim i mógł by przedstawić racjonalne zalety django nad zendem ?

Wszędzie czytam, że kto przejdzie z php na pythona, ten już nie wróci spowrotem.
Wszystko super, ale nigdzie nie doszukałem się konkretnych powodów.
A spór przypomina mi nieustanny dialog o wyższości linuxa nad windowsem, albo maka nad pc'tem.

1. Python(język programowania) zamiast php(potworek powstały z języka template'ow)
2. Poziom dojrzałości kodu bibliotek pythonowych
3. Środowisko(zazwyczaj jeśli ktoś pisze arty to o czymś ciekawym/użytecznym a nie jak zrobić strone swojego psa)
4. Możliwość integracji z technologiami większego kalibru(moduły w c)
5. Wydajność - to jest specyficzne. Jeśli kulejesz wydajnościowo używając pythona to znaczy że próbujesz coś zrobić źle. Polecam jednak obserwować projekt 'unladen swallow'
Tomasz Z.

Tomasz Z. Freelancer

Temat: Django vs Zend Framework

Maciej Filipiak:

Panel administracyjny w django - wygląda na ciekawe rozwiązanie, tylko czy nie jest to przerost formy - czy nie odbiera zbytnio sfobody tego co chcemy zrobić ?
Mapowanie bazy danych na obiekty ... czy ideą jest wyłącznie pozbycie się SQL'a z kodu ? czy ma to bardziej racjonalne zastosowanie.

Przykład:
--------------
# To jest mapowane na tabelę w bazie danych
class Book(models.Model):
title = CharField(max_length=50)
# To jest przełożenie modelu z bazy danych na formularz HTML
class BookForm(forms.ModelForm):
class Meta:
model = Book

W szablonie renderujesz BookForma poprzez {{BookForm.as_p}}, dostajesz kod HTML dla inputa tekstowego z długością na 50 znaków.

Następnie obsługujesz POST:
def form_post_handler(request):
if request.method == 'POST':
f = BookForm(request.POST)
if f.is_valid():
f.save() # BookForm wie że jego modelem jest Book,
# więc automatycznie stworzy rekord w bazie

I tyle. Nie wiem czy to jest w Zend, być może jest,
a jak nie ma to wiesz co tracisz :)Tomasz Zieliński edytował(a) ten post dnia 06.07.09 o godzinie 12:36
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Django vs Zend Framework

Tomasz Zieliński:
I tyle. Nie wiem czy to jest w Zend, być może jest,
a jak nie ma to wiesz co tracisz :)

Dzięki Tomku za konkret.

Jest :) na szczęście da się z tego nie korzystać.
Osobno jest tworzenie formularzy i osobno komunikacja z bazą.

Czuje się pewniej miotając zapytania SQL do bazy.
Obiekty są pośrednikiem - czyli dodatkow czas procesora.
Być może w zwykłych, prostych selectach nie ma to znaczenia - ale dla bardziej złożonych, nie ma bola, żeby wydajność nie ucierpiała.

Druga sprawa, to między pobraniem z formularza a wrzuceniem do bazy trzeba jeszcze zwalidować, sprawdzić różne zależności, czasem zmodyfikować wartość. sformatować wynik w zależności od wartości, poinformować o błędzie walidacji etc.. etc..

Wtedy kod urasta w obu przypadkach - pytanie, w którym na ile.

Michał: no właśnie takich odpowiedzi znalazłem w necie najwięcej - same emocje. Przeżyłem w młodości spór o wyższości linuxa nad winzgrozą, a jednak programuje w windows, bo tego wymagają klienci.
Takie porównania chciał bym odfiltrować.

w PHP poczyniłem dość poważne aplikacje, nie żadne templejty... czyli się da.

Siła języka nie polega w składni czy w stylu programowania - ale w mocy i ilości bibliotek, niezawodności i wydajności.Maciej Filipiak edytował(a) ten post dnia 06.07.09 o godzinie 13:31
Piotr Maliński

Piotr Maliński Programista
Python/Django

Temat: Django vs Zend Framework

Jak masz nietypową walidację to piszesz własny walidator na dane pole lub na forumularz z własnym komunikatem błędu :) Na blogu mam dodawanie komentarzy z pytaniem (tekstowa "captcha"). Walidacja poprawności odpowiedzi jest nałożona na formularz:

class CommentForm(forms.ModelForm):
reply = forms.CharField()
token = forms.CharField()
class Meta:
model = Comment
def clean(self):
# check the answer
if 'token' in self.cleaned_data and 'reply' in self.cleaned_data:
try:
ct = CaptchaToken.objects.get(token=self.cleaned_data['token'])
except:
raise forms.ValidationError(_("Incorrect answer."))
else:
now = datetime.now()
check_time = now - timedelta(minutes=5)
if ct.date < check_time:
raise forms.ValidationError(_("Incorrect answer."))
if not ct.answer == sha.new(self.cleaned_data['reply']+settings.SECRET_KEY).hexdigest():
raise forms.ValidationError(_("Incorrect answer."))
ct.delete()
return self.cleaned_data

Generalnie elementy Django oferują bardzo dużo do zrealizowania za pomocą niewielkiej ilości kodu.

Możesz też poczytać o Ellington CMS - CMSie opartym na Django klasy "enterprise", czy też to co ostatnio się pokazało - everyblock - serwis mikrospołeczności, a cały kodzik na GPL3 :) A w kwestii tutoriali itd. zapraszam też na moją stronę ;)
Daniel Dąbrowski

Daniel Dąbrowski Właściciel, 42n

Temat: Django vs Zend Framework

Maciej Filipiak:

Czuje się pewniej miotając zapytania SQL do bazy.
Obiekty są pośrednikiem - czyli dodatkow czas procesora.
Być może w zwykłych, prostych selectach nie ma to znaczenia - ale dla bardziej złożonych, nie ma bola, żeby wydajność nie ucierpiała.

Alez skadze jezeli masz jakis fragment gdzie musisz naprawde postawic na wydajnosc z baza danych zawsze mozesz sie odwolac bezposrednio ale w 95% robisz to przez ORM. Nie ma znaczenia czy to sie robi w django czy moze pod .NET za pomoca NHibernate. ORM a tym bardziej wzorzec ActiveRecord ma przyspieszyc prace nad tymi 95% przypadkow pozostale 5% sam napiszesz zapytanie.
Siła języka nie polega w składni czy w stylu programowania - ale w mocy i ilości bibliotek, niezawodności i wydajności.Maciej Filipiak edytował(a) ten post dnia 06.07.09 o godzinie 13:31

co do bibliotek to moze obejrzyj to

http://www.youtube.com/watch?v=A-S0tqpPga4

konto usunięte

Temat: Django vs Zend Framework

Separacja kodu - MTV
Trochę podobne do MVC, z tą różnicą, że kontroler jest wbudowany w wewnętrzne mechanizmy frameworka, mechanizmy strony tworzysz na poziomie widoków, a dane prezentujesz w szablonach. Django posiada własny system szablonów.

Zasób technologii
Bardzo duży, ponieważ Python nie jest językiem stworzonym głównie do tworzenia aplikacji webowych, więc przydaje się w nietypowych zastosowaniach.
Istnieje masa gotowych aplikacji i skryptów dla Django (http://djangosnippets.org http://pinaxproject.com/)

Wydajność
Python jest szybszy niż PHP - polecam pobawić się tym: http://shootout.alioth.debian.org/gp4/benchmark.php?te...〈=all

Django - szybszy niż frameworki PHP: http://www.alrond.com/en/2007/jan/25/performance-test-...
Trochę stare, ale ciekawe, tym bardziej że programiści tworzący Django nie próżnują i poprawiają wydajność co wersję.

W kwestii zapytań do bazy - wydajność można poprawić pisząc nie tylko "surowe" zapytania do bazy, ale sam ORM ma usprawnienia przyspieszające działanie zapytań - patrz metody select_related() i extra()

Panel Administracyjny
To już było napisane, ale potwierdzam, że na tyle elastyczny, że można dostosowywać go wizualnie (grafika i układ). Niesamowicie przyspiesza proces tworzenia aplikacji.Jarosław Miazga edytował(a) ten post dnia 07.07.09 o godzinie 12:08
Marek Wywiał

Marek Wywiał Programista,
administrator,
instruktor

Temat: Django vs Zend Framework

Co do pisania 'czystym' SQL'i a ORM, to samymi sql'ami nie zapewnimy instances pooling czy szybkiej zmiany czytania modeli zależnych jednym SQL'em, bez mozolnego przepisywania kilku/nastu SQL'i (i się nie machnąć).
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Django vs Zend Framework

Wszystko zależy jak rozłożymy drobne logiczne niuanse.

Jeżeli potrzebuję wykonać zapytanie do bazy mocno posklejane
inner joinami, warunkami i groupami - to skoro mogę to zrobić jednym zapytaniem - dlaczego mam wypełniać 10 datasetów i iterować potem po nich ?
Druga sprawa - jeżeli aplikacja jest złożona, warto przyjąć jedną filozofię i jej się trzymać.

Uważam, że idealnym rozwiązaniem jest dodanie mini-warstwy pośredniej opartej na procedurach składowanych.
Komponent ORM dostaje wynik z procedury a nie zmapowane pola w tabeli.
Tomasz Z.

Tomasz Z. Freelancer

Temat: Django vs Zend Framework

Maciej Filipiak:
Tomasz Zieliński:
I tyle. Nie wiem czy to jest w Zend, być może jest,
a jak nie ma to wiesz co tracisz :)

Jest :) na szczęście da się z tego nie korzystać.
Osobno jest tworzenie formularzy i osobno komunikacja z bazą.

Tutaj też się tak da - ModelForm jest tylko udogodnieniem, zawsze można stworzyć zwykłego Forma który nie wie z jakim modelem jest powiązany.

Walidacja jest zaszyta w Formie i jego polach, można ją w całości podmienić, tak jak można podmienić przerzucanie danych z Forma do Modelu, również pisząc ręcznie SQLa.

Natomiast skoro to wszystko w Zend też jest, to Twój dylemat sprowadza się pewnie do własnych preferencji, wymagań klientów czy potencjalnych korzyści z panelu administracyjnego Django.

Odnośnie samego języka, to mam przeczucie że oferuje dużo więcej smaczków niż PHP, poprzez jawne założenie że wszystko jest obiektem (nawet klasa) i poprzez wstawki z programowania funkcjonalnego. Ale to tylko przeczucie (w każdym razie jako przechrzta z C++ co chwilę się na czymś zaskakuję).Tomasz Zieliński edytował(a) ten post dnia 10.07.09 o godzinie 14:13
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Django vs Zend Framework

C++ to już historyczny zabytek.
To co mnie udeżyło w pythonie to podobne do C++ wymieszanie programowania obiektowego ze strukturalnym.
Nie jest to miłe zaskoczenie.

Na dobrą sprawę można by nawiasy klamrowe przerobić na obiekty - tylko czy ma to sens ?

Dziękuje wszystkim za odpowiedź, na moje wątpliwości.
Daniel Dąbrowski

Daniel Dąbrowski Właściciel, 42n

Temat: Django vs Zend Framework

Maciej Filipiak:
C++ to już historyczny zabytek.
To co mnie udeżyło w pythonie to podobne do C++ wymieszanie programowania obiektowego ze strukturalnym.
Nie jest to miłe zaskoczenie.

Na dobrą sprawę można by nawiasy klamrowe przerobić na obiekty - tylko czy ma to sens ?

Czy chodzi Ci o to ze np na poczatku modulu piszesz jakis od w stylu


import costam

print "Tekst ptzy ladowwaniu modulu"
liczba = 5

class NowaKlasa:
print "kolejny teksy dla klasy"
def __init__(self):
liczba = 2



Na Php sie nie znam ale wiem ze Ty znasz sie na C# :)

to co znajduje sie na poczatku modulu to cos jak static contructor ale dla namespace w C# (cos takiego w c# nie isnieje) lub statyczny constructor dla klasy (to jest). Podobnie ze static fields. Wiec to nie jest tak do konca strukturalne

Sila pythona jak dla mnie (przechrzta z c# :) to Duck Typing czyli to co bedzie sie krylo w c# 4.0 a co juz jest dostepne w jezyku Boo dla .NET i wlasnie to ze wszystko jest obiektem. Raz dana referencja jest liczba a raz wskazaniem na funkcje jako obiekt - lambda czyli to co w C# jest anonimowym delegatem.

Co do zastapienie nawiasow klamrowych jako obiekty to oczywiescie ze ma sens :)

w pythionie to "with"

w C# dajesz jakis obiekt IDisposable i robisz tak


using(Benchmark.InMilisecond.ToConsole())
{
.... jakis skompilowany kod
}


dzieki temu kiedy kod dojdzie do "}" wowczas na ekranie pokazei sie czas wykonywania kodu ktory byl w klamrach .. prawie jak obiekty :)

dla zainteresowanych
http://code.google.com/p/rodcommons/source/browse/trun...
Tomasz Z.

Tomasz Z. Freelancer

Temat: Django vs Zend Framework

Maciej Filipiak:
C++ to już historyczny zabytek.

Zapraszam więc do zawodów w napisaniu np. Flatouta (taka stara wyścigówka 3D) w Pytonie czy PHP ;)
To co mnie udeżyło w pythonie to podobne do C++ wymieszanie programowania obiektowego ze strukturalnym.
Nie jest to miłe zaskoczenie.

Na dobrą sprawę można by nawiasy klamrowe przerobić na obiekty - tylko czy ma to sens ?

A to już kwestia gustuTomasz Zieliński edytował(a) ten post dnia 12.07.09 o godzinie 15:12
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Django vs Zend Framework

Tomasz Zieliński:
Zapraszam więc do zawodów w napisaniu np. Flatouta (taka stara wyścigówka 3D) w Pytonie czy PHP ;)

PHP to podobno skryptowy język - czyli nie do tego służy.
Ale w C#, żeby zachować kategorię wagową - spoko, możemy powalczyć.
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Django vs Zend Framework

Daniel Dąbrowski:
fields. Wiec to nie jest tak do konca strukturalne

Wiem, że nie jest - ale paskudnie to wygląda :)
Wierzę w tą światłość paradygmatu obiektowego, która przyświecała jego twórcom.
To tak jak cieszyć się wynalazkiem koła, żeby móc go potem ociosać.
Co do zastapienie nawiasow klamrowych jako obiekty to oczywiescie ze ma sens :)

Zwłaszcza programistom Whitespace przypadnie do gustu.
Można zrobić wiele, żeby "ułatwić sobie życie"
np. przeciążyć operatory i będziemy mieli 2+2=24
Jestem w stanie wyobrazić sobie sytuację, w której komuś taki zabieg ułatwi dalsze programowanie.

konto usunięte

Temat: Django vs Zend Framework

Maciej Filipiak:
C++ to już historyczny zabytek.
Głupota.
Można zrobić wiele, żeby "ułatwić sobie życie"
np. przeciążyć operatory i będziemy mieli 2+2=24
Jestem w stanie wyobrazić sobie sytuację, w której komuś taki zabieg ułatwi dalsze programowanie.
Robienie z Pythona Rubiego.



Wyślij zaproszenie do