Můj první web v Pythonu a Djangu, aneb po 9 letech zpátky k programování

Na začátku roku 2012 jsem skončil s programováním. V té době jsem dělal v Javě. Od té doby jsem na programování ani nesáhl a všechny mé webové projekty jsem stavěl na nějakých redakčních systémech (WordPress, Drupal, Prestashop). Jenže ohýbat redakční systém k nějakým specifičtějším účelům je celkem nešikovné a výsledek nebyl nikdy úplně podle mých představ. Díky Covidu jsem se koncem minulého roku konečně rozhodl znovu vrátit k programování, protože jako portrétní fotograf bych brzo v období pandemie zkrachoval. K Javě se mi moc vracet nechtělo, na menší projekty mi přijde těžkopádná. Koukal jsem na možné alternativy a do oka mi padl Python. Líbí se mi množství dostupných knihoven a nástrojů, včetně množství možností v oblasti machine learningu. K vývoji webu mi přišel nejlepší framework Django. A tak jsem se koncem listopadu 2020 pustil do vytvoření prvního webu, abych se na něm naučil základy. Photo News Feed Vymyslel jsem si jednoduchý web Photo News Feed, kde budu vkládat odkazy na články a videa, které se týkají foťáků a objektivů. Někdy před 5 lety jsem podobný web udělal ve WordPressu. Ale pro vložení nového odkazu jsem musel ručně vytvořit nový příspěvek, zkopírovat odkaz, nadpis, nahrát ilustrační fotku, přiřadit příspěvku klíčové slova podle toho čeho se to týkalo a taky tu ilustrační fotkua vložení takového příspěvku zabralo dost času. Nicméně web i s minimem práce vydělal v té době z reklam více, než mé hlavní Fototipy. Cílem nového webu v Pythonu bylo co nejvíce věcí automatizovat, aby bylo vkládání odkazů na nové články a videa co nejjednodušší a nejrychlejší. Web jako takový je strašně jednoduchý zobrazuje katalog fototechniky a k nim odkazy na články k nim. Vyhrál jsem si ale s tou částí vkládání nových odkazů. Takhle vypadá formulář pro vkládání nových odkazů. Jediný vstup z mé strany je jen url. Pomocí BeautifulSoup4 stáhnu stránku ze zadané url a předvyplním nadpis, typ odkazu, foťáky/objektivy o kterých článek je a taky ilustrační obrázek. U velké části odkazů (hlavně z Youtube) nemusím už nic dalšího řešit, zkontroluju jestli je vše správně a potvrdím to. Je to záležitost tak na 5 sekund. U odkazů na některé weby pořád trochu zlobí vyplňování údajů. Nadpis si zjišťuju pomocí og:description meta tagu. Pokud ho web nemá vyplněný, hledám první h2 nadpis a pokud ani ten není, hledám h1 nadpis. Bohužel některé weby s recenzema nemají strukturu webu správně nastavenou a u těch mi pak automatické načítání nefunguje a musím vše vyplnit ručně. Taky ještě řeším rozpoznávání foťáků a objektivů. Vycházím z textu v nadpise, protože ten považuju jako hlavní ukazatel toho o čem článek/video je. Jenže foťáky a objektivy lidi nazývají různě (např stejný foťák je označován jako 5D mark IV, 5D mark 4, 5D mkIV, 5Dmk4). U objektivů je to ještě horší. Co se týká fotky, web nabídne jako první fotku uvedenou v og:image. Pokud není uvedeno, nabídne prvních několik obrázků vyskytující se na dané url. Někde to funguje dobře, na několika webech jsou ale na prních místech jen obrázky netýkající se článku. Pro tyto případy mám ve formuláři i pole pro url náhledového obrázku. Trochu mě potrápilo množství objektivů v katalogu. Když jsem web vytvářel, měl jsem na testovacím prostředí v katalogu pár položek a formulář byl přehledný. Jenže po vložení asi 400 foťáků a objektivů začal být formulář nepoužitelný. Roztřídil jsem tedy jednotlivé checkboxy do záložek a oddělil jsem objektivy ve dvou skupinách (DSLR a mirrorless). Takhle to vypadá po rozkliknutí objektivů pro bezzrcadlovky. Není to ideální, ale dá se v tom rychle hledat a zatrhnout potřebné pole. Do budoucna bych to chtěl ještě předělat tak, aby tam bylo vyhledávací pole do kterého budu zadávat řetězec a podle toho se mi budou dynamicky filtrovat položky obsahující daný řetězec. Po uložení odkazu se automaticky stáhne zvolený obrázek, vygenerují se náhledy. Pomocí Facebook Graph API si k danému odkazu zjistím engadgement (počet lajků, sdílení a komentářů) a uložím si číslo k určení popularity daného článku/videa. Pokud odkaz ukládá admin, rovnou se publikuje. Odkazy zatím může přidávat jen admin. Pro nepřihlášené uživatele je dole v patičce webu formulář, kde může uživatel poslat url na zajímavý článek/video. Mě se to pak v administraci webu zobrazí jako suggested link kde vidím url a vedle něj odkaz na formulář pro vložení tohoto navrženého odkazu na web. Po kliknutí mě to přesměruje na výše uvedený formulář kde je v ideálním případě vše předvyplněné a já to potvrdím. Tím se odkaz uloží na web a suggested link zaslaný anonymním návštěvníkem se označí jako schválený. Co jsem zatím vůbec neřešil jsou data publikace článku/videa. Aktuálně na webu řadím příspěvky podle data vložení odkazu. Protože kdybych ručně měl u každé položky vyplňovat datum, bylo by to na dlouho. Ale pokud se projekt rozjede a bude vydělávat, tak chci přidat automatizované zjišťování data příspěvků i pro odkazy zaslané dříve. Aby se mi na webu řadily dle data publikace a ne data vložení odkazu. Dojmy z Pythonu a Djanga Byl jsem mimo obor hodně dlouho a trochu se to projevilo na schopnosti se po takové pauze znovu učit. Python je sám o sobě hezký a celkem jednoduchý jazyk, jen pořád ještě trochu zápasím s dynamickým typováním. U jazyků se statickým typováním vím co v dané části kodu čekat a jak s tím pracovat. U Pythonu bývám ještě pořád občas zmatený. A taky mi v začátku trochu zamotalo hlavu, že všechno v Pythonu je objekt. Ale jinak se mi v Pythonu pracuje příjemně. Hodně mile mě překvapil Django framework. Chvíli mi trvalo než jsem pochopil základy. Ale pokud už člověk ví co a jak, tak se v něm dá velmi snadno a rychle vyvíjet hotové weby. Hlavně to objektově relační mapování je perfektní (alespoň u tak jednoduchého projektu). V podstatě jsem na SQL nesáhl, pracuju s daty aplikace už pomocí objektů v rámci Pythonu. A to jsem v průběhu vývoje změnil databázi z SQLite na PostgreSQL, aniž bych musel měnit kód aplikace. Zatím při vývoji musím hodně často googlit, ale překvapuje mě, že spousta problémů se v Djangu dá vyřešit mnohem jednodušeji, než jsem původně myslel. Jako nevýhodu ale vidím možnosti nasazení takového projektu na produkční prostředí. Třeba při vývoji webů v PHP je to jednoduché, stačí si objednat hosting za pár korun, nahrát soubory na ftp a je hotovo. U Pythonu je to mnohem složitější. Třeba co se týká přímo hostingu Python aplikací, v česku jsem našel tuším jen Roští.cz. Nabídka je i celosvětově mnohem menší a člověk k nasazení musí znát více, než jen připojení k ftp a konfiguraci .htaccess souboru. Nakonec jsem se rozhodl, že si objednám virtuální server a zprovozním si web tam. Díky tomu si pak nebudu muset při spouštění dalšího webu objednávat další hosting a budu mít možnost kde provozovat i malé/experimentální projekty. Zvolil jsem virtuální server od WEDOSU. Můžu si tam dynamicky konfigurovat parametry serveru, zatím jsem zvolil prakticky tu nejméně výkonnou variantu. I tak mě ale překvapilo, jak rychle tam web běží. Jasně, není to nic složitého, ale i tak je to násobně rychlejší, než weby co jsem doteď provozoval na WordPressu. Dokonce to bylo tak rychlé, že po zprovoznění webu v produkčním prostředí jsem musel kontrolovat, jestli omylem neprohlížím web na localhostu První zkušenost s Dockerem Pro nasazení aplikace na server jsem se rozhodl využít Dockeru, abych mohl jednoduše v případě potřeby aplikaci přenést na jiný server. Musím přiznat, že konfigurace serveru, Dockeru a zprovoznění reverzní proxy mi dalo zabrat více, než vývoj samotného webu. Nakonec se mi to podařilo nastavit podle představ web a databáze běží v samostatných docker kontejnerech. V dalším kontejneru běží nginx jako reverzní proxy a v dalším kontejneru pak aplikace která se stará o stahování certifikátů z Lets Encrypt. Zprovoznění tohoto řešení dalo sice dost práce, ale když teď budu chtít na tom serveru rozjet další projekt, bude to už jednoduché. A třeba ten první web jsem si nastavil tak, že jeho aktualizace je stejná jako jsem zvyklý u klasických php webů. Stačí nahrát zdrojáky pomocí ftp a je to. Pro takový malý projekt je to ideální a rychlé řešení. Co dál? Photo News Feed byl jednoduchý projekt. Uvidím jestli tam začnou chodit lidi a bude mi to vydělávat z reklam. Pokud jo, budu se mu dále věnovat a rozvíjet ho. Nicméně pro mé další projekty které mám v plánu se toho budu muset ještě hodně naučit. Konkrétně mám v plánu: Django REST framework, Vue.js a Javascript abych měl aplikace více dynamické a uživatelsky přívětivější.Práce s mapama, geolokacíMachine learning lepší práce s obsahem, automatizaceAutomatické testy a robustnější deployment proces Nakonec jsem tedy zjistil že s programováním je to jako s jízdou na kole, nezapomíná se to. Teď jen najít zaměstnání, kde bych mohl makat na zajímavých projektech a ještě rychleji posunout dál na pokročilejší úroveň. The post Můj první web v Pythonu a Djangu, aneb po 9 letech zpátky k programování first appeared on David Nogol.

