Radosław Wejda

Radosław Wejda Senior SAP BI
Specialist, Oerlikon

Temat: Python + AngularJS w miejsce Django

Hej

Jak bardzo skomplikowane jest wdrożenie systemu w oparciu o interfejs wykonany przy pomocy AngularJS wspierany generatorem JSON dostarczonym w Pythonie. Chodzi mi o alternatywę w stosunku do zastosowania Django.

konto usunięte

Temat: Python + AngularJS w miejsce Django

Bardzo.

konto usunięte

Temat: Python + AngularJS w miejsce Django

Heh... to chyba nazbyt optymistyczne podejście, że "bardzo".

konto usunięte

Temat: Python + AngularJS w miejsce Django

Nie bardzo wiem co odpowiedzieć na takie pytanie. Zajrzałem na profil pytającego i IMVHO sam powinien znać odpowiedź. No, ale... Dla mnie to trochę tak jak by się zapytać, czy robienie czegoś ręcznie jest alternatywą dla dużego frameworka, który ma naście lat. No... niby jest, ale co to za alternatywa. No i nie bardzo wiem, czy chodzi o już działający system, który ma zostać przerobiony, czy start od zera.
Radosław Wejda

Radosław Wejda Senior SAP BI
Specialist, Oerlikon

Temat: Python + AngularJS w miejsce Django

Chodzi o system, który ma być przerobiony od zera. Architekt narzeka na zarządzanie modelem bazy danych z poziomu Django i liche wsparcie obłsugi synonimów czy widoków (koszty + polityka). Nigdy wcześniej nie miałem okazji łączyć Angulara JS z czysto Pythonowym kodem, stąd moje pytanie.

W zasadzie chodzi mi o informację o wąskich gardłach takiego podejścia.

konto usunięte

Temat: Python + AngularJS w miejsce Django

Hm... jakby to powiedzieć... zawsze system pisany od zera jest bardziej seksowny. Problem w tym, że bardzo często się potem okazuje, że przepisywanie to jednak była ślepa uliczka, bo nowa wersja wprowadzi masę błędów i inne działanie, które może frustrować użytkowników. No ale to jest decyzja biznesowa. Z drugiej strony przepisywanie Netscape'a to też była decyzja biznesowa.

Problemów z zarządzaniem modelem z poziomu Django nie rozumiem, nigdy nie miałem z tym problemu, chociaż modele potrafiły być zakręcone i, niestety, z cyklicznymi zależnościami.

Problemu z widokami też nie rozumiem. Stawiam na to, że albo ktoś nie wiedział jak zaimplementować to poprawnie, albo są jakieś okrutnie ciężkie warunki brzegowe, które nagle zaatakowały i nie da się ich obejść.

Tak czy siak rozumiem, że przepisanie aplikacji oznacza też zrobienie całkiem nowego modelu, który nie będzie miał błędów obecnego. To zawsze jest plus nowej implementacji.

A co do django + angular. Od ponad roku grzebię w tym i jak do tej pory zrobiłem, albo też brałem udział w zrobieniu, kilka totalnie zakręconych stron, których zawartość się zmienia dynamicznie zależnie od zmian na kilku innych komputerach.

