Django - podział projektu oraz DRF

Django - podział projektu oraz DRF
CG
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 3 lata
  • Postów:76
0

Hej,
zaznaczę na początku, że w przypadku webdev jestem raczej początkującym :)
Mam kilka pytań dotyczących projektowania back-end w Django.
W przypadku aplikacji pisanej jako monolit:
Powiedzmy, że chcę zbudować blog + sklep internetowy. Rozumiem, że sklep internetowy oraz blog rozdzielam jako różne app's.
Często spotkałem się, że jako oddzielne app buduje się system logowania - nazwijmy je "accounts". Tu buduję swoje widoki, modele odpowiedzialne za logowanie, rejestrację.
W takim przypadku powinienem stworzyć 3 apps:

  • accounts,
  • blog,
  • shop
  1. Czy taka praktyka jest prawidłowa?

Druga kwestia dotyczy mikroserwisów i DRF.
Oczywiste jest dla mnie, że w przypadku dużych aplikacji lepiej kompletnie oddzielić back-end od front-end zamiast budować aplikacje w czystym Django. Czyste Django ewentualnie jedynie pod PoC.
2. I teraz moje pytanie - jak buduje się tego typu aplikacje? Jak wykorzystuje się DRF? Jak oddziela back- od front-end?

edytowany 1x, ostatnio: CzakuGim
grski
  • Rejestracja:ponad 9 lat
  • Ostatnio:8 miesięcy
  • Postów:245
1

sklep internetowy oraz blog rozdzielam jako różne app's. <- tak, możesz. w zasadzie pewnie powstanie ci troszkę więcej appsów. Ja osobiście bym rozdzialił to raczej na dwa oddzielne projekty djangowe - jeden ze sklepem, drugi z blogiem. A w appsach jeszcze mniejsze moduły, np. w sklepie coś jak "users", "orders", "invetory" i tak dalej. Ogólnie jak zrobisz cały sklep jako jedną appkę będącą częścią projektu tylko, to może się okazać, że bardzo ci ona spuchnie i ciężko się będzie odnaleźć w kodzie. Nie bój się dzielić rzeczy na mniejsze klocuszki.

Często spotkałem się, że jako oddzielne app buduje się system logowania - nazwijmy je "accounts". Tu buduję swoje widoki, modele odpowiedzialne za logowanie, rejestrację. tak, autentykacja i autoryzacja to zazwyczaj osobna appka. Przy czym polecam ci, byś sam nie wymyślał tutaj koła na nowo, zwłaszcza jak o security idzie, i skorzystał z gotowców wbudowanych w django. Pisząc samemu od postaw system autoryzacji/autentykacji istnieje 99,9% szansy na to, że coś grubo popsujesz. Więc twoja appka accounts czu też users, jak nazwiesz, bez różnicy, powinna być tylko lekką nakładką na auth z django.

W takim przypadku powinienem stworzyć 3 apps: jak napisałem wyżej - ja bym to bardziej rozbił na dwa projekty złożone z wielu appek. Ilu? Trudno powiedzieć, zależy od requirementsów.

Czy taka praktyka jest prawidłowa? - tutaj moim zdaniem upchniesz za dużo rzeczy odpowiedzialnych za różne funkcjonalności w jedną appke typu shop, spróbuj zaprojektować swój kod tak, by był on w miarę logicznie podzielony na małe paczuszki/fragmenty (appki), które odpowiadają za jakiś konkretny fragment funkcjonalności.

zamiast budować aplikacje w czystym Django mikroserwisik też możesz napisać w czystym django bez użycia django templates. DRF to tylko nakładka, która to ułatiwa. Nic nie stoi na przeszkodzie robienia RESTowych API za pomocą czystego Django.

I teraz moje pytanie - jak buduje się tego typu aplikacje? Jak wykorzystuje się DRF? Jak oddziela back- od front-end? <- zazwyczaj dzieli się je na wiele małych klocuszków. Dlaczego? Zamykasz pewną funkcjonalność, pewien kontekst i logikę biznesową, w jednym jakimś miejscu. To tam jest, jest do ogarnięcia. Jeśli wszystko jest wymieszane razem, czasem trudno to ogarnąć i robi się bałaganik.
Co do pytania - jak się je buduje... Cóż, książkę można by o tym napisać. W zasadzie kilka. Kilkadziesiąt, kilkaset w sumie. Ludzie dalej nie są do końca tego pewni i dalej powstają badania, książki, publikacje, zgłębiająće ten temat.

Jedno jest pewne, obecnie mamy tak wysoki poziom specjalizacji, że fronty są kompletnie oddzielne (często teraz nawet front się dzieli - jest gość od html/css, jest gość od reacta, jest gość o czystego jsa) - zazwyczaj to jakaś aplikacja napisana w react, która korzysta z backendowego restowego api. Oprócz frontu, backendu, zazwyczaj mamy też osoby odpowiedzialne za projekty interfejsu graficznego - tego co widzi użytkownik, tego jak to ma działać - UX ogółem, OPSi, zajmujący się infrastrukturą, admini. Ogółem przy dużych appkach ten podział pracy jest bardzo wyspecjalizowany.

Pod przykrywką api może się czaić wiele serwisów skupionych w jednym gatewayu, albo i nie - front może korzystać jednocześnie z wielu api. Temat rzeka ogółem.

DRF wykorzystuje się do budowy restowych api z użyciem django - tak po prostu. Ułatwia i rzyśpiesza on pracę. Wszystko, co zrobisz w drfie, możesz oczywiście też naklepać sam w gołym django, ale to bez sensu - wymyślanie koła na nowo.

Front od backendu jest oddzielany tak, że to po prostu dwie różne aplikacje, dwa różne repo, dwa rózne codebasy. Zazwyczaj. Oczywiście można wszystko nasrać w jednym repo, da się, ale... ;)

Nie wiem cóż ci mogę więcej napisać.


Napisałem książkę - Programowanie z Górskim: Junior Python Developer
Pora na następny krok na drodze po pierwszą pracę w it i WCALE-NIE-MITYCZNE #programista40k? Zapraszam.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)