projít na článek

Highwaying aneb Trutnovský festival spojený s takticko-operačním cvičení štábních důstojníků.

Zpráva o cestě Majerovek do Trutnova tam a zase zpátky a hlavně o tom, jak vynalezli highwaying.

projít na článek

MUŠKETÝŘI PO TŘICETI LETECH, ANEB ČESTNÝ MUŠKETÝŘSKÝ

Autor: Valeri Petrov Premiéra: 20. prosinec 2003; 19:30 hodin; sál sokolovny v Choceradech

projít na článek

Na Cimbálu bylo veselo, aneb závody do vrchu po letech

Po více jak deseti letech, kdy se zde žádné závody nekonaly se pořadatelé Eddacup rozhodli vyrazit na Cimbál. Vrch zvaný Cimbál přilákal o víkendu v blízkosti Semil přes osmdesát závodníků Eddacupu, tedy nezávislých závodů do vrchu. Trať mezi Bozkovem a

projít na článek

Proč je dobré umět programovat?

Programování se může zdát jako těžká činnost, kterou jistě umí jen programátoři a IT specialisté, tak to ale není. Tito lidé se tomu věnují, takže je jasné, že to umí a jsou v tom dobří, ale umět to může každý, a navíc je v dnešní době opravdu velká výhod

projít na článek

Zpátky do školy aneb Jak na vzdělávání dospělých?

Nejen v dětském věku, ale i v tom dospělém bychom se měli nadále vzdělávat. Možností pro vzdělávání dospělých existuje opravdu obrovské množství. Jednou z nich jsou rekvalifikační kurzy, které navíc zvýší vaše šance a jistotu na pracovním trhu. Co všechno

projít na článek