Zprávy - Navštivte web
Tři třináct - online karetní hra Zahrajte si tři třináct s přítelem kliknutím na odkaz níže a vygenerujte kód Invite nebo se připojte ke hře.Pozvěte pomocí kódu Připojte se k hře ***
Koupit dál

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou



Hrajte Color Sudoku online - hra Colordoku zdarma Toto je hra k hře Color Sudoku (Colordoku) zdarma. ***

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Příkladem praktického hlubokého učení a zabezpečení založeného na webu Třetí vydání Charlotte Harper 3. července 2024 Předmluva: Bezpečnostní úvahy při vytváření softwaru pro web jsou důležitou součástí plánu a provádění jakéhokoli webového vývojáře a zároveň vytvoří prototyp, který je pro praktické účely spolehlivý, stabilní a užitečný. The DOM (Document Object Markup), with it’s implementation of HTML, JavaScript, and CSS as well as backend software implementing Python, C/C++, Java and bash, give web developers the freedom and power to create a wide variety of projects that express creativity, provide ease of use and functionality, portray humility and character, and provide ease of use as well as convenience and important services that are all attractive to the average Joe, the end user looking to Zabijte čas nebo něco udělejte na internetu, obvykle na dotykové obrazovce smartphone. Většina lidí by ani nevěděla, kde začít, kdy chtějí vytvořit web od nuly, oniby měl tendenci začít na webových stránkách jiné osoby a budovat něco omezeného funkčnosti, spolehlivosti, snadného použití a zejména kreativity, když mohli mít všechny nejnovější výkonné nástroje, aby mohli vybudovat něco užitečného, ​​aniž by plýtvali časem stisknutím tlačítek, a zejména plýtvání peněz platící za drahé předplatné pro software, jen málo lidí, kteří chtěli použít, aby se dalo na jejich omezení a flexibilitu. Máte -li několik minut na přečtení této knihy a dozvíte se, co vás chci naučit, nebo dokonce se mnou osobně mluvit o vašich cílech a získat nějaké pokyny správným směrem a jsou motivováni k tomu, abyste se naučili kódovat a psát svůj vlastní software, vzít tuto knihu domů a vyčlenit nějakou dobu, aby se naučil budovat další vlivné, výkonné, výkonné a důležité webové aplikace, web, který je na vás a je na vás, který chcete, a vyhodnotit potřeby. O mně: Jsem vývojář softwaru s širokou škálouF Zkušenosti s C/C ++, Java, Python, HTML, CSS a JavaScript. Stavět webové stránky, které lidé chtějí používat, chtějí navštívit a dokonce jsem závislý na používání, abych se naučil, znovu vytvořil a zabíjel čas, a co je nejdůležitější, prodávám software. Pokud jste měli představu o tom, jak přesně jste chtěli, aby web vypadal a fungoval, byli jste ochotni mě podpořit, abych mohl vyhovět svým vlastním potřebám, zatímco splním vaše, a jste ochotni pokrýt náklady na provoz webové stránky sami, postavil bych vám další YouTube, Tiktok, Twitter, Google nebo dokonce high-tech zabezpečovací aplikaci, jen můžete získat přístup. Místo toho, abych se vám snažil prodat svůj čas, snažím se koupit váš: Chci vás promluvit, abyste sami vytvořili aplikaci (web) s informacemi, které již existují, a naučte vás, co potřebujete, abyste byli nezávislým vývojářem softwaru, podnikatel, což vede úspěšnou kariéru v jakékoli oblasti. A dovolte mi to vyjasnit, vzdělání, které vám dám, bude neformální. Mohli byste jít do školy a naučit se to s formálnímDucation, nebo dokonce přečtěte tuto knihu ve škole, dokončete své úkoly a vezměte hodně z vašeho vzdělání, ale formálně vás nestanu na horké sedadlo a požádám vás o dokončení úkolů. Nejsem tvůj profesor, můžete na mě myslet jako na přítele, který vás chce vést k kariéře poháněné svým vlastním osobním úspěchem. A ani vám neprodávám úspěch, budete si ho muset koupit s časem. Naučit se kódovat má strmou křivku učení a nikdy nebylo snadné, nebo dokonce nemělo být. Musíte pracovat tak tvrdě, jak jen můžete, a pokračovat ve snaze o selhání a zkusit to znovu, i když jste frustrovaní, abyste se mohli učit a vytvářet aplikace sami. To je v povaze samotného kódu. Kód je spuštěn kompilátorem, který je navržen tak, aby poskytoval chybové zprávy programátora, a ty vás naučí, jak kódovat, i když jednoduše kopírujete chybu do vyhledávače a čtení příkladů jiných lidí. A musím říct, že nemusíte být extrémně bohatí, chytří, úspěšní neboDetaily orientované nebo organizované pro vytvoření aplikace. Počítač se o tuto organizaci postará. Musíte jen vytrvat prostřednictvím pokusu a omylů, udržovat zaměření a tvrdě pracovat na tom, co děláte, a budete mít velmi úspěšnou kariéru v celém tom, co děláte. Kdo jsem: Uvědomuji si, že poslední sekce se týkala více o učení a vašem výuce z této knihy. Kdo jsem přesně? To je složitá otázka. Sám jsem nejasný, protože trpím zdravotními stavy, které mi mohou ztěžovat občas i kódovat nebo psát tuto knihu, a zároveň předkládat výzvy se socializací a problémy s identitou, které ztěžují můj život, pokud jde o zavedení sebe. Stručně řečeno, pokud čtete tuto knihu, přinesli jste ji domů, protože jste ji otočili a mysleli jste si, že je to užitečné, nebo i když jste právě přečetli tak daleko, jsem vám jako smýšlející jedinec, který chce vidět, že vás uspěje ve všem, co děláte. Sám jsem inženýr, softwareEloper a student a já píšu tuto knihu pro ostatní studenty, kteří chtějí usnadnit svůj život tím, že mají příručku o softwaru, který potřebují, usnadňují jejich životy tím, že uvedou příklady, které se hodí dohromady jako velká hádanka do fungující, užitečné, funkční, soudržné a poutavé aplikace, která může vést k úspěchu bez ohledu na linii podnikání. To je to, co dělám: stavím aplikace, abych pomohl sobě a ostatním lidem uspět. Jsem také autorem, i když je to moje první publikace, kterou mám v úmyslu dokončit, abych mohl dát dohromady své portfolio do užitečného dokumentu, a jsem také umělec. Přiznám se vám to, jsem jakýsi podivný člověk. Nejsem dokonalý, měl jsem zákon, který mě vedl k tomu, abych opustil vysoké školy a univerzity a opustil státy, abych se pokusil udělat jméno pro sebe s větším úspěchem. Jsem od narození žena, nosím make -up, fotím sebe sama, nosím šaty a další dámské oblečení a já si zůstávám vědom sebe jako na ženyature. V minulosti jsem měl problémy s ostatními lidmi, které vedly k boji s psaním a budováním WebApps, a omlouvám se, že jsem nedokázal tuto knihu dostat do vašich rukou dříve: Potřebovali jste to. Budete chtít číst a psát kód, který vypadá jako můj a funguje jako moje a dělá to samé, ale ještě lépe, protože pokud si můžete dovolit koupit tuto knihu místo toho, abyste si šťouchali klávesnici, jako já, jen proto, abyste si vytvořili knihu sami, abyste o ni požádali, máte zdroje, které ve svém životě musíte být úspěšní. Měl jsem nejrůznější problémy s vyrůstáním rodiny, zdravotními stavy, lékaři, média a zákon a můj kód hluboce odráží boj, který je feminismus a ženská povaha v rozděleném a frustrovaném světě. Tato kniha je však něco, na čem mi hluboce záleží, moje dítě, mé portfolio a mé živobytí, takže si vážím vašeho úvahy, když si vezmete text domů a pečlivě se nad ní pórujete, abyste se od mě poučili. Prosím, mějte na paměti, že nejsem dokonalý, tohleOOK bude mít chyby, revize a nová vydání a budete muset přemýšlet se svým logickým mozkem, jak nejlépe můžete, abyste měli úspěšný zážitek s mým psaním. Také pochopte, že pro vás myslím dobře, i když při psaní čelíte výzvám. Přemýšlejte o tom takto: Když si můžete pronajmout počítačový systém, abyste mohli udělat cokoli, co si můžete představit v digitálním prostoru, uložte všechny informace, se kterými se setkáte, #$%! YZE a uspořádat je a porozumět tomu, nevyhnutelně se setkáte s potížemi s informacemi, které přijímáte a dokonce publikujete. Říkám vám to, protože se setkávám se stejnými obtížemi. Použijte tuto knihu na vlastní riziko, spolupracujte s vaší komunitou a komunitami, které máte k dispozici, abyste stavěli software v bezpečném prostředí, a neberte věci osobně, když selžete nebo dokonce uspějete špatně: Tak jsem se dostal tak daleko a proč vám mohu přinést tento text a pomoci vám uspět, aniž byste se odvrátili na cestě šílenství, které ponechá.Uined, roztrhaný a roztřepený, zatímco se setkávám s běžnými problémy, které každý dělá v globálním měřítku díky paralelistickému globálnímu měřítku sítě, na které budeme pracovat, internet. Možná nebudete velmi dobře obeznámeni s tím, kým jsem jen pár slov, ale doporučuji vás, abyste si přečetli dál, budete mě poznat, když mě budete i nadále číst a porozumět při vytváření vlastních projektů, abyste dokončili svou práci. S touto knihou nebudou žádné domácí úkoly, pokud vám vaši profesoři nebo učitelé nepřidělují, ale velmi doporučuji, abyste si při čtení vybudovali portfolio projektů, stejně jako projekt Capstone, který předvádí, jak můžete aplikovat to, co jste se naučili. Můj projekt Capstone je základem pro většinu toho, co si v této knize přečtete, protože zahrnuje kód z mých předchozích projektů, kód, který jsem vytvořil a naučil se psát metodicky ručně, a širokou škálu nápadů a tipů, které mi pomohly uspět v místě, kde mohu roztočit jednoduchou aplikaci, která je plněVypadá a vypadá a chová se jako populární aplikace, kterou můžete vidět svého přítele nebo rodinu používat, na internetu, inzerované vám nebo ve zprávách. Co je tato kniha: Tato kniha je příkladem. You can find code here, instructions for how to learn to code, information on debugging code and fixing errors, troubleshooting steps, instructions on how to back up and save your code, re-deploy if anyone breaks your code, secure your code, deploy your code, build interactive websites that are entertaining, engaging, and addictive, and you will get a sense of who I am, why this is important, and how to portray yourself, your app and company image, as well as the software Stavíte absolutně nejlepší světlo, abyste byli nejatraktivnější pro vaše koncové uživatele, návštěvníky vašeho webu. V této knize předvedu řadu příkladů softwarového designu se zaměřením na web jako platformu i zabezpečení. Zahájíme zkušenosti s učením vytvořením základního projektuIng the Unix Shell, s funkcemi zálohování a skriptování. Poté prozkoumáme základní webovou stránku blogů, upgradujeme náš blog pomocí funkcí fotografií a videa a také použijeme tyto funkce k používání bezpečnostních řešení pomocí svobodného softwaru a zabezpečení našeho serveru pomocí modulu pluggable ověřování (PAM). Poté zkontrolujeme zpracování a zpracován...
Praktické webové hloubkové učení a zabezpečení příkladem

Příkladem praktického hlubokého učení a zabezpečení založeného na webu Třetí vydání Charlotte Harper 3. července 2024 Předmluva: Bezpečnostní úvahy při vytváření softwaru pro web jsou důležitou součástí plánu a provádění jakéhokoli webového vývojáře a zároveň vytvoří prototyp, který je pro praktické účely spolehlivý, stabilní a užitečný. Označení DOM (Objekt dokumentu), s implementací HTML, Javascript a CSS a také backend software implementující Python, C/C ++, Java a Bash, dává webovým vývojářům svobodu a sílu vytvářet širokou škálu projektů, které vyjadřují širokou škálu projektů, které vyjadřují širokou škálu projektů, které vyjadřují Kreativita, poskytovat snadné použití a funkčnost, zobrazovat pokoru a charakter a poskytovat snadné použití, stejně jako pohodlí a důležité služby, které jsou všechny atraktivní pro průměrnou Joe, koncový uživatel, který chce zabít čas nebo něco udělat na internetu, Obvykle na dotykovém zařízení pro smartphone. Většina lidí by ani nevěděla, odkud začít, kdy chtějí vytvořit webScratch, mají tendenci začít na webových stránkách jiné osoby a stavět něco omezeného ve funkčnost, spolehlivosti, snadném použití a zejména kreativitě, když mohli mít všechny nejnovější výkonné nástroje, které mají k dispozici, aby vytvořily něco užitečného bez ztráty stisknutí času , a zejména plýtvání penězi, které platí za drahé předplatné softwaru, jen málo lidí chtělo použít stejně vzhledem k jeho omezením v snadnosti použití a flexibilitě. Máte -li několik minut na přečtení této knihy a dozvíte se, co vás chci naučit, nebo dokonce se mnou osobně mluvit o vašich cílech a získat nějaké pokyny správným směrem a jste motivováni naučit se kódovat a psát svůj vlastní software , vezměte si tuto knihu domů a vyčleněte nějaký čas, abyste se naučili budovat další vlivné, výkonné, efektivní a důležité webové aplikace, webovou stránku, která je na vás a dělá přesně to, co chcete, a vyhovuje potřebám publika. O mně: Jsem vývojář softwaruRozsah zkušeností s C/C ++, Java, Python, HTML, CSS a JavaScript. Stavět webové stránky, které lidé chtějí používat, chtějí navštívit a dokonce jsem závislý na používání, abych se naučil, znovu vytvořil a zabíjel čas, a co je nejdůležitější, prodávám software. Pokud jste měli představu o tom, jak přesně jste chtěli, aby web vypadal a fungoval, byli jste ochotni mě podpořit, abych mohl splnit své vlastní potřeby, když splním vaše, a jste ochotni pokrýt náklady na spuštění webu sami, Postavil bych vám další YouTube, Tiktok, Twitter, Google nebo dokonce high-tech zabezpečovací aplikaci, jen máte přístup. Místo toho, abych se vám snažil prodat svůj čas, snažím se koupit váš: Chci vás promluvit, abyste sami vytvořili aplikaci (web) s informacemi, které již existují, a naučím vás, co musíte být nezávislým vývojářem softwaru, Podnikatel, který vede úspěšnou kariéru v jakékoli oblasti, po které toužíte. A dovolte mi to vyjasnit, vzdělání, které vám dám, bude neformální. Mohli byste jít do školy a naučit se to s aFormální vzdělání, nebo dokonce přečíst tuto knihu ve škole, dokončete své úkoly a vezměte hodně z vašeho vzdělání, ale formálně vás nebudu dát na horké křeslo a nepožádám vás o dokončení úkolů. Nejsem tvůj profesor, můžete na mě myslet jako na přítele, který vás chce vést k kariéře poháněné vaším vlastním osobním úspěchem. A ani vám neprodávám úspěch, budete si ho muset koupit s časem. Naučit se kódovat má strmou křivku učení a nikdy nebylo snadné, nebo dokonce nemělo být. Musíte pracovat tak tvrdě, jak jen můžete, a pokračovat ve snaze o selhání a zkusit to znovu, i když jste frustrovaní, abyste se mohli učit a vytvářet aplikace sami. To je v povaze samotného kódu. Kód je spuštěn kompilátorem, který je navržen tak, aby poskytoval chybové zprávy programátora, a ty vás naučí, jak kódovat, i když jednoduše kopírujete chybu do vyhledávače a čtete příklady ostatních lidí. A musím říct, že nemusíte být velmi bohatí, chytří,Essent nebo dokonce detail orientovaný nebo organizovaný pro vytvoření aplikace. Počítač se o tuto organizaci postará. Musíte jen vytrvat prostřednictvím pokusu a omylů, udržovat zaměření a tvrdě pracovat na tom, co děláte, a budete mít velmi úspěšnou kariéru v celém tom, co děláte. Kdo jsem: Uvědomuji si, že poslední sekce se týkala více o učení a vašem výuce z této knihy. Kdo jsem přesně? To je složitá otázka. Sám jsem nejasný, protože trpím zdravotními stavy, které mi mohou ztěžovat občas i kódovat nebo psát tuto knihu, a zároveň předkládat problémy se socializací a problémy s identitou, které ztěžují můj život, pokud jde o zavedení sebe . Stručně řečeno, pokud čtete tuto knihu, přinesli jste ji domů, protože jste ji převrátili a mysleli jste si, že je to užitečné, nebo i když jste právě přečetli tak daleko, jsem vám jako smýšlející jedinec, který vás chce vidět, jak vás uspěje všechno, co děláte. Sám jsem inženýr,vývojář a student a já píšu tuto knihu pro ostatní studenty, kteří chtějí usnadnit svůj život tím, že mají příručku o softwaru, který potřebují, usnadňují jejich životy tím , užitečná, velká, funkční, soudržná a poutavá aplikace, která může řídit úspěch bez ohledu na linii podnikání. To je to, co dělám: stavím aplikace, abych pomohl sobě a ostatním lidem uspět. Jsem také autorem, i když je to moje první publikace, kterou mám v úmyslu dokončit, abych mohl dát dohromady své portfolio do užitečného dokumentu, a jsem také umělec. Přiznám se vám to, jsem jakousi podivný člověk. Nejsem dokonalý, běžel jsem s právem, dokonce mě vedl k odchodu z vysokých škol a univerzit a opustil státy, abych se pokusil udělat pro sebe jméno s větším úspěchem. Jsem od narození žena, nosím make -up, fotím sebe sama, nosím šaty a další dámské oblečení a já si uvědomuji sebe jako ažena od přírody. V minulosti jsem měl problémy s ostatními lidmi, které vedly k boji s psaním a budováním WebApps, a omlouvám se, že jsem nemohl tuto knihu dostat do vašich rukou dříve: Potřeboval jsi to. Budete chtít číst a psát kód, který vypadá jako můj a funguje jako moje a dělá to samé, ale ještě lépe, protože pokud si můžete dovolit koupit tuto knihu místo toho, abyste si šťouchali klávesnici, jako já jen proto, abyste si vytvořili knihu sami, žádáte peníze Za to máte zdroje, které musíte ve svém životě úspěšní. Měl jsem nejrůznější problémy s vyrůstáním rodiny, zdravotními stavy, lékaři, média a zákon a můj kód hluboce odráží boj, který je feminismus a ženská povaha v rozděleném a frustrovaném světě. Tato kniha je však něco, na čem mi hluboce záleží, moje dítě, moje portfolio a mé živobytí, takže si vážím vaší úvahy, když si vezmete text domů a pečlivě se nad ní pórujete, abyste se od mě poučili. Prosím, mějte na paměti, že nejsemTato kniha bude mít chyby, revize a nová vydání a budete muset přemýšlet se svým logickým mozkem, jak nejlépe můžete, abyste měli úspěšný zážitek s mým psaním. Také pochopte, že pro vás myslím dobře, i když při psaní čelíte výzvám. Přemýšlejte o tom takto: Když si můžete pronajmout počítačový systém, abyste udělali cokoli, co si můžete představit v digitálním prostoru, uložte všechny informace, se kterými se setkáte, #$%! YZ Nevyhnutelně se setkávají s obtížemi s informacemi, které přijímáte a dokonce publikujete. Říkám vám to, protože se setkávám se stejnými obtížemi. Použijte tuto knihu na vlastní riziko, pracujte s vaší komunitou a komunitami, které máte k dispozici k budování softwaru v bezpečném prostředí, a neberte věci osobně, když selžete nebo dokonce uspějete špatně: Tak jsem se dostal tak daleko , a proč vám mohu přinést tento text a pomoci vám uspět, aniž byste se odvrátili na cestě šílenstvíAVES ME Zničil, roztrhal a roztřepil se, zatímco se setkám s běžnými problémy, které každý dělá v globálním měřítku díky paralelistickému globálnímu měřítku sítě, na které budeme pracovat, internet. Možná nebudete velmi dobře obeznámeni s tím, kým jsem jen pár slov, ale doporučuji vás, abyste si přečetli dál, budete mě poznat, když mě budete i nadále číst a porozumět při vytváření vlastních projektů, abyste dokončili svou práci. S touto knihou nebudou žádné domácí úkoly, pokud vám vaši profesoři nebo učitelé nepřidělují, ale velmi doporučuji, abyste sami vytvořili portfolio projektů, jak si přečtete, a také projekt Capstone, který představuje, jak můžete Použijte to, co jste se naučili. Můj projekt Capstone je základem většiny toho, co si v této knize přečtete, protože zahrnuje kód z mých předchozích projektů, kódu, který jsem vytvořil a naučil se napsat metodicky ručně, a širokou škálu nápadů a tipů, které mi pomohly uspět do bodu, kdy mohu roztočit jednoduchou aplikaci, kteráPlně vystupoval a vypadá a chová se jako populární aplikace, kterou můžete vidět svého přítele nebo rodinu používat, na internetu, inzerované vám nebo ve zprávách. Co je tato kniha: Tato kniha je příkladem. Zde najdete kód, pokyny, jak se naučit kódovat, informace o ladicím kódu a opravit chyby, kroky řešení problémů, pokyny, jak zálohovat a uložit kód, znovu se rozkládat, pokud někdo poruší váš kód, zabezpečit váš kód, nasadit nasazení, nasazení Váš kód, vytvářet interaktivní webové stránky, které jsou zábavné, poutavé a návykové, a získáte představu o tom, kdo jsem, proč je to důležité a jak vykreslit sebe, vaši aplikaci a obrázek společnosti, jakož i software, který vytvoříte V absolutním nejlepším světle, které by bylo nejatraktivnější pro vaše koncové uživatele, návštěvníky vašeho webu. V této knize předvedu řadu příkladů softwarového designu se zaměřením na web jako platformu i zabezpečení. Zkušenosti učení zahájíme budováním základníhooject pomocí shell unix s funkcemi zálohování a skriptování. Poté prozkoumáme základní webovou stránku blogů, upgradujeme náš blog pomocí funkcí fotografií a videa a také použijeme tyto funkce k používání bezpečnostních řešení pomocí svobodného softwaru a zabezpečení našeho serveru pomocí modulu pluggable ověřování (PAM). Poté zkontrolujeme zpracování a zpracování souborů, prozkoumáme úpravy videa, dárcovským hlasem, skenování čárových kódů a rozpoznávání optických znaků, mimo jiné. Po cestě prozkoumáme API, která nám pomůže, aby byl náš software užitečnější a zabezpečenější, s bezplatnými a placenými možnostmi. Po cestě prozkoumáme fyzické zabezpečení a militantní nástroje, jako jsou návrh a výroba střelných zbraní a munice, včetně designu barelu a opakovače, designu věže a dronů a dalších principů, budeme integrovat s naším softwarem, abychom chránili náš software a prokázat sebeobranu a odolnost. Uděláme přestávky na cestě k budování her, 2d a 3DOdeslání motorů a pracujte s vestavěným hardwarem v případové studii příklady základního rozměrového vykreslovacího softwaru a elektronického vibračního masáže odlitého v silikonové gumě. Po cestě budeme také používat řešení strojového učení, která jsou již k dispozici, abychom lépe zajistili náš software. Budeme také používat skladové nástroje dostupné pro web, abychom tento proces zefektivnili a zajistili. Tato kniha je průvodcem k vašemu úspěchu při vytváření webové aplikace a integraci s profesionální sítí počítačů a vloženými mechanickými systémy a celkově průvodce vytvářením softwaru a zabudovaného hardwaru bez základních znalostí nebo předchozích zkušeností. Co tato kniha není: Pokud opravdu chcete mít web, můžete pouze nastavit jednoduchý obchod a prodat to, co potřebujete, zveřejnit blog, zveřejňovat fotografie nebo videa nebo jinak, aniž byste nikdy psali jediný řádek kódu. Tato kniha není tak. Tato kniha vás naučí, jak stavět software, který je užitečnější, plněPředstavené, funkční a bezpečné než jakýkoli software, který již můžete najít, protože nasazuje nejnovější software, který je stále prototypy, může být nákladné na běh v měřítku starších společností, v nichž se obsluhují, a nepřitahují se dozadu, spletité společnosti založené na Vydělávejte peníze pro lidi, kteří opravdu nic nedělají. Pokud tuto knihu postupujete pečlivě, budete chtít psát kód, výzkumný kód, vytvořit si vlastní aplikace a vyděláte peníze z toho, co děláte. Z této knihy vydělám peníze, a to i v raných fázích, protože obsahuje informace, které lidé potřebují a chtějí číst, a již kupuji, když nakupují nebo používají mé aplikace. Tato kniha pro vás nebude vytvořit aplikaci, ale nasměruje vás správným směrem a vyzbrojí vás pomocí nástrojů, které potřebujete, a dovednostmi a tipy, které usnadní váš vlastní úspěch při vytváření softwaru pro web, s každým řádkem Kód, který budete muset napsat jako příklad, připraveni k tomu, abyste byli spojeni do softwaru vy a vaši příznivci, hosty, klientelu,Riends, rodina, návštěvníci, dodavatelé a lidé z internetu chtějí používat a podporovat. Co se naučíte: Tato kniha vás naučí, jak stavět a prodávat software, opravdu funkční, užitečný software, nahrávání médií, bezpečnostní funkce, jako je rozpoznávání obličeje, strojové čitelné skenování čárových kódů, webové API pro ověření, nahrávání a vykreslení videa a fotografií a výměnu zpráv, jako je Bluetooth a komunikace v blízkosti pole (NFC). Tato kniha vás naučí, jak používat síťový počítač se zaměřením na Debian Linux, jak vytvářet bash kód, aby byl instalace a zálohování softwaru plynulý, automatizovaný vánek, jak vytvářet Python Code jako backend, který slouží dynamickým zprávám, styl Věci pěkně využívající styly CSS s bootstrap, umožňují přihlášení uživatelů a interaktivitu prostřednictvím síťových zařízení, vytvářejí interaktivní média a síť s jinými weby, které nabízejí bezpečnostní funkce, jako jsou textové zprávy pro ověření nebo jiné účely, skenování ID, moderování obrázků a videa, data, data, data, data, data, data, dataVýkupky, které udržují váš software v bezpečí, zpracování plateb, obchodování s kryptoměnou, asynchronní úkoly a další. Naučíte se, jak si vytvořit vlastní zařízení Bluetooth, s bateriemi, nabíječkami, mikrokontroléry, obvody, motory a senzory pomocí pájky, drátu a 3D tištěných a litých materiálů. Ukážu 3D principy designu aplikovaných na výrobu aditivních výroby a výroby nástrojů a smrti, takže jste schopni vyrábět své vlastní vložené, hardwarové zařízení s integrovanými bateriemi, nabíječkami, elektronickými obvody a funkční výstupy. a propojte je pomocí Bluetooth a webu. Konkrétně prozkoumáme dvě případové studie, vibrační masáž a domácí střelnou zbraň, které jsou naprogramované v OpenSCAD, které je k dispozici jako grafické rozhraní nebo nástroj příkazového řádku a lze je integrovat do webu pro rychlejší výsledky. Naučíte se, jak vytvořit a nasadit web od základů bez předchozí zkušenosti, učinit jej funkční, bezpečný, krásný, užitečný a nejvíceprakticky praktické. Naučíte se, jak používat strojové učení a počítačové vidění, aby byl web zabezpečený a praktičtější, zaznamenávat video a zvuk z vašeho webu, darovat svůj hlas, vytvářet hudbu a modulovat zvuk pro vytváření užitečných vzorků a jak prorazit hluk podle Využití dalších webových stránek k vytvoření nejlepší možné sítě webových stránek, které můžete propojit přímo s vašimi, abyste mohli sdílet všechny užitečné informace, které musíte nabídnout, a ještě důležitější je přivést lidi k vašemu softwaru a podnikání. Tato kniha bude nejvíce zaměřena na média, zabezpečení a strojové učení, které jsou hlavními třemi komponenty, které vám pomohou vytvořit užitečný software pro web zapojením správných uživatelů a uvolněním nesprávných způsobem, který je realistický, praktický, ruce a poutavé a zároveň automatické a robustní. Tato kniha vyučuje Unix, konkrétně Debian (Ubuntu), Bash Shell, Python, HTML, CSS, JavaScript a řadu užitečných softwarových balíčků pron jako požadavky, stejně jako užitečný software Bash, jako je Git a FFMPEG. Naučím vás také, jak automaticky obchodovat s kryptoměnou a provádět platby v kryptoměně nebo z běžných debetních karet, zatímco pokud se rozhodnete, že se vám rozhodnete, že vaše návštěvníky splácím podíl na vašich příjmech. Naučím vás, jak vydělat peníze z vašeho webu prostřednictvím reklamy, jak připravit aplikaci pro vyhledávače a udělat ji rychle, zařadit se do prvního hodnocení toho, co vaši zákazníci budou hledat, aby vás našli, a hodnocení v tolika společných vyhledávání. Naučím vás, jak prodat váš software, inzerovat jej, apelovat na klienty, kteří hledají vaše služby, a na internetu si vytvořit jméno prostřednictvím cest, které již existují, jsou levné a dobře fungují. Naučím vás, jak uložit vaše data o cloudových počítačích, které pro vás fungují, a levně ukládat vaše data, jak naplánovat a vytvořit web, který dělá to, co vaši uživatelé chtějí a co chcete, a jak udržet vaše uživatele zapojenéIn -ing web klepněte na jejich telefony s oznámeními, e -mailem, textovými zprávami, telefonními hovory a dalšími cesty, aby vaše uživatele přivedli zpět na váš web, který vám umožní kliknout pouze za kliknutím na tlačítko zabezpečené pouze. Tato kniha se zaměří na praktičnost publikování a distribuce médií ve velkém množství, od textu po fotografie po videa po zvuk, udělá dobrý dojem na koncové uživatele (vaše klientela) a prodává se jakýmkoli způsobem, který děláte za účelem vytvoření Web, aplikace, která je reprezentativní pro vás a pouze vás, a způsobuje, že váš software a vaše společnost vypadají dobře nejlepším možným způsobem. Také se ode mě naučíte několik tipů a triků, z kódovacích tipů, praktické marnosti, jako je make -up a fotografie, modelování a herectví a další, což bude důležité pro zobrazení sebe a vaší společnosti v nejlepším možném světle pomocí všech dostupných nástrojů Pro vás distribuujete tolik obsahu, kolik potřebujete na zdravé rovnováze platforem, abyste mohli přinéste na uskutečnění bez většího úsilí, práce nebo peněz, než je nutné. Tato kniha se z nějakého důvodu nazývá „Praktický hluboký učení a zabezpečení založeného na webu“: Zabývá se učením se kódovat, konkrétně pro web, konkrétně se zaměřením na zabezpečení, z praktického hlediska, s příklady pracovního kódu, který slouží, který slouží, který slouží praktické účely uvedené v textu. Komponenta učení tohoto textu také zahrnuje strojové učení, kód, který vám ukážu, jak běžet na web, který bude zpracovávat počítačové vidění, rozpoznávání obličeje, moderování obrázků a videa, vylepšení obrazu, vylepšení rozlišení, titulek obrazu a další úkoly jako další úkoly jako Metriky predikce pocházející z obrázků, jako je povaha obrázku jako autentický, počítačově přenosný obrázek nebo optická kopie (fotografie obrázku nebo tištěné fotografie). Strojové učení je velmi důležité, pokud jde o zabezpečení webu a zabezpečení softwaru, protože mohou předškolní úkoly, které byly jinak nemožné. Váš počítačPřihlaste se s přístupovým kódem, ale může být bezpečnější jej použít, pokud vás přihlásí do vaší tváře. Počítač serveru můžete vytvořit tento bezpečný, počítač, který by vás normálně požádal o uživatelské jméno a přihlášení a přihlášení vás, možná s potvrzovacím tokenem pro každou novou přihlašovací nebo novou IP adresu, ale pokud stavíte rozsáhlé, snadno, snadno Používání, zásadně bezpečné a výkonný software, to může stačit. Svázání softwaru příliš úzce s softwarem někoho jiného, ​​jako je e -mailová služba nebo služba textových zpráv, nestačí k zajištění zabezpečení softwaru nebo kohokoli (jakýkoli web, který používáte). Každý, kdo staví software, který je bezvadně bezpečný, má nějaký pocit, co to znamená. Software je ze své podstaty nejistý, protože zařízení a účty, které k němu používají, nejsou vždy k dispozici, mohli by být v rukou kohokoli, kdo má špatný záměr pro software, a proto mohou představovat riziko pro samotný software. To je něco zaměřeného na tuto knihu. Síťový počítač je ve výchozím nastaveníZajištěno dlouhým klíčovým tokenem, volaným a SSH nebo zabezpečeným klíčem Shell a je jinak nejlépe zabezpečen webovým serverem, protože webový server poskytuje otevřený přístup a stavěcí nástroje pro zabezpečení umění běžící na samotném serveru. Webový server má přístup k webovému prohlížeči uživatele, který je pravděpodobně nejvýkonnější součástí zařízení uživatele, protože je to místo, kde uživatel má přístup k síťovému softwaru. Tato sada nástrojů může vykreslit text, webové stránky, které vidíte, a může také zaznamenávat obrázky, zvuk a video (jako je fotografie obličeje nebo ID stavu), může číst a zapisovat do rozhlasových zařízení Bluetooth a může číst a zapisovat do pole blízké pole Transpondérské značky, levné klíčové karty, FOBS, nálepky, prsteny a dokonce i implantáty čipů s jedinečnými sériovými čísly, které lze číst a napsat s údaji generovanými a ověřenými webovým serverem vázaným na web. Pomocí všech nástrojů, které máte k dispozici, se s touto knihou vybavíte znalostmi k vytvoření zabezpečeného webu a celkově aUre síťový počítačový systém, který funguje pro vás, dělá vaše nabídky a vypadá a cítí se dobře. Kde začít: Jste vítáni, abyste přeskočili přes sekci, kterou začnu tuto knihu nebo jakoukoli sekci, na přesný kód, který potřebujete, zejména pokud máte zkušenosti s kódováním před nebo jakýmkoli z výše uvedených nástrojů, které budu podrobně popisovat v této knize jako jako stejně jako dokumentování případů použití a jejich praktických příkladů. Pokud nemáte zkušenosti s psaním kódu, vřele doporučuji, abyste si přečetli celou tuto knihu, a zejména doporučuji, abyste si přečetli předchozí sekce, abyste se ujistili, že je tato kniha pro vás pravá. Pokud tato kniha pro vás není pravá, zvažte ji na darování příteli nebo příbuznému, který by měl zájem dozvědět se o samotném vývoji webových stránek, a dokonce zvažte, zda si ji půjčíte zpět a naučíte se od nich, aby vyplnili mezery, kde jsem vás selhal jako a Učitel nebo jiní učitelé to udělali přede mnou. Začněte, kde chcete, každá část této knihy bude užitečná, pokud máte v úmyslu vybudovat užitečnéPP a zvažte, že nejlepší aplikace jsou vytvořeny s ohledem na koncový uživatel: Znáte svého zákazníka. Teď mě znáš, znáš tuto knihu a jste připraveni začít. Chcete -li začít, uchopte počítač (dokonce i nejlevnější notebook z obchodu s krabicí, Amazon nebo staré plochy a nastavte jej způsobem, který pro vás funguje. Jak číst tuto knihu: Text zvýrazněn, označuje, že text patří do příkazového řádku, kde napíšete kód, který spustí. Příkazový řád je silně zaměřen na klávesnici a vyžaduje jen málo kliknutí, zrychlení pracovního postupu a usnadnění věcí na vás. Začínáme: Pojďme se ponořit. Začneme stavebním kódem na místním počítači a začneme bez vytváření webových stránek připojených k internetu. To je bezpečnější začít, nic nestojí a je pro vás snadné. V závislosti na operačním systému bude dostat se do skořápky bash trochu odlišné. Pro Mac OS doporučuji nainstalovat virtuální stroj v tomto bodě, protože získáte největší kompatibilituvirtuální stroj. Různí poskytovatelé, jako jsou VirtualBox a Paralells, pro vás mohou spustit virtuální stroj, i když je také možné nainstalovat Ubuntu přímo na stroj, pokud dáváte přednost použití nativního prostředí, které se doporučuje k vytvoření rychlého a zefektivněného zážitku. Pokud používáte Linux nebo Windows, které doporučuji, mělo by být docela snadné vytvořit projekt. Otevřete svůj terminál, upravte velikost, jakmile vidíte za vhodné, a začněte po kroku 2.. Pokud používáte Windows, postupujte prosím na krok 1. Krok 1: - Pouze uživatelé Windows V systému Windows, otevřený příkazový řád jako administrátor a typ WSL --instalace Krok 2: - Pokračujte zde nebo přeskočte krok 1, pokud nepoužíváte Windows V otevřeném terminálu (v závislosti na vašem operaci, nazvaném Ubuntu ve Windows, terminál v Mac nebo Linuxu nebo podobném názvu), začněte vytvořením projektu. Děláme to s příkazem MKDIR, který vytváří adresář. Pokud potřebujete vytvořit adresář pro uložení vašeho projektu, který se doporučuje, použijtepříkaz CD pro změnu na adresář a a CD/PATH/TO/ADIGENTORY - Cesta je složky (soubory), které předcházejí vašemu cílovému adresáři, vaše výchozí cesta je ~ nebo/home/uživatelské jméno (kde uživatelské jméno je vaše uživatelské jméno). Chcete -li se změnit na výchozí adresář, zadejte CD nebo CD ~ Příklad Mkdir - Nahraďte „příklad“ názvem adresáře Nyní máte pracovní adresář pro svůj projekt. Být tak důležité, aby byl tento adresář uložen v případě, že musíte přepnout na jiný stroj nebo nasadit kód, který píšete, takže je připraven na web, vytvoříme skript, který zálohuje váš adresář v několika příštích krocích. Vytváření skriptu však vyžaduje trochu kódu a kód musí být automatizován, aby byl co nejužitečnější. Pojďme tedy nejprve vytvořit skript, abychom vytvořili skripty. Začněme vytvořením skriptu a jeho spuštění. K tomu použijeme sudo, chmod a dotek a zavoláme skript


sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Nyní jsme vytvořili skript, učinili ho spustitelný a jsme připraveni jej upravit. Nano je textový editor, který vám umožní upravit text bez kliknutí, což je mnohem snazší než použití grafického uživatelského rozhraní. Chcete -li upravit soubor s Nano, použijte Nano a poté cestu k souboru. Chcete -li vytvořit skript, který vytváří skript, je to docela podobné tomu, aby byl náš skript na prvním místě. Použijeme stejný kód jako výše a nahradíme název skriptu „Ascript“ parametrem argumentu, $ 1. To nám umožňuje zavolat skriptu zadáním jednoduše sudo ascript Newscript, kdy můžeme vytvořit jakýkoli nový skript nahrazením „Newscript“ názvem vašeho skriptu. Kód v Nano by měl vypadat jako:

sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
A pro uzavření Nano můžeme podržet kontrolní klíč a stisknout X, poté Y, abychom označili, že ukládáme soubor a stiskne návrat. Nyní místo zadání těchto tří příkazů k úpravě skriptu budeme moci zadat ascript sudo ascript, abychom znovu upravili skript. To funguje! A jakýkoli nový skript lze snadno spustit na volání do shell. Uložte naši práci hned teď: Pojďme napisovat záložní skript, abychom uložili náš nový skript a poté jej zálohovali do našeho adresáře projektu a zálohovali také záložní skript.

sudo ascript backup
Nyní v Nano:

sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Kde/PATH/TO/ARDECTORY je cesta k projektu, který jste vytvořili s MKDIR. Později se naučíme, jak zkopírovat opakované cesty, jako je tato, smyčkou a seznamem, což je méně kódu, ale prozatím to udržíme jednoduché a máme několik řádků. Chcete -li spustit tento skript a zálohovat kód, uložte soubor v Nano s ovládacím prvkem+x, y a vraťte se a do shell zadejte níže

backup
Pokud jste při čtení této knihy vůbec vyzváni k hesla a sledujete ve shellu, zadejte své uživatelské heslo správně, budete mít tři pokusy, než budete muset příkaz znovu spustit. Pokud budete potřebovat dvakrát, můžete použít šipky nahoru a dolů k opakování příkazů a úpravy. Jednoduché stiskněte nahoru a dolů přerušovaně a vyberte příkaz, před úpravou příkazu pravým, levými šipkami a smazat klíč i klávesnici a spuštěním s návratem. Gratuluji! Podařilo se vám vytvořit úžasný záložní skript, který zálohuje dva důležité skripty shellu ve vašem pracovním adresáři. Když se projekt zvětšuje, můžeme se věci pohybovat později, ale to prozatím funguje. Pojďme k zálohování v cloudu, použijeme k tomu GitHub (i když existuje řada dalších řešení pro zálohu, jsou to všechno asi stejné.) Git je verision Control Software, který vám umožní zálohovat úpravy vašim vašim úpravám software, když je uděláte na server, zatímcoTaké vám umožní stahovat celé kopie vašeho softwaru za heslo nebo klíč. Je to nápomocné při ukládání vašeho softwaru, zejména když migrujeme do zabezpečených instancí Linuxu, které se někdy zlomí, když selže jediný řádek kódu, a nechte vás uzamknout, zatímco váš kód nemusí být zálohován, pokud nemáte šanci jej podpořit automaticky nahoru, které pokryjeme. Pokud v tomto okamžiku již nepoužíváte virtuální stroj Ubuntu, v tomto bodě doporučuji virtuální stroj Ubuntu, protože to usnadní váš život při instalaci všech balíčků potřebných k vytvoření pracovního webu a hlubokého učení operace na vašem počítači. V blízké budoucnosti přesuneme kód na webový server, ale chceme se ujistit, že za naším webovým serverem je alespoň několik vrstev zabezpečení, které jsou odolné vůči phishingu, a zaměstnávat řadu linuxových balíčků, aby to bylo možné tento. Pokud stále chcete používat Mac OS, jste vítáni hledat a nainstalovatE online balíčky online, ale nemusí existovat alternativy pro každý balíček, který se tato kniha nebo série pokryje. Přidáme několik příkazů, abychom se dopustili naší práce se záložním skriptem spuštěním příkazu sudo ascript
# …
Ještě jednou ovládejte X a uložte. Nyní musíme pro tento projekt udělat jednou jednorázovou konfiguraci. Protože to bude brzy projekt GIT, nemusíme psát každý příkaz pokaždé, když nasadíme z úložiště GIT, ale při psaní našich skriptů nasazení dostaneme zavěšení. Chcete -li začít, ujistěte se, že jsme ve správném adresáři a inicializujeme úložiště GIT a generujte klíče SSH.

cd /path/to/directory
git init
git branch -m master
ssh-keygen
Po zadání SSH-KEYGEN by měl být nový klíč uložen ve složce Home pod složkou nazvanou .SSH. Říká se tomu id_rsa.pub. Najdeme tento klíč a zkopírujeme jej. Vidět to,

cd ~
cat .ssh/id_rsa.pub
Zkopírujte text, který je vrácen posledním příkazem, a vytvořte si účet u vašeho poskytovatele GIT (ideálně GitHub), než přidáte klíč SSH k vašemu účtu. Poté, co máte účet, klikněte do pravého horního nabídky a zadejte nastavení, před přidáním klíče SSH do klíčů SSH a GPG v nabídce v nabídce. Před uložením a návratem do GitHubu vyberte přidat klávesu SSH a přidejte jej a přidejte jej do názvu a vytvořte nové úložiště. To je podobné pro ostatní poskytovatele GIT, budete si muset přečíst jejich dokumentaci. V nové konfiguraci úložiště uveďte své úložiště popisné jméno a rozhodněte se, zda jej chcete zveřejnit, a nezapomeňte dosud nakonfigurovat žádné soubory pro zahrnutí. Po vytvoření úložiště zkopírujte klon s URL SSH a vložte jej do následujícího příkazu.

git remote add git://… (your remote URL)
Nyní se můžete přesunout zpět do svého úložiště pomocí CD, budete s tím znát. Vyzkoušejte svůj záložní skript hned se zálohou Velký! Nyní můžeme opravdu získat kódování. Pojďme nainstalovat Django nyní, když máme dobré pochopení na bash a git. Django nám umožní automaticky zálohovat náš software, Bash to může také udělat, ale Django by měl mít jednodušší bezpečnější implementaci (může být deaktivován a snadněji nakonfigurován). Pro instalaci softwaru v Ubuntu použijeme příkaz sudo apt-get. Nejprve pojďme aktualizovat a upgradovat software, který jsme již měli. To lze provést pomocí aktualizace sudo apt-get a sudo apt-get upgrade -y. Dále nainstalujme Python a naše virtuální prostředí, domov našeho kódu, s následujícím příkazem: sudo apt-get instalace python-is-python3 python3-n-yinv To je vše, co potřebujete jít s Djangem, pokud jde o instalace softwaru v instanci Ubuntu. Pro Windows a Linux by to mělo být poměrně jednoduché, ale pro Mac možná budete chtít nainstalovat virtuální počítač aLinux na něm pomocí bezplatného nebo placeného virtuálního prostředí, jako je VirtualBox nebo Paralells Desktop, a znovu vytvořit výše uvedené kroky za účelem nastavení prostředí Ubuntu. Ubuntu je v tomto případě kritický, protože je to software, který webové stránky spustí, a umožňuje jim hostit webové stránky s veškerým výše uvedeným softwarem. Pojďme se kopat do Djanga. V našem adresáři znovu, s
python -m venv venv # Vytváří virtuální prostředí, kde je kód uložen
source venv/bin/activate # Aktivuje virtuální prostředí
django-admin startproject mysite . # Kde MySite je projekt, začínám ve svém aktuálním adresáři.
Django nás právě začíná, protože Django pořádá webový server a dělá vše, co potřebujeme, abychom získali základní místní web do provozu. Nyní, když máme nainstalovanou Django, upravte nastavení trochu, aby to fungovalo, jak potřebujeme. Nejprve vytvoříme novou aplikaci

python manage.py startapp feed
Všimnete si, že první aplikace se nazývá Feed. Aplikace by měla být volána cokoli, co se vám líbí, a my vytvoříme nové aplikace, ale název každé aplikace musí být konzistentní pokaždé, když je aplikace odkazována v kódu. Chcete -li přidat novou aplikaci, vždy upravíme nastavení.py v druhém adresáři vytvořenou aplikaci, pojmenovaná v startProject, dále. Používání nano,

nano app/settings.py
V nastavení najděte nainstalovanou_apps a oddělujte [] na 3 řádky. Pomocí čtyř mezer na prázdné středové lince přidejte „zdroj“ nebo název vaší aplikace. Tato část nastavení.py by měla vypadat jako:

INSTALLED_APPS = [
    'feed',
]
Než zapomeneme, vyzkoušejte, že Django pracuje. Pomocí příkazu Python Manage.py Runserver 0.0.0.0:8000 můžeme spustit server a poté navigovat ve webovém prohlížeči na počítači s kódem na http: // localhost: 8000 a podívejte se na příklad webové stránky (funguje to!) Opusťte server s ovládacím prvkem C, stejně jako jakýkoli jiný příkaz. Nyní se kopejme do psaní nějakého pythonového kódu. Django má tři hlavní komponenty, všechny z nich jsou zcela provozovány podle kódu. Komponenty se nazývají model, zobrazení a šablonu a každá je na vyšší a nižší úrovni před doručením webové stránky uživateli. Model je kód, který ukládá informace v databázi pro vyhledávání, třídění a vykreslování. Pohled rozhoduje o tom, jak je model vykreslen, manipulován a upraven, téměř každý pohled použije model přímo. Šablona je kód HTML s některými dalšími zvonky a píšťalky nazývanými jazyk šablony. Šablona je vykreslena podle pohledu, kde je naplněna Pythonovým kódem aKontext, jako jsou modely a informace (usuall řetězce a celá čísla) z pohledu. Django má také jiné komponenty, včetně, ale nejen na: Nastavení, která konfiguruje aplikaci, jak jsme diskutovali. URL, což jsou vzory, které uživatel sleduje, aby získal přístup ke konkrétním částem webové aplikace. Formuláře, které definují, jak se informace odesílají na server a jsou vykresleny do databáze i do uživatele. Toto jsou základem zpracování informací na straně serveru a mohou přijímat jakýkoli typ informací, které ukládají počítačové ukládání, zejména textové řetězce, čísla a true/false booleans (obvykle zaškrtávací políčka). Šablony, které jsou jazykem HTML kódu a šablony, a překlenují mezeru mezi Pythonem a HTML, což znamená, že informace Python lze sloužit jako HTML kód, ke kterému má kdokoli přístup, a může zabezpečit web s omezeným přístupem, přičemž zpřístupňuje Python kód a užitečným zpřístupňováním a užitečné pro různé účely na vzdáleném zařízení, které neeed být poblíž serveru. Statické soubory, které jsou obvykle JavaScript, a jsou to knihovny, které server slouží a jsou propojeny se šablonou. Mediální soubory, které server slouží nebo je externě hostován, nebo právě zapsán na server před zpracováním a vysláním na jiný server (kbelík) pro hostování. Middleware, což jsou kusy kódu, které jsou spuštěny ve stejnou dobu s každým pohledem a jsou považovány za „zahrnuty“ do pohledu. Kontextové procesory, které zpracovávají kontext každého pohledu a používají se k přidání dalšího kontextu. Testy, které ověřují, že uživatel nebo požadavek předá určité požadavky před vykreslením zobrazení. Spotřebitelé, kteří diktují, jak websockety zvládnou a reagují na komunikaci. Admin, který se používá k registraci modelů, takže je lze podrobně manipulovat na stránce Django Admin, kde lze databázi podávat pomocí grafického rozhraní. Celer, který definuje asynchronní úkoly, mohou začít části kódu Djangopřed okamžitým přechodem na další úkol nebo řádek kódu. Django může mít mnoho dalších komponent, o kterých zde budeme podrobně diskutovat. Existuje spousta způsobů, jak učinit Django funkčnější a přidávat webové procesy, které jsou rychlé, efektivní komunikační kanály, celer, které provádějí asynchronní úkoly a množství dalších kusů softwaru pro rozšíření Djanga, zejména ve funkcích pohledu, kde většina z nich většina Kód je spuštěn. Funkce zobrazení jsou klíčové, protože obvykle deklarují každý kus kódu, který je specifický pro konkrétní vzorec URL nebo část serveru. Nejprve prozkoumejme funkce Zobrazit. Funkce zobrazení začínají importy označujícím kód, který bude použit v pohledu, a jsou definovány pomocí pravidelných definic nebo tříd. Nejjednodušší pohledy jsou definovány definicí funkce DEF a vrátí HTTPResponse se základní šablonou. Začněme definováním základního pohledu na vrácení textu „Hello World“. Pamatujte, že pokaždé, když přidáteVytvoření příkazu jako DEF, pokud, i když, pro atd., Budete muset přidat 4 mezery pro každou z definic preceedingu, které byste chtěli použít na svou funkci. Brzy se dostaneme do toho, co každý z nich znamená. Z adresáře našeho webu upravte soubor zdroje/views.py pomocí nano a přidejte následující řádky na konec

from django.http import HttpResponse

def hello(request):
    return HttpResponse('hello world')
Django's HTTPResponse odpoví textovým řetězcem, označeným otevřením a uzavřením '. Pokaždé, když předáte informace do funkce nebo třídy, jako je požadavek nebo řetězec, budete muset použít závorku (otevření a uzavření). To zatím není vše, co musíme vidět náš pohled. Samozřejmě jsme neřekli serveru, kde je pohled přesně, stále musíme definovat cestu, kterou by měl pohled vykreslit. Začněme definováním základní cesty v App/urls.py a později se dostaneme do skupin cest. V App/urls.py přidejte řádek po příkazech importu po začátku importu pohledu, který jsme právě vytvořili.

from feed import views as feed_views
Nyní definujeme vzor pohledu. Vzory zobrazení mají tři komponenty, komponentu Path, která říká serveru, kde zobrazení existuje v rámci serveru (cesta URL, kterou uživatel zadá do navigační lišty pro vstup na webovou stránku), komponentu zobrazení, kde je zadán a a Přátelský název pro pohledu, takže je snadné načíst jeho vzor při práci se šablonou, zejména proto, že je to jméno, které lze v případě potřeby změnit a aktualizovat, aby se vytvořil prostor pro jiný pohled nebo zaujal logičtější jméno. Dává smysl dělat věci tímto způsobem a být flexibilní, protože vaše kódová základna bude neustále se měnícím prostředím, které vyžaduje flexibilitu a improvizaci, aby byla cenná a snadná práce. Zde je, jak bude váš pohled vypadat, můžete jej přidat do urlPatterns = [část App/urls.py. Vzor pohledu je definován pomocí výše popsaných tří složek a funkcí zvanou cesta. Vaše vzory URL jsou seznam, takže nezapomeňte vždy ukončit každou položku v nichs čárkou, protože to odděluje každý z nich. Každá položka by měla také jít na nový řádek, opět se čtyřmi mezerami před ní, stejně jako aplikace v nastavení.py. Definujeme první komponentu pohledu s funkcí prázdné řetězce, abychom vytvořili pohled, který běží v kořenovém adresáři webového serveru. Vaše urls.py by nyní měly vypadat

from feed import views as feed_views

urlpatterns = [
    path('', feed_views.hello, name='hello'),
]
Toto je základ pro vytvoření webu s Django, který je zcela statický. Abychom vytvořili dynamičtější web, kde můžeme začít s ukládáním informací o ukládání do mezipaměti, jako jsou obrázky, videa, zvuk a další, budeme muset používat modely, které prozkoumáme dále. Prozatím pojďme zkontrolovat náš kód a spustit server. Chcete -li zkontrolovat kód pro chyby, spusťte:

python manage.py check
Pokud existují nějaké chybové zprávy, měli byste pečlivě zkontrolovat změny, které jste provedli ve vaší aplikaci smazaný charakter nebo cokoli jiného. Čtení chybové zprávy (pokud ji máte), měli byste být schopni vidět cestu k vytvořenému souboru, který jste vytvořili nebo upravili spolu s číslem řádku, takže se podívejte do tohoto souboru a řádku a zjistěte, zda můžete opravit něco, co je tam . Pokud jste problém vyřešili, spusťte výše uvedený příkaz. Když je váš software připraven ke spuštění a funguje, uvidíte výstupní „kontrola systému identifikována žádné problémy“. Nyní jste připraveni jít. Spusťte server s:

python manage.py runserver 0.0.0.0:8000
Nyní otevřete webový prohlížeč a přejděte na http: // localhost: 8000. Měli byste vidět text vrácený v závorce a citace funkce HTTPResponse podle vašeho názoru. Toto je jen základní příklad, ale pokud jste to dosáhli tak daleko, rozumíte základám, jak Linux, Bash, Python a Django pracují. Podívejme se hlouběji do některého databázového modelování a prozkoumáme sílu třídy Python při ukládání informací. Poté začneme přilnavost k HTML a CSS, než vytvoříme naše stránky plně vystupující, flexibilní a zabezpečené pomocí JavaScriptu a strojového učení. Třídy jsou uloženy v modelech.py ​​vaší aplikace. Pomocí Nano, upravte aplikaci/models.py a přidejte novou třídu. Třída je definována s definicí třídy a je předána superclass, od které zdědí, v tomto případě modely.model. Název třídy přichází po definici třídy a po použité třídě A: (Colon) se před níže uvedením atributů a definic funkcí vázané na třídu jsou uvedeny níže. Naše třídaPotřebuje ID, které můžeme použít k jeho načtení a udržení jedinečného a také potřebuje textové pole pro uložení některých informací. Později můžeme přidat časové razítko, soubory, booleans (pravdivé nebo nepravdivé definice, které mohou pomoci našemu kódu přijímat rozhodnutí o tom, co s modelem dělat, a lze jej použít k jeho třídění), instance pro připojení modelu s přihlášeným uživatelem do serveru a další. Pojďme rozbalit kód
from django.db import models # Import, který se používá k definování naší třídy a je to atributy
class Post(models.Model): # Definice naší třídy samotné
    id = models.AutoField(primary_key=True) # ID našeho modelu, automaticky generovaného klíče, který nám umožní dotazovat model, udržovat jej jedinečný a je užitečný, když musíme s modelem po vytvoření interagovat.
    text = models.TextField(default='') # Atribut naše obchody třídy, v tomto případě nějaký text, výchozí k prázdnému řetězci.
Zavřete a uložte soubor jako předtím. Existuje mnoho dalších oblastí a možností, které prozkoumáme, když tuto třídu aktualizujeme, jak se naše aplikace vyvíjí, ale toto je základní potřeby vytvoření aplikace pro zveřejňování nějakého textu. Tento model však nebude fungovat sám. Jak je popsáno dříve, budeme potřebovat vlastní zobrazení a vlastní vzor URL, aby tento model fungoval, a také budeme potřebovat formulář spolu se šablonou. Pojďme nejprve prozkoumat formulář. Chcete -li definovat formulář, upravte aplikaci/forms.py s Nano a přidejte následující řádky. Budeme potřebovat dva dovozy, naši třídu formulářů, stejně jako model, který jsme vytvořili (Feed.Models.Post), definici třídy podobné modelu a pole spolu s podtřídou zvanou meta, která bude definovat model formulář interaguje s. Formulář může mít také inicializační funkci, která ji nastaví na základě informací v žádosti, modelu nebo jiném, prozkoumáme to později. Formuláře modelu jsou tak užitečné, protože mohou vytvořit model nebo také upravit model,Takže je použijeme pro oba. Pojďme definovat jeden ve formě.py

from django import forms
from feed.models import Post

class PostForm(forms.ModelForm):
    text = forms.CharField(widget=forms.Textarea)
    class Meta:
        model = Post
        fields = ('text',)
To je základy toho, jak vypadá forma a model. Tento modelový formulář lze použít k okamžitému nebo úpravě příspěvku a změnu textu, který obsahuje. Podíváme se na integraci tohoto formuláře do pohledu dále. Nejprve proveďte migraci a migrujeme databázi, aby náš kód mohl s modelem interagovat, když běží. Chcete -li to provést, spusťte následující příkazy:

python manage.py makemigrations
python manage.py migrate
Provedení to bude chvilku, ale jakmile to udělá, umožní vám přístup k modelu v pohledech, middlewaru nebo kdekoli jinde v softwaru. Pojďme pokračovat v pohledu, kde můžeme vidět náš model. Upravte zdroj/views.py a přidejte následující kód, jak je uvedeno. Po znamení # nebudete muset nic přidávat, tento kód je komentáře, které se používají k označení informací o kódu. Začneme importem našeho modelu do pohledu a přidáme jej do kontextu, kde jej můžeme vykreslit v šabloně jako seznam pro zobrazení. Dále přidáme šablonu, kde můžeme vykreslet formulář a model pomocí tlačítka a vytvořit nový objekt založený na modelu a zveřejnit jej na server. Zní to komplikovaně, takže to prostě vezměme krok za krokem. Než dokončíme pohled, vytvořme šablonu, která pouze vykresluje model a ujistěte se, že jej můžeme vidět vytvořením nového příspěvku ve shell. Zde je způsob, jak by měl tento pohled vypadat:
    posts = Post.objects.all() # Dotazujte všechny příspěvky v databázi
To vše vypadá docela jednoduše, dokud se nedostaneme na dno. Vykreslení, hodnota vrácená funkcí namísto v odpovědi HTTP, jako je předchozí příklad, vždy přijímá žádost jako první vstup, přijímá kontext (v tomto případě příspěvky v databázi), který lze nyní vydávat v šabloně a vrátí šablonu definovanou ve funkci. Šablona bude dokument HTML s trochou jazyka s názvem Jinja2, který vykresluje Python informace do HTML. Chcete -li začít vytvářet šablony, vytvořte dva adresáře v krmivu.

mkdir feed/templates
mkdir feed/templates/feed
Dále upravte šablonu ve výše uvedeném adresáři, krmení/šablony/zdroje a přidejte kód pro tento příklad. Podívejme se na šablonu pro tento příklad.
Toto je velmi jednoduchá šablona. Definuje otevírání a zavírání značek HTML, značku typu dokumentu, značku těla s názvem legendy, značku přestávky, která přidává malý řádek přes obrazovku a pro smyčku, která vykresluje každý příspěvek v seznamu příspěvků jako odstavec v odstavci v Šablona. To je vše, co je zapotřebí k vykreslení příspěvků, ale v databázi zatím nejsou žádné. Pojďme vytvořit některé se skořápkou. Můžeme spustit shell s manage.py

python manage.py shell
Nyní pojďme importovat náš poštovní model

from feed.models import Post
Dále vytvoříme jednoduchý příspěvek s řetězcem a opustíme shell. Řetězec může být cokoli, pokud je to platný text.

Post.objects.create(text='hello world')
exit()
Nakonec budeme muset přidat do našeho krmiva vzorec URL. Protože naše aplikace Feed bude používat více URL a chceme udržovat velikosti souborů malé, vytvořme místní urls.py v naší aplikaci Feed, která vypadá takto:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.feed, name='feed'),
]
Budeme také muset upravit urls.py v základní aplikaci, ať už jsme se rozhodli to nazvat, byl to první adresář, který jsme vytvořili. Upravte aplikaci/app.py a přidejte následující do vzorů URL
from django.urls import include # nahoře
    # ... předchozí kód zde
Nyní, když spustíme server s Python Manage.py Runserver, uvidíme stránku, kterou jsme vytvořili, protože máme model, zobrazení a šablonu i vzor URL spolu s položkami v databázi. Dále implementujeme formulář, který jsme vytvořili, a začneme vytvářet vlastní příspěvky. Než ale píšeme příliš mnoho kódu, provedeme zálohu pomocí skriptu, který jsme napsali dříve, zálohování. Spusťte tento skript ve shellu, počkejte několik okamžiků a veškerý kód bude zálohován do našeho úložiště GIT.

backup
Implementace formuláře je relativně jednoduchá. Na náš formulář importujeme náš formulář, přidáme do pohledu obslužný program žádosti a uložíme příspěvek do databáze před přesměrováním na stejný pohled. Můžeme použít funkci přesměrování, kterou jsme již importovali, a další funkce nazvaná Reverse pro získání URL pro vzor pohledu. Budeme to dotazovat pomocí řetězce „Feed: Feed“, protože jmenný prostor je podávání a pohled se také nazývá Feed.
    posts = Post.objects.all() # Dotazujte všechny příspěvky v databázi
    if request.method == 'POST': # Zpracovat požadavek na příspěvek
        form = PostForm(request.POST) # Vytvořte instanci formuláře a uložte do něj data
        if form.is_valid(): # Ověřit formulář
            form.save() # Uložte nový objekt
        return redirect(reverse('feed:feed')) # Přesměrovat na stejnou adresu URL s požadavkem GET
        'form': PostForm(), # Nezapomeňte předat formulář do kontextu, abychom jej mohli vykreslit.
Nyní budeme muset aktualizovat šablonu tak, aby zodpovídala nový formulář. Můžeme to udělat pomocí pomocí
Označte v HTML a vykreslete formulář v šabloně HTML pomocí tlačítka Odeslat. Budeme také potřebovat token CSRF, token, který zabraňuje externím webům v odesílání do formuláře bez prvního načtení stránky.
Pojďme to rozebrat. K dispozici je nová třída formulářů, token, samotný formulář a tlačítko Odeslat. Docela jednoduché, ale když se na to podíváme, možná bude chtít, aby to vypadalo lépe. Funguje to, můžeme zveřejňovat nové příspěvky s formulářem a nyní jsou uloženy v databázi. Děje se tu několik věcí. Používáme značky HTML k prohlášení, že dokument je dokument HTML, k vykreslení tokenu pro formulář používáme značku šablony ({ %… %}) k vykreslení formuláře. Máme také smyčku pro vykreslení textu pomocí značek bloků a značky šablony. Blokové značky jsou opravdu důležité, protože můžeme definovat, jak jsou s nimi vykresleny části šablony, a značky šablon jsou základem toho, jak do našeho kódu vkládáme proměnné. Nyní musíme, aby naše aplikace vypadala lépe, protože prozatím to vypadá opravdu základní. Můžeme to udělat pomocí CSS, buď inline, nebo ve třídách vázaných na každý objekt v dokumentu. CSS je opravdu pěkný, protože to říká vše na stránce, jak by to mělo vypadat,a může to vypadat opravdu dobře. Existuje několik knihoven, které to dokážou, ale moje osobní jít je Bootstrap. Bootstrap si můžete stáhnout z jejich webových stránek,getbootstrap.com/. Poté, co je tam, stisknutím tlačítka si přečtěte instalační dokumenty a zkopírujte kód z části zahrnující sekci CDN. Tento kód budete potřebovat v horní části dokumentu HTML ve značce s názvem Head. Pojďme také pokračovat a vytvořit základní šablonu, takže tyto odkazy nemusíme znovu vytvářet v každé šabloně. Vytvořte nový adresář s názvem šablony pomocí šablon Mkdir a poté upravte šablony/base.html. Mělo by to vypadat takto:
Nezapomeňte zkopírovat soubory CSS a JavaScript,. Nyní se vraťme ke skořápce bash a spustíme rychlý příkaz. Nezapomeňte, že pokud někdy potřebujete přístup k virtuálnímu prostředí, zadejte zdroj Venv/Bin/Active. To vám umožní nainstalovat balíčky Pythonu lokálně tak, aby django přístup k nim. Abychom poskytli naše formuláře generované třídami Django Bootstrap, použijeme balíček Python s názvem Crispy Forms. Můžeme si to stáhnout s následujícím příkazem

pip install django-crispy-forms
Jakmile je to nainstalováno, přidejte jej do nastavení.py
    # … Předchozí kód zde
Nyní, zpět v naší šabloně krmiva, můžeme některé věci odstranit. Odstraňme začátek a konec dokumentu a nahradíme jej dědičností z naší základní šablony pomocí rozšíření a definice bloku. Do formuláře také přidáme import filtru šablony se zatížením a filtrem šablony. Nakonec pojďme přidat třídu bootstrapu k tlačítku na formuláři, aby vypadala spíše jako tlačítko. To by mělo vypadat takto:
Krásný! To je už docela trochu kódu. Dále bychom to měli vyzkoušet a ujistit se, že můžeme vidět, že všechno vypadá hezky, a také se ujistěte, že všechno funguje správně. Spusťte server podle předchozích pokynů a ujistěte se, že web vypadá a funguje dobře. Skvělá práce! Jste připraveni přejít k dalšímu kroku, ve kterém přidáme funkce přihlášení uživatele pomocí podobných URL, formulářů, pohledů a šablon. Základní šablona je důležitá a budeme ji nadále upravovat a provést změny podle potřeby, ale prozatím se zaměřme na zajištění našich stránek tím, že umožňujeme uživatelům přihlásit se pomocí uživatelského jména a přístupového kódu a nakonec ještě důležitější informace, které, které jsou ještě důležitější informace, které pomůže udržet vaši aplikaci zabezpečenou a váš vlastní účet přístupný pouze vy. K tomu budeme muset použít model uživatelů zabudovaný do Djanga. Uživatelský model je model databáze, jako je náš příspěvek, který lze vykreslit pro přihlášení uživatele na web. V budoucnu, než nasadíme web na internet, budemeRozšiřte tento model s jinými modely připisovanými mu a vytvořte další bezpečnostní opatření pro přihlášení, která jsou odolná vůči phishingu. Začneme použitím některých vestavěných přihlašovacích formulářů, které Django poskytuje. Nejprve vytvoříme novou aplikaci, kterou použijeme k vykreslení šablon a zobrazení pro základní přihlašovací stránku. Vytvoříme také další aplikace, které budou reprezentovat pokračující výzvy v oblasti přihlášení, abychom zabezpečili aplikaci, včetně pincode, rozpoznávání obličeje, polní komunikace, externích zařízení, ověřování více faktorů a rozpoznávání otisků prstů. Už jsme mluvili o spuštění aplikace. Z našeho adresáře, uvnitř virtuálního prostředí, průsmyk

python manage.py startapp users
Nyní bychom měli mít adresář pro novou aplikaci. Začněme vytvořením zobrazení v tomto adresáři, který odpovídá přihlášení uživatele. Django má zabudované zobrazení pro přihlášení uživatelů, ale ty nebude pro nás vhodné, protože potřebujeme vlastní pohled, který se nejlépe provádí s definicí. V tomto pohledu začneme kontrolou žádosti o příspěvek, předáním požadavku.POST na přihlašovací formulář importovaný z Djanga, ověřte uživatelský účet a přihlaste se před přesměrováním do naší aplikace Feed. V uživatelů/views.py přidejte následující kód
        username = request.POST['username'] # Získejte uživatelské jméno a heslo z žádosti o příspěvek
        password = request.POST['password'] # Ověřte uživatele
To je vše, co potřebujete pro základní přihlášení. Nyní vytvoříme formulář pro pohled rozšířením základní šablony. Začneme vytvořením nového adresáře pro šablony ve složce uživatelů.

mkdir users/templates
mkdir users/templates/users
Nyní bychom měli být schopni upravovat uživatele/šablony/uživatele/přihlášení.html. Když jsme u toho, vytvoříme šablonu, která umožní uživateli také přihlásit se.

nano users/templates/users/login.html
Nyní v šabloně,
Toto je základy přihlašovací šablony. Je to opravdu stejně jako druhá šablona ve struktuře, ale když je vykreslena, vypadá to trochu jinak. Můžeme zkopírovat tento kód a vytvořit další velmi podobnou šablonu s názvem Register.html, kde změníme znění a použijeme nový formulář, který vytvoříme. Pojďme nejprve udělat šablonu. Upravte uživatele/šablony/uživatele/registr.html a přidejte následující kód:
Nyní vytvoříme formulář pro registraci našeho uživatele a kroužíme zpět k zobrazením, než upgradujeme přihlášení našich uživatelů pomocí modelu. Uděláme tento formulář základní, ale v budoucnu zahrnujeme další podrobnosti a bezpečnostní funkce, jako jsou dohody a Captcha. Upravte formuláře pomocí uživatelů Nano/Forms.py a přidejte následující kód.

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']
Takže zde máme další formu, která funguje docela jednoduše. Jedná se o formulář uživatelského registru s uživatelským jménem, ​​e -mailem a heslem, jakož i polem potvrzovacího hesla. Všimněte si, že tento formulář nerozšiřuje běžnou třídu. Jedno pole je definováno stejné a třída meta definuje model, který formulář odpovídá zbytku informací, které budou zapsány do formuláře. Většina z toho již existuje ve vestavěné Django vestavěné uživatelské formě, takže to použijeme jako základ pro třídu (předán v závorce). Dále prozkoumáme pohled na registraci uživatele, nyní, když máme formulář a šablonu. Toto je modelform, stejně jako ten v novém pohledu příspěvku. Upravte uživatele/views.py a přidejte následující kód:
# … Dovoz
To je vše, co musíme zaregistrovat uživatele, ale měli bychom mít více informací. Chceme znát čas, kdy se uživatel zaregistroval, kolik je na posledních stránkách, některé informace o nich, jako je biografie, časová pásmo atd. Model a atributy příspěvkům každému uživateli. Za tímto účelem aktualizujeme modely.py v obou aplikacích. Začněme úpravou modelu krmiva. Teď by to mělo vypadat takto:
from django.db import models # … Dovoz
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Přidejte do tohoto řádku
Věnujte pozornost druhému řádku, který byl přidán do souboru. Jedná se o cizí klíč, který připisuje každý příspěvek jednomu uživateli na příspěvek, takže se můžeme ujistit, že uložíme příspěvky na základě uživatele na uživatele a žádný příspěvek nelze provést bez přiřazení uživateli. Definujeme tento cizí klíč s třídou, kterou představuje, argument smazání, který zajistí, že příspěvky jsou smazány s uživateli, null a prázdné argumenty, abychom se ujistili, že v případě potřeby můžeme odstranit uživatele, a přizpůsobit se nedostatku uživatele na příspěvcích, které již jsme již, jsme již vytvořené a související jméno, které můžeme použít k odkazování na post objekty, které uživatel vytvoří. Toto související jméno, na rozdíl od Post.Author, autor příspěvku, nám dává uživateli, který zveřejnil příspěvek samotný. Nyní můžeme získat příspěvky uživatele vytvořeného pomocí spuštění user.Posts.all () nebo autor.posts.all (). Nyní udělejme naše přihlášení odolnější. Naše stránky již můžeme mnohem méně zranitelnou vůči phishingu jednoduše omezením počtu, kolikrát umožníme přihlášení kweb, to je docela snadné. Začněme také ukládat některé informace o každém uživateli dříve, když budeme pokračovat ve vývoji naší aplikace. Úpravy uživatelů/model.py, přidejte následující

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True, related_name='profile')
    account_created = models.DateTimeField(default=timezone.now)
    last_seen = models.DateTimeField(default=timezone.now)
    can_login = models.DateTimeField(default=timezone.now)
    preferred_name = models.CharField(max_length=20,default='', null=True, blank=True)
    bio = models.TextField(blank=True, default='')
Všimněte si, že tento model je poměrně podobný modelu Post. Máme další import, TimeZone, který nám umožní nastavit výchozí hodnoty na polích DateTime, a máme také znak a textfield jako příspěvek. Použití všech těchto časových razítka nám pomáhá zabezpečit web a porozumět jeho použití a textová pole nám umožňuje vykreslit informace o každém uživateli nebo autorovi na webu. OneToOnefield by měl být jediným drobným zvážením, chová se přesně stejně jako předem, ale pouze s jedním na následující model. Tímto způsobem má uživatel pouze jeden profil, zatímco může mít mnoho příspěvků. Nyní vylepšeme naše přihlášení a zaregistrujeme zobrazení pro profil. Nejprve upravte uživatele/views.py a zaměřte se na zobrazení registru:
# … Dovoz
            Profile.objects.create(user=user) # Nezapomeňte přidat tento řádek a vytvořit profil pro uživatele
To jednoduše vytvoří profil pro uživatele, aniž by vyplnilo některou z informací. Nyní se chceme ujistit, že uživatelský účet nelze přihlásit příliš často, nebo alespoň hesla nelze vyzkoušet příliš často, takže pojďme aktualizovat přihlašovací zobrazení.
# … Dovoz
        if user and user.profile.can_login < timezone.now(): # Všimněte si, že nyní zkontrolujeme, zda se uživatel může přihlásit
        else: # Pokud nebylo přihlášení úspěšné,
            user = User.objects.filter(username=username).first() # To je část, kde aktualizujeme profil uživatelů
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Takže se nemohou znovu přihlásit na několik sekund
To je základní základní bezpečnost. Ujistěte se, že web není zranitelný pro někoho, kdo jednoduše zkouší každou možnou kombinaci hesel, nebo dokonce několik z nich současně. To nebude frustrující pro obyčejného uživatele, který zná jejich přístupový kód a jen se přihlásí na několik zařízení, ale z aplikace udržuje řadu phishingových robotů. Všimněte si, že jsme přidali příkaz IF s proměnnou CAN_LOGIN, který by měl být v minulosti čas, a aktualizovat jej s každým neúspěšným přihlášením pomocí stejného uživatelského jména. Tímto způsobem škodlivý uživatel nebude schopen uhodnout heslo kdekoli poblíž. Počet sekund v datetime.timedelta () lze také aktualizovat a web bude odolnější, ale o něco méně použitelný s více sekundy. Doporučuji začít 15. Pamatujte, že jsme vytvořili záložní skript, abychom zachránili naši práci, takže pokračujme a záložníme, co máme, abychom se ujistili, že máme vše uloženo. Spusťte příkaz:

sudo backup
Opět to zachrání vaši práci. Doporučuji spustit časté zálohy, abyste ušetřili práci, a možná budete chtít automaticky spustit záložní úlohu. Můžete to udělat pomocí nástroje UNIX s názvem Cron. Chcete -li aktivovat tento nástroj, spusťte následující příkaz a zadejte heslo:

sudo crontab -e
Pokud ještě nevyberete možnost 1 pro NaNo, textový editor, který byste již měli být obeznámeni, a přejděte na spodní část souboru pomocí kláves se šipkami. Přidejte následující řádek:

0 * * * * sudo backup
Cron používá formát minutu, hodinu, den v měsíci, měsíc, den v týdnu, kde * nebo číslo představuje, kdy spustit příkaz. Použitím 0 na minutu a * pro zbytek možností můžeme spustit příkaz v první minutě každé hodiny na začátku minuty. To nám umožňuje zálohovat kód automaticky. Všechna Cronova práce, když se provádí s sudo spuštěním jako root, takže nebudeme muset každou hodinu psát heslo. Chcete -li usnadnit zálohování našeho kódu bez použití hesla, deaktirujme heslo pro náš příkaz zálohování. Uděláme to provedením následujícího příkazu a zadáním hesla:

sudo visudo
Nyní pojďme přejděte na spodní část souboru a přidejte další řádek:

ALL ALL=NOPASSWD: /bin/backup
To nám umožňuje spustit příkaz „Zálohování“ jako jakýkoli uživatel, bez hesla. Formát pro toto je snadný, stačí předponu řádek s „Všechny = nopasswd:/bin/” a končí příkazem, například/bin/zálohování, která existuje v/usr/bin/. Nyní začněme pracovat s e -mailem. E -mail je opravdu důležitý pro webové stránky, protože je to způsob, jak udržet web bezpečnější, ověřte, že uživatelé jsou skuteční lidé a dokonce i tržní produkty nebo služby pro zákazníky. Mnoho lidí, kteří často navštěvují internet, kontrolují svůj e -mail denně a obdrží nejrůznější marketingové e -mail o produktech a službách, o které se zajímají. Existuje několik možností, pokud jde o povolení e -mailu na webových stránkách Django a jste vítáni si vybrat které pro vás funguje nejlépe. Nejprve můžete zaplatit za e -mailovou službu, která vám umožní odesílat e -mail z vaší domény a vyžaduje minimální kód. Existuje mnoho služeb, které to nabízejí, například Google Workspace, SendinBlue, Mailgun a další. Jinak jste dobře stavěníVaše vlastní e -mailová služba na vašem serveru od nuly. Tuto možnost doporučuji, i když je to více kódu a může vyžadovat speciální hosting. S největší pravděpodobností nebudete moci spustit poštovní server z domácího počítače, takže pokračujme a prozkoumejte konfiguraci a kód, který odešle e -mail, než začneme server v cloudu a vytvoříme vlastní poštovní server uvnitř. Nejprve upravte nastavení.py s následujícím

nano app/settings.py
Kde je aplikace název aplikace, kterou jste vytvořili pomocí StartApp. Přidejte následující řádky:

SITE_NAME = 'Django App'

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_ADDRESS = username@server.com'
EMAIL_HOST_USER = 'username'
EMAIL_HOST_PASSWORD = config['EMAIL_HOST_PASSWORD']
DEFAULT_FROM_EMAIL = '{} <{}>'.format(SITE_NAME, EMAIL_HOST_USER)
Nezapomeňte je změnit, až budete připraveni nasadit aplikaci, to později znovu prohlédneme. Nastavení e -mail_address by mělo být e -mailem, ze kterého byste chtěli odeslat, a heslo (email_host_password) by mělo být nastaveno na heslo, které pro server vygenerujete. Načíst heslo z konfiguračního souboru, abych jej zabránil mimo kód pomocí následující logiky, nad těmito řádky v nastavení.py:

import os
import json
with open('/etc/config.json') as config_file:
    config = json.load(config_file)
Poté jsem nastavil soubor JSON s konfigurací v /etc/config.json pomocí nano následujícím způsobem. K úpravě souboru:

sudo nano /etc/config.json
Přidejte následující řádky:

{
	“EMAIL_HOST_PASSWORD”: “<some password here>”
}
Budeme i nadále upravovat konfigurační soubor a přidat všechna hesla a klíče, které v aplikaci použijeme. Prozatím pojďme rychle prozkoumat, jak poslat e -mail pomocí Pythonu. Nejprve vytvoříme šablonu pro ověřovací e -mail, který můžeme poslat našim uživatelům, a vložit jej do adresáře šablon uživatelů. Tato šablona bude zapsána v HTML.

nano users/templates/users/verification_email.html
Tento e -mail je poměrně jednoduchý. Má kontext uživatele, základní adresy URL pro web a ID uživatele a token, které se používají k ověření e -mailu uživatele. Než zapíšeme nějaký kód Pythonu, aby se šablona vyvinula, definujte základní adresu URL v Settings.py. Pokračujte a přidejte následující řádky do App/Settings.py, na začátku.

SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'

BASE_URL = PROTOCOL + '://' + DOMAIN
Nakonec, když je váš web připraven na internet a nasadíte jej, budete chtít definovat svou doménu jako název domény, který si zakoupíte, pro reprezentaci webu. Toto je název, který zadáte do NavBar, abyste získali přístup k vašemu webu. Prozatím můžete nechat doménu prázdnou nebo použít zástupný symbol. Budete také chtít změnit název Site_name na jméno, které chcete poskytnout svůj web, podle vašeho výběru. Než pošleme e -mail, vytvořme generátor tokenů, abychom mohli mít token aktivace účtu, který nikdy vyprší. Můžeme to udělat vytvořením a importem tokenu aktivace účtu, který vypadá jako následující. Upravit soubor:

nano users/tokens.py
Přidejte následující kód:

from django.contrib.auth.tokens import PasswordResetTokenGenerator
import six
class TokenGenerator(PasswordResetTokenGenerator):
    def _make_hash_value(self, user, timestamp):
        return (
            six.text_type(user.pk) + six.text_type(timestamp)
        )
account_activation_token = TokenGenerator()
unsubscribe_token = TokenGenerator()
Tento generátor základního tokenu generuje token, který můžeme uživateli poslat do adresy URL a uživatel může použít k ověření jejich e -mailu a aktivaci jejich účtu. Dále se podívejme, jak poslat e -mail. Pomocí nano, upravte uživatele/email.py.

nano users/email.py
Odeslání ověřovacího e -mailu HTML bude vypadat takto:

from django.contrib.auth import get_user_model
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.core.mail import EmailMultiAlternatives
from django.shortcuts import render
from .tokens import account_activation_token
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.template import Template, Context
from django.conf import settings
import traceback

def send_verification_email(user):
    User = get_user_model()
    mail_subject = '[{}] Activate your account.'.format(settings.SITE_NAME)
    html_message = render_to_string('users/verification_email.html', {
        'user': user,
        'domain': settings.DOMAIN,
        'protocol': 'https',
        'uid': urlsafe_base64_encode(force_bytes(user.pk)),
        'token': account_activation_token.make_token(user),
    })
    send_html_email(user, mail_subject, html_message)
To je poměrně jednoduché. Importujeme funkce, které musíme poslat e -mail, vykreslit e -mail pomocí šablon a naše nastavení a poté e -mail definujeme názvem šablony a pošleme jej uživateli pomocí funkce. Všimnete si, že jsme tuto funkci nedefinovali pro odeslání pošty, send_html_email, takže to napište pod kódem, který jsme již přidali uživatelům/email.py

def send_html_email(user, mail_subject, html_message):
    to_email = user.email
    username = user.username
    if to_email == '':
        return None
    unsub_link = settings.BASE_URL + user.profile.create_unsubscribe_link()
    html_message = html_message + "<p><a href=\"" + unsub_link +  "\" + title=\"Unsubscribe from " + settings.SITE_NAME + " emails\">Unsubscribe</a></p></body></html>"
    msg = EmailMultiAlternatives(mail_subject, strip_tags(html_message), settings.DEFAULT_FROM_EMAIL, [to_email], headers={'List-Unsubscribe' : '<' + unsub_link + '>'},)
    msg.attach_alternative(html_message, "text/html")
    profile = user.profile
    try:
        msg.send(fail_silently=False)
        if not profile.email_valid:
            profile.email_valid=True
            profile.save()
    except:
        profile.email_valid=False
        profile.save()
To je o něco složitější a zatím nejsme připraveni spustit celý tento kód. Všimněte si, že definujeme unsub_link, odkaz, který může uživatel použít k odhlášení z našich e -mailů. To je důležité, protože uživatelé budou muset být schopni odhlásit se z našich e -mailů, pokud je nechtějí vidět, kdykoli. Přidáme také textovou alternativu k naší zprávě, která je zpráva HTML spuštěná značkami HTML. Nakonec zkontrolujeme, zda e -mail byl odeslán, a zda ne, označujeme profil uživatele, že jejich e -mail není platný. Pojďme se vrátit zpět k uživatelským modelům, abychom to mohli udělat vše. Musíme definovat funkci pro vygenerování odkazu na odhlášení a definovat booleovské pole označit, že e -mail uživatele není platný. Nejprve přidejte následující import do horní části uživatelů/modelů.py

nano users/models.py
# …
Dále pojďme přidat funkce do modelu uživatele, abychom vytvořili token a zkontrolovali token použitý k aktivaci e -mailu, jakož i pole, abychom uložili, zda uživatel úspěšně obdrží svou poštu. V uživatelích/models.py opět přidejte následující kód na konec modelu (odsazený kód)
# …
            TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Platí po dobu 30 dnů
To je poměrně jednoduché, použijeme časový razítko, který je základní kryptografický nástroj, k vytvoření tokenu, který vyprší po určitém čase, a také pomocí jiné funkce zkontrolujeme, zda je platný. Tyto žetony používáme dvakrát, jednou k ověření e -mailu a jednou pro odkaz odhlášení. Nyní, když je máme, poslední z práce, kterou budeme muset udělat, je v názorech. V rámci uživatelů/views.py pojďme přidat zhlédnutí k ověření e -mailové adresy a odhlášení.

nano users/views.py
Nejprve přidejte následující import. Hodil jsem několik navíc, takže nebudeme muset později importovat více položek.
from .email import send_verification_email # Nezapomeňte importovat funkci odesílání e -mailu ověření
Možná již máte některé z těchto dovozů, ale nesiluje je opakovat. Budete muset importovat funkci odesílání e -mailů ověřování e -mailů a také account_activation_token od Users.Tokens, mimo jiné importy. Nyní ve spodní části souboru přidejte následující kód:
        # odhlásit je
    # Jinak přesměrujte na přihlašovací stránku
# SendWelcomeEmail (požadavek, uživatel)
Toto je hodně kódu. Pojďme to rozebrat. První funkce, čistá a jednoduchá, odhlásí uživatele ze seznamu adresátů. Druhá funkce aktivuje jejich e -mail a všimnete si, že jsem přidal komentovanou funkci, sendWelcomeEmail. Můžete použít e -mailovou šablonu a definici funkce k odeslání uvítacího e -mailu, prostě jsem ještě ne. Poslední funkce, kterou jsem hodil, je důležitá, protože vyprší aktivační e -maily. Proto budeme muset znovu předat aktivační e -mail. K tomu můžeme použít základní formulář a zavolat funkci k odeslání ověřovacího e -mailu. Než to uděláme, ujistěte se, že je odeslán na prvním místě, přidáním funkčního volání do zobrazení registru. Přidejte tento řádek těsně před přesměrováním v zobrazení registru, def registr, do uživatelů/views.py.

nano users/views.py
# … (Po) Def Register (žádost):
# … (Před) přesměrováním (
Nemusíte přidávat první a poslední řádky v tomto úryvku kódu, jen se ujistěte, že zobrazení registru odešle e -mail ověření uživateli. Mělo by to vypadat takto:
# … Dovoz
            send_verification_email(user) # Nezapomeňte přidat tento řádek!
Nyní budeme muset přidat formulář k odeslání aktivačního e -mailu. V uživatelích/forms.py přidejte následující formulář:
# … (Import)
Budeme také potřebovat šablonu odpovídající tomuto formuláři E -mailu Resendu. Přidejte tuto šablonu do. Upravte soubor:

nano users/templates/users/resend_activation.html
Dále přidejte do souboru následující kód.

{% extends 'base.html' %}
{% block content %}
{% load crispy_forms_tags %}
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Resend activation email</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-secondary" type="submit">Resend activation email</button>
            </div>
        </form>
{% endblock %}
Whew, to je hodně! Nyní, když nasadíme kód na náš server, budeme moci odeslat e -mail HTML a aktivovat uživatelské účty kliknutím na e -mail. Možná bychom také chtěli poslat jednoduchý uvítací e -mail, takže se podívejme, jak to udělat. Zpět v uživatelích/email.py, přidejte následující kód:

def sendwelcomeemail(user):
    User = get_user_model()
    html = open('{}/users/welcome_email.html'.format(settings.BASE_DIR)).read()
    subject = 'Welcome to ' + settings.SITE_NAME + ', {{ username }}!'
    template = Template(html)
    subjtemplate = Template(subject)
    context = Context({'username': user.username, 'base_url': settings.BASE_URL, 'model_name': 'Daisy Holton, 'site_name': settings.SITE_NAME})
    renderedtemplate = template.render(context)
    subjcontext = Context({'username': user.username})
    subjrenderedtemplate = subjtemplate.render(subjcontext)
    send_html_email(user, subjrenderedtemplate, renderedtemplate)
Budeme také potřebovat šablonu k vykreslení všech těchto informací. Na mém webu vypadá šablona jako níže, ale jste vítáni k naformátování, jak se vám líbí.
Všimněte si, že nemáme závěrečné nebo HTML značky, protože je přidáme, když přidáme odkaz HTML odhlášení. To jsou důležité, ale nechceme je definovat dvakrát. Co bude dál? Prošli jsme dlouhou cestu. Opravdu bychom měli být připraveni nasadit web na server. Můžeme přidat dekoratér @Login_Required a zajistit naše názory, přijímat uživatelské registrace, odesílat e -maily a informace o mezipaměti, což je základ toho, co web musí udělat, aby zůstal relevantní. Přidáme několik více užitečných funkcí a poté vytvoříme základ pro nasazení našeho kódu na vzdálený server, nastavení poštovního serveru, konfigurace domény a filtry, aby byl náš web bezpečný a vhodný. Budeme také potřebovat zobrazení resetování hesla, takže to přidejte opravdu rychle. V některých funkcích je narušen vestavěný zobrazení Django vestavěné resetování hesla, ale podíváme se na to, jak napsat vlastní zobrazení, e -mailovou šablonu, formuláře a vzory URL. Zde je to, jak vypadá pohled, v uživatelích/views.py
# ... import
Tento formulář je zabudován do Djanga, ale budeme potřebovat šablonu k potvrzení resetu hesla, uživatelů/šablon/uživatelů/hesla_reset_confirm.html
Máme také šablonu pro odeslání e -mailu pro resetování hesla s jednoduchým formou v uživatelích/šablonách/uživatelů/heslem_reset.html
Šablona samotného e -mailu je jednoduchá, jedná se o základní soubor HTML, který vykreslí odkaz pro resetování hesla, v uživatelích/šablonách/uživatelů/heslem_reset_email.html. Django tento soubor automaticky interpretuje.
Budeme také potřebovat další dvě šablony. Prvním je potvrzení, že e -mail byl odeslán. Názory na tyto jsou již v Djangu, takže je musíme pouze oslovit v URLS.PY. Tato šablona se nachází u uživatelů/šablon/uživatelů/hesla_reset_done.html
A konečně, pro potvrzení, že reset hesla je dokončen, uživatelé/šablony/uživatelé/heslo_reset_complete.html
Nyní potřebujeme vzory URL pro tyto názory. U uživatelů/urls.py přidejte následující vzory URL:
    # ... Předchozí adresy URL zde
Čtyři šablony, to je hodně! Nyní však můžeme být jisti, že budeme moci resetovat heslo uživatele, kdykoli potřebujeme, vše z webového prohlížeče. Chápu, že se jedná o hodně kódu. Pokud se to zdá trochu nad hlavou, je to v pořádku. Zlepšíte se, vaše porozumění se zlepší a velmi brzy se stanete mnohem kompetentnějším s kódem. Pokud jste úplně ztraceni, doporučuji vrátit se k tomuto softwaru později po práci na samostatném kurzu naučit se kódovat online. Ty jsou obvykle zdarma pro začátek a provedou vás vše, co musíte být úspěšní, když se vrátíte k tomuto projektu. Pokud máte pocit, že jste připraveni pokračovat, přečtěte si dále, zakryjeme nasazení kódu na vzdálený server a nastavení poštovního serveru a automatizujte své nasazení pomocí bash, takže můžete vždy nastavit nový projekt s Několik jednoduchých příkazů. Poslední věcí, kterou musíme udělat před nasazením na vzdálený server, je učinit náš web o něco bezpečnější. TyVšimněte si, že přihlašovací zobrazení bere pouze uživatelské jméno a heslo a neexistuje ověřování multi faktorů nebo jednorázový kód. Toto je snadná oprava a se stejným kódem můžeme vytvořit textové zprávy o odesílání našich stránek a dokonce reagovat na textové zprávy odeslané na server. Nejprve se vrátíme do uživatelských modelů a přidáme signatář časového razítka, který bude představovat každé přihlášení. K modelu uživatele také přidáme jedinečný, rotující identifikátor, který bude použit k přidání dalšího zabezpečení k našemu přihlášení. Úpravy uživatelských modelů, uživatelů/model.py, přidejte následující
# Ujistěte se, že importujte UUID, Timestamp Signant a generátor URL (reverzní)
    # Přidejte tento kód sem
    # A přidejte tuto funkci
            TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Platí po dobu 3 minut
Ujistěte se, že vaši uživatelé/models.py vypadá takto, kromě komentářů (kód na řádcích s #). Rozbijte to, je to jednoduché. Máme několik importů, časový razítko, což je kryptografický nástroj, který může vygenerovat zabezpečený kód a ověřit jej, aby se zajistilo, že je platný, byl použit pouze jednou a ne starší než určitý počet sekund. Používáme také UUID, což je jedinečný identifikátor, který identifikuje našeho uživatele při podpisu tokenu, a v adrese URL, kde je token odeslán uživateli. Tuto základní kryptografii použijeme k vytvoření dvou faktorových ověřovacích pohledu. Než uděláme cokoli jiného, ​​spustíme migraci, aby byly naše uživatelské modely aktualizovány. V adresáři s manage.py spusťte následující příkazy a proveďte migraci.

source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
To je důležité, protože pokaždé, když provádíme změny v modelech, budeme muset vytvořit tabulky a aktualizovat databázi pomocí výchozí hodnoty, než budeme moci skutečně použít. Dále improvizujeme náš přihlašovací pohled na přesměrování na zobrazení sekundární autentizace. U uživatelů/views.py odstraňte funkci přihlášení a přesměrujte na adresu URL, kterou jsme právě vygenerovali v uživatelských modelech.
# … Dovoz
        if user and user.profile.can_login < timezone.now(): # Všimněte si, že nyní zkontrolujeme, zda se uživatel může přihlásit
            # Odstraňte funkci Auth_Login, která byla zde
                return redirect(user.profile.create_auth_url()) # Všimněte si, že zde přesměrujeme novou adresu URL
            else: # Pokud uživatel nepoužívá vícefaktorovou ověřování, stačí je přihlaste.
        else: # Pokud nebylo přihlášení úspěšné,
            user = User.objects.filter(username=username).first() # To je část, kde aktualizujeme profil uživatelů
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Takže se nemohou znovu přihlásit na několik sekund
To je tedy docela jednoduché, nyní máme způsob, jak přesměrovat na dva faktorové autentizační pohled, když jej vytvoříme. Máme také zálohu pro případ, že uživatel nepřidal telefonní číslo. Brzy přidáme základní pohled, abychom přidali telefonní číslo a brzy se přihlásí s textovou zprávou. Nejprve potřebujeme snadný způsob odeslání textové zprávy z našeho kódu. Za tímto účelem si můžeme vybrat z řady API, ale podle mého názoru je nejjednodušší Twilio. Nabízejí také dobré ceny pro menší projekty a také objemné slevy. Vytvořte si účet na Twilio.com, vyplňte některé podrobnosti o vašem projektu, zakupte telefonní číslo a zkopírujte klíče API do nastavení.py. Poté přidejte tento kód do nového souboru, uživatele/SMS.Py.

nano users/sms.py
# Importujte všechny potřebné balíčky
# Tento kód odešle text s Twilio
# Funkce pomocníka pro získání čísla s tolika číslicemi
# Pošlete text a ověřte uživatele
# Pošlete uživateli jakýkoli text s touto funkcí
# Ověřte kód s touto funkcí
# Ověřit čas
Nezapomeňte náležitě změnit nastavení a přidat tyto řádky pomocí klíčů:
# Ujistěte se, že je zkopírujte z palubní desky Twilio
AUTH_VALID_MINUTES = 3 # Počet minut, kdy je stránka TFA aktivní po instanci
Nejprve budeme potřebovat formuláře pro naše dva faktorové pohledy. Úpravy uživatelů/formulářů, přidejte následující kód.
# … Dovoz
# Formulář pro vstup do našeho telefonního čísla
# Formulář pro ověření
Dále vytvoříme pohledy na uživatele/views.py
# … Dovoz
Pro oba tyto názory budeme také potřebovat šablony. Pojďme nejprve přidat šablonu MFA.

nano users/templates/users/mfa.html
Přidejte tento kód HTML do šablony
To je docela samostatné vysvětlující. Formulář odešle buď kód nebo prázdný kód a v pohledu si všimnete kódu, pokud obdržíme prázdný kód. Pak máme pouze dvě tlačítka odeslání, a tak můžeme odeslat kód jedním tlačítkem. Dále přidáme jednoduchý formulář pro přidání telefonního čísla.

nano users/templates/users/mfa_onboarding.html
Přidejte následující HTML:
Tento formulář je mnohem jednodušší, pouze vykresluje formulář telefonního čísla, který jsme vytvořili, a umožňuje uživateli přidat telefonní číslo. Vypadá to opravdu dobře! Dokud je vše správně nastaveno, měli bychom být schopni odesílat zprávy a přihlásit uživatele s jejich telefonním číslem, jakmile přidáme vzory URL. Poslední věc, kterou musíme nastavit, je pohled profilu, abychom se ujistili, že uživatel může změnit své telefonní číslo, aniž by byl přihlášen. „Přestaňte“ odhlásit se z budoucích textových zpráv. Přidáme zobrazení profilu uživatelům/views.py. Tento pohled bude aktualizovat bio, e -mail, uživatelské jméno a telefonní číslo uživatele a umožní nám umožnit ověřování více faktorů. Nejprve budeme potřebovat další dva formuláře v uživatelích/formách.
# ... import
Dále můžeme vytvořit pohled na použití obou těchto formulářů. Upravte uživatele/views.py a přidejte do pohledu.
# Přidejte tyto dovozy
Pro tento pohled budeme také potřebovat šablonu.

nano users/templates/users/profile.html
Všimnete si, že se jedná o poměrně jednoduchý formulář, ale má v něm nějaký javascript, který automaticky zveřejňuje obsah formuláře při aktualizaci. To je užitečné, takže jste schopni provádět úpravy, aniž byste museli pokaždé stisknout odeslání. Dále potřebujeme adresy URL představujících všechny tyto názory v Userl Patters. Upravte uživatele/urls.py a přidejte tento kód:
# … Předchozí kód, import
# … Vzory URL, které jsme dříve zadali, přidejte další tři řádky
Nyní je vhodný čas na vyzkoušení našeho projektu. Nejprve však spustíme další zálohu.

backup
A spusťte server. Než nasadíme na server Linux, je dobré povolit ověřování dvou faktorů na účtu. Uděláme to do našeho profilu URL,/uživatele/profil/, a zaškrtnutím políčka povolit ověřování po zadání našeho telefonního čísla a poté odeslání formuláře.

python manage.py runserver localhost:8000
Navštivte webovou stránku tím, že půjdu do webového prohlížeče, v tomto příkladu používám Google Chrome a zadávám URL https: // localhost: 8000/účty/profil/ V případě potřeby se budete moci přihlásit a povolit ověřování dvou faktorů. Tento projekt potřebuje server, aby mohl spustit, aby mohl opravdu poslat poštu. Nejprve však potřebujeme způsob, jak vidět chyby. Všimnete si, že pokud spustíte server v režimu Debug, s nastavením.Debug rovný true, server automaticky zobrazuje chyby. Abychom ukázali chyby bez použití režimu debug, který je nebezpečný na produkčním serveru, měli bychom přidat pohled na něj. Nejdůležitější chyby, které musíme být schopni zvládnout, jsou: Chyba 500 - Problém s naším kódem Chyba 404 - Stránka, která nebyla nalezena (Broken URL) Chyba 403 - Oprávnění zamítnuto chyby Pojďme přidat novou aplikaci pro zpracování těchto chyb, nazývaných chyby.

python manage.py startapp errors
Přidejte toto do nastavení.py, jak jsme to udělali dříve, v nastavení instalovaných_apps a začněte přidáním odkazů na některé zhlédnutí v aplikaci/urls.py, kde je aplikace název vašeho projektu Django.

handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
To je vše, co potřebujeme kromě chyb, šablon a trochu middlewaru. Definujme ty tak:
# Vytvořte své názory zde.
Dále definujeme middleware tak, aby tyto chyby zvládl. Uděláme to nejprve přidáním do middleware_classes v nastavení.py, s názvem našeho middlewaru.
    # ... Předchozí middleware
Dále přidejte middleware.

from threading import local
import traceback
from django.utils.deprecation import MiddlewareMixin

_error = local()

class ExceptionVerboseMiddleware(MiddlewareMixin):
    def process_exception(self, request, exception):
        _error.value = traceback.format_exc()

def get_current_exception():
    try:
        return _error.value
    except AttributeError:
        return None

def set_current_exception(exception):
    try:
        _error.value = exception
    except AttributeError:
        print('Attribute error setting exception.')
Přidáme funkci, která získá aktuální výjimka pomocí lokálního závitu, což nám pomáhá sledovat jakékoli chyby v našem kódu. Pokud jde o šablony, potřebujeme pouze jeden, protože dynamicky definujeme název v pohledu. Šablona musí pouze vykreslit název a „Trace“, naše chyby Traceback z kontextu.

nano errors/templates/errors/error.html
Toto je zatím naše nejjednodušší šablona, ​​ale tak je snadné vidět chyby v našem projektu. Dále deaktirujme ladění v nastavení.

nano app/settings.py
Najděte tuto řádek, kde je nastavena na pravdu, a změňte ji na false

DEBUG = False
Pokračujte a zálohujte aplikaci hned. Jsme připraveni nasadit na vzdálený server Linux a odtud pokračovat v přidávání funkcí.

sudo backup
Než zveřejníme tento kód na server, měli bychom se domnívat, že s kódem mohou existovat nějaké problémy. V závislosti na případu budou mít weby, které přijímají informace, které jim byly zveřejněny, problémy s zveřejněním spamu a potížemi s odstraněním spamu. To by se nemělo stát okamžitě, ale pokud se to stane, později prozkoumáme, jak automaticky mírný spam na webu a ztěžovat pro roboty přístup k webu spolu s tím, jak deaktivovat uživatelské účty a ověřit identitu uživatele s uživatelem s uživatelem s identitou uživatele Skenování jejich ID nebo biometrického skenování, jako je rozpoznávání otisku prstu nebo obličeje. Při pohledu na příklad autentizace s více faktory jsme zkoumali, ve výrobě se věci mohou lišit. Všimněte si, jak omezujeme přihlášení sazby a vypršíme tokeny. Pokud roboti přistupují k webu, může být ověřování dvou faktorů obtížnější, protože mohou zadat kódy současně, kdy je uživatel. Abychom tomu bojovali, použijeme model v uživatelských modelech a prohlašujeme, jak komunikujeme s webem, když jsmeOvěřování pomocí ověřování multifaktorů pomocí telefonního čísla. Přidáme také možnost ověřit pomocí e -mailu. Začněte úpravou uživatelských modelů s

nano users/models.py
Tak by měl vypadat model, který přidáváme. Nepotřebujeme žádné metody, pouze proměnné pro uložení ID, uživatele, časové razítko, vypršení, délka a pokusy proti jakémukoli ověření více faktorů (kód jako 123456 odeslán do telefonu nebo e -mailu).
# Základní token používaný k přihlášení na web
Pojďme také přidat privilegium našemu uživateli a my jsme jej prozatím nastavili ručně, než nakonec automaticky migrujeme na zařazení privilegovaných uživatelů. V uživatelských modelech přidejte tento řádek do profilu:

    vendor = models.BooleanField(default=False)
Stejně jako u jakýchkoli změn v databázi musíme provést migraci a migrovat databázi kdykoli upravujeme soubor modelů v Djangu. Nezapomeňte, že k tomu použijeme zdroj jako první (pokud již nebyl použit od otevření terminálu) a poté Python Manage.py pro provedení migrace a migrace.
cd project-directory-you-named # (V případě potřeby)
Prozatím můžete získat jakékoli účty, které jste vytvořili jako prodejci, pomocí shell.

python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Nyní si vyvineme náš více faktorový ověřovací pohled na použití tohoto tokenu. Nejprve musíme upravit naše pomocné nástroje MFA. Používání nano,

nano users/mfa.py

from django.utils import timezone
import random
import datetime
from django.conf import settings
from feed.middleware import get_current_request
from django.contrib import messages
from .email import send_html_email
import traceback
from .models import MFAToken

account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
source_phone = settings.PHONE_NUMBER

def send_text(target_phone, text):
    from twilio.rest import Client
    try:
        client = Client(account_sid, auth_token)
        if len(target_phone) >= 11:
            message = client.messages.create(
                to=target_phone,
                from_=source_phone,
                body=text + ' Text STOP to cancel.')
    except:
        messages.warning(get_current_request(), 'There was an error sending the message.')
        print(traceback.format_exc())

def get_num_length(num, length):
    n = ''
    for x in range(length):
        n = n + str(num)
    return int(n)

def send_verification_text(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_user_text(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)))

def send_verification_email(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))

def send_user_text(user, text):
    send_text(user.profile.phone_number, text)

def check_verification_code(user, token, code):
    token.attempts = token.attempts + 1
    profile = user.profile
    result = (token != None and code != '' and token.token == code and (token.expires > timezone.now()) and token.attempts <= settings.MFA_TOKEN_ATTEMPTS)
    if token.attempts < 3 and result:
        profile.verification_code_length = 6
    elif token.attempts > 1 and not result:
        profile.verification_code_length = profile.verification_code_length + 2
        if profile.verification_code_length > settings.MFA_TOKEN_LENGTH: profile.verification_code_length = settings.MFA_TOKEN_LENGTH
    token.save()
    profile.save()
    return result
# Ověřte uživatele pomocí svého e -mailu nebo telefonního čísla
    token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Filtrujte token o hodnotu předanou v adrese URL (UUID)
    if not token: token = MFAToken.objects.create(user=User.objects.filter(profile__uuid=username).first(), uid=username, expires=timezone.now() + datetime.timedelta(seconds=115)) # Pokud tato relace nebyla vytvořena, vytvořte ji
    user = User.objects.filter(id=token.user.id).first() # Získejte uživatele z tokenu
    if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Pokud jsou již ověřeny, přihlaste se
    if not user: raise PermissionDenied() # Popírejte, zda nebyl nalezen žádný uživatel
    if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Zkontrolujte autorský žeton
        auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Přihlaste se uživatele, pokud již nejsou přihlášeni
        user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Nastavte vypršení ověřování jejich více faktorů
        return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Přesměrovat uživatele na další stránku
    if not user.profile.mfa_enabled: # Zkontrolujte, zda je MFA povoleno
        if not check_verification_time(user, token): # Zkontrolujte čas
            user.profile.mfa_enabled = False # Vymažte telefonní číslo
            user.profile.enable_two_factor_authentication = True # Povolit MFA
            user.profile.phone_number = '+1' # Zakázat telefonní číslo
            user.profile.save() # Uložit profil
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Přihlaste se uživatele, pokud jejich MFA není povoleno
    if request.method == 'POST' and not fraud_detect(request, True): # Pokud je požadavek žádost o příspěvek
        form = TfaForm(request.POST) # Nastavit formulář
        code = str(form.data.get('code', None)) # Získejte kód
        if code and code != '' and code != None: # Ujistěte se, že to není prázdné
            token_validated = user.profile.check_auth_token(usertoken) # Zkontrolujte autorský žeton
            is_verified = check_verification_code(user, token, code) # Zkontrolujte kód
            if token_validated: # Pokud všechno
                if is_verified: # Je v pořádku
                    user.profile.mfa_enabled = True # Povolit MFA (pokud již není povoleno)
                    auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Přihlaste se uživatele
                    for key, value in request.GET.items(): # Vytvořte querystring pro další parametr (pokud existuje)
                        return HttpResponseRedirect(next) # Přesměrovat
            elif not token_validated: # Pokud byl token neplatný
            if p.mfa_attempts > 3: # Pokud došlo k příliš mnoho pokusů
            if form.data.get('send_email', False): # Pošlete e -mail (nebo text)
    # Vykreslete formulář (pro získání požadavků)
Když přidáme tento kód, nezapomeňte importovat funkci a odeslat e -mail. V horní části souboru, zobrazení uživatele (s jinými importy), přidejte

from .mfa import send_verification_email as send_mfa_verification_email
Nyní musíme tuto funkci napsat, než bude něco z toho fungovat. Měl by rozšířit naši e -mailovou funkci Odeslat a jednoduše odeslat e -mailem uživateli pomocí ověřovacího kódu.

nano users/mfa.py

def send_verification_email(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))
Takže to vše funguje skvěle, nyní máme systém ověřování více faktorů, který závisí na telefonním čísle nebo e -mailu. Mohly by to být spammery, roboti nebo kdokoli, kdo neznamená dobře pro naši práci. Podívejte se na názor, který mám pro monitorování uživatelů na svém webu:
# import
from .tests import is_superuser_or_vendor # Tento test budeme muset vytvořit
    # Získejte seznam uživatelů
    return render(request, 'users/users.html', { # Vráť uživatele v šabloně
Všimněte si, že tento kód používá test, budeme muset tento test vyhlásit v souboru tests.py a importovat jej. Úpravy uživatelů/tests.py, vytvoříme test.

def is_superuser_or_vendor(user):
    return user.profile.vendor or user.is_superuser
To je ve spojení se šablonou uživatelů/uživatelů.html, která vypadá něco takového:
Všimněte si, že šablona obsahuje další šablonu, uživatele/_user.html. Při použití šablony, která má subtemplate a nepoužívá se rozšíření, je to dobrý nápad přidat podtržení (_) před názvem souboru, který se má rozšířit, aby se rozlišilo šablony. Všimněte si, že se jedná o hodně Jinja, nemusíte mít všechny tyto proměnné definovány. Ale tak vypadá můj kód.
      <small># {{user.id}} </mall>
Potřebujeme také další subtetemplate, Toggle_Active.html. Tato šablona by měla být forma, která nám umožňuje přepínat, zda je uživatel aktivní.
Budeme také muset přidat pohled na přepínání aktivity uživatele a vhodné vzory URL. Když jsme u toho, přidejte pohled na odstranění uživatele pro případ, že to potřebujeme.
# Import
    success_url = '/' # Přesměrování na URL úspěchu
    def test_func(self): # Vyzkoušejte, zda je uživatel superuživatel a má povolení k odstranění
I když je to praktické v případě potřeby, vymazání uživatele by nemělo být nutné po většinu času, můžeme jen přepínat viditelnost uživatelů, kteří navštíví web, pokud je potřebujeme zamítnout. Vzory URL, které jsme přidali, vypadají takto. S Nano, upravte uživatele/urls.py a přidejte tyto řádky:

nano users/urls.py
Řádky by měly jít do seznamu cest v uživatelských zobrazeních, před koncem „]“, ale po začátku „[“.
# …
# …
Nyní se ujistěte, že web zálohuje, abyste si jej mohli stáhnout na webovém serveru, na kterém budeme pokračovat v práci. Z příkazového řádku,

sudo backup
Nyní je náš web zálohován. Takže nyní máme několik užitečných funkcí. Ale co tu velký obrázek? Tento kód stále není přístupný z internetu, zatím nemáme žádný poštovní server a musíme rozšířit naši aplikaci tak, aby zahrnovala komplexní proces ověření a hladká rozvržení, která nám pomůže prozkoumat web, spolu s zabezpečenými protokoly pro ověření privilegovaných uživatelů . Dostaneme se k tomu všemu. Nejdůležitější věcí prozatím bude jen získání tohoto kódu online, což můžeme udělat s několika řádky bash na serveru Ubuntu. Budete si však muset pronajmout server, pokud nemáte doma server a předplatné obchodního internetu, které vám umožní otevírat porty. Osobně spustím svůj web na HP Z440, který je nainstalován v mém bytě, ale obvykle je to mnohem levnější pro základní potřeby pronajmout si virtuální soukromý server (VPS). Mějte na paměti, že kód, který nyní běžíme, je relativně tenký, bude muset být udržován a vylepšen dřívePřipraveno k použití toho, co musíme vytvořit produkt. Ujistěte se, že buďte opatrní, co děláte s internetem, ujistěte se, že pokud tento web nasadíte na web na serveru Linux, máte plán blokovat nežádoucí interakce s vaším webem. Pravděpodobně to nebude problém zpočátku, ale podíváme se na řadu řešení, která bude bojovat proti tomu, včetně strojového učení, umělé inteligence a počítačového vidění. Když se stane problémem, podívejte se dále v tomto textu pro řešení. Pokud jde o pronájem VPS, existuje mnoho míst, kam můžete jít. Google Cloud má servery VPS, IONOS, Kamatera, Amazon AWS a další poskytovatelé nabízejí řešení cloudových serverů, která budou vyhovovat našim potřebám. Budete muset kliknout na jejich formuláře a vybrat plán, jak začít. S jakýmkoli poskytovatelem můžete jít se základním plánem, ale ujistěte se, že poskytovatel umožňuje otevřít porty serveru Port Mail Server k odeslání e -mailu (to by měl být port 587 a port 25), někteří poskytovatelé tyto porty blokují. Zatím jsem mělZkušenosti EST s Ionos a Kamaterou mi obě umožní poslat neomezený e -mail a jejich ceny jsou docela levné. Připojíte se k novému serveru přes protokol s názvem SSH nebo Secure Shell, který vám umožní vzdáleně propojit se serverem přesně jako váš osobní počítač, z osobního počítače. Když nastavíte server, poskytovatel hostingu vás pravděpodobně požádá o přidání klíče SSH, nebo vám poskytne uživatelské jméno a heslo. Klíč SSH je, jak se přihlásíte k serveru z příkazového řádku k úpravě kódu. Pomocí níže uvedených možností SSH-Keygen vygenerujte SSH

ssh-keygen
Uložte soubor a přepsáte jej, pokud potřebujete, je dobré otočit klíče SSH, pokud jste to tak ještě neučinili. Nyní můžete použít následující příkaz k zobrazení klíče SSH. Budete chtít zkopírovat na svůj vzdálený server, abyste jej mohli použít k ověření.

cat ~/.ssh/id_rsa.pub
Pokud jste nebyli schopni vidět klíč SSH při psaní tohoto příkazu (dlouhý řetězec číslic a písmen začínajících „SSH-RSA AAA“), zkuste vygenerovat klíč RSA (jsou bezpečnější, takže je doporučuji je používat používat .) Následující kód vygeneruje klíč 4096 bitu RSA SSH.

ssh-keygen -t rsa -b 4096
Vytvořte VPS spuštěnou Ubuntu, ale plánujete to. Jakmile vytvoříte VPS kliknutím na formuláře na webových stránkách poskytovatelů (Kamatera.com, ionos.com nebo podobně), budete se chtít přihlásit. Chcete -li to provést, použijte příkaz SSH s vaší IP adresou (adresa adresa (adresa adresa (adresa adresa (adresa adresa (adresa adresa (adresa To vypadá jako xx.xx.xx.xx). Musíte být také citliví na výchozí uživatelské jméno na serveru, který jsme vytvořili, například Ubuntu.

ssh ubuntu@XX.XX.XX.XX
Můžete být požádáni o heslo, pokud budete požádáni o heslo, zadejte jej. Nebudeme používat výchozí uživatelské jméno, takže začněme vytvořením nového uživatele a přidáme klíč SSH k jejich účtu. Začněme přidáním nového souboru SSHD_Config, který řekne serveru, jak používat SSH.

nano sshd_config
# Toto je konfigurační soubor SSSHD serveru na celém serveru.  Vidět
# SSHD_CONFIG (5) pro více informací.
# Tento SSHD byl sestaven s Path =/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/hry/hry
# Strategie použitá pro možnosti ve výchozím sshd_config odesláno s
# OpenSSH má určit možnosti s jejich výchozí hodnotou, kde
# možné, ale nechte je komentovat.  Neochvějné možnosti potlačují
# Výchozí hodnota.
# Port 22
# Addressfamily Any
# Poslousnost 0.0.0.0
# Poslousnost ::
# Hostkey/etc/ssh/ssh_host_rsa_key
# Hostkey/etc/ssh/ssh_host_ecdsa_key
# Hostkey/etc/ssh/ssh_host_ed25519_key
# Šifry a klíčování
# Rekeylimit výchozí žádné
# Protokolování
# SYSLOGFACILILY AUTH
# Informace o leglevelu
# Ověřování:
# LOGINGRACETIME 2M
# PermitrootLogin zakázán-password
# Strictmodes ano
# Maxauthtries 6
# Maxsessions 10
# Očekávejte, že .SSH/AUTORIZED_KEYS2 bude v budoucnu ignorováno.
# Autorizovaný principalsfile žádný
# AutorizovanýKeysCommand žádný
# AutorizovanýkeysCommandUser nikdo
# Aby to fungovalo, budete také potřebovat hostitelské klíče v/etc/ssh/ssh_ známé_hosts
# HOSTBASEDAUTHENTICE NO
# Změňte na ano, pokud nedůvěřujete ~/.ssh/známém_Hosts pro
# Hostbasedauthentication
# Ignoreusers známéHosts č
# Nečtete soubory uživatele ~/.rhosts a ~/.shosts
# Ignorerhosts ano
# Chcete -li deaktivovat tunelovaná čistá textová hesla, změňte na ne!
# PersonalEmpTyPasswords č
# Změňte na ANO, abyste povolili hesla pro odpověď na výzvu (problémy s pohledem
# Některé moduly a vlákna PAM)
# Kerberos možnosti
# Kerberosauthentication no
# Kerberosorlocalpasswd Ano
# Kerberosticketcleanup Ano
# KerberosgetAfStoken ne
# Možnosti GSSAPI
# GSSAPIAUTHENTIKACE NO
# GssapicleanupCredentials ANO
# GSSAPISTRICTICTHCEPTORCECK ANO
# GSSAPIKEYEXCHANGE NO
# Nastavte to na „Ano“, aby povolila ověřování PAM, zpracování účtu,
# a zpracování relací. Pokud je to povoleno, ověřování PAM bude
# být povolen prostřednictvím KBDinteractiveAuthentication a
# PasswordAuthentication.  V závislosti na konfiguraci PAM,
# Ověřování PAM prostřednictvím KBDinteractiveAuthentication může být obtok
# Nastavení „PermitrootLogin bez pasáže“.
# Pokud chcete pouze spustit účet PAM a kontroly relací
# Ověřování PAM, poté to povolte, ale nastavte hesloauthentication
# a kbdinteractiveauthentication na „ne“.
# Dovolená profilding ano
# Povolit ANO
# Gatewayports č
# X11DISPLAYOFFSET 10
# X11uselocalhost ano
# Povolení ano
# PrintLastLog Ano
# Tcpkeepalive ano
# PermituseRerenvironment č
# Zpožděné komprese
# CLENTALIVEInterval 0
# CLENTALIVECOUNTMAX 3
# Použité ne
# Pidfile /run/sshd.pid
# MaxStartups 10: 30: 100
# Permittunnel no
# CHROOTDIRECTORY ŽÁDNÝ
# VersionAddendum žádné
# Žádná výchozí cesta banneru
# Umožněte klientovi předat proměnné prostředí prostředí
# Přepíše výchozí hodnoty bez subsystémů
# Příklad převažujícího nastavení na základě uživatele
# Odpovídat uživatelům anoncvs
# X11 forwarding ne
# Povolení, které jsou ne
# Povolení č
# Server CVS ForCECOMMAND
Nezapomeňte, že soubor uloží Ctrl+X a Y. Dále napíšeme základní skript s názvem Initialize (vše ve výchozím domácím adresáři našeho uživatele).

nano initialize
Přidejte tyto řádky do souboru a nahraďteS klíčem SSH jste našli pomocí CAT. (.SSH/ID_RSA.PUB)
# !/bin/bash
Abychom vás procházeli tímto souborem, pojďme spustit řádek po řádku. První řádek říká kompilátoru, že se jedná o skript bash. Poté instalujeme závislosti, zkopírujeme SSHD_CONFIG do správného adresáře, restartujeme SSH, generujeme klíče SSH pro kořen, přidáme uživatelský „tým“ (můžete si vybrat jméno, které se vám líbí, použít příkaz přídavců s jejich jménem a pro deaktivované heslo pro teď). Přidáváme také tým do skupiny sudo, generujeme svůj klíč SSH, přidáme náš klíč k autorizovaným klíčům a jejich také jejich klíčem. Tento nový uživatel bude tak, jak se přihlásíme na web. V novém terminálu pokračujte a znovu otevřete server.

ssh team@XX.XX.XX.XX
Tentokrát byste neměli potřebovat heslo, protože máte klíč SSH. Také jsme zakázali přihlášení pomocí hesla, aby byl web bezpečnější. Nyní tento server spustí zcela prázdné bez informací. Začněme klonováním našeho projektu z Git, abychom si jej mohli stáhnout a spustit na vzdáleném počítači. Na vzdáleném serveru připojeném přes SSH nejprve vytiskněte klíč SSH:

cat ~/.ssh/id_rsa.pub
Dále vložte tento klíč do nastavení GIT, jako jsme to udělali dříve, abyste nastavili naše úložiště GIT. Nyní můžeme klonovat náš projekt přímo na server. Ujistěte se, že jste nejprve zálohovali projekt lokálně, takže je na serveru GIT ke stažení.

git clone git://github.com/you/yourproject.git
Perfektní. Nyní jsou všechny soubory zde. Můžeme je vidět s LS

ls
Nyní začneme nastavovat server. Nejprve zkopírujte svůj adresář projektu do jednoduchého, nezapomenutelného názvu, který použijeme pro projekt.

cp -r yourproject whatyoucalledit
Kde je „WhatyOUCalLedit“ nový název vašeho projektu. Dále budeme muset vytvořit základní nástroj pro nastavení serveru. Uložíme tento nástroj a použijeme jej v budoucnu. Chcete -li vytvořit tento obslužný program, vytvořme uživatelský binární, abychom definovali, jak upravujeme skript. Pomocí bash, úpravy/usr/bin/ascript

sudo nano /usr/bin/ascript
Nezapomeňte tam použít sudo, abyste měli k úpravě souboru oprávnění. Do souboru přidejte tyto řádky:
# !/bin/bash
    echo "# !/bin/bash ">>/usr/bin/$ 1
Pamatujte, že tento skript má argument, název skriptu, jako $ 1. Nejprve zkontroluje, zda soubor existuje, nebo jej jinak vytvoří, přidává první řádek, který prohlásí, že skript je bash, změní jeho oprávnění, upravuje jej a přidává své jméno do /etc /ascripts, což nám umožňuje ukládat jména skriptů We We vytvářejí. Pokud soubor již existuje, jednoduše změňte oprávnění a upravte jej. Uložte soubor a dále změníme jeho oprávnění. Pokud tento skript používáme, nebudeme to muset dělat znovu.

sudo chmod a+x /usr/bin/ascript
Perfektní. Nyní vytvoříme skript s názvem Nastavení. Nejprve vás nepřekoná, ale podívejte se, jak vypadá můj scénář nastavení. Projdeme, jak by měl tento skript vypadat ve vašem projektu, nebudete potřebovat všechno v mém skriptu, abyste mohli začít.
# !/bin/bash
# sudo chmod a+x skripty/userseTup
# ./Scripts/UserSetup
# ssh-keygen
# Directory projektu
# Protokol příkazů
# Nano config
# Git config
# Aktualizace a instalace
# Povolit Clamav antivirus
# Nastavit jméno hostitele
# Nastavení Postgres
# Zálohování databáze nastavení
# Zakázat iptables
# Nainstalujte bitdefender
# Nastavení postfixu
# Vytvořte dirs
# Nastavení virtualenv
# Získejte a buďte závislosti
# Nastavit pravidla brány firewall
# Nainstalujte závislosti PYPI
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# PIP nainstalujte OpenCV-PYTHON == 4.5.5.64
# PIP nainstalujte OpenCV-Contrib-Python == 4.5.5.64
# Nainstalujte Certbot
# Spusťte Certbot
# Obnovení poštovního serveru
# Kopírovat certifikáty
# sudo cp /etc/letsensencrypt/live/femmebabe.com/privkey.tem privkey.pem
# sudo cp /etc/letsensencrypt/live/femmebabe.com/cert.pem cert.pem
# Patch Venv
# Nastavit nastavení uživatele
# Nastavit oprávnění
# Sudo Chown -r Team: Uživatelé/var/běh/
# Sudo Chown Root: Root/Run/Sudo/TS -R
# sudo chmod 664 db.sqlite3
# Sudo Chown www-dat: Uživatelé db.sqlite3
# Zkopírujte a nastavte oprávnění
# Databáze nastavení
# Injekční konfiguraci PAM a odstraňte vadnou konfiguraci SSH
# sudo sed -i '' -e '$ d' /etc/pam.d/sshd
# sudo sed -i '' -e '$ d' /etc /profil
# Zkopírujte skripty a nastavte oprávnění
# Obnovit a povolte služby
# Povolit moduly Apache
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# Zakázat výchozí web
# Povolit náš web
# Obnovit démona a restartujte Apache, postfix a Opendkim
# Nastavit oprávnění
# Konfigurace swapu
# INIT TACTION Engine
# Nastavení git
# Zobrazit IPv6 a OpenDKIM pro konfiguraci domény
# Nastavení dokončeno
To je hodně nastavení! Stručně řečeno, tyto kódové protokoly příkazů, konfiguruje Nano a GIT, kopie přes soubory, stahování a instalace Ubuntu Apt Packages, Python závislosti, konfiguruje postfix, konfiguruje postgresql (databázový server) a načte databázi, konfiguruje UFW (nekomplikovaný firewall), Zakáže iptables, stahuje antivirus, vytváří adresáře, závislosti na klonech, instaluje certifikáty a nastavuje server, instaluje konfiguraci, spustí a umožňuje rozhraní, přiděluje swap, nastavuje oprávnění a vytiskne adresu IP, IPV6 a opendkim klíč. Poměrně jednoduché, ale vypadá to jako hodně kódu. Nebudeme toho hodně potřebovat, protože nemáme závislosti, nepoužíváme celer, celerybeat nebo daphne, ale některé z nich stejně nainstalujeme, abychom mohli začít. Všimněte si, že tento kód má doménu několikrát vyhlášenou. Budeme také muset zakoupit název domény (což je malý roční poplatek). Doporučuji Squarespace k nákupu domény, jejich rozložení jeIntuitivní a snadno použitelný. Můžete si koupit jakoukoli doménu podle vašeho výběru, ale v tomto příkladu používám doménu femmebabe.com. Jakmile si zakoupíte doménu, přejděte na konfigurační panel DNS Squarespace a přidejte záznam a záznam směřující doménu na server pomocí IP adresy. Mělo by to vypadat takto: @ A xx.xx.xx.xx S operátorem @ jako hostitele, což znamená všechny subdomény v této doméně a kořenová doména přesměrují na server. Existuje více záznamů, které je třeba prohlásit, ale můžeme se k nim přesunout, až budeme připraveni poslat poštu. Mějte na paměti, že to může trvat několik dní, než budete moci úspěšně odeslat poštu ze serveru. Záznamy DNS, které nastavujeme, budou mít čas na šíření. Každopádně jediný záznam, který musíme začít, je záznam A. Takže nyní můžeme vyplnit níže uvedený skript podle našeho projektu a spustit jej. Začněme s menším nastavením skriptu, abychom nainstalovali, co potřebujeme pro základní pokrok. Zatím nebudeme používat tolik závislostí nebo postgresql, prostě budemeNahoru na základní server HTTP a starosti s jeho certifikací, když je to hotovo. Nezapomeňte, abychom získali certifikát HTTPS a bezpečně spustil server, musíme si koupit doménu spolu s nájemným serverem. Prozatím nahraďte „tým“ v tomto souboru názvem vašeho uživatele, „dir“ s adresářem projektu a do značek <> dodejte svůj e -mail a doménu. Navíc před spuštěním tohoto kódu musíme změnit nastavení na firewall, který poskytovatel hostingu podporuje, pokud existuje. Obvykle je to na kartě „Sítě“ vašeho hostingového poskytovatele, nebo pokud jste samostatně hostování, je to v části „Portwording“ routeru. Pokud používáte samoobslužné hosting, budete také chtít nastavit statickou IP prostřednictvím routeru pomocí adresy vašeho serverového počítače. Pro přístup ke čtení/zápisu budete muset otevřít následující porty. 22 (ssh) 25 (pošta) 587 (pošta) 110 (poštovní klient) 80 (http) 443
# !/bin/bash
# Protokol příkazů
# Nano config
# Git config
# Aktualizace a instalace
# Povolit Clamav antivirus
# Nastavit jméno hostitele
# Zálohování databáze nastavení
# Zakázat iptables
# Nastavení virtualenv
# Nainstalujte Certbot
# Spusťte Certbot
# Nastavit nastavení uživatele
# Nastavit oprávnění
# Sudo Chown -r Team: Uživatelé/var/běh/
# Sudo Chown Root: Root/Run/Sudo/TS -R
# Obnovit a povolte služby
# Povolit moduly Apache
# Obnovit démona a restartujte Apache, postfix a Opendkim
# Zobrazit IPv6 a OpenDKIM pro konfiguraci domény
Před spuštěním tohoto kódu se ujistěte, že doména, kterou jste zakoupili, je připojena k serveru. Chcete -li to provést, otevřete terminál na místním počítači a spusťte tento příkaz s vaší doménou:
ping femmebabe.com # Vložte doménu zde, po pingu
Pokud všechno vypadá dobře a server odesílá odpovědi, jsme připraveni spustit skript a nainstalovat balíčky a začít, povolit a certifikovat náš server Apache. Toto není všechno nastavení potřebné k konfiguraci postfixu, podíváme se na toto nastavení později později. Prozatím spusťte tento nastavený kód a instalace a certifikace serveru by měla trvat několik minut. Ještě jednou nezapomeňte ve skriptu vyměnit jméno, e -mail a doménové jméno podle zakoupeného názvu. Nyní, když je server zajištěn, můžete přejít do URL v jakémkoli webovém prohlížeči a zkontrolovat, zda je server spuštěn HTTPS. Pokud tomu tak není, zkuste chvíli čekat na záznamy DNS, aby dohnaly a spustily následující příkaz, aby se opakoval certifikaci Certbot:

sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Dokud jste vše správně nakonfigurovali, měli byste mít přístup k výchozí stránce Apache, abyste věděli, že váš kód funguje a zobrazuje živou webovou stránku. Dále upravte nastavení.py a změňte náš výchozí režim ladění na výrobu. Konfigurujeme také doménu v nastavení a interní IPS.

nano yourproject/settings.py
V nastavení změňte/přidejte tyto řádky.
# Konfigurace webu
Nyní budeme muset nakonfigurovat apache2. Upravte konfigurační soubor, který nasadíme s tímto řádkem:

sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Tento soubor konfigurace by měl mít v sobě náš název domény a název uživatele a projektu. Používám název domény femmebabe.com, tým uživatelského jména a název projektu Femmebabe.

ServerSignature Off
ServerTokens Prod
<IfModule mod_ssl.c>
<VirtualHost *:80> 
	Redirect permanent / https://femmebabe.com/
</VirtualHost>
<VirtualHost *:443>
	ServerName femmebabe.com
	ServerAdmin team@femmebabe.com
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
	
	Alias /static /home/team/femmebabe/static
	<Directory /home/team/femmebabe/static>
		Require all granted
	</Directory>

Alias /media/icons /home/team/femmebabe/media/
<Directory /home/team/femmebabe/media>
Require all granted
</Directory>

	<Directory /home/team/femmebabe/femmebabe>
		<Files wsgi.py>
			Require all granted
		</Files>
	</Directory>

	WSGIScriptAlias / /home/team/femmebabe/femmebabe/wsgi.py
	WSGIDaemonProcess femmebabe python-path=/home/team/femmebabe/ python-home=/home/team/femmebabe/venv header-buffer-size=100000000000 user=team
	WSGIProcessGroup femmebabe
	WSGIApplicationGroup %{GLOBAL}
	
	<Directory /home/team/femmebabe/static>
                Options Indexes FollowSymLinks
                AllowOverride All
	</Directory>

	<IfModule mod_rewrite.c>
		RewriteEngine on
		RewriteCond %{REQUEST_URI} \.(css|webp|webm|gif|png|mp3|wav|jpeg|jpg|svg|webp)$ [NC]
		RewriteCond %{HTTP_REFERER} !^https://femmebabe.com/media/.*$ [NC]
		RewriteRule ^(.+?)/$ /media/$1 [F,L]
	</IfModule>

	Include /etc/letsencrypt/options-ssl-apache.conf
	SSLCertificateFile /etc/letsencrypt/live/femmebabe.com/fullchain.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/femmebabe.com/privkey.pem

	Header set X-Frame-Options: "SAMEORIGIN"
	Header set Access-Control-Allow-Origin "https://femmebabe.com"

	TimeOut 60000
	LimitRequestBody 0

	<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|webp|JPG|JPEG|wav|mp3|mp4|public|js|css|swf|webp|svg)$">
		Header set Cache-Control "max-age=30, public"
	</FilesMatch>
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:80>
	ServerName femmebabe.com
	ServerAdmin team@femmebabe.com
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	RewriteEngine on
	RewriteCond %{SERVER_NAME} =femmebabe.com
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
</IfModule>
Při konfiguraci serveru nezapomeňte vyměnit název projektu, adresáře a domény v tomto příkladu. Nyní budeme muset deaktivovat výchozí web. To lze provést pomocí bash.

sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Dále můžeme povolit výchozí web a znovu načíst apache2, také pomocí Bash. Nezapomeňte nahradit FemmeBabe názvem souboru, který jste deklarovali při úpravách v/etc/apache2/weby, dostupné/.

sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Vraťte se do své domény v Navbar. Měli byste vidět web, který jste nakonfigurovali ve vašem webovém prohlížeči. Gratuluji! Pokud to nevidíte, možná budete muset provést nějaké změny. Pečlivě zkontrolujte nastavení ve vašem projektu, konfiguraci Apache a ujistěte se, že nemáte žádné chyby, a spusťte následující příkazy a zkontrolujte projekt z hlediska chyb.

cd projectname
source venv/bin/activate
python manage.py check
Pokud máte ve svém projektu Python chyby, sledujte je tam, kde jsou, a opravte je. Možná nebudete moci vidět všechny své chyby v závislosti na tom, kde jsou, takže pokud máte chybu, která jednoduše říká „osídlit není reentranta“, upravte následující soubor ve virtuálním prostředí, registru.py, odhalit chyba.

nano venv/lib/python3.12/site-packages/django/apps/registry.py
Přejděte na řádek 83, kde je tato chyba runtime zvednuta (Raise RuntimeError („Populate () není reentrant“))) a přidejte komentář před tímto řádkem a poté přidejte, se stejným odsazením, self.app_configs = {}. Vypadá to takto:
                # Zabránit reentrantským hovorům, abyste se vyhnuli spuštění appconfig.ready ()
                # metody dvakrát.
# Raise RuntimeError ("Populate () není reentrant")
Poté můžete projekt znovu zkontrolovat a vystavit chybu.

python manage.py check
Pak můžete vidět chybu a opravit ji. Když ji máte opravené a kód se zkompiluje bez chyb, nezapomeňte soubor změnit, aby to vypadalo takto:
                # Zabránit reentrantským hovorům, abyste se vyhnuli spuštění appconfig.ready ()
                # metody dvakrát.
# self.app_configs = {}
Pokud je server online, když v něm provedeme jakékoli další změny, musíme k opětovnému načtení serveru použít následující příkaz:

sudo systemctl reload apache2
Děsivý! Ale co odeslání pošty? Chcete -li začít odesílat e -mail, budeme nejprve muset aktualizovat konfiguraci domény. To by mělo být na panelu DNS v Squarespace nebo jakémkoli registrátorovi domény, který jste si vybrali. Budeme také muset nainstalovat a přidat konfiguraci a spustit několik příkazů. Nejprve pojďme získat adresu IPv6 serveru. Poté otevřeme vaše DNS a přidáme záznamy. Chcete -li získat adresu IPv6 serveru, použijte tento příkaz:

ip -6 addr
Nyní můžeme přidat následující záznamy do nastavení DNS. Moje záznamy vypadají takto. Pro vaše záznamy byste však měli nahradit IP adresu svou IP (ne 75.147.182.214, to je moje). Také přidejte svou doménu namísto femmebabe.com, jakož i adresu IPv6 nalezenou u předchozího příkazu (nelze použít důl, Fe80 :: 725a: FFF: Fe49: 3E02). Nedělejte si starosti s doménou, toto je vytvořeno, když jsme nastavili postfix, poštovní server, s Opendkim, a vytiskněte klíč. Nakonfigurujeme to poslední. @ A N/a 75.147.182.214 @ MX 10 femmebabe.com @ Ptr N/a femmebabe.com @ Txt N/a Txt @ v = SPF1 MX IP75.147.182.214IP6: Fe80 :: 725a: FFF: Fe49: 3E02 ~ ALL výchozí._bimi Txt N/a v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg _dmarc Txt N/a v = dmarc1; P = Žádný Sendonly._domainkey Txt N/aNyní budeme muset přidat nějakou přetrvávající konfiguraci pro postfix. Vše, co musíme udělat, je ujistit se, že nahradíme název domény, femmebabe.com, s názvem domény, který používáte. Podívejme se na všechny konfigurační soubory jeden po druhém a nainstalujte je do adresáře s názvem Config v našem projektu pro instalaci do operačního systému.

nano config/etc_postfix_main.cf
Přidejte tento text do souboru
# Viz /usr/share/postfix/main.cf.dist pro komentovanou a úplnější verzi
# Debian Specific: Zadání názvu souboru způsobí první
# řádek tohoto souboru, který má být použit jako název.  Defian Default
# IS /ETC /MAILNAME.
# myorigin = /etc /mailName
# Appening .domain je práce MUA.
# Unlicment Další řádek pro generování varování „zpožděná pošta“
# delay_warning_time = 4H
# Viz http://www.postfix.org/compatibility_readme.html - výchozí na 3.6 ON
# čerstvé instalace.
# Parametry TLS
# Milterová konfigurace
Další konfigurace!

nano config/etc_postfix_master.cf
Přidejte tyto řádky:
# 
# Konfigurační soubor Master Process Postfix.  Podrobnosti o formátu
# souboru viz manuální stránka Master (5) (příkaz: „Man 5 Master“ nebo
# On-line: http://www.postfix.org/master.5.html).
# 
# Po úpravě tohoto souboru nezapomeňte provést „Postfix Reload“.
# 
# ============================================== =================================================
# Typ služby Private UNSIV CHROOT Wakeup MaxProc Command + Args
# (Ano) (ano) (ne) (nikdy) (100)
# ============================================== =================================================
# SMTP INET N - Y - 1 POSTSCREEN
# SMTPD PASS - - Y - - SMTPD
# DNSBlog UNIX - - Y - 0 DNSBlog
# TLSProxy UNIX - - Y - 0 TLSProxy
# Vyberte jeden: Povolte pouze odeslání pro klienty Loopback nebo pro každého klienta.
# 127.0.0.1:1:submission INET N - Y - - SMTPD
# -O syslog_name = postfix/odeslání
# -O smtpd_tls_security_level = Encrypt
# -O smtpd_sasl_auth_enable = ano
# -O smtpd_tls_auth_only = ano
# -O smtpd_reject_unlisted_recipient = no
# -O smtpd_client_restrictions = $ mua_client_restrictions
# -O smtpd_helo_restrictions = $ mua_helo_restrictions
# -O smtpd_sender_restrictions = $ mua_sender_restrictions
# -O SMTPD_RECIPIENT_RESTRICTICES =
# -O smtpd_relay_restrictions = povolení_sasl_authenticated, odmítnout
# -O milter_macro_daemon_name = původ
# Vyberte jeden: Povolit SMTPS pouze pro klienty smyčky nebo pro každého klienta.
# 127.0.0.1:SMTPS INET N - Y - - SMTPD
# SMTPS INET N - Y - - SMTPD
# -O syslog_name = postfix/smtps
# -O smtpd_tls_wrappermode = ano
# -O smtpd_sasl_auth_enable = ano
# -O smtpd_reject_unlisted_recipient = no
# -O smtpd_client_restrictions = $ mua_client_restrictions
# -O smtpd_helo_restrictions = $ mua_helo_restrictions
# -O smtpd_sender_restrictions = $ mua_sender_restrictions
# -O SMTPD_RECIPIENT_RESTRICTICES =
# -O smtpd_relay_restrictions = povolení_sasl_authenticated, odmítnout
# -O milter_macro_daemon_name = původ
# 628 INET N - Y - - QMQPD
# QMGR UNIX N - N 300 1 OQMGR
# -O smtp_helo_timeout = 5 -o smtp_connect_timeout = 5
# 
# ============================================== ============================================
# Rozhraní k softwaru bez postfixu. Nezapomeňte prozkoumat příručku
# Stránky softwaru, který není postfix, aby zjistili, jaké možnosti chce.
# 
# Mnoho z následujících služeb používá doručení postfixu (8)
# činidlo.  Informace o stránce Pipe (8) Woman About $ {příjemce}
# a další možnosti obálky zpráv.
# ============================================== ============================================
# 
# Maildrop. Podrobnosti naleznete v souboru Postfix Maildrop_readme.
# Také určete v Main.CF: Maildrop_destination_RecipienT_limit = 1
# 
# 
# ============================================== ============================================
# 
# Nedávné verze Cyrus mohou používat stávající položku „LMTP“ Master.CF.
# 
# Určete v Cyrus.conf:
# lmtp cmd = "lmtpd -a" poslouchal = "localhost: lmtp" proto = tcp4
# 
# Určete v main.cf jeden nebo více z následujících:
# Mailbox_Transport = LMTP: INET: LocalHost
# Virtual_Transport = LMTP: INET: localhost
# 
# ============================================== ============================================
# 
# Cyrus 2.1.5 (Amos Gouaux)
# Také určete v Main.CF: Cyrus_destination_RecipienT_limit = 1
# 
# Cyrus Unix - N N - - trubka
# FLAGS = DRX User = Cyrus argv =/Cyrus/bin/doručování -e -r $ {Sender} -m $ {Extension} $ {User}
# 
# ============================================== ============================================
# Starý příklad doručení přes Cyrus.
# 
# Old -Cyrus Unix - N N - - trubka
# FLAGS = R User = Cyrus argv =/Cyrus/bin/doručování -e -m $ {Extension} $ {user}
# 
# ============================================== ============================================
# 
# Podrobnosti o konfiguraci naleznete v souboru Postfix UUCP_README.
# 
# 
# Další metody externího doručení.
# 
A konfigurace Opendkim. OpendKim identifikuje e -mailové servery s klíči domény, aby byly bezpečnější. Bez něj není pošta podepsána a nemusí se dostat do doručené pošty.

nano config/etc_default_opendkim
Přidejte tyto řádky:
# Poznámka: Toto je starý konfigurační soubor. Opendkim to nepoužívá
# Systémová služba. Použijte odpovídající konfigurační parametry v
# /etc/opendkim.conf místo toho.
# 
# Dříve by se zde dalo upravit výchozí nastavení a poté provést
# /lib/opendkim/opendkim.service.generate pro generování souborů přepsání Systemd na adrese
# /etc/systemd/system/opendkim.service.d/override.conf a
# /etc/tmpfiles.d/opendkim.conf. I když je to stále možné, je to nyní
# Doporučuje se upravit nastavení přímo v /etc/opendkim.conf.
# 
# Daemon_opts = ""
# Změna na/var/cívky/postfix/run/opendkim k použití zásuvky Unix s
# postfix v chrootu:
# Rundir =/var/cívka/postfix/run/opendkim
# 
# Nekonečné zařazení alternativní zásuvky
# Všimněte si, že nastavení přepíše jakoukoli hodnotu zásuvky v Opendkim.Conf
# výchozí:
# Poslouchejte všechna rozhraní na portu 54321:
# Socket = INET: 54321
# Poslouchejte na smyčku na portu 12345:
# Socket = INET: 12345@localhost
# Poslouchejte na 192.0.2.1 na portu 12345:
# Socket = inet: 12345@192.0.2.1

nano config/etc_dovecot_conf.d_10-master.conf
Přidejte tyto řádky:
# default_process_limit = 100
# default_client_limit = 1000
# Výchozí limit VSZ (velikost virtuální paměti) pro servisní procesy. To je hlavně
# určené k zachycení a zabíjení procesů, které prosakují paměť před tím, než se sníží
# všechno.
# default_vsz_limit = 256m
# Přihlašovací uživatel je interně používán pomocí přihlašovacích procesů. Toto je nejvíce nedůvěryhodné
# Uživatel v systému Dovecot. Nemělo by to mít přístup k ničemu.
# default_login_user = dovell
# Interní uživatel používá nepruvilegové procesy. Mělo by to být oddělené od
# Přihlaste se uživatel, aby se přihlašovací procesy nemohly rušit jiné procesy.
# default_internal_user = dovecot
    # Port = 143
    # Port = 993
    # SSL = ano
  # Počet připojení k zpracování před zahájením nového procesu. Obvykle
  # Jediné užitečné hodnoty jsou 0 (neomezené) nebo 1. 1 je bezpečnější, ale 0
  # je rychlejší. <DOC/Wiki/LoginProcess.txt>
  # servis_count = 1
  # Počet procesů, které vždy čekají na další spojení.
  # Process_min_avail = 0
  # Pokud nastavíte servis_count = 0, pravděpodobně to musíte růst.
  # vsz_limit = $ default_vsz_limit
    # Port = 110
    # Port = 995
    # SSL = ano
    # Port = 587
  # Vytvořte posluchače INET, pouze pokud nemůžete použít výše uvedenou zásuvku UNIX
  # inet_listener lmtp {
    # Vyvarujte se zviditelnění LMTP pro celý internet
    # adresa =
    # Port =
  # }
  # Většina paměti jde do souborů MMAP (). Možná to budete muset zvýšit
  # Omezte, pokud máte obrovské poštovní schránky.
  # vsz_limit = $ default_vsz_limit
  # Max. Počet procesů IMAP (připojení)
  # Process_limit = 1024
  # Max. Počet procesů POP3 (připojení)
  # Process_limit = 1024
  # Max. Počet procesů odesílání SMTP (připojení)
  # Process_limit = 1024
  # Auth_Socket_Path ve výchozím nastavení ukazuje na tuto zásuvku UserDB. Obvykle je to
  # používají Dovecot-Lda, Doveadm, možná proces IMAP atd. Uživatelé, kteří mají
  # Úplná oprávnění k této zásuvce jsou schopna získat seznam všech uživatelských jmen a
  # Získejte výsledky vyhledávání userdb každého.
  # 
  # Výchozí režim 0666 umožňuje komukoli připojit se k zásuvce, ale
  # vyhledávání userdb uspěje pouze v případě, že UserDB vrátí pole „UID“, které
  # odpovídá UID procesu volajícího. Také pokud se shoduje s volajícím UID nebo GID
  # Socket je uid nebo gid vyhledávání uspěje. Cokoli jiného způsobuje selhání.
  # 
  # Chcete -li dát volajícímu plná oprávnění k vyhledávání všech uživatelů, nastavte režim na
  # Něco jiného než 0666 a Dovecot umožňuje jádru vynutit
  # Oprávnění (např. 0777 umožňuje všem plná oprávnění).
  # Proces Auth Worker je ve výchozím nastavení spuštěn jako root, aby měl přístup
  # /atd./stín. Pokud to není nutné, měl by se uživatel změnit na
  # $ default_internal_user.
  # Uživatel = root
  # Pokud je použit DICT proxy, měly by e -mailové procesy mít přístup k jeho zásuvce.
  # Například: Mode = 0660, Group = VMail a Global Mail_access_Groups = VMail
    # režim = 0600
    # Uživatel =
    # skupina =
Ještě jednou nezapomeňte vyměnit doménu ve všech těchto souborech, FemmeBabe.com, s vybranou doménou. Upravte další soubor, konfiguraci Dovecot,

nano config/etc_dovecot_dovecot
A přidejte tyto řádky
## Konfigurační soubor Dovecot
# Pokud spěcháte, podívejte se na http://wiki2.dovecot.org/quickconfiguration
# Příkaz "DoveConf -n" poskytuje čistý výstup změněného nastavení. Použijte to
# Místo kopírování a vložení souborů při zveřejňování příspěvku do seznamu adresátů DoveCot.
# '# „Postava a všechno poté, co se zachází jako s komentářemi. Extra prostory
# a karty jsou ignorovány. Pokud chcete použít některou z nich explicitně, dejte
# value inside quotes, eg.: key = "# char a koncový mezera "
# Většina (ale ne všech) nastavení může být přepsána různými protokoly a/nebo
# Zdroj/cíl IPS umístěním nastavení uvnitř sekcí, například:
# Protocol IMAP {}, Local 127.0.0.1 {}, Remote 10.0.0.0/8 {}
# Výchozí hodnoty jsou zobrazeny pro každé nastavení, není nutné se uvolnit
# ty. To však jsou výjimky: žádné sekce (např. Namespace {})
# nebo nastavení pluginu jsou ve výchozím nastavení přidány pouze jako příklady.
# Cesty jsou také pouze příklady, kdy skutečné výchozí hodnoty jsou založeny na konfiguraci
# Možnosti. Zde uvedené cesty jsou pro konfiguraci -prefix =/usr
# -SysConfdir =/atd-localstatedir =/var
# Povolit nainstalované protokoly
# Kolma oddělený seznam IPS nebo hostitelů, kde naslouchat pro připojení.
# "*" poslouchá ve všech rozhraních IPv4, "::" Poslouchá ve všech rozhraních IPv6.
# Pokud chcete zadat nedefinované porty nebo něco složitějšího,
# Upravit conf.d/master.conf.
# Poslouchejte = *, ::
# Základní adresář, kde ukládat data runtime.
# base_dir =/var/běh/dovecot/
# Název této instance. V nastavení multiinstance Doveadm a další příkazy
# můžete použít -i <instance_name> k výběru, který instance se používá (alternativa
# to -c <config_path>). Název instance je také přidán do procesů Dovecot
# ve výstupu PS.
# instance_name = dovecot
# Pozdrav pro klienty.
# login_greeting = Dovecot připraven.
# Space oddělený seznam důvěryhodných síťových rozsahů. Spojení z nich
# IP mohou přepsat své IP adresy a porty (pro protokolování a
# pro kontroly ověřování). Disable_plaintext_auth je také ignorován pro
# tyto sítě. Obvykle byste zde zadali servery IMAP proxy.
# login_trusted_networks =
# Space oddělený seznam zásuvných přístupu k přihlášení (např. TCPWRAP)
# login_access_sockets =
# S proxy_maybe = ano, pokud proxy cíl odpovídá některému z těchto IP, nedělejte
# proxying. To není nutné normálně, ale může být užitečné, pokud cíl
# IP je např. Ip balancera zatížení.
# auth_proxy_self =
# Zobrazit více podrostných procesů procesu (v PS). V současné době ukazuje uživatelské jméno a
# IP adresa. Užitečné vidět, kdo skutečně používá procesy IMAP
# (např. Sdílené poštovní schránky nebo pokud se pro více účtů používá stejné UID).
# verbose_proctitle = ne
# Pokud by se zabily všechny procesy, když se uzavírá hlavní proces Dovecot.
# Nastavení na „ne“ znamená, že Dovecot lze upgradovat bez
# nutí uzavření stávajících klientských připojení (i když by to mohlo být také
# problém, pokud je upgrade např. kvůli opravě zabezpečení).
# Shutdown_Clients = ANO
# Pokud nenulové, spusťte poštovní příkazy prostřednictvím tohoto mnoha připojení k serveru Doveadm,
# Místo toho, aby je spustili přímo ve stejném procesu.
# doveadm_worker_count = 0
# Socket nebo hostitel UNIX: Port používaný pro připojení k serveru Doveadm
# doveadm_socket_path = doveadm-server
# Space oddělený seznam proměnných prostředí, které jsou zachovány na Dovecot
# Spuštění a předávání všech svých dětských procesů. Můžete také dát
# klíč = páry hodnot pro vždy nastavení konkrétních nastavení.
# import_environment = tz
## 
## Nastavení serveru slovníku
## 
# Slovník lze použít k ukládání seznamů klíčů = hodnoty. Toto je používáno několika
# pluginy. K slovníku lze přistupovat přímo nebo ačkoli a
# Slovní server. Následující názvy slovníků dict bloků pro URIS
# Po použití serveru. Poté lze na ně odkazovat pomocí URI ve formátu
# "Proxy :: <name>".
  # Kvóta = mysql: /etc/dovecot/dovecot-dict-sql.conf.ext
# Většina skutečné konfigurace je zahrnuta níže. Názvy souborů jsou
# nejprve tříděn podle jejich hodnoty ASCII a analyzován v tomto pořadí. 00-prefixy
# V názvech je určen k usnadnění porozumění uspořádání.
# Konfigurační soubor se může také pokusit být zahrnut bez chyby, pokud
# není to nalezeno:
# Umožňuje Dovecot poslouchat všechna vstupní připojení (IPv4 / IPv6)
Přidejte heslo pro uživatele DoveCot:

nano config/etc_dovecot_passwd
První část souboru před tlustým střevem je uživatelské jméno. Poslední část „YourPassword“ označuje heslo, které chcete poskytnout poštovnímu serveru.

team:{plain}yourpassword
Dále konfigurace Opendkim

nano config/etc_opendkim.conf
A přidat tyto řádky:
# Toto je základní konfigurace pro podepisování a ověření. Může to být snadno
# upraveno tak, aby vyhovovalo základní instalaci. Viz Opendkim.Conf (5) a
# /usr/share/doc/opendkim/examples/opendkim.conf.Sample pro dokončení
# Dokumentace dostupných konfiguračních parametrů.
# Logwhy ne
# Běžné parametry podpisu a ověřování. V Debianu je záhlaví „z“
# převrácené, protože je to často klíč identity používaného systémy reputace
# A tak poněkud citlivá na bezpečnost.
# Podepisování domény, voliče a klíče (požadované). Například proveďte podpis
# pro doménu "example.com" s selektorem "2020" (2020._domainkey.example.com),
# Použití soukromého klíče uloženého v /etc/dkimkeys/example.private. Více granulované
# Možnosti nastavení najdete v /usr/share/doc/opendkim/readme.opendkim.
# Doména příkladem.com
# Selector 2020
# Keyfile /etc/dkimkeys/example.private
# V Debianu běží Opendkim jako uživatel „Opendkim“. Je vyžadován umask 007
# Použití místní zásuvky s MTA, která přistupuje k zásuvce jako nerivilegové
# Uživatel (například postfix). Možná budete muset do skupiny přidat uživatele „postfix“
# "Opendkim" v tom případě.
# Soket pro připojení MTA (vyžadováno). Pokud je MTA uvnitř vězení Chroot,
# Je třeba zajistit, aby byla zásuvka přístupná. V Debianu pobíhá Postfix
# chroot in/var/cívka/postfix, proto by musela být zásuvka Unix
# Nakonfigurováno, jak je uvedeno na posledním řádku níže.
# Socket Local: /run/opendkim/opendkim.sock
# Socket Inet: 8891@localhost
# Socket Inet: 8891
# Hostitelé, pro které se mají podepisovat spíše než ověřit, je výchozí hodnota 127.0.0.1. Viz
# Operační část Opendkim (8) pro více informací.
# Internalhosts 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
# Trust Anchor umožňuje DNSSEC. V Debianu je poskytnut soubor důvěryhodnosti
# balíčkem dns-root-data.
# NasideServers 127.0.0.1
# Mapujte domény z adres do klíčů používaných k podepisování zpráv
# Sada interních hostitelů, jejichž pošta by měla být podepsána

nano config/etc_default_opendkim
A přidejte tyto řádky
# Poznámka: Toto je starý konfigurační soubor. Opendkim to nepoužívá
# Systémová služba. Použijte odpovídající konfigurační parametry v
# /etc/opendkim.conf místo toho.
# 
# Dříve by se zde dalo upravit výchozí nastavení a poté provést
# /lib/opendkim/opendkim.service.generate pro generování souborů přepsání Systemd na adrese
# /etc/systemd/system/opendkim.service.d/override.conf a
# /etc/tmpfiles.d/opendkim.conf. I když je to stále možné, je to nyní
# Doporučuje se upravit nastavení přímo v /etc/opendkim.conf.
# 
# Daemon_opts = ""
# Změna na/var/cívky/postfix/run/opendkim k použití zásuvky Unix s
# postfix v chrootu:
# Rundir =/var/cívka/postfix/run/opendkim
# 
# Nekonečné zařazení alternativní zásuvky
# Všimněte si, že nastavení přepíše jakoukoli hodnotu zásuvky v Opendkim.Conf
# výchozí:
# Poslouchejte všechna rozhraní na portu 54321:
# Socket = INET: 54321
# Poslouchejte na smyčku na portu 12345:
# Socket = INET: 12345@localhost
# Poslouchejte na 192.0.2.1 na portu 12345:
# Socket = inet: 12345@192.0.2.1
Až budeme připraveni nastavit náš server PostFix, spustíme níže uvedený kód s příslušným vloženým názvem domény. Začněte vytvořením skriptu

touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Nyní, v Nano, textový editor, upravte tento soubor tak, aby místo FemmeBabe.com obsahoval název domény.
# !/bin/bash
# Nastavení postfixu
Nyní spusťte dokončený skript a nakonfigurujete postfix, Opendkim a Dovecot.

./scripts/postfixsetup
Jakmile tento skript spustí, zkopírujte poslední řádek, který vytiskne a vložte jej do konfigurace DNS jako hodnotu pro Sendonly._domainkey. Toto je klíč OpendKim používaný k identifikaci vaší domény při odesílání zabezpečené pošty. Děsivý! Během několika dnů byste měli být schopni odeslat poštu ze serveru za předpokladu, že je vše správně nakonfigurováno. Pokud jste právě nakonfigurovali DNS pro svůj poštovní server, mělo by to trvat méně než 72 hodin, než se záznamy aktualizují. Obvykle je to mnohem rychlejší. Můžete zkontrolovat, zda váš server funguje pomocí tohoto příkazu, dodal váš e -mail:

echo “test” | mail -s “Test Email” youremail@gmail.com
Pokud se zdá, že vše funguje správně, měli byste být schopni odesílat e -mail s vaším serverem. Pokud to nefunguje, zkuste se podívat na protokoly a zjistit, jaká by mohla být chyba.

tail –lines 150 /var/log/mail.log
To nabídne podrobné informace o poště, která je odesílána serverem a zda funguje správně. Měli byste být schopni vidět také e -mail ve vaší doručené poště, pokud to není, zkontrolujte složku spamu. Budete také muset nakonfigurovat nastavení ve svém nastavení.py, aby váš e -mailový server mohl mluvit s vaší aplikací Django, projektem. Přidejte nebo vyměňte tyto řádky do svého nastavení
EMAIL_HOST_USER = 'team' # 'Love@mamasheen.com'
Všimněte si, že k získání hesla používáme konfigurační soubor. Načtěte tento soubor do nastavení tak, na samém začátku souboru.:
# Otevřete a načtěte konfiguraci
Vytvořme tento soubor a přidejte k němu tajný klíč, jakož i heslo pošty. Chcete -li vygenerovat tajný klíč, použijte tento příkaz a na konci se vám líbí jakoukoli délku:

openssl rand -base64 64
Nyní zkopírujte text, který OpenSSL vygeneroval a upravte /etc/config.json

sudo nano /etc/config.json
Přidejte do svého souboru následující řádky s klíčem, který je generován jako tajný klíč.

{
	"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
	"EMAIL_HOST_PASSWORD": "yourpassword"
}
Formát JSON je jednoduchý a snadno použitelný, můžeme také prohlásit další klíče, které chceme použít v našem projektu pouze z našeho adresáře projektu. Toto je doporučená praxe pro klíče API, z nichž zde použijeme více než několik. Budete také chtít zálohovat svůj projekt, abyste se ujistili, že je vše uloženo, a budete moci svou práci obnovit později, i když si již nepřejete pronajmout server.

sudo backup
Nyní zkuste odeslat e -mail HTML z webového serveru za předpokladu, že odeslání jednoho z příkazového řádku funguje. Dotazujte instanci uživatele do shell a odešlete e -mailu HTML tomuto uživateli prostřednictvím Djanga. Změňte mé jméno v kódu, Charlotte, na vaše uživatelské jméno.

python manage.py shell
from django.contrib.auth.models import User
u = User.objects.get(username='Charlotte')
from users.email import send_welcome_email
send_welcome_email(u)
exit()
Pokud první příkaz nefunguje, nezapomeňte použít

source venv/bin/activate
Pokud je vše nastaveno správně, nyní získáte uvítací e -mail ve své poštovní schránce odeslané vaší webovou aplikací. Dobrá práce! Prošel jsi dlouhou cestu. Chtěl jsem dodat, že pokud se někdy potýkáte s jakýmikoli chybami při práci na takovém projektu, neváhejte hledat odpovědi a požádat o pomoc. Google, mimo jiné vyhledávače, jsou skvělými zdroji pro vyhledávání nápovědy pro programování. Jednoduše vyhledejte chybu, kterou získáte, a budete moci vidět, jak ostatní lidé vyřeší problém. Také jste vítáni, abyste mě kontaktovali, vaše pedagogy (učitelé, profesoři, lektoři), všechny vrstevníky na internetu, kteří jsou k dispozici pro programování nápovědy, nebo se opět poraďte s touto knihou nebo jinými zdroji, abyste našli řešení problémů, které máte. Chápu, že to není snadné, ale i když jste si přečetli v této daleko a nepíšu žádný kód, hodně se dozvíte o vytváření webové aplikace od nuly. Poklepte se na záda, děláte skvělepráce. Děkujeme, že jste si udělali čas na přečtení tohoto příručky pro vývoj webových stránek třetího vydání. V budoucích vydáních budu zahrnovat více důležitých příkladů diskutovaných na začátku dokumentu a budeme se ponořit mnohem hlouběji do světa vývoje softwaru a hardwaru. Zůstaňte naladěni na to, co má přijít, a těším se, až vás naučím, jak budovat neuvěřitelný software. Uvidíme se v příštím






Blízko
Strana 1
Skok
Viz celý článek
Pokračujte ve čtení

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Barva dvou hráčů sudoku online zdarma Hrajte Collaborative Color Sudoku s přítelem zdarma.Pozvěte přítele Připojte se ke hře ***
Koupit dál

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jak rychle roste kryptotrh?


K rychlému růstu trhu kryptoměny přispívá několik faktorů. 


1. Zvýšené povědomí a adopce: Jak si více lidí uvědomuje kryptoměny a jejich potenciální výhody, poptávka po investicích do kryptoměny se výrazně zvýšila. Tento zvýšený zájem vedl k nárůstu počtu uživatelů a investorů účastnících se trhu.


2. Institucionální zapojení: V posledních několika letech jsme zaznamenali rostoucí počet institucionálních investorů, jako jsou hedgeové fondy, banky a další finanční instituce, zapojením se do trhu s kryptoměnou. To přidalo důvěryhodnost na trh a přilákalo ještě více investorů.


3. technologický pokrok: Technologický vývoj v blockchainovém prostoru usnadnil vytvoření a obchodování s novým kryptoměnami. Pokroky v bezpečnostních opatřeních a regulačních rámcích navíc učinily trh přitažlivější pro investory.


4. Volatilita trhu: Vysoce volatilní povaha trhu s kryptoměnami přitahovala obchodníky a investory, kteří chtějí vydělávat na kolísání cen a dosáhnout významných zisků v relativně krátkém časovém období.


5. Globální přijetí: Kryptoměny jsou nyní přijímány jako forma platby rostoucím počtem obchodníků a podniků po celém světě. To pomohlo legitimizovat kryptoměny jako životaschopnou alternativu k tradičním fiat měnám.


Celkově tyto faktory přispěly k rychlému růstu trhu kryptoměny a pravděpodobně budou v budoucnu pokračovat v rozšiřování.


podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jak mohu hostovat webový server z domova?


Hostování webového serveru z vašeho domova lze provést dodržováním těchto kroků:


1. Vyberte software serveru: Můžete si vybrat z různých možností serveru, jako jsou Apache, Nginx, Microsoft Internet Information Services (IIS) atd. Vyberte si, který vyhovuje vašim požadavkům.


2. Nastavte statickou IP adresu: Kontaktujte svého poskytovatele internetových služeb (ISP) a požádejte o statickou IP adresu pro připojení k internetu. Tím zajistíte, že váš web zůstane přístupný, i když se změní vaše IP adresa.


3. Nakonfigurujte svůj router: Přihlaste se do správy správy routeru a port Forward 80 (výchozí port pro provoz HTTP) na interní IP adresu serveru. To umožní externímu provozu dosáhnout vašeho webového serveru.


4. Nainstalujte a nakonfigurujte software serveru: Nainstalujte server software do serverového počítače a nakonfigurujte jej podle vašich potřeb, jako je nastavení virtuálních hostitelů, certifikátů SSL atd.


5. Vyzkoušejte svůj web: Zkontrolujte, zda je váš web přístupný zadáním vaší statické IP adresy do webového prohlížeče. Můžete jej také vyzkoušet pomocí online nástrojů jako Pingdom nebo GTMetrix.


6. Název domény a nastavení DNS: Zaregistrujte název domény pro váš web a nastavte záznamy DNS, aby ukázaly na vaši statickou IP adresu.


7. Bezpečnostní opatření: Implementujte bezpečnostní opatření, jako jsou brány firewall, šifrování, pravidelné zálohy atd. K ochraně vašeho webového serveru před kybernetickými hrozbami.


8. Monitorujte a údržba: Pravidelně sledujte server, pokud jde o problémy s výkonem, bezpečnostní hrozby a aktualizace softwaru. Udržujte svůj server software a aplikace aktuální, abyste zajistili hladké fungování.


Vezměte prosím na vědomí, že hostování webového serveru z vašeho domova nemusí být vhodné pro webové stránky s vysokým provozem nebo citlivá data kvůli potenciálním bezpečnostním rizikům a omezené šířce pásma. Zvažte použití profesionální webové hostingové služby pro takové požadavky.


podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jak mohu získat publicitu a organický provoz pro web?


1. Optimalizace vyhledávače (SEO): Optimalizujte svůj web pro vyhledávače pro zlepšení viditelnosti a hodnocení na stránkách s výsledky vyhledávače.


2. Marketing obsahu: Vytvořte cenný a relevantní obsah, který přitahuje a zapojuje vaše cílové publikum. To může zahrnovat blogové příspěvky, články, videa, infografiku a další formy obsahu.


3. Marketing sociálních médií: Propagujte svůj web na platformách sociálních médií, jako jsou Facebook, Twitter, Instagram a LinkedIn, abyste dosáhli širšího publika a řídili provoz na váš web.


4. placená reklama: Zvažte spuštění placených reklamních kampaní na vyhledávačích (Google AdWords), platformy sociálních médií a další relevantní webové stránky, které zvyšují cílený provoz na váš web.


5. Influencer Marketing: Partner s ovlivňovateli ve vašem výklenku, aby pomohl propagovat váš web a oslovit větší publikum.


6. E -mailový marketing: Vytvořte si seznam předplatitelů e -mailů a zasílejte pravidelné aktualizace, propagační akce a obsah, aby se provoz vrátil zpět na váš web.


7. Síťování: Spojte se s dalšími majiteli webových stránek, bloggerů a ovlivňovateli ve vašem oboru, abyste spolupracovali, hostovali nebo vyměnili odkazy na zvýšení viditelnosti vašeho webu.


8. Public Relations: Oslovte novináře, bloggery a média, abyste postavili příběhy nebo oznámení týkající se vašeho webu, aby vytvořily publicitu a provoz.


9. Blogování hostů: Napište vysoce kvalitní příspěvky pro další weby a uveďte odkaz zpět na váš web v autorovi bio nebo obsahu, abyste řídili provoz.


10. Online komunity a fóra: Zúčastněte se online komunit a fór souvisejících s vaším výklenkem a zapojte se s členy sdílením cenných poznatků, zodpovězením otázek a propagací vašich webových stránek, pokud je to relevantní.

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Proč si lidé implantují nfc implantáty do svých rukou?


Existuje několik důvodů, proč se lidé rozhodnou implantovat implantáty NFC (polní komunikaci) do svých rukou:


1. Pohodlí: Implantáty NFC umožňují jednotlivcům snadno získat přístup k informacím, otevřít dveře, provádět platby a provádět další úkoly jednoduchou vlnou ruky. To může být pohodlnější než přenášení klíčů, identifikačních karet nebo smartphonů.


2. Zabezpečení: Implantáty NFC mohou poskytnout přidanou vrstvu zabezpečení, protože vyžadují aktivaci fyzického přístupu k tělu jednotlivce. To může pomoci zabránit neoprávněnému přístupu k zařízením nebo citlivým informacím.


3. Technologické experimentování: Někteří lidé se rozhodnou implantovat čipy NFC jako způsob, jak experimentovat s rozvíjejícími se technologiemi a integrovat je do jejich každodenního života.


4. Osobní identifikace: Implantáty NFC lze použít pro účely osobní identifikace, jako je ukládání lékařských informací nebo kontaktní údaje, které lze snadno přistupovat v případě nouze.


5. Biohacking: Někteří jednotlivci vnímají implantáty NFC jako formu biohackingu, kde zvyšují svá těla technologií, aby zlepšily své schopnosti nebo zkušenosti.


Celkově je rozhodnutí implantovat čipy NFC do svých rukou osobní volbou, která se liší od člověka k člověku na základě jejich individuálních preferencí a přesvědčení.


Koupit dál

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Je cukr opravdu nezdravý?


Nadměrná spotřeba cukru může vést k různým zdravotním problémům, jako je přírůstek na váze, obezita, cukrovka, srdeční choroby a zubní problémy. Doporučuje se omezit příjem přidaných cukrů v naší stravě, aby se udržel dobré zdraví. Přírodní cukry nalezené v ovoci a zelenině však nejsou považovány za škodlivé ve středním množství a mohou být součástí zdravé stravy. Míra je klíčová, pokud jde o spotřebu cukru.


podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou



Jak najdu zákazníky pro svou malou firmu zabývající se vývojem webu?


Zde je několik strategií, které můžete použít k přilákání zákazníků pro vaše podnikání v oblasti vývoje webových stránek:


1. Vytvořte silnou online přítomnost: Vytvořte profesionální web představující vaše služby, portfolio a posudky klientů. Použijte kanály sociálních médií k propagaci vašeho podnikání a zapojení s potenciálními zákazníky.


2. Síť: Zúčastněte se průmyslových akcí, konferencí a setkání, aby se spojili s dalšími profesionály v terénu a potenciálními klienty. Připojte se k online komunitám a fórům souvisejícím s vývojem webových stránek a rozšířte vaši síť.


3. Nabízejte pobídky pro doporučení: Povzbuzujte spokojené klienty, aby odkazovali na své služby ostatním tím, že nabídli slevy nebo jiné pobídky pro úspěšné doporučení.


4. Spolupráce s dalšími podniky: Partner s agenturami pro digitální marketing, grafickými designéry nebo jinými odborníky, kteří mohou pro své klienty potřebovat služby pro vývoj webových stránek.


5. Inzerce: Investujte do online reklamy prostřednictvím Google AdWords, reklam na sociálních médiích nebo zobrazení reklam, abyste oslovili širší publikum.


6. Cold Outreach: Oslovte potenciální klienty přímo prostřednictvím e -mailu nebo telefonu, předvádějte své služby a předchozí práci.


7. Marketing obsahu: Vytvářejte cenný obsah, jako jsou blogové příspěvky, whitepapers nebo webináře, které prokazují vaše odborné znalosti v oblasti vývoje webových stránek a přitahují potenciální klienty prostřednictvím vyhledávačů a sociálních médií.


8. Zúčastněte se obchodních představení a událostí: Zúčastněte se průmyslových veletrhů a událostí, abyste se spojili s potenciálními klienty a předváděli své služby.


9. Nabízejte bezplatné konzultace: Poskytujte potenciálním klientům bezplatné konzultace k diskusi o jejich potřebách a jak jim vaše služby mohou pomoci dosáhnout jejich cílů.


10. Požádejte o recenze a posudky: Povzbuzujte spokojené klienty, aby na vašem webu nebo jiných recenzovacích platformách nechali recenze a posudky, aby budovali důvěryhodnost a přilákali nové zákazníky.


podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jak mohu napsat profesionální blogový příspěvek?


Psaní profesionálního blogového příspěvku zahrnuje několik klíčových kroků k vytvoření dobře vytvořeného a poutavého obsahu. Zde je několik tipů, které vám pomohou napsat profesionální blogový příspěvek:

1. Vyberte relevantní a poutavé téma: Začněte identifikací tématu, které je relevantní pro vaše publikum a je to něco, o čem jste informováni a vášniví. Ujistěte se, že téma je něco, co bude zajímat a rezonovat s vašimi čtenáři.

2. Proveďte důkladný výzkum: Než začnete psát, nezapomeňte provést důkladný výzkum na zvoleném tématu. To vám pomůže shromáždit relevantní informace, statistiky a fakta na podporu vašich bodů a učinit váš blogový příspěvek důvěryhodnější.

3. Vytvořte obrys: Organizujte své nápady a klíčové body vytvořením obrysu pro váš blogový příspěvek. To vám pomůže strukturovat váš obsah logickým a soudržným způsobem, což čtenářům usnadní následování.

4. Napište přesvědčivý úvod: Začněte svůj blogový příspěvek se silným a poutavým úvodem, který upoutá pozornost čtenáře. Použijte háček k přitahování čtenářů a přimějte je, aby chtěli pokračovat ve čtení.

5. Použijte jasný a stručný jazyk: ve svém blogovém příspěvku se vyhněte používání žargonu nebo příliš technického jazyka. Napište jasným a stručným způsobem, abyste usnadnili pochopení obsahu pro všechny čtenáře.

6. Zahrňte vizuální prvky: Vizuální prvky, jako jsou obrázky, infografika a videa, mohou pomoci rozebrat text a učinit váš blogový příspěvek vizuálně přitažlivým. Mohou také pomoci podpořit vaše klíčové body a učinit váš obsah více poutavým.

7. Korencem a úpravy: Před zveřejněním blogového příspěvku se ujistěte, že jej důkladně korekturujete a upravujte pro gramatiku, pravopis a chyby formátování. Před zveřejněním zvažte požádání kolegy nebo přítele, aby zkontroloval váš příspěvek.

8. Přidejte výzvu k akci: Ukončete svůj blogový příspěvek silnou výzvou k akci, která povzbuzuje čtenáře, aby se zapojili do vašeho obsahu, jako je přihlášení k odběru vašeho blogu, komentování nebo sdílení příspěvku na sociálních médiích

Dodržováním těchto tipů můžete vytvořit profesionální a poutavý blogový příspěvek, který bude rezonovat s publikem a založit vás jako autoritu ve vašem oboru.

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jak mohu vytvořit poštovní server s postfixem?


Chcete-li vytvořit poštovní server s Postfixem, postupujte takto:


1. Nainstalujte postfix: Pomocí Správce balíků nainstalujte postfix na server. Například na Debian/Ubuntu můžete spustit `sudo apt-get install postfix`.


2. Konfigurace postfixu: Konfigurační soubory postfixu jsou umístěny v `/etc/postfix/`. Hlavní konfigurační soubor je `main.cf`. Tento soubor můžete upravit a nastavit poštovní server podle vašich požadavků. Některé běžné konfigurace, které možná budete muset nastavit, zahrnují název domény, nastavení poštovních relé, virtuální domény atd.


3. Nastavení záznamů DNS: Chcete -li zajistit doručení pošty, musíte pro vaši doménu nastavit potřebné záznamy DNS (MX a SPF záznamy). V případě potřeby kontaktujte registrátora domény nebo poskytovatele DNS.


4. Nakonfigurujte virtuální domény a uživatelé: Pokud chcete hostit více domén na vašem poštovním serveru, budete muset nakonfigurovat virtuální domény a uživatele. To lze provést pomocí nastavení `Virtual_alias_Maps` a` Virtual_Mailbox_Maps` v konfiguračním souboru postfixu.


5. Zajistěte svůj poštovní server: Ujistěte se, že váš poštovní server je zabezpečený nastavením pravidel brány firewall pomocí šifrování TLS pro příchozí a odchozí poštu a implementací dalších bezpečnostních opatření doporučených pro poštovní servery.


6. Vyzkoušejte svůj poštovní server: Jakmile je vše nastaveno, měli byste otestovat svůj poštovní server odesláním a přijímáním testovacích e -mailů. Použijte nástroje jako Telnet nebo Mailx k ručnímu odesílání e -mailů a zkontrolujte, zda jsou úspěšně přijata.


Nezapomeňte pravidelně aktualizovat a udržovat poštovní server, aby se zajistilo, že běží hladce a bezpečně. Je také dobrý nápad sledovat protokoly poštovních serverů pro jakékoli problémy nebo podezřelou aktivitu.

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jaký je nejlepší způsob, jak vařit vejce?


Zde je jednoduchý způsob vaření vajec:


1. Umístěte vejce do pánve a zakryjte je studenou vodou.

2. Přiveďte vodu k varu nad vysokým teplem.

3. Jakmile se voda vaří, snižte teplo na nízké a nechte vejce vařit 9-12 minut, v závislosti na tom, jak dobře je chcete.

4. Odstraňte vejce z tepla a okamžitě je přeneste do misky ledové vody, abyste rychle ochladili.

5. Jakmile se ochladí, můžete se loupat a užít si dokonale vařená vejce.


podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jak mohu napsat dobrou knihu?


1. Rozvíjejte jasný nápad nebo koncept: Než začnete psát, ujistěte se, že máte pro svou knihu solidní nápad. Může to být spiknutí, postava, téma nebo nastavení, které chcete prozkoumat ve svém psaní.


2. Vytvořte obrys: Nastiňte hlavní body, postavy a témata vaší knihy, než začnete psát. To vám pomůže zůstat v organizaci a soustředění při psaní.


3. vyčlenit vyhrazený čas pro psaní: Zřídit rutinu pro psaní a vyčlenění vyhrazeného času každý den pro práci na vaší knize. To vám pomůže zůstat motivované a pokročit při psaní.


4. Stačí začít psát: Někdy nejtěžší část psaní knihy začíná. Nedělejte si starosti s dokonalostí v této fázi, stačí začít psát a snižovat své nápady na papír.


5. Připojte se ke skupině psaní nebo komunity: Zvažte připojení k psací skupině nebo komunitě pro podporu, zpětnou vazbu a motivaci. Psaní může být osamělé pronásledování, takže mít komunitu spolu spisovatelů může být neocenitelná.


6. Upravit a revidovat: Jakmile dokončíte návrh své knihy, vraťte se a upravujte a upravujte ji, abyste zlepšili jasnost, strukturu a tok psaní. To může zahrnovat více návrhů a revizí, než bude vaše kniha připravena k zveřejnění.


7. Hledejte zpětnou vazbu: Sdílejte svou práci s ostatními, jako jsou čtenáři beta, psaní skupin nebo profesionální editory, abyste získali zpětnou vazbu k psaní. To vám může pomoci identifikovat oblasti pro zlepšení a zesílit vaši knihu.


8. Pokračujte v psaní: Psaní knihy je maraton, ne sprint. Pokračujte v posunu kupředu, zůstaňte oddaní a pokračujte v práci na vaší knize, dokud není dokončena.


podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jak mohu odeslat e-mail s vyhovujícím e-mailovým seznamem a odkazy pro odhlášení?


Chcete -li odeslat e -mail se seznamem vyhovujícím a přísnější odkazem na odhlášení, měli byste postupovat podle těchto kroků:


1. Ujistěte se, že váš seznam e-mailů je v souladu se všemi relevantními předpisy, jako je zákon CAN-SPAM a GDPR. To znamená, že se všichni příjemci musí rozhodnout, aby obdrželi vaše e -maily a že máte jejich výslovný souhlas s jejich kontaktem.


2. do svého e -mailu uveďte jasný a prominentní odkaz na odhlášení. Ujistěte se, že je snadné najít a kliknout na a, a že příjemce vezme přímo na stránku, kde se mohou snadno odhlásit z vašeho seznamu adresátů.


3. Aby byl odkaz odhlášení „přísnější“, můžete použít možnost odhlášení s jedním kliknutím. To znamená, že příjemci se mohou z vašich e -mailů odhlásit pouze jedním kliknutím, aniž by museli vyplňovat jakékoli další formuláře nebo poskytnout jakékoli osobní údaje.


4. Při odesílání e -mailu nezapomeňte přizpůsobit zprávu a pokud je to možné, adresujte příjemce podle názvu. To může pomoci zvýšit angažovanost a učinit e -mail se pro příjemce cítit relevantnější.


5. Před odesláním e -mailu jej vyzkoušejte, abyste zajistili, že odkaz odhlášení funguje správně a že e -mail vypadá dobře na všech zařízeních a e -mailové klienty.


Dodržováním těchto kroků můžete odeslat e -mail se seznamem vyhovujícím a přísnější odkazem na odhlášení, abyste zajistili, že vaši příjemci mají pozitivní zkušenost a mohou se snadno odhlásit z přijímání dalších e -mailů od vás.

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jak mohu nosit deadlock?


1. Začněte pěstováním vlasů na požadovanou délku. Vaše vlasy by měly být pro nejlepší výsledky nejméně 2-3 palce.


2. Řezte vlasy do malých, dokonce i částí pomocí hřebenu. Velikost sekcí určí velikost vašich dredů, takže si nezapomeňte vybrat velikost, se kterou vám vyhovuje.


3. Začněte backmbing každou část vlasů kroucením a přitažením je pevně k kořenům. Tím se vytvoří uzly ve vlasech, které se nakonec vytvoří do dredů.


4. Naneste vosk nebo gel na každou část vlasů, aby pomohli držet uzly na místě a povzbudit vlasy, aby se podrotily pohromadě.


5. Pokračujte v zádech a kroucení každé části vlasů, dokud nedokončíte celou hlavu. Tento proces může být časově náročný, takže buďte trpěliví a podle potřeby přestávejte.


6. Jakmile jsou všechny vaše vlasy zkroucené a zpětné, nechte je několik dní sedět, aby se uzly mohly utáhnout a vytvořit se na dredy.


7. Po několika dnech můžete začít styl a udržovat své dredy jejich umytí šamponem bez zbytků a pomocí háčkovacího háku, který pomáhá zpřísnit jakékoli volné uzly.


8. Chcete -li udržet dredy vypadající úhledné a uklizené, zvažte použití šály nebo šátek k jejich pokrytí při spánku nebo ve špinavém prostředí. Pravidelná údržba a údržba pomůže vašim dreadlockům zůstat zdravé a živé.

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Proč bych měl u slova l používat jablko?


Použití Apple L ve slově L může zvýšit váš zážitek z prohlížení několika způsoby. Apple L je oblíbené streamovací zařízení, které vám umožní snadno přistupovat a sledovat vaše oblíbené pořady s vysoce kvalitním videem a zvukem. Používáním Apple L ve slově L si můžete vychutnat ostré, jasné vizuální a pohlcující zvuk, díky kterému budete mít pocit, že máte pravdu uprostřed akce.


Apple L navíc nabízí uživatelsky přívětivé rozhraní, které usnadňuje procházení epizodami, pozastavením a převíjením scén a přizpůsobení vašeho zážitku z prohlížení. Můžete také využít funkcí, jako je hlasové vyhledávání a personalizovaná doporučení, která vám pomohou objevit nový obsah, který si můžete užít.


Celkově, použití Apple L u L Word vám může poskytnout prémiový zážitek z streamování, který vám umožní plně se ponořit do podmanivého světa show.

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou



Co způsobuje migrénu a jak se léčí?


Migrény jsou závažné bolesti hlavy, které jsou často doprovázeny jinými příznaky, jako je nevolnost, citlivost na světlo a zvuk a vizuální poruchy. Přesná příčina migrény není zcela pochopena, ale předpokládá se, že souvisí se změnami průtoku krve a chemikálií v mozku.


Léčba migrén obvykle zahrnuje kombinaci změn životního stylu, léků a alternativních terapií. Některé běžné možnosti léčby zahrnují:


1. Přijímání volně prodejných léčivých úlev, jako je ibuprofen nebo acetaminofen

2. léky na předpis speciálně navržené k léčbě migrén, jako jsou triptany a ergotaminy

3. vyhýbání se spouštěčům, jako jsou určitá jídla, stres, nedostatek spánku nebo hormonální změny

4. praktikování relaxačních technik, jako je hluboké dýchání nebo meditace

5. Aplikování horkých nebo studených balíčků na hlavu nebo krk

6. Získání pravidelného cvičení a udržování zdravé stravy


Je důležité, aby jednotlivci, kteří trpí migrénami, spolupracují se svým poskytovatelem zdravotní péče, aby vyvinuli léčebný plán, který je přizpůsoben jejich specifickým potřebám a spouštěčům. V některých případech může být zapotřebí kombinace terapií k účinnému řízení migrén a zlepšení kvality života.

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Proč je bezpečnější nosit roušku na veřejnosti?


Nošení masky na veřejnosti je bezpečnější, protože pomáhá zabránit šíření respiračních kapiček, které obsahují viry, jako je Covid-19. Když někdo s virem nosí masku, zabraňuje uvolnění jejich respiračních kapiček do vzduchu a potenciálně infikuje ostatní. Nošení masky navíc může také chránit nositele před vdechováním respiračních kapiček od ostatních, kteří mohou být infikováni. To je obzvláště důležité v situacích, kdy je obtížné udržovat sociální distancování, například v přeplněných vnitřních prostorech nebo na veřejné dopravě. Celkově je nošení masky jednoduchý a efektivní způsob, jak pomoci snížit přenos virů a chránit vás i ty kolem vás.


podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jak mohu vytvořit webovou aplikaci s plně zásobníkem s Django?


Vytvoření webové aplikace s plným zásobníkem pomocí Django zahrnuje několik kroků. Zde je obecný přehled procesu:


1. Nastavení Django: Nejprve nainstalujte Django spuštěním `PIP Instalace django` do příkazového řádku. Poté vytvořte nový projekt Django spuštěním `django-admin startproject myproject`.


2. Vytvoření aplikací Django: Aplikace Django jsou modulární komponenty vašeho projektu, které slouží konkrétním účelům. V rámci svého projektu můžete vytvořit více aplikací pro zvládnutí různých funkcí.


3. Definovat modely: Modely v Django se používají k definování struktury vašich databázových tabulek. Vytvořte své modely definováním tříd v souboru modelů.py každé aplikace.


4. Vytvořit pohledy: Pohledy v Django jsou funkce Pythonu, které zpracovávají požadavky uživatele a vrátí odpovědi. Definujte zobrazení pro vaši aplikaci vytvořením funkcí v souboru pohledu.


5. Nastavení URL: URL v Django se používají k mapování uživatelských požadavků na konkrétní pohledy. Definujte vzory URL pro vaši aplikaci vytvořením souboru urls.py v každé aplikaci a zahrnutím do hlavního souboru urls.py vašeho projektu.


6. Vytvořit šablony: Šablony v Django se používají ke generování stránek HTML, které jsou odesílány do prohlížeče uživatele. Vytvořte šablony HTML pro vaši aplikaci vytvořením složky šablon v každé aplikaci a zapíšete kód HTML do samostatných souborů šablon.


7. Podávejte statické soubory: Statické soubory, jako jsou CSS, JavaScript a obrázky, se podávají samostatně od dynamického obsahu v Django. Nakonfigurujte nastavení statických souborů v souboru Nastavení projektu. Slouží statické soubory ze statické složky v každé aplikaci.


8. Nakonfigurujte databázi: Nastavte nastavení databáze v souboru nastavení.py vašeho projektu, včetně databázového motoru, názvu, uživatele, hesla a hostitele.


9. Migrujte databázi: Spusťte `python manage.py makemigrations` a následuje` python manage.py migrate` v příkazovém řádku a vytvořte a aplikujte migrace databáze na základě vašich modelů.


10. Spusťte server: Spusťte server Django Development Server spuštěním `python manage.py runserver` ve vašem příkazovém řádku. Nyní byste měli mít přístup k vaší webové aplikaci na adrese `http: //127.0.0.1: 8000/` ve svém prohlížeči.


Toto jsou základní kroky k vytvoření webové aplikace s plným zásobníkem s Django. Odtud můžete dále přizpůsobit a rozšířit aplikaci přidáním ověřování, autorizace, koncových bodů API, testování a další.


podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Jaké jsou výhody bezpečnostní kamery?


1. Odstražení trestné činnosti - Bezpečnostní kamery mohou působit jako odrazující prostředek k potenciálním zločincům, protože je méně pravděpodobné, že spáchají zločin, pokud vědí, že jsou sledováni.


2. dohled a monitorování - Bezpečnostní kamery vám umožňují sledovat váš majetek a sledovat jakoukoli podezřelou činnost v reálném čase, pomáhat předcházet krádeži, vandalismu nebo jiným zločinem.


3. Důkazy v případě trestného činu - V nešťastné události, že k trestným činům dochází k vašemu majetku, může záběry z bezpečnostní kamery poskytnout zásadní důkazy pro vymáhání práva a nároky na pojištění.


4. vzdálený přístup - Mnoho bezpečnostních kamer nyní nabízí možnosti vzdáleného sledování, což vám umožní přihlásit se k vašemu nemovitosti odkudkoli pomocí smartphonu nebo počítače.


5. Mír mysli - Nainstalované bezpečnostní kamery mohou poskytnout klid, s vědomím, že váš majetek je monitorován a jsou detekovány a zaznamenány potenciální hrozby.


podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou


Právě jsem začal brát kontrolu porodnosti. Jaké jsou nejčastější vedlejší účinky?


Mezi nejběžnější vedlejší účinky pilulek s antikoncepci patří:


1. nevolnost

2. něha prsu

3. bolesti hlavy

4. přírůstek hmotnosti

5. Změny nálady

6. SPOTNING nebo průlomové krvácení

7. Změny v libido 

8. Akné 

9. Bloating 


Je důležité si uvědomit, že každý člověk může zažít různé vedlejší účinky a někteří jednotlivci nemusí vůbec zažít. Pokud máte obavy z vedlejších účinků vaší antikoncepce, je nejlepší mluvit se svým poskytovatelem zdravotní péče.

podle Daisy / Pohled | Nakoupit | Nakupujte s kryptoměnou




https://glamgirlx.com -


(Kliknutím nebo klepnutím stáhněte obrázek)
Profesionální zábava, fotografie, videa, zvuk, živá a příležitostná hraní, stejně jako skenování ID, vývoj webových stránek a náhradní služby.

Zanechte mi tip v bitcoinech pomocí této adresy: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE

© Glam Girl X 2025

Podmínky služby