/zaverecny-projekt

Repozitář určený pro můj maturitní projekt.

Primary LanguageJavaScript

Závěrečný projekt - Nástěnka úkolů

Toto je společný repozitář pro náš závěrečný maturitní projekt. S Martinem Dzidou děláme něco jako nástěnku úkolů. Já mám na starosti back-end v Djangu (REST API v Django Rest) a kontejnerizaci celé aplikace v Dockeru a Martin má na starost front-end v React.js.

Aplikace je rozdělena na 3 Docker kontejnery (front-end, back-end ve formě REST API a databázový server). Pro REST API je použitý framework Django REST a dj-rest-auth (dodatečný balíček pro autentifikaci, na který odkazuje dokumentace Djanga REST). Data jsou pak uložena v PostgreSQL databázi a přes API se tahají na front-end. Na front-endu se používají technologie React.js pro dynamické vykreslování stránky za pomocí komponentů, React-router-dom pro použivání url adres na front-endu, Redux a Redux React pro globální ukládání dat v aplikaci, Axios pro komunikaci s REST API a Bootstrap 4 pro dodatečný vzhled a responzivitu.

Cíle

Cílem tohoto projektu je vytvořit nástěnku úkolů pro více uživatelů, kde můžou mít různí uživatelé různé role a můžou být přiřazováni do různých skupin. Back-end chci vytvořit v Django REST, data ukládat do nějaké SQL databáze a aplikaci jako takovou vyvíjet pro Docker. Bylo by vhodné ukládat k příspěvkům (úkolům) přílohy a externí soubory, zaznamenávat čas a mít možnost provádět řazení a vyhledávání. Dále bych chtěl umožnit autentifikaci uživatelů pomocí E-mailu při registraci/zapomenutí hesla (na e-mail uživatele přijde zpráva s odkazem/kontrolním kódem).

Jak nainstalovat

Prvním a asi nejsložitějším krokem je nainstalování Dockeru. Ve Windows a Mac stačí nainstalovat Docker Desktop. V Linuxu je to lehce složitější. Mně v Ubuntu 18.04 pomohl tento návod, avšak nevěřím, že to půjde takhle lehce všude. Poté je ještě potřeba doinstalovat git a pak už stačí zadat jen tyto 3 příkazy do příkazové řádky:

git clone https://github.com/matejnesuta/zaverecny-projekt
cd zaverecny-projekt
docker-compose up --build

Při prvním spuštění projektu bude Djangu chybět superuživatel, ale to se dá velmi jednoduše vyřešit. Stačí zmáčknout klávesovou zkratku CTRL+Z pro přenesení procesu do pozadí (nebo alternativně otevřít 2. terminál). Pak stačí zadat jen příkaz docker exec -it backend python3 manage.py createsuperuser a docker exec -it backend python3 manage.py search_index --rebuild. Pro vrácení výstupu procesu je potřeba zadat příkaz fg.

Při prvním spuštění docker-compose up se vytvoří image kontejnerů a poté spustí. Při dalších spuštěních tohoto příkazu se již vytvořené image kontejnerů jen spustí. Kontejnery se dají postavit znovu pomocí příkazů docker-compose up --build, což je nutné dělat pokaždé, když se v souborech s projektem provede změna.

Na Windows se může objevit error ohledně toho, že Docker nemá přístup ke složce s projektem (vyznačuje se hláškou: ERROR: for db Cannot create container for service db: status code not OK but 500). Jeho řešení se dá najít zde.

Pokud narazíte na error standard_init_linux.go:219: exec user process caused: no such file or directory, je třeba udělat toto.

Testovací repozitáře

Mé první setkání s Django REST

Inspirace

Hodně jednoduché přidávání úkolů tady a tady
Restrikce uživatelů
Krásné tutoriály na Django framework
Posílání emailů

Průběh práce

10. 11. 2020

Všiml jsem si, že jsem nevalidoval soubory u profilových obrázků a u příloh, tak jsem dodělal validaci. Okomentoval jsem částečně kód.

09. 11. 2020

Vytvořil jsem první end-pointy pro samotnou aplikaci. Konkrétně se jedná a zobrazení a úpravu profilu uživatele (GET, PUT) a zobrazení detailu profilů ostatních uživatelů (GET). Věřím, že psaní dalších end-pointů půjde jako po másle.

04. 11. 2020

Databáze má vlastní kontejner. Je potřeba doplnit sekci o instalaci, jelikož instalace samotná se lehce rozšířila.

30. 10. 2020

Ztratil jsem absolutně pojem o čase. Docker funguje, propojení funguje, verifikace by taky měla (otestuju až se vyspím). Také úspěšně vypisuju na frontend data z databáze. Spoustu času jsem strávil analýzou kódu dj-rest-auth a sekce issues.

07. 10. 2020

Front-end a back-end má nyní každý svůj kontejner v Dockeru. Spoustu času mi trvalo vyřešit jejich propojení (React neviděl Django) a i potom mi Django házelo 400 bad request a já zatím nevím proč. Dopoledne dodám návod na instalaci.

Doba práce: 6 hodin

03. 10. 2020

Do Djanga se dá nyní jak přihlásit, tak registrovat pomocí jednoduchého webového rozhraní v Reactu. Nyní, když obě aplikace jedou spolu, můžu konečně obojí hodit pro snažší instalaci do Dockeru.

Doba práce: 3 hodin

28. 09. 2020

Hledání ideální knihovny umožňující jak emailovou verifikaci, tak registraci a login pomocí sociálních sítí a její následná implementace. Taky oprava hloupých bugů. Mám v REST frameworku konečně funkční jak normální registraci, tak login.

Doba práce: 5 hodin

23. 09. 2020

Jen lehký aktualizační commit. Přibyl tam formulář pro login, ale ten společně s registrací vymažu, jelikož chci udělat všechno v Django REST.

16. 09. 2020

Vytvořil jsem vlastní funkční registrační formulář, jelikož defaultní mi nestačil. Uživatel se registruje pomocí jména a hesla a poté je uložen do databáze. Nyní je potřeba doplnit přihlašovací formulář, tlačítko pro odhlášení, emailová autentifikace (aby bylo jasné, že daný email skutečně existuje) a přihlašování přes Facebook a Google. Myslím si, že do víkendu to stihnu. Poté začnu budovat API pro React.

Včera jsem zapomněl udělat commit, oops.

Tento commit v sobě nemá moc kódu, jelikož jsem většinu času buď opravoval bugy týkající se urls.py a views.py, nebo jsem řešil a hledal, jak bych mohl do aplikace vůbec login a sign up vložit.

Doba práce: 5-6 hodin

13. 09. 2020

Dopsání zbytku databázového modelu podle přiloženého diagramu a zajištění ukládání příloh (ukládají se do vlastní složky a v databázi je pak uložena je cesta k nim). Můj další plán je nyní naprogramovat registraci a přihlašování uživatelů.
Doba práce: 2 hodiny

10. 09. 2020

Oprava bugů, psaní modelu pro profil a jeho následné navázání na uživatelský model. Hlavně teda ale oprava bugů.
Doba práce: 2 hodiny 30 minut

04. 09. 2020

Udělal jsem začátek Django aplikace s vlastním uživatelským modelem, jelikož jsem chtěl, aby se lidé přihlašovali pomocí e-mailu a ne uživatelského jména. Také jsem ještě zkontroloval a lehce zkrášlil diagram.
Doba práce: 3 hodiny

29. 07. 2020

Vytvořil jsem si předběžný diagram své databáze pro tuto aplikaci v programu DIA.
Doba práce: 2 hodiny