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í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).
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.
Mé první setkání s Django REST
Hodně jednoduché přidávání úkolů tady a tadyRestrikce uživatelů
Krásné tutoriály na Django framework
Posílání emailů
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.
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.
Databáze má vlastní kontejner. Je potřeba doplnit sekci o instalaci, jelikož instalace samotná se lehce rozšířila.
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.
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
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
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
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.
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
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
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
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
Vytvořil jsem si předběžný diagram své databáze pro tuto aplikaci v programu DIA.
Doba práce: 2 hodiny