Jedyny problem jaki był, to kwestia szablonów djangowych i integracja ich z angularem. Problem jest taki, że zrobiłem to źle. Starsza wersja Django do umieszczenia zawartości zmiennej w szablonie używa
{{ var }}
. Angular tak samo. Problem się pojawił, jak użytkownik wchodzi na stronę, generowany jest html, częściowo ze zmiennymi z django, częściowo ze zmiennymi z angulara. Rozwiązanie jest proste: można zmienić w django, albo angularze, {{ na coś innego. W moim przypadku było za późno zanim to znalazłem i zamiast tego mam pełno kodu w stylu
{% verbatim %}{{angular_variable}} {% endverbatim %} {{ django_variable }}
. Nowsza wersja Django pozwala na używanie innych szablonów, jak np. jinja, może to ułatwi życie, nie wiem.

Co do komunikacji, to z jednej strony mamy normalny szablon djangowy, który generuje htmla, który ładuje pliki z javascriptem. Potem mamy kod a angularze, który wysyła requesty do tej samej aplikacji djangowej i gada sobie z nią jsonem (w obie strony, wysyłany jest json, odbierany jest json, albo też tradycyjnie: wysyłany jest request GET i odbierany jest json). Mamy też otwarty websocket, który pozwala na to, że inna aplikacja (tak wyszło że inna i do tego napisana w pants, równie może być to ta sama aplikacja djangowa) może wysyłać do tej aplikacji angularowej informacje na temat tego co się dzieje i aplikacja może coś innego pokazać.

Angular jest świetny, bo pozwala na ładne ułożenie kodu, kod jest krótki i czysty. Problem z Angularem jest taki, że można łatwo zrobić taki bałagan, że potem wszelkie poprawki to koszmar.

No i jest świetny, bo wystarczy zmienić zmienną w javascripcie, a na stronie wszystko się automagicznie aktualizuje.

To co potrzebujecie do przepisania tej aplikacji, to przede wszystkim ktoś, kto zna Angulara. Nie może to być ktoś, kto dopiero się go uczy, bo będzie bałagan i za rok znowu będzie trzeba wszystko przepisywać. Angular ma niski próg wejścia, bierzemy sobie jeden plik, robimy jeden kontroler i jazda. Jak aplikacja jest bardziej skomplikowana, to trzeba użyć serwisów i dyrektyw, a to już jest o wiele bardziej problematyczne.

Jak dla mnie to taki system musi być jak Ogr. Znaczy się musi mieć warstwy. Musi być angular + html + css. Musi to gadać z dobrze zdefiniowanym API przez http (najlepiej jak angular będzie dostawał jsona, to ułatwia życie). Po drugiej stronie http wtedy może być cokolwiek. Nawet django. A pod tym czymś, dobrze zdefiniowany model w bazie.

Jak architekt narzeka na zarządzanie modelem, to może model jest do dupy, a nie samo Django. Czy model się drastycznie zmieni jak interfejs będzie w angularze? Dlaczego? To może zmienić go już teraz?

Czysto pythonowy kod nie ma nic do rzeczy jeśli chodzi o angulara. Wystarczy, że wyśle mu jsona z odpowiednim nagłówkiem, co jest dość ważne, bo wtedy automagicznie w angularze całość będzie obiektem javascriptowym.

Teraz będę pewnie robił (albo tez ktoś inny) te moje stare systemy angularowe od zera. Będzie też django. Będzie też angular i jquery. Komunikacja będzie przez websocket i requesty http gadające jsonami. Angular nie powinien w ogóle rozumieć modelu danych, który jest w bazie, zamiast tego powinien mieć własny model, który będzie wyświetlany na stronie. I dzięki takiemu rozdzieleniu warstw, będzie można zmieniać potem model danych w bazie, a angular może tego nawet nie zauważyć.
Piotr Maliński

Piotr Maliński Programista
Python/Django

Temat: Python + AngularJS w miejsce Django

Ja parę aplikacji Django + Ember.js robiłem. W przypadku embera, czy angulara można zrobić aplikację tak że stoi sobie to na nawet statycznym serwerze i ciągnie tylko JSONy z API lub innych źródeł z serwerów aplikacyjnych wystawiających jakieś API. Jeden może mieć django, drugi railsy, trzeci Javę itd. Jeżeli to duża aplikacja to można próbować projektować poszczególne klocki wedle ich potrzeb, bez konieczności posiadania monolitu.

Ale to spora zmiana, szczególnie gdy z klasycznej aplikacji przechodzi się na taką mocno JSową i rozproszoną. Opieranie się o aplikację JS może mieć też wady - np. problemy z wydajnością kodu na słabszych urządzeniach, czy problemy z SEO (gdy całość robi za "single page application"). No i co przeglądarka to ma własne smaki w JavaScript.
Marcin Nowak

Marcin Nowak Python, Django,
Cassandra,
PostgreSQL

Temat: Python + AngularJS w miejsce Django

Radosław W.:
Architekt narzeka na zarządzanie modelem bazy danych z poziomu Django i liche wsparcie obłsugi synonimów czy widoków (koszty + polityka)

Bo Django istotnie ma względnie prosty model danych (w kontekście mappingu obiektowo-relacyjnego), mimo że w tym temacie ostatnio sporo się zmieniło. Sęk w tym, że nie trzeba używać modelu Django do projektowania struktury danych. To jest mocne uproszczenie, choć popularyzowane przez samych twórców.

Wystarczy użyć Django jako mappera do wyciągania danych z bazy i względnie prostej modyfikacji. Wbudowane wsparcie dla raw queries w zupełności wystarczy do pozostałych operacji, a w razie czego mamy do dyspozycji przecież DBAPI.

Jedyną przeszkodą może okazać się wbudowany system migracji (od Django 1.7). Wystarczy go umiejętnie uciszyć a schematem zarządzać z poziomu narzędzia zewnętrznego, np. Liquibase (polecam).

Django nie będzie przeszkadzało w zarządzaniu modelem danych, a dostarczy sporo dobrych narzędzi i skróci czas developmentu. Nie zdecydowałbym się na pure-python. Już lepiej wziąć SQLAlchemy wraz z Pyramid.

konto usunięte

Temat: Python + AngularJS w miejsce Django

Marcin N.:
Radosław W.:
Architekt narzeka na zarządzanie modelem bazy danych z poziomu Django i liche wsparcie obłsugi synonimów czy widoków (koszty + polityka)

Jedyną przeszkodą może okazać się wbudowany system migracji (od Django 1.7). Wystarczy go umiejętnie uciszyć a schematem zarządzać z poziomu narzędzia zewnętrznego, np. Liquibase (polecam).

No nie wiem, jak ktoś zna django, to prościej jednak użyć migracji z django. Oczywiście nikt nie każe używać tych automatycznych z automagicznie wygenerowanymi migracjami. Równie dobrze można mieć migracje, w których się robi samemu dowolne zapytania, operacje i inne dziwne rzeczy.
Marcin Nowak

Marcin Nowak Python, Django,
Cassandra,
PostgreSQL

Temat: Python + AngularJS w miejsce Django

Szymon G.:
No nie wiem, jak ktoś zna django, to prościej jednak użyć migracji z django. Oczywiście nikt nie każe używać tych automatycznych z automagicznie wygenerowanymi migracjami. Równie dobrze można mieć migracje, w których się robi samemu dowolne zapytania, operacje i inne dziwne rzeczy.

Chwalę sobie South i te wbudowane też (pomimo pewnych drobnych wad), ale w projektach opartych wyłącznie o Django. Bardzo oszczędzają czas.

Tutaj ktoś pisze o ograniczeniach, a te da się ominąć w sposób jaki podałem (trzeba tylko unikać złożonych kluczy głównych). Można mieć dobry projekt bd i jednocześnie Django jako backend pod Angulara. Traktujesz wtedy Django jako część całości - klocek do realizacji pewnego rodzaju zadań. Nie musisz z niego rezygnować i trzaskać backendu "gołym pytonem" ;)

Następna dyskusja:

Python i Django. Programowa...




Wyślij zaproszenie do