Praktické hlboké učenie a bezpečnosť založené na webe príkladom Tretie vydanie Charlotte Harper 3. júla 2024 Aktualizované/prevedené 3. júna 2025
Predslov:
Bezpečnostné úvahy pri vytváraní softvéru na webe sú dôležitou súčasťou plánu a vykonávania každého webového vývojára pri inžinierstve prototypu, ktorý je spoľahlivý, stabilný a užitočný na praktické účely. DOM (označovanie objektov dokumentu), s implementáciou HTML, JavaScript a CSS, ako aj backend softvéru implementácie pythonu, c/c ++, java a bash, dávajte vývojárom webových stránok slobodu a silu, aby vytvorili širokú škálu projektov, ktoré vyjadrujú ľahkú tvorbu, pričom sa poskytujú ľahké použitie, pri podiele, ktoré sa zdôrazňujú, a to aj v rámci atraktivity. Zabite čas alebo niečo urobte na internete, zvyčajne na smartfónnom zariadení s dotykovou obrazovkou. Väčšina ľudí by ani nevedela, kde začať, keď chcú zostaviť webovú stránku od nuly, mali by tendenciu začať na webovej stránke inej osoby a zostaviť niečo obmedzené vo funkčnosti, spoľahlivosti, ľahkom používaní a najmä kreativite, keď by mohli mať všetky najnovšie výkonné nástroje, ktoré majú k dispozícii, aby sa ich klimatizácia k dispozícii, aby si vybudovali niečo užitočné bez toho, aby strácali časové tlačidlá, a najmä trávia peniaze, ktoré platia za drahé predplatné na softvér, len málo ľudí, ktorí chceli, aby sa použili tak, že sú obmedzené v prípade, že majú ľahké použitie v prípade, že majú ľahké použitie. Ak máte pár minút na prečítanie tejto knihy a dozvedieť sa, čo vás chcem naučiť, alebo dokonca so mnou hovoriť osobne o svojich cieľoch a získať nejaké usmernenie správnym smerom a ste motivovaní naučiť sa kódovať a písať svoj vlastný softvér, vziať túto knihu domov a odložiť si nejaký čas na to, aby ste sa naučili vybudovať ďalšie vplyvné, výkonné, silné, efektívne a dôležitá webová aplikácia, ktorá je na vás všetko, a robí nejaký čas, aby ste sa naučili a splnili potreby svojho publika.
O mne: Som vývojár softvéru so širokou škálou skúseností v C/C ++, Java, Python, HTML, CSS a JavaScript. Vytváram webové stránky, ktoré ľudia chcú používať, chcú navštíviť a dokonca som závislí od toho, aby som používal, len aby som sa učil, obnovil a zabíjal čas, a čo je najdôležitejšie, predávam softvér. Ak ste mali predstavu o tom, ako presne ste chceli, aby sa webová stránka pozerala a fungovala, boli ste ochotní ma podporiť, aby som mohol splniť svoje vlastné potreby, keď sa stretávam s vašimi, a ste ochotní pokryť náklady na spustenie webovej stránky sami, zostavil by som vám ďalší YouTube, Tiktok, Twitter, Google alebo dokonca aj aplikáciu na high-tech, a to aj s high-tech bezpečnostnou aplikáciou. Namiesto toho, aby som sa vás snažil predať môj čas, snažím sa kúpiť váš: Chcem sa s vami porozprávať o vytvorení aplikácie (webovej stránky) s informáciami, ktoré už existujú, a naučím vás, čo potrebujete byť nezávislým vývojárom softvéru, podnikateľom, ktorý vedie úspešnú kariéru v akejkoľvek oblasti, ktorú si želáte. A dovoľte mi objasniť, vzdelanie, ktoré vám dávam, bude neformálne. Mohli by ste ísť do školy a to všetko sa dozvedieť s formálnym vzdelaním, alebo dokonca prečítať túto knihu v škole, dokončiť svoje úlohy a odobrať veľa z vášho vzdelania, ale formálne vás nebudem dať na horúce kreslo a požiadať vás, aby ste dokončili úlohy. Nie som tvoj profesor, môžeš na mňa myslieť ako na priateľa, ktorý ťa chce viesť k kariére poháňanej vlastným osobným úspechom. A ja vám nepredávam úspech, budete si ho musieť kúpiť so svojím časom. Naučiť sa kódu má strmú krivku učenia a nikdy nebolo ľahké, alebo dokonca nemalo byť. Musíte pracovať tak tvrdo, ako je to len možné, a naďalej sa snažte zlyhať a skúste to znova, aj keď ste frustrovaní, aby ste sa sami učili a vytvárali aplikácie. To je v povahe samotného kódu. Kód je spustený kompilátorom, ktorý je navrhnutý tak, aby poskytoval chybové hlásenia programátora, a tieto sa naučia, ako kódovať, aj keď jednoducho kopírujete chybu do vyhľadávacieho nástroja a čítate príklady iných ľudí. A musím povedať, že na vytvorenie aplikácie nemusíte byť mimoriadne bohatí, inteligentní, úspešní alebo dokonca detaily orientovaní alebo organizovaní. Počítač sa stará o túto organizáciu pre vás. Musíte len vytrvať prostredníctvom pokusu a omylu, udržiavať zameranie a tvrdo pracovať na tom, čo robíte, a budete mať veľmi úspešnú kariéru v celom rozsahu toho, čo robíte.
Kto som: Uvedomujem si, že posledná časť bola viac o učení sa a vy si idete z tejto knihy. Kto som presne? To je komplikovaná otázka. Nie som si v tom istý, že sám, pretože trpím zdravotnými stavmi, ktoré mi môžu sťažiť, aby som túto knihu občas napísal alebo písal, pričom predstavujem výzvy so socializáciou a problémami s identitou, ktoré sťažujú môj život, pokiaľ ide o predstavenie seba samého. Stručne povedané, ak čítate túto knihu, priniesli ste ju domov, pretože ste ju prevrátili a mysleli ste si, že je to užitočné, alebo aj keď ste práve čítali tak ďaleko, pre vás som podobný individuálny jednotlivec, ktorý vás chce vidieť uspieť vo všetkom, čo robíte. Som sám inžinier, vývojár softvéru a študent a píšem túto knihu pre ostatných študentov, ktorí chcú uľahčiť svoj život tým, že majú príručku softvéru, ktorý potrebujú uľahčiť svoj život tým, že uľahčujú príklady, ktoré sa dajú kopírovať, ako je to veľká hádanka do pracovných, užitočných, veľkých, funkčných, súdržných a zapojených aplikácií, ktoré môžu viesť k úspechu bez ohľadu na hranicu podnikania. Vo veľkej miere to robím: vytváram aplikácie, ktoré pomáham sebe a iným ľuďom uspieť. Som tiež autorom, aj keď je to moja prvá publikácia, ktorú mám v úmysle dokončiť, aby som svoje portfólio spojil do užitočného dokumentu, a tiež som umelec. Priznávam vám to, som trochu zvláštny človek. Nie som dokonalý, bežal som so zákonom, dokonca ma viedol k opusteniu vysokých škôl a univerzít a opustil štáty, aby som sa pokúsil urobiť meno pre seba s väčším úspechom. Som žena pri narodení, nosím make -up, fotografujem seba, nosím šaty a iné dámske oblečenie a ja som si vedomý seba samého ako žena svojou povahou. V minulosti som mal problémy s inými ľuďmi, ktoré viedli k bojom s písaním a budovaním webových aplikácií, a ospravedlňujem sa, že som túto knihu nemohol dostať skôr do vašich rúk: potrebovali ste to. Budete chcieť čítať a písať kód, ktorý vyzerá ako môj a funguje ako môj a robí to isté, ale ešte lepšie, pretože ak si môžete dovoliť kúpiť túto knihu namiesto toho, aby ste rozpadli vašu klávesnicu, ako keby som si vytvoril knihu sami, že si za ňu žiada peniaze, máte zdroje, ktoré potrebujete, aby ste boli úspešní vo svojom živote. Mal som najrôznejšie problémy s vyrastaním rodiny, zdravotnými podmienkami, lekármi, médiami a zákonom a môj kód hlboko odráža boj, ktorým je feminizmus a ženská povaha v rozdelenom a frustrovanom svete. Táto kniha je však niečo, na čom mi hlboko záleží, moje dieťa, moje portfólio a moje živobytie, takže oceňujem vašu úvahu, keď vezmete text domov a opatrne nad ním pózujete, aby ste sa učili odo mňa. Nezabúdajte, že nie som dokonalý, táto kniha bude mať chyby, revízie a nové vydania a budete musieť so svojím logickým mozgom myslieť čo najlepšie, aby ste mali úspešný zážitok s mojím písaním. Tiež pochopte, že pre vás mám na mysli dobre, aj keď pri písaní čelíte výzvam. Zamyslite sa nad tým, ako je toto: Keď si môžete len požičať počítačový systém, aby ste urobili čokoľvek, čo by ste si mohli predstaviť v digitálnom priestore, uložte všetky informácie, s ktorými sa stretnete, analyzujte a organizujete ho, a porozumieť s ním, nevyhnutne sa stretnete s problémami s informáciami, ktoré prijímate a dokonca publikujete. Hovorím vám to, pretože sa stretávam s rovnakými ťažkosťami. Používajte túto knihu na svoje vlastné riziko, pracujte s vašou komunitou a komunitami, ktoré máte k dispozícii na vytvorenie softvéru v bezpečnom prostredí, a neberte veci osobne, keď zlyháte alebo dokonca uspejete nesprávnym spôsobom: takto som sa dostal tak ďaleko, a prečo vám môžem priniesť tento text a pomôcť vám, aby ste uspeli, bez toho, aby ste sa rozvinuli na ceste šialenstva, ktoré mi zanecháva zničené, zničené a osvetlené, keď sa stretávam. bude fungovať, internet. Možno nebudete veľmi oboznámení s tým, kto som s niekoľkými slovami, ale povzbudzujem vás, aby ste si prečítali, spoznáte ma, keď mi budete naďalej čítať a porozumieť mi pri budovaní vlastných projektov na dokončenie svojej práce. S touto knihou nebude existovať domáce úlohy, pokiaľ vám vaši profesori alebo učitelia nebudú priraďovať, ale dôrazne vás povzbudzujem, aby ste si sami vybudovali portfólio projektov sami, ako aj projekt Capstone, ktorý predstavuje, ako môžete uplatniť to, čo ste sa naučili. Môj projekt Capstone je základom pre väčšinu toho, čo si budete čítať v tejto knihe, pretože zahŕňa kód z mojich predchádzajúcich projektov, kód, ktorý som vytvoril a naučil sa písať metodicky ručne, a širokú škálu nápadov a tipov, ktoré mi pomohli uspieť v bode, kde dokážem roztočiť jednoduchú aplikáciu, ktorá je plne vystupovaná a správa sa a správa sa ako populárna aplikácia, ktorú by mohla vidieť vašej priateľky alebo rodiny, ktoré používajú na internete, inzerujem vám alebo v správach.
Čo je táto kniha: Táto kniha je príkladom tutoriálu. Nájdete tu kód, pokyny, ako sa naučiť kódovať kód, informácie o ladení kóde a opravách chýb, riešenia problémov, pokyny o tom, ako zálohovať a uložiť váš kód, znovu nasadiť, ak niekto prelomí váš kód, zabezpečte váš kód, nasadte svoj kód, vytvárajte interaktívne webové stránky, ktoré sú zábavné, angažujúce sa, a vy, a vy získate pocit toho, kto som, a prečo je to dôležité, a prečo je to imidá. Postavujete v absolútnom najlepšom svetle, aby ste boli najatraktívnejší pre vašich koncových používateľov, návštevníkov vašich webových stránok. V tejto knihe demonštrujem niekoľko príkladov dizajnu softvéru so zameraním na web ako platformu a zabezpečenie. Zakladáme skúsenosti s učením vytvorením základného projektu pomocou škrupiny Unix s funkciami zálohovania a skriptovania. Potom preskúmame základnú webovú stránku blogu, aktualizujeme náš blog pomocou funkcií fotografií a videa a použijeme tieto funkcie na využívanie bezpečnostných riešení pomocou bezplatného softvéru a zabezpečte náš server pomocou pluggable Authentication Modul (PAM). Potom si okrem iných konceptov preskúmame spracovanie a spracovanie súborov, skúmanie úprav videa, darovanie hlasu, skenovanie čiarových kódov a optické rozpoznávanie znakov. Po ceste preskúmame API, ktoré nám pomôžu zvýšiť užitočný a bezpečnejší náš softvér, s bezplatnými a platenými možnosťami. Popri tom preskúmame fyzické bezpečnostné a militantné nástroje, ako sú dizajn a výroba strelných zbraní a munície vrátane dizajnu sudov a opakovačov, dizajnu veží a dronov a ďalších princípov, ktoré sa integrujeme do nášho softvéru v existujúcej sieti, aby sme chránili náš softvér a demonštrovali sebaobranu a odolnosť. Dostaneme prestávky na ceste k budovaniu hier, 2D a 3D vykresľovacích motorov a pracujeme so zabudovaným hardvérom v prípadovej štúdii príklady základného rozmerového vykresľovacieho softvéru a elektronického vibračného masáže odlievaného v silikónovom gumári. Po ceste tiež využijeme riešenia strojového učenia, ktoré sú už k dispozícii, aby sme lepšie zabezpečili náš softvér. Budeme tiež používať zásobné nástroje dostupné pre web, aby sme tento proces zefektívnili a zabezpečili. Táto kniha je sprievodcom vašim úspechom pri budovaní webovej aplikácie a jej integrácii s profesionálnou sieťou počítača a vložených mechanických systémov a celkovo sprievodcom pri vytváraní softvéru a zabudovaným hardvérom bez pozadia alebo predchádzajúcich skúseností.
Čo táto kniha nie je: Ak naozaj chcete mať webovú stránku, môžete jednoducho nastaviť jednoduchý obchod a predať to, čo potrebujete, uverejnite blog, uverejňujte fotografie alebo videá alebo inak bez toho, aby ste napísali jeden riadok kódu. Táto kniha nie je taká. Táto kniha vás naučí, ako vytvárať softvér, ktorý je užitočnejší, plne uvedený, funkčný a bezpečný ako akýkoľvek softvér, ktorý už môžete nájsť, pretože nasadzuje najnovší softvér, ktorý je stále prototypmi, môže byť drahý na to, aby fungovali v mierke starších spoločností, a neoprávňuje sa na spätných, konvolovaných a konvolovaných spoločnostiach založených na zarábaní peňazí pre ľudí, ktorí skutočne nerobia nič. Ak dôkladne sledujete túto knihu, budete chcieť napísať kód, výskumný kód, zostaviť svoje vlastné aplikácie a zarobíte peniaze z toho, čo robíte. Z tejto knihy zarobím peniaze, dokonca aj v počiatočných fázach, pretože obsahuje informácie, ktoré ľudia potrebujú a chcú čítať, a už kupujú, keď kupujú alebo používajú moje aplikácie. Táto kniha pre vás nebude zostaviť aplikáciu, ale bude vás nasmerovať správnym smerom a vyzbrojiť vás pomocou potrebných nástrojov a zručností a tipov, ktoré uľahčia váš vlastný úspech pri budovaní softvéru pre web, pričom každým riadkom kódu budete musieť písať ako príklad, pripravený na to, aby ste sa mohli spojiť do softvéru a vaši podporovatelia, hostí, priatelia, rodina, návštevníci, zmluvnými zmluvami a ľuďmi z internetu, ktoré chcú používať a podporovať podporu a podporu.
Čo sa naučíte: Táto kniha vás naučí, ako vytvárať a predávať softvér, skutočne funkčný, užitočný softvér, nahrávanie médií, bezpečnostné funkcie, ako je rozpoznávanie tváre, skenovanie čiarových kódov na čele strojov, webové rozhrania na autentifikáciu, nahrávanie a vykreslenie videa a fotografií a výmenu správ, ako je komunikácia Bluetooth and Close Field (NFC). Táto kniha vás naučí, ako používať sieťový počítač so zameraním na Debian Linux, ako zostaviť kód Bash, aby sa stala inštalácia a zálohovanie vášho softvéru bezproblémovým, automatizovaným vánkom, ako zostaviť pythonov kód ako backend, ktorý slúži dynamickým správam, štýlmi vecí, ktoré sú pekne pomocou štýlov CSS, ktoré poskytujú textové programy CSS, ktoré poskytujú informácie o tom, či sa účely, skenovanie ID, moderovanie obrazu a videa, dátové mikrotransakcie, aby bol váš softvér zabezpečený, spracovanie platieb, obchodovanie s kryptomenami, asynchrónne úlohy a ďalšie. Naučíte sa, ako zostaviť svoje vlastné zariadenia Bluetooth, s batériami, nabíjačkami, mikrokontrolérmi, obvodmi, motormi a senzormi, pomocou spájkovacej, drôtovej a 3D vytlačenej, ako aj liate. Ukážem príkazcov 3D dizajnu aplikovaných na výrobu aditív a výrobu nástrojov a matrice, takže ste schopní vyrábať svoje vložené hardvérové zariadenia s integrovanými batériami, nabíjačkami, elektronickými obvodmi a funkčnými výstupmi. a prepojte ich pomocou Bluetooth a webu. Konkrétne preskúmame dve prípadové štúdie, vibračné masážky a domácu strelnú zbraň, ktorá je naprogramovaná v Openscad, ktorá je k dispozícii ako grafické rozhranie alebo utilita príkazového riadku a môže byť integrovaná do webu pre rýchle výsledky. Naučíte sa, ako vytvárať a nasadiť webovú stránku od základov bez predchádzajúcich skúseností, aby bola funkčná, bezpečná, krásna, užitočná a čo najdôležitejšie praktické. Dozviete sa, ako používať strojové učenie a počítačové videnie, aby ste zabezpečili bezpečné a praktickejšie webové stránky, nahrávate video a zvuk z vašich webových stránok, darujte svoj hlas, vytvára hudbu a modulujte zvuk a modulujte a zvuk na vytvorenie užitočných vzoriek a ako prelomiť hluk využitím iných webových stránok na vytvorenie najlepšej možnej siete webových stránok, ktoré môžete prepojiť priamo s vašimi, aby ste sa mohli prepojiť priamo s vašimi, aby ste sa mohli prepojiť priamo s vašimi, aby ste sa mohli prepojiť priamo s vašimi, aby ste mohli prepojiť všetky užitočné informácie, ktoré musíte ponúknuť, a dokonca dôležitejšie priniesť ľudí do vášho softvéru a firmy. Táto kniha sa bude najviac zameriavať na médiá, bezpečnosť a strojové učenie, ktoré sú hlavnými tromi komponentmi, ktoré vám pomôžu vytvárať užitočný softvér pre web zapojením správnych používateľov a odpojí sa tým nesprávnym spôsobom, ktorý je realistickým, praktickým, praktickým a pútavým a zároveň automatickým a silným. Táto kniha vyučuje UNIX, konkrétne Debian (Ubuntu), Bash Shell, Python, HTML, CSS, JavaScript a množstvo užitočných softvérových balíkov pre požiadavky ako Python, ako aj užitočný softvér Bash, ako je GIT a FFMPEG. Tiež vás naučím, ako automaticky obchodovať s kryptomenou, a prijímať platby v kryptomenii alebo z pravidelných debetných kariet, zatiaľ čo platíte svojim návštevníkom podiel svojich príjmov, ak sa tak rozhodnete. Naučím vás, ako zarobiť peniaze z vašich webových stránok aj prostredníctvom reklamy, ako pripraviť svoju aplikáciu pre vyhľadávacie nástroje a urobiť ju rýchlo, zaradiť sa do prvého hodnotenia, čo vaši zákazníci hľadajú, aby vás našli, a hodnotia sa v čo najväčšom počte bežných vyhľadávaní. Naučím vás, ako predávať váš softvér, inzerovať ho, osloviť klientov, ktorí hľadajú vaše služby, a pomenujte si na internete, ktoré už existujú, sú lacné a fungujú dobre. Naučím vás, ako uložiť vaše údaje na cloudové počítače, ktoré pracujú pre vás a lacno uložia vaše údaje, ako plánovať a zostaviť webovú stránku, ktorá robí to, čo vaši používatelia chcú a čo chcete, a ako udržať svojich používateľov zapojení tým, že vaše webové stránky klepnite na svoje telefóny, s upozorneniami, e -mailom, textovými správami, telefonickými hovormi a ďalšími, aby vaši používatelia priviedli späť na svoje webové stránky, za kliknutím na tlačidlo na základe tlačidla na základe tlačidla na tlačidlo iba pre vás. Táto kniha sa zameria na praktickosť publikovania a distribúcie médií vo veľkých množstvách, od textu po fotografie po videá až zvuk, urobí dobrý dojem na koncových používateľov (vaša klientela) a akýmkoľvek spôsobom, ako to robíte, aby ste vytvorili webovú stránku, aplikáciu, ktorá je reprezentatívna pre vás a vy, a robí vás, vašu spoločnosť a vašu spoločnosť dobre v tom najlepšom možnom spôsobe. Dozviete sa aj niekoľko tipov a trikov odo mňa, od tipov na kódovanie, praktickú márnosť, ako je make -up a fotografia, modelovanie a herectvo, a ďalšie, ktoré budú dôležité pre vykreslenie seba a svojej spoločnosti v najlepšom možnom svetle, ktoré využívajú všetky nástroje, ktoré máte k dispozícii, pri distribúcii toľko obsahu, koľko potrebujete na zdravej rovnováhe platforiem, aby ste priniesli váš softvér do ovocia, bez toho, aby ste sa dostali k žiadnemu ďalšiemu úsiliu, alebo pri distribúcii peňazí, ako je potrebné. Táto kniha sa nazýva „praktickáWebové hlboké vzdelávanie a bezpečnosť založené na webe „z nejakého dôvodu: Zaoberá sa učením sa kódovať kód, konkrétne pre web, konkrétne so zameraním na bezpečnosť, z praktického hľadiska, s príkladmi pracovného kódu, ktorý slúži na praktické účely uvedené v texte. Titulok a ďalšie úlohy, ako sú predikčné metriky, pochádzajúce z obrázkov, ako napríklad povaha obrázka ako autentický, počítačový prenosný obraz alebo optickú kópiu (fotografia obrázka alebo tlačená fotografia) je veľmi dôležitá, keď sa vám podarí zabezpečiť, aby ste boli zaznamenané v prípade, že ste zaznamenali svoje zapisovanie. Face. Každý, kto vytvára softvér, ktorý je dokonale zabezpečený, má nejaký zmysel pre to, čo to znamená. Softvér je neodmysliteľne neistý, pretože zariadenia a účty, ktoré používame na prístup k nemu, nie sú vždy k dispozícii, mohli by byť v rukách kohokoľvek, kto má softvér zlý úmysel, a preto môžu predstavovať riziko pre samotný softvér. Toto je niečo zameranie tejto knihy. Sieťový počítač je v predvolenom nastavení zabezpečený dlhým kľúčovým tokenom, s názvom a SSH alebo Secure Shell Key a je inak najlepšie zabezpečený webovým serverom, pretože webový server poskytuje otvorený prístup, ako aj najmodernejšie nástroje zabezpečenia prevádzkovaných na samotnom serveri. Webový server má prístup k webovému prehliadaču používateľa, ktorý je pravdepodobne najsilnejšou časťou zariadenia používateľa, pretože je to miesto, kde môže užívateľ pristupovať k softvéru so sieťovým softvérom. Táto súbor nástrojov dokáže vykresliť text, webové stránky, ktoré vidíte a dokáže zaznamenávať obrázky, zvuk a video (ako je fotografia tváre alebo štátne ID), dokáže čítať a písať do rádiových zariadení Bluetooth a dokáže čítať a písať na značky Transponder Field Transponder, neexpenzívne kľúčové karty, FOB, FOB, FOB, prstene a rovnomerné čipové implantáty s jedinečnými seriálmi, ktoré môžu byť čítané a písomné na webových stránkach a splatení webovými servermi. Pomocou všetkých nástrojov, ktoré máte k dispozícii, s touto knihou sa vybavíte znalosťami na vytvorenie zabezpečenej webovej stránky a celkovo zabezpečený sieťový počítačový systém, ktorý pre vás funguje, robí vaše ponuky a vyzerá a cíti a cíti sa
Kde začať: Ste vítaní preskočiť okolo sekcie, ktorú začnem túto knihu alebo v ktorejkoľvek sekcii, do presného kódu, ktorý potrebujete, najmä ak máte skúsenosti s kódovaním pred alebo s niektorými z vyššie uvedených nástrojov, ktoré budem podrobne popisovať v tejto knihe, ako aj dokumentovať prípady použitia a praktické príklady. Ak nemáte skúsenosti s písaním kódu, dôrazne odporúčame prečítať si všetku túto knihu a najmä odporúčame vám prečítať si predchádzajúce sekcie, aby ste sa uistili, že táto kniha je pre vás to pravé. Ak táto kniha pre vás nie je správna, zvážte darovanie priateľovi alebo príbuznému, ktorý by sa mohol zaujímať o sami o vývoji webu, a dokonca zvážte požičiavanie a učenie sa od nich, aby ste vyplnili medzery, v ktorých som vás zlyhal ako učiteľ, alebo ostatní učitelia predo mnou. Začnite tam, kde chcete, každá časť tejto knihy bude užitočná, ak chcete vytvoriť užitočnú aplikáciu, a zvážte, že najlepšie aplikácie sú vytvorené s koncovým používateľom: Poznajte svojho zákazníka. Teraz ma poznáš, poznáš túto knihu a ste pripravení začať. Ak chcete začať, uchopte počítač (dokonca aj najlacnejší notebook z obchodu s krabicami, Amazon alebo starý stolný počítač funguje a nastavte ho spôsobom, ktorý pre vás funguje.
Ako čítať túto knihu: Zvýraznený text označuje, že text patrí do príkazového riadku, kde napíšete spustený kód. Príkazový riadok je silne zameraný na klávesnicu a vyžaduje len málo kliknutia, zrýchlenie vášho pracovného postupu a uľahčenie vecí pre vás.
Začíname: Poďme sa ponoriť. Začneme budovaním kódu na miestnom stroji a začneme bez vytvorenia webovej stránky pripojenej k internetu. Je to bezpečnejšie začať, nestojí nič a je pre vás ľahké. V závislosti od vášho operačného systému bude dostať sa do škrupiny bash trochu inak. Pre Mac OS odporúčam v tomto bode nainštalovať virtuálny počítač, pretože získate najväčšiu kompatibilitu s virtuálnym počítačom. Rôzni poskytovatelia, ako napríklad VirtualBox a Pararells, môžu pre vás spustiť virtuálny počítač, aj keď je tiež možné nainštalovať Ubuntu priamo na stroj, ak uprednostňujete použitie natívneho prostredia, ktoré sa odporúča, aby ste vytvorili rýchly a efektívny zážitok. Ak používate Linux alebo Windows, ktoré odporúčam, malo by byť celkom ľahké vytvoriť projekt. Otvorte svoj terminál, upravte veľkosť tak, ako sa považujete za vhodné, a začnite nasledovať krok 2. Ak používate Windows, postupujte podľa kroku 1.
Krok 1: - Iba používatelia systému Windows V systéme Windows Otvorte príkazový riadok ako administrátor a napíšte wsl - inštalujte
Krok 2: - Pokračujte tu alebo preskočte krok 1 sem, ak nepoužívate Windows V otvorenom termináli (v závislosti od vášho OS, nazývaného Ubuntu v systéme Windows, terminál v Mac alebo Linux alebo podobné meno), začnite vytvorením projektu. Robíme to s príkazom MKDIR, ktorý vytvára adresár. Ak potrebujete vytvoriť adresár na uloženie vášho projektu, ktorý sa odporúča, použite príkaz CD na zmenu v adresári a a a
CD/PATH/TO/DIRECTORY - Cesta sú priečinky (súbory), ktoré predchádzajú vášmu cieľovému adresáru, vaša predvolená cesta je ~ alebo/Home/Užívateľské meno (kde je používateľské meno vaše používateľské meno). Ak sa chcete zmeniť na predvolený adresár, zadajte CD alebo CD ~ Príklad Mkdir - Nahraďte „príklad" názvom adresára
Teraz máte pre svoj projekt pracovný adresár. Keďže je také dôležité, aby ste tento adresár uložili v prípade, že potrebujete prepnúť na iný počítač alebo nasadiť kód, ktorý píšete, aby bol pripravený na web, vytvoríme skript na zálohovanie vášho adresára v nasledujúcich niekoľkých krokoch. Vytvorenie skriptu však vyžaduje trochu kódu a kód musí byť automatizovaný tak, aby bol čo najužitočnejší. Zostavme teda skript na vytvorenie skriptov ako prvé. Začnime vytvorením skriptu a urobíme ho spustiteľným. Použijeme sudo, chmod a dotkneme sa na to a zavoláme skript „ascript".
sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Teraz sme vytvorili skript, urobili ho spustiteľným a sme pripravení ho upraviť. Nano je textový editor, ktorý vám umožní upraviť text bez kliknutia, čo je oveľa jednoduchšie ako použitie grafického používateľského rozhrania. Ak chcete upraviť súbor pomocou Nano, použite Nano a potom cestu k súboru. Ak chcete vytvoriť skript, ktorý vytvára scenár, je to celkom podobné výrobe nášho scenára na prvom mieste. Použijeme rovnaký kód ako uvedené vyššie a nahradíme názov skriptu „ascript" parametrom argumentu, $ 1. To nám umožňuje zavolať skript písaním Simply Sudo Ascript Newscript, kedy môžeme vytvoriť akýkoľvek nový skript nahradením „Newscript" názvom vášho skriptu. Kód v Nano by mal vyzerať takto:
sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
A aby sme zatvorili Nano, dokážeme zadržať ovládací kľúč a stlačením X, potom Y, aby sme označili, že ukladáme súbor, a stlačte návrat. Teraz namiesto zadania týchto troch príkazov na úpravu skriptu budeme schopní zadať sudo ascript, aby sme znova upravili skript. Toto funguje! A akýkoľvek nový skript je možné ľahko spustiť tak, že ho zavoláte do škrupiny. Uložme našu prácu teraz: Napíšte si záložný skript, aby sme uložili náš nový skript a potom ho zálohovali v našom projektovom adresári a zálohovali záložný skript.
sudo ascript backup
Teraz v Nano:
sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Kde/cesta/k/adresár je cesta k projektu, ktorý ste vytvorili pomocou MKDIR. Neskôr sa naučíme, ako skopírovať opakované cesty, ako je táto, slučkou a zoznamom, ktorý je menej kódu, ale zatiaľ to zachovajme jednoduché a máme niekoľko riadkov. Ak chcete spustiť tento skript a zálohovať svoj kód, uložte súbor v Nano pomocou Control+x, y a vráťte sa a zadajte nižšie do shell
backup
Ak ste pri čítaní tejto knihy a nasledovali v škrupine, ak sa vôbec zobrazí heslo, zadajte správne heslo svojho používateľa, budete mať tri pokusy, kým sa budete musieť príkaz opätovne spustiť. Môžete použiť šípky nahor a nadol na opakovanie príkazov a upraviť ich, ak budete potrebovať čokoľvek dvakrát. Jednoducho stlačením nahor a nadol vyberte príkaz pred úpravou príkazu s pravou, ľavou šípkou a odstránením klávesu, ako aj klávesom a jeho spustením s návratom.
Gratulujeme! Podarilo sa vám vytvoriť úžasný záložný skript, ktorý vo vašom pracovnom adresári zálohuje dva dôležité skripty shellu. Keď sa projekt zväčšuje, by sme sa mohli pohybovať neskôr, ale zatiaľ to funguje. Prejdime na zálohovanie v cloude, použijeme na to GitHub (aj keď existuje mnoho ďalších riešení GIT na zálohovanie, sú to všetko približne rovnaké.) Git je softvér na ovládacie prvky Verise, ktorý vám umožňuje zálohovať úpravy vášho softvéru, keď ich urobíte na server, a zároveň vám umožní sťahovať celé kópie softvéru za heslom alebo kľúčom. Je nápomocný pri ukladaní vášho softvéru, najmä keď sa migrujeme do zabezpečených inštancií Linuxu, ktoré sa niekedy zlomia, keď zlyhá jeden riadok kódu, a ponechá vás uzamknutý, zatiaľ čo váš kód nemusí byť zálohovaný, ak nemáte šancu ho automaticky podporovať, čo sa budeme zaoberať.
Ak v tomto bode ešte nepoužívate virtuálny počítač Ubuntu, v tomto bode odporúčam pomocou virtuálneho počítača Ubuntu, pretože pri inštalácii všetkých potrebných balíkov je váš život uľahčený pri inštalácii všetkých potrebných balíkov na vytvorenie pracovnej webovej stránky a predformných operácií hlbokého vzdelávania v počítači. V blízkej budúcnosti presunieme kód na webový server, ale chceme sa ubezpečiť, že za našim webovým serverom, ktoré sú odolné voči phishingu, existuje aspoň niekoľko vrstiev bezpečnosti, a aby sme to mohli urobiť. Ak stále chcete používať Mac OS, ste vítaní pri hľadaní a nainštalovaní potrebných balíkov online, ale pre každý balík sa nemusia vyskytnúť alternatívy pre každý balík, ktorý sa týka tejto knihy alebo série.
Pridme niekoľko príkazov, aby sme sa zaviazali našej práci so záložným skriptom spustením zálohovania príkazu sudo ascript.
# …
Opäť ovláda X, aby ste uložili.
Teraz musíme pre tento projekt urobiť jednorazovú konfiguráciu. Pretože to bude čoskoro projektom GIT, nemusíme písať každý príkaz zakaždým, keď nasadíme z úložiska GIT, ale keď napíšeme naše skripty nasadenia, dostaneme to na zavesenie. Ak chcete začať, uistite sa, že sme v správnom adresári a inicializujeme úložisko GIT a generujeme klávesy SSH.
cd /path/to/directory
git init
git branch -m master
ssh-keygen
Po zadaní SSH-Keygen by sa nový kľúč mal uložiť do priečinka v domácnosti pod priečinkom s názvom .ssh. Nazýva sa ID_RSA.Pub. Nájdeme tento kľúč a skopírujte ho. Vidieť to,
cd ~
cat .ssh/id_rsa.pub
Pred pridaním klávesu SSH do svojho účtu skopírujte text, ktorý je vrátený posledným príkazom, a vytvorte si účet s poskytovateľom GIT (ideálne GitHub). Akonáhle budete mať účet, kliknite na ponuku Pravá horná ponuka a zadajte nastavenia, pred pridaním klávesu SSH do klávesov SSH a GPG pod prístupom v ponuke. Pred ušetrením a návratom do spoločnosti GitHub a vytvorte nové úložisko, aby ste si vytvorili nové úložisko, vyberte pridať kľúč SSH a pridajte si svoje vložením a dajte mu názov. Je to podobné pre ostatných poskytovateľov GIT, budete si musieť prečítať ich dokumentáciu. V novej konfigurácii úložiska uveďte svojmu úložiska opisný názov a rozhodnite sa, či ho chcete zverejniť, a nezabudnite zatiaľ nakonfigurovať žiadne súbory na zaradenie. Po vytvorení úložiska skopírujte klon s URL SSH a vložte ho do nasledujúceho príkazu.
git remote add git://… (your remote URL)
Teraz sa môžete presunúť späť do svojho úložiska pomocou CD, budete s tým oboznámení. Vyskúšajte svoj záložný skript teraz so zálohou
Skvelé! Teraz môžeme skutočne získať kódovanie. Nainštalujme Django teraz, keď máme dobrý prehľad o bash a git. Django nám umožní automaticky zálohovať náš softvér, Bash to môže urobiť tiež, ale Django by mal mať jednoduchšiu bezpečnejšiu implementáciu (dá sa ľahšie deaktivovať a nakonfigurovať).
Na inštaláciu softvéru v Ubuntu použijeme príkaz sudo apt-get. Najprv aktualizujte a aktualizujte softvér, ktorý sme už mali. To sa dá urobiť pomocou sudo apt-get aktualizácie a aktualizácia sudo apt-get -y. Ďalej nainštalujme Python a naše virtuálne prostredie, domov nášho kódu, s nasledujúcim príkazom: sudo apt-get Inštalujte python-is-python3 python3-vevenv
To je všetko, čo potrebujete, aby ste sa dostali s Django, pokiaľ ide o inštaláciu softvéru v inštancii Ubuntu. Pre Windows a Linux by to malo byť pomerne jednoduché, ale pre Mac možno budete chcieť nainštalovať virtuálny počítač a Linux pomocou bezplatného alebo plateného virtuálneho prostredia, ako je Desktop VirtualBox alebo Pararells, a obnoviť vyššie uvedené kroky s cieľom nastaviť prostredie Ubuntu. Ubuntu je v tomto prípade kritický, pretože je to softvér, ktorý prevádzkujú webové stránky, a umožňuje im hostiteľom webových stránok so všetkým vyššie uvedeným softvérom.
Pohybajme sa do Django.
V našom adresári opäť s CD:
python -m venv venv # Vytvára virtuálne prostredie, v ktorom sa ukladá kód
source venv/bin/activate # Aktivuje virtuálne prostredie
django-admin startproject mysite . # Kde je MySite projekt, ktorý začína vo svojom súčasnom adresári.
Django nás práve začína, pretože Django hosťuje webový server a robí všetko, čo potrebujeme, aby sme dostali základnú miestnu webovú stránku do prevádzky. Teraz, keď máme nainštalovaný Django, trochu upravíme nastavenia, aby to fungovalo, ako to potrebujeme. Najprv vytvorme novú aplikáciu
python manage.py startapp feed
Všimnite si, že prvá aplikácia sa nazýva Feed. Aplikácia by sa mala nazývať čokoľvek, čo sa vám páči, a my vytvoríme nové aplikácie, ale názov každej aplikácie musí byť konzistentný zakaždým, keď sa aplikácia odkazuje v kóde. Ak chcete pridať novú aplikáciu, vždy upravíme Settings.py v druhom adresári, ktorý bola vytvorená aplikácia pomenovaná v aplikácii StartProject, ďalej. Používanie nano,
nano app/settings.py
V nastaveniach nájdete inštalované_Apps a rozdeľte [] na 3 riadky. Pomocou štyroch priestorov na prázdnej stredovej linke pridajte „informačný kanál" alebo názov vašej aplikácie. V tejto časti nastavení.py by mala vyzerať:
INSTALLED_APPS = [
'feed',
]
Predtým, ako zabudneme, otestujte, či Django pracuje. Pomocou príkazu python manage.py runserver 0.0.0.0:8000 môžeme spustiť server a potom navigovať vo webovom prehliadači vo počítači s kódom spustením kódu na http: // localhost: 8000 a pozrite si príklad webovej stránky (to funguje!) Vykonajte server c, rovnaký ako akýkoľvek iný príkaz.
Teraz sa poďme písať do pythonového kódu. Django má tri hlavné komponenty, z ktorých všetky prevádzkujú úplne kód. Komponenty sa nazývajú model, pohľad a šablóna a každý je na vyššej a nižšej úrovni pred doručením webovej stránky používateľovi.
Model je kód, ktorý ukladá informácie do databázy na vyhľadávanie, triedenie a vykreslenie.
Pohľad rozhodne, ako sa model vykresľuje, manipuluje a upravuje, takmer každý pohľad použije model priamo.
Šablóna je kód HTML s niektorými ďalšími zvonmi a píšťalkami nazývanými jazyk šablón. Šablóna je vykreslená podľa názoru, kde je vyplnená pythónovým kódom a kontextom, ako sú modely a informácie (podľa zobrazenia reťazce a celé čísla).
Django má aj ďalšie komponenty, vrátane, ale nielen na:
Nastavenia, ktoré konfigurujú aplikáciu, ako sme diskutovali.
URL, ktoré sú vzormi, ktoré používateľ riadi, aby získal prístup k konkrétnym častiam webovej aplikácie.
Formuláre, ktoré definujú, ako sa informácie, ktoré sa odosielajú na server, spracovávajú a vykresľujú do databázy, ako aj používateľovi. Toto sú základy informácií o spracovaní na strane servera a môžu akceptovať akýkoľvek typ informácií, ktoré počítač ukladá, najmä textové reťazce, čísla a true/false booleans (zvyčajne začiarkavacie políčka).
Šablóny, ktoré sú kódom HTML a jazykom šablón a preklenujú medzeru medzi Pythonom a HTML, čo znamená, že informácie Pythonu môžu byť doručené ako HTML kód, ku ktorému má ktokoľvek prístup a môže zabezpečiť webovú stránku s obmedzeným prístupom, zatiaľ čo sprístupňuje kód Pythonu k webu a je užitočný pre rôzne účely na vzdialenom zariadení, ktoré nemusí byť blízko serveru.
Statické súbory, ktoré sú zvyčajne JavaScript a jeho knižnice, ktoré server slúži a sú prepojené so šablónou.
Mediálne súbory, ktoré server slúži alebo je externe hostený alebo práve napísaný na server pred spracovaním a zverejnením na iným serverom (vedro) na hosting.
Middleware, ktorý je kusmi kódu, ktorý sa prevádzkuje v rovnakom čase ako každý pohľad a do pohľadu sa považuje za „zahrnuté".
Kontextové procesory, ktoré spracúvajú kontext každého pohľadu a používajú sa na pridanie dodatočného kontextu.
Testy, ktoré potvrdzujú, že užívateľ alebo žiadosť prenáša určité požiadavky pred vykreslením zobrazenia.
Spotrebitelia, ktorí určujú, ako Websockets manipuluje a reaguje na komunikáciu.
Správca, ktorý sa používa na registráciu modelov, aby sa s nimi mohli podrobne manipulovať na stránke administrátorov Django, kde sa databáza môže spravovať prostredníctvom grafického rozhrania.
Celer, ktorý definuje asynchrónne úlohy Časti kódu Django, sa môžu začať spúšťať skôr, ako okamžite prejde k ďalšej úlohe alebo riadku kódu.
Django môže mať mnoho ďalších komponentov, o ktorých tu budeme podrobne diskutovať. Existuje veľa spôsobov, ako zvýšiť funkciu Django, pridáva sa WebSockets, ktoré sú rýchle, efektívne komunikačné kanály, zeler, ktoré vykonávajú asynchrónne úlohy, a množstvo ďalších kusov softvéru na rozšírenie Django, najmä vo funkciách zobrazenia, kde sa vykonáva väčšina kódu. Funkcie Zobraziť sú kľúčové, pretože zvyčajne deklarujú každý kód, ktorý je špecifický pre konkrétny vzor URL alebo časť servera.
Najprv preskúmajme funkcie zobrazenia. Funkcie Zobraziť začínajúce importom označujúcim kód, ktorý sa použije v zobrazení, a sú definované pomocou pravidelných definícií funkcií alebo tried. Najjednoduchšie pohľady sú definované definíciou funkcie Def a vrátia HTTPResponse so základnou šablónou. Začnime definovaním základného pohľadu na vrátenie textu „ahoj svet". Pamätajte, že zakaždým, keď pridáte kód po príkaze, ako je def, ak, zatiaľ čo, pre atď., Budete musieť pridať 4 priestory pre každú z predchádzajúcej definície, ktoré by ste chceli uplatniť na svoju funkciu. Čoskoro sa dostaneme k tomu, čo každý z nich znamená.
Z adresára našej stránky upravte súbor Feeds.py pomocou Nano a pridajte nasledujúce riadky na koniec súboru.
from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
Django's HttpResponse reaguje textovým reťazcom, označeným otvorením a zatváraním ". Zakaždým, keď odovzdáte informácie do funkcie alebo triedy, ako je požiadavka alebo reťazec, budete musieť používať zátvorky (, otváranie a zatváranie).
Toto ešte nie je všetko, čo musíme vidieť náš pohľad. Samozrejme sme nepovedali serveru, kde je pohľad presne, stále musíme definovať cestu, ktorou by mal pohľad vykresliť. Začnime tým, že definujeme základnú cestu v aplikácii/urls.py a my sa dostaneme do skupín cesty neskôr.
V aplikácii/urls.py pridajte riadok po príkazoch importu po začiatku importu zobrazenia, ktoré sme práve vytvorili.
from feed import views as feed_views
Teraz definujeme vzor pohľadu. Vzory pohľadu majú tri komponenty, komponent cesty, ktorý hovorí serveru, kde je zobrazený v serveri (cesta URL, ktorú užívateľ zadá do navigačnej lišty, aby vstúpil na webovú stránku), do zobrazenia komponentu, kde je určený pohľad, a priateľské meno pre zobrazenie, takže je ľahké načítať svoj vzor pri práci so šablónou, najmä preto, aby sa mene zmenil a aktualizoval, ak je to potrebné, aby urobil miesto pre ďalšie zobrazenie alebo prenieslo viac logického mena. Má zmysel robiť veci týmto spôsobom a byť flexibilný, pretože vaša kódová základňa bude stále sa meniacim prostredím, ktoré si vyžaduje flexibilitu a improvizáciu, aby bolo cenné a ľahko s nimi pracovať. Tu bude váš pohľad vyzerať. Vzor pohľadu je definovaný s tromi zložkami opísanými vyššie a funkciou nazývanou cesta. Vaše vzory URL sú zoznamom, preto nezabudnite vždy ukončiť každú položku v nich čiarkou, pretože to oddeľuje každú z nich. Každá položka by mala ísť aj na novú linku, opäť so štyrmi priestormi pred ňou, rovnako ako aplikácia v Settings.py. Prvú zložku zobrazenia definujeme pomocou prázdnej funkcie reťazca, aby sme vytvorili zobrazenie, ktoré sa beží v koreňovom adresári webového servera. Vaše adresy URLS.py by teraz mali vyzerať takto:
from feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
Toto je základ pre vytvorenie webovej stránky s Django, ktorý je úplne statický. Aby sme vytvorili dynamickejšiu webovú stránku, na ktorej môžeme začať informácie o ukladaní do vyrovnávacej pamäte, ako sú obrázky, videá, zvuk a ďalšie, budeme musieť používať modely, ktoré preskúmame ďalej. Zatiaľ si skontrolujte náš kód a spustíme server. Ak chcete skontrolovať chyby kódu, spustite:
python manage.py check
Ak existujú nejaké chybové správy, mali by ste starostlivo skontrolovať zmeny, ktoré ste urobili vo svojej aplikácii, a zistiť, či existuje niečo, čo je potrebné opraviť, napríklad cudzí alebo chýbajúci priestor, ďalší znak, nezahrnutý reťazec, akýkoľvek preklep, akýkoľvek náhodne vymazaný znak alebo čokoľvek iné. Čítanie chybového hlásenia (ak ho máte), mali by ste byť schopní vidieť cestu k súboru, ktorý ste vytvorili alebo upravili spolu s číslom riadku, takže sa pozrite do tohto súboru a riadku a zistite, či dokážete opraviť čokoľvek, čo tam je. Ak ste problém vyriešili, spustite vyššie uvedený príkaz znova. Keď je váš softvér pripravený na spustenie a funguje, uvidíte výstup „Systémová kontrola identifikovala žiadne problémy". Teraz ste pripravení ísť. Spustite server pomocou:
python manage.py runserver 0.0.0.0:8000
Teraz otvorte webový prehliadač a prejdite na http: // localhost: 8000. Vo vašom zobrazení by ste mali vidieť text vrátený v zátvorkách a citácie funkcie HTTPResponse. Toto je len základný príklad, ale ak ste sa dostali tak ďaleko, rozumiete základom toho, ako fungujú Linux, Bash, Python a Django. Poďme hlbšie do niektorých modelovania databázy a preskúmajte silu triedy Python pri ukladaní informácií. Potom sa začneme zaoberať HTML a CSS skôr, ako vytvoríme naše stránky plne uvedené, flexibilné a bezpečné pomocou JavaScriptu a strojového učenia.
Triedy sú uložené v modelovej aplikácii. Pomocou nano, upravte aplikáciu/modely.py a pridajte novú triedu. Trieda je definovaná s definíciou triedy a je odovzdaná nadriadenou triedou, z ktorej zdedí, v tomto prípade modely.model. Názov triedy prichádza po definícii triedy a po definícii triedy A: (Colon) sa použije skôr, ako sú uvedené atribúty a definície funkcií spojené s triedou nižšie. Naša trieda potrebuje ID, ktoré môžeme použiť na jeho získanie a udržanie jedinečného, a na ukladanie niektorých informácií potrebuje aj textové pole. Neskôr môžeme pridať časovú pečiatku, súbory, booleany (pravdivé alebo falošné definície, ktoré môžu pomôcť nášmu kódu robiť rozhodnutia o tom, čo robiť s modelom, a dá sa použiť na jeho zoradenie), inštancia na priviazanie modelu s používateľom prihláseným na server a ďalšie. Rozbaľme nižšie uvedený kód:
from django.db import models # Import, ktorý sa používa na definovanie našej triedy a jej atribúty
class Post(models.Model): # Definícia samotnej triedy
id = models.AutoField(primary_key=True) # ID nášho modelu, automaticky vygenerovaný kľúč, ktorý umožní dotazovať model, udržať ho jedinečný a je užitočný, keď potrebujeme interakciu s modelom po vytvorení.
text = models.TextField(default='') # Atribút náš triedny ukladá, v tomto prípade nejaký text, ktorý neplatí na prázdny reťazec.
Zatvorte a uložte súbor tak, ako sme to urobili predtým, aby sme skončili.
Existuje mnoho ďalších polí a možností, ktoré preskúmame, keď aktualizujeme túto triedu, ako sa vyvíja naša aplikácia, ale toto je základné potreby vytvorenia aplikácie na zverejnenie nejakého textu. Tento model však nebude fungovať sám. Ako už bolo opísané, budeme potrebovať vlastný pohľad a vlastný vzor URL, aby tento model fungoval, a budeme tiež potrebovať formu spolu so šablónou. Preskúmajme najskôr formulár.
Ak chcete definovať formulár, upravte aplikáciu/forms.py pomocou nano a pridajte nasledujúce riadky. Budeme potrebovať dva dovozy, našu triedu foriem, ako aj model, ktorý sme vytvorili (Feed.models.post), definíciu triedy podobnú modelu a pole spolu s podtrieda nazývanou meta, ktorá definuje model interaguje formulár. Formulár môže mať aj inicializačnú funkciu, ktorá ju nastavuje na základe informácií v žiadosti, modeli alebo inak, preskúmame to neskôr.
Modelové formuláre sú také užitočné, pretože môžu vytvoriť model alebo tiež upraviť model, takže ich použijeme pre obidve. Definujme jeden vo formách.py nižšie.
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',)
Toto je základy toho, ako vyzerá forma a model. Tento modelový formulár sa dá použiť na vytvorenie alebo úpravu príspevku, ktorý zmení text, ktorý obsahuje. Pozrieme sa na integráciu tohto formulára do ďalšieho pohľadu. Najprv urobme migráciu a migrujte databázu, aby náš kód mohol pri spustení interagovať s modelom. Ak to chcete urobiť, spustite nasledujúce príkazy:
python manage.py makemigrations
python manage.py migrate
Vykonanie bude trvať minútu, ale akonáhle sa tak stane, umožní vám to získať prístup k modelu v zobrazeniach, middleware alebo kdekoľvek inde v softvéri. Pokračujme tým, že urobíme názor, kde vidíme náš model. Upravte feed/views.py a pridajte nasledujúci kód, ako je uvedené. Po znaku # nebudete musieť nič pridať, tento kód sú komentáre, ktoré sa používajú na označenie informácií o kóde. Začneme importovaním nášho modelu v zobrazeniach a jeho pridaním do kontextu, v ktorom ho môžeme vykresliť v šablóne ako zoznam zobrazenia. Ďalej pridáme šablónu, v ktorej môžeme vykresliť formulár a model pomocou tlačidla, aby sme vytvorili nový objekt založený na modeli a zverejnil ju na server. Znie to komplikovane, takže si to vezmeme krok za krokom. Predtým, ako dokončíme zobrazenie, vytvorme šablónu, ktorá iba vykresľuje model a uistite sa, že ho uvidíme vytvorením nového príspevku v škrupine. Takto by tento pohľad mal vyzerať:
posts = Post.objects.all() # Dopyt všetky príspevky doteraz v databáze
To všetko vyzerá celkom jednoducho, až kým sa nedostaneme na dno. Render, hodnota vrátená funkciou namiesto v odpovedi HTTP, ako je predchádzajúci príklad, vždy berie požiadavku ako svoj prvý vstup, prijíma kontext (v tomto prípade príspevky v databáze), ktorý je teraz možné vykresliť v templáte, a vráti template definovanú v funkcii. Šablóna bude dokumentom HTML s trochou jazyka s názvom Jinja2, ktorý vykresľuje informácie Python do HTML.
Ak chcete začať vytvárať šablóny, vytvorte dva adresáre v krmive.
mkdir feed/templates
mkdir feed/templates/feed
Ďalej upravte šablónu vo vyššie uvedenom adresári, informačný podvod/šablóny/informačný kanál a pridajte kód pre tento príklad. Pozrime sa na šablónu pre tento príklad.
Toto je veľmi jednoduchá šablóna. Definuje otváranie a zatváranie značiek HTML, značku typu dokumentu, značku tela s názvom legendy, značkou zlomu, ktorá pridáva malú čiaru cez obrazovku a pre slučku, ktorá vykresľuje každý príspevok v zozname príspevkov ako odseku v šablóne. To je všetko, čo je potrebné na vykreslenie príspevkov, ale v databáze ešte nie sú žiadne. Vytvorme si niečo s škrupinou. Môžeme spustiť škrupinu pomocou manage.py
python manage.py shell
Teraz importujme náš post model
from feed.models import Post
Ďalej vytvoríme jednoduchý príspevok so reťazcom a opustíme škrupinu. Reťazec môže byť čokoľvek, pokiaľ je to platný text.
Post.objects.create(text='hello world')
exit()
Nakoniec budeme musieť do nášho krmiva pridať vzor URL. Pretože naša informačná aplikácia bude používať viac adries URL a my chceme udržiavať veľkosť súborov malé, vytvoríme v našej aplikácii na informačné kanály miestne adresy URLS.Py, ktorá vyzerá takto:
from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
Budeme tiež musieť upraviť adresy URLS.Py v základnej aplikácii, čokoľvek sme sa rozhodli nazvať, toto bol prvý adresár, ktorý sme vytvorili. Upraviť aplikáciu/app.py a pridajte nasledujúce vzory URL
from django.urls import include # na vrchu
# ... Predchádzajúci kód tu
Teraz, keď spustíme server s Python Manage.py Runserver, uvidíme stránku, ktorú sme vytvorili, pretože máme model, zobrazenie a šablónu, ako aj vzor URL, spolu s položkami v databáze. Ďalej implementujeme formulár, ktorý sme vytvorili, a začnite vytvárať vlastné príspevky. Ale predtým, ako napíšeme príliš veľa kódu, urobme zálohu pomocou skriptu, ktorý sme napísali skôr, zálohovanie. Spustite tento skript v škrupine, počkajte pár okamihov a všetok kód bude zálohovaný až do nášho úložiska GIT.
backup
Implementácia formulára je relatívne jednoduchá. Importujeme náš formulár, do zobrazenia pridáme obslužný program Požiadavky a pred presmerovaním do toho istého zobrazenia uložíme príspevok do databázy. Môžeme použiť funkciu presmerovania, ktorú sme už importovali, a ďalšia funkcia nazývaná reverzná, aby sa získala adresa URL pre zobrazenie vzoru. Budeme to dotaviť pomocou reťazca „Feed: Feed", pretože menný priestor zahrnutého vzoru je krmivo a pohľad sa tiež nazýva krmivo.
posts = Post.objects.all() # Dopyt všetky príspevky doteraz v databáze
if request.method == 'POST': # Spracovať žiadosť o príspevok
form = PostForm(request.POST) # Vytvorte inštanciu formulára a uložte do neho údaje
if form.is_valid(): # Overiť formulár
form.save() # Uložte nový objekt
return redirect(reverse('feed:feed')) # Presmerujte na tú istú adresu URL pomocou žiadosti o get
'form': PostForm(), # Nezabudnite odovzdať formulár do kontextu, aby sme ho mohli vykresliť.
Teraz budeme musieť aktualizovať šablónu, aby sme zohľadnili nový formulár. Môžeme to urobiť pomocou
Poďme to rozobrať. Existuje nová trieda formulára, token, samotný formulár a tlačidlo Odoslať. Celkom jednoduché, ale keď sa na to pozrieme, možno by sme chceli, aby to vyzeralo lepšie. Funguje to, môžeme uverejňovať nové príspevky s formulárom a teraz sa ukladajú do databázy. Deje sa tu niekoľko vecí. Používame značky HTML na vyhlásenie, že dokument je dokument HTML, na vykreslenie formulára používame značku šablón ({ %}) na vykreslenie tokenu pre formulár a iný, {{…}}. Máme tiež slučku na vykreslenie textu pomocou blokových značiek a značky šablóny. Blokové značky sú skutočne dôležité, pretože dokážeme definovať, ako sú sekcie šablóny s nimi vykreslené, a značky šablón sú základom toho, ako vložíme premenné do nášho kódu.
Teraz musíme, aby naša aplikácia vyzerala lepšie, pretože zatiaľ to vyzerá naozaj základne. Môžeme to urobiť pomocou CSS, buď inline alebo v triedach spojených s každým objektom v dokumente. CSS je naozaj pekná, pretože na stránke hovorí všetko, ako by mala vyzerať, a môže to vyzerať naozaj dobre. Existuje niekoľko knižníc, ktoré to dokážu, ale môj osobný chod je bootstrap.
Bootstrap si môžete stiahnuť z ich webových stránok,getbootstrap.com/. Akonáhle je tam, stlačte tlačidlo a prečítajte si inštalačné dokumenty a skopírujte kód zo časti CDN. Tento kód budete potrebovať v hornej časti dokumentu HTML, v značke s názvom Head. Poďme tiež ďalej a vytvorme základnú šablónu, aby sme tieto odkazy v každej šablóne nemuseli obnovovať.
Vytvorte nový adresár s názvom šablóny so šablónami MKDIR a potom upravte šablóny/base.html.
Malo by to vyzerať takto:
Nezabudnite skopírovať súbory CSS a JavaScript, .css a .js, pretože budeme potrebovať JavaScript, aby sa naše stránky v budúcnosti stali funkčnými.
Teraz sa vráťme k bash škrupine a spustíme rýchly príkaz. Pamätajte, že ak niekedy potrebujete prístup do virtuálneho prostredia, typ zdroja Venv/Bin/Activate. To vám umožní lokálne nainštalovať balíčky Python spôsobom, ktorý im umožní prístup Django. Aby sme dali naše formuláre generované triedami Django Bootstrap, použijeme balík Python s názvom chrumkavé formuláre. Môžeme si to stiahnuť nasledujúcim príkazom
pip install django-crispy-forms
Po inštalácii ho pridajte do nastavení.py
# … Predchádzajúci kód tu
Teraz späť v našej šablóne krmiva môžeme niektoré veci odstrániť. Odstráňte začiatok a koniec dokumentu a nahradíme ho dedičstvom z našej základnej šablóny pomocou rozšírených a definície bloku. Do formulára tiež pridáme import filtra šablóny s zaťažením a filtrom šablóny. Nakoniec pridáme do tlačidla na tlačidlo na tlačidlo zavádzačku, aby vyzerala skôr ako tlačidlo. To by malo vyzerať takto:
Krásne! To je už dosť kódu. Ďalej by sme to mali vyskúšať a uistiť sa, že vidíme, že všetko vyzerá pekne, a tiež sa uistite, že všetko funguje správne. Spustite server podľa predchádzajúcich pokynov a uistite sa, že stránka vyzerá a funguje v poriadku. Skvelá práca! Ste pripravení prejsť k ďalšiemu kroku, v ktorom pridáme funkcie prihlásenia používateľa pomocou podobných URL, formulárov, zobrazení a šablón. Základná šablóna je dôležitá a my ju budeme naďalej upravovať a vykonávať zmeny podľa potreby, ale zatiaľ sa zamerajme na to, aby sa naše stránky stali bezpečnejšími, umožnením používateľom prihlasovať sa s používateľským menom a prístupovým kódom a nakoniec ešte dôležitejšie informácie, ktoré vám pomôžu udržať vašu aplikáciu v bezpečí a váš vlastný účet prístupný iba vy.
Aby sme to dosiahli, musíme použiť užívateľský model zabudovaný do Django. Užívateľský model je databázový model, napríklad náš príspevok, ktorý je možné vykresliť na zaznamenanie používateľa na webovú stránku. V budúcnosti, predtým, ako nasadíme stránku na internet, rozšírime tento model s ostatnými modelmi, ktoré sa mu pripisujú, a vytvoríme ďalšie bezpečnostné opatrenia pre prihlásenie, ktoré sú odolné voči phishingu. Začneme pomocou niektorých zabudovaných prihlasovacích formulárov, ktoré poskytuje Django. Najprv vytvorme novú aplikáciu, ktorú použijeme na vykreslenie šablón a zobrazení pre základnú prihlasovaciu stránku. Vytvoríme tiež ďalšie aplikácie, ktoré reprezentujú výzvy pokračujúceho prihlásenia, aby sme zaistili aplikáciu, vrátane kĺbového kódu, rozpoznávania tváre, blízkej poľnej komunikácie, externých zariadení, autentifikácie viacerých faktorov a rozpoznávania odtlačkov prstov.
Už sme hovorili o spustení aplikácie. Z nášho adresára, vo virtuálnom prostredí, prejdite manage.py tieto argumenty
python manage.py startapp users
Teraz by sme mali mať adresár pre novú aplikáciu. Začnime vytvorením zobrazenia v tomto adresári, ktorý zodpovedá prihláseniu používateľa. Django má zabudované zobrazenia pre prihlásenia používateľov, ale tieto nebudú pre nás vhodné, pretože potrebujeme vlastný pohľad, ktorý sa najlepšie vykonáva s definíciou.
V tomto zobrazení začneme kontrolou žiadosti o príspevok, odovzdať žiadosť.Post do prihlasovacieho tvaru importovaného z Django, overiť používateľský účet a prihlásiť sa používateľom pred ich presmerovaním do našej aplikácie na informačné kanály.
V používateľoch/zobrazeniach. Pridajte nasledujúci kód
username = request.POST['username'] # Získajte používateľské meno a heslo z žiadosti o príspevok
password = request.POST['password'] # Overiť používateľa
To je všetko, čo potrebujete na základné prihlasovacie zobrazenie. Teraz vytvorme formulár pre pohľad rozšírením základnej šablóny. Začneme vytvorením nového adresára pre šablóny v priečinku používateľov.
mkdir users/templates
mkdir users/templates/users
Teraz by sme mali byť schopní upraviť používateľov/šablóny/používateľov/login.html. Keď sme pri tom, vytvoríme šablónu, ktorá umožňuje používateľovi zaregistrovať sa.
nano users/templates/users/login.html
Teraz v šablóne,
Toto je základy prihlásenia šablóny. Je to naozaj ako druhá šablóna v štruktúre, ale keď je vykreslená, vyzerá trochu inak. Môžeme skopírovať tento kód na vytvorenie ďalšej veľmi podobnej šablóny s názvom Register.html, kde zmeníme znenie a použijeme nový formulár, ktorý zostavujeme. Urobme šablónu najskôr. Upraviť používateľov/šablóny/používateľov/register.html a pridajte nasledujúci kód:
Teraz si vytvorime formulár pre registráciu našich používateľov a zakrúžme sa späť k výhľadom skôr, ako aktualizujeme prihlasovanie našich používateľov pomocou modelu. Túto formu urobíme základným, ale v budúcnosti začleňujeme ďalšie podrobnosti a bezpečnostné funkcie, ako sú dohody a Captcha. Upravte formuláre s používateľmi Nano/forms.py a pridajte nasledujúci 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 tu máme inú formu, ktorá funguje jednoducho jednoducho. Je to formulár registra používateľov s užívateľským menom, e -mailom a heslom, ako aj poľa s potvrdením hesla. Upozorňujeme, že tento formulár nerozširuje bežnú triedu formy.Form, je to modelový formulár, ktorý znamená, že má meta. Jedno pole je definované rovnaké a meta triedy definuje model, že formulár zodpovedá zvyškom informácií, ktoré budú napísané do formulára. Väčšina z toho už existuje v Django vstavanom v UserCreationForm, takže to použijeme ako základ pre triedu (odovzdané v zátvorkách).
Ďalej preskúmame pohľad na registráciu používateľa, teraz, keď máme formulár a šablónu. Toto je modelnica, rovnako ako tá v novom zobrazení príspevku. Upraviť používateľov/zobrazenia.py a pridajte nasledujúci kód:
# ... dovoz
To je všetko, čo potrebujeme na registráciu používateľa, ale mali by sme mať viac informácií. Chceme poznať čas, ktorý sa užívateľ zaregistroval, koľko času bol na webe, niektoré informácie o nich, ako je biografia, časová pásma atď. Aby sme to dosiahli, aktualizujeme modely.py v oboch aplikáciách. Začnime úpravou modelu informačného kanála. Teraz by to malo vyzerať takto:
from django.db import models # ... dovoz
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Pridajte do tohto riadku
Venujte pozornosť druhému riadku, ktorý bol pridaný do súboru. Jedná sa o cudzí kľúč, ktorý pripisuje každý príspevok jednému používateľovi na príspevok, aby sme sa ubezpečili, že príspevky uložíme na báze používateľov na používateľa a žiadny príspevok nie je možné vykonať bez toho, aby sme ho pripísali používateľovi. Definujeme tento cudzí kľúč s triedou, ktorú predstavuje, argument odstránenia, aby sme zaistili, že príspevky sú odstránené s používateľmi, nulové a prázdne argumenty, aby sme sa ubezpečili, že môžeme používateľa odstrániť, ak je to potrebné, a aby sme sa prispôsobili nedostatku používateľa na príspevkoch, ktoré sme už vytvorili, a súvisiace meno, ktoré môžeme použiť na označenie príspevkov, ktoré užívateľ vytvára. Toto súvisiace meno, na rozdiel od post.Authotor, autor príspevku, nám dáva používateľovi, ktorý uverejnil príspevok sám. Teraz môžeme získať príspevky, ktoré užívateľ vytvoril pomocou používateľa.posts.all () alebo autor.posts.all ().
Teraz urobme naše prihlásenia odolnejšie. Naše stránky už môžeme urobiť oveľa menej zraniteľnými voči phishingu jednoduchým obmedzením obmedzenia, koľkokrát umožníme prihlásenie na stránku, je to celkom ľahké. Začnime tiež ukladať niektoré informácie o každom používateľovi predtým, keď naďalej rozvíjame našu aplikáciu. Úpravy používateľov/modely.py, pridajte nasledujúci kód.
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šimnite si, že tento model je pomerne podobný modelu Post. Máme ďalší import, Timezone, ktorý nám umožní nastaviť predvolené hodnoty na poliach DateTime, a máme tiež znakFeild a textfield ako príspevok. Použitie všetkých týchto časových pečiatok nám pomáha zabezpečiť stránku a porozumieť jej použitiu a textové polia umožňujú vykresliť informácie o každom používateľovi alebo autorovi na webovej stránke. Onetoonefield by mal byť jediným menším úvahou, správa sa presne rovnako ako predchádzajúci, ale iba s jedným na nasledujúci model. Týmto spôsobom má užívateľ iba jeden profil, zatiaľ čo môže mať veľa príspevkov.
Teraz vylepšime naše prihlásenie a zaregistrujte sa zobrazenia, aby ste zohľadnili profil. Najprv upravte používateľov/pohľads.py a zamerajte sa na zobrazenie registra:
# ... dovoz
Profile.objects.create(user=user) # Nezabudnite pridať tento riadok a vytvorte profil pre používateľa
Toto jednoducho vytvorí profil pre používateľa bez vyplnenia ktorejkoľvek z informácií. Teraz sa chceme ubezpečiť, že používateľský účet sa nedá prihlásiť príliš často, alebo aspoň heslá nie je možné vyskúšať príliš často, takže aktualizujte prihlasovacie zobrazenie.
# ... dovoz
if user and user.profile.can_login < timezone.now(): # Upozorňujeme, že teraz skontrolujeme, či sa používateľ môže prihlásiť
else: # Ak prihlásenie nebolo úspešné,
user = User.objects.filter(username=username).first() # Toto je časť, kde aktualizujeme profil používateľov
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Takže sa nemôžu znova prihlásiť na pár sekúnd
Toto je základný základ pre bezpečnosť. Uistite sa, že stránka nie je zraniteľná voči niekomu, kto jednoducho vyskúša každú možnú kombináciu hesiel, alebo dokonca niekoľko z nich súčasne. To nebude frustrujúce pre obyčajného používateľa, ktorý pozná svoj prístupový kód a iba sa prihlási na niekoľko zariadení, ale z aplikácie bude udržiavať početné phishingové roboty. Všimnite si, že sme pridali príkaz IF s premennou, Can_login, ktorý by mal byť čas v minulosti, a aktualizovať ho pri každom neúspešnom prihlásení pomocou rovnakého používateľského mena. Týmto spôsobom nebude škodlivý používateľ schopný uhádnuť heslo nikde blízko. Počet sekúnd v DateTime.Timedelta () je možné aktualizovať tiež a webová stránka bude odolnejšia, ale o niečo menej použiteľná pri viac sekúnd. Odporúčam 15 začať s.
Pamätajte, že sme si vytvorili záložný skript, ktorý zachránil našu prácu, takže poďme ďalej a zálohovať to, čo máme doteraz, aby sme sa uistili, že máme všetko uložené. Spustite príkaz:
sudo backup
Opäť to doteraz ušetrí vašu prácu. Odporúčam prevádzkovať časté zálohy, aby ste ušetrili vašu prácu, a možno budete chcieť automaticky spustiť záložnú úlohu. Môžete to urobiť pomocou UNIX Utility s názvom Cron. Ak chcete aktivovať tento nástroj, spustite nasledujúci príkaz a zadajte svoje heslo:
sudo crontab -e
Ak ste už nevybrali možnosť 1 pre Nano, textový editor, ktorý by ste už mali poznať, a pomocou klávesov so šípkami prejdite do spodnej časti súboru. Pridajte nasledujúci riadok:
0 * * * * sudo backup
Cron používa formát minútu, hodinu, deň v mesiaci, mesiac, deň v týždni, kde A * alebo číslo predstavuje, kedy spustiť príkaz. Použitím 0 na minútu a * pre ostatné možnosti môžeme spustiť príkaz v prvej minúte každej hodiny na začiatku minúty. To nám umožňuje automaticky zálohovať kód. Všetky úlohy Cron pri vykonávaní sudo bežia ako root, takže nebudeme musieť písať heslo každú hodinu.
Ak chcete uľahčiť zálohovanie nášho kódu bez použitia hesla, zakážeme heslo pre náš príkaz zálohovania. Urobíme to vykonaním nasledujúceho príkazu a zadaním hesla:
sudo visudo
Teraz prejdime do spodnej časti súboru a pridajte ďalší riadok:
ALL ALL=NOPASSWD: /bin/backup
To nám umožňuje spustiť príkaz „zálohovanie" ako ktorýkoľvek používateľ, bez hesla. Formát je jednoduchý, stačí predponovať riadok s "all = nopasswd:/bin/" a končiť príkazom, napríklad/bin/záloha, ktorý existuje v/usr/bin/.
Teraz začnime pracovať s e -mailom. E -mail je pre webové stránky skutočne dôležitý, pretože je to spôsob, ako udržať webovú stránku v bezpečí, overiť, že používatelia sú skutoční ľudia a dokonca aj trhové produkty alebo služby zákazníkom. Mnoho ľudí, ktorí navštevujú internet každý deň, kontroluje svoj e -mail každý deň a dostávajú najrôznejšie marketingové e -maily o produktoch a službách, o ktoré majú záujem. Existuje niekoľko možností, pokiaľ ide o umožnenie e -mailu na webovej stránke Django, a ste vítaní, že si vyberiete, čo pre vás najlepšie funguje.
Najprv môžete zaplatiť za e -mailovú službu, ktorá vám umožní odosielať e -mail z vašej domény a vyžaduje minimálny kód. Existuje veľa služieb, ktoré to ponúkajú, ako napríklad Workspace Google, SendInBlue, MailGun a ďalšie.
V opačnom prípade ste v dobrom stave, keď si na svojom serveri od nuly vytvoríte vlastnú e -mailovú službu. Túto možnosť odporúčam, aj keď je to viac kódu a môže vyžadovať špeciálny hosting. S najväčšou pravdepodobnosťou nebudete môcť spustiť poštový server z domáceho počítača, takže poďme preskúmať konfiguráciu a kód na odoslanie e -mailu skôr, ako spustíme server v cloude a vytvoríme si vlastný poštový server v rámci.
Najskôr upravte nastavenia.py s nasledujúcim príkazom:
nano app/settings.py
Kde je aplikácia názov aplikácie, ktorú ste vytvorili so StartApp.
Pridajte nasledujúce riadky:
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)
Uistite sa, že ich zmeníte, keď ste pripravení nasadiť svoju aplikáciu, toto sa neskôr vrátime. Nastavenie email_address by malo byť e -mailom, z ktorého by ste chceli odoslať, a heslo (email_host_password) by malo byť nastavené na heslo, ktoré vygenerujete pre server. Načítam heslo z konfiguračného súboru, aby som ho udržal mimo kódu pomocou nasledujúcej logiky, nad týmito riadkami v Settings.py:
import os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
Potom som nastavil súbor JSON s konfiguráciou v /etc/config.json s použitím Nano nasledovne.
Upraviť súbor:
sudo nano /etc/config.json
Pridajte nasledujúce riadky:
{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
Budeme naďalej upravovať konfiguračný súbor a pridáme všetky heslá a klávesy, ktoré použijeme v aplikácii. Zatiaľ rýchlo preskúmajme, ako poslať e -mail pomocou Pythonu. Najprv si vytvorme šablónu pre overovací e -mail, ktorý môžeme odosielať našim používateľom, a vložiť ju do adresára šablón používateľov. Táto šablóna bude napísaná v HTML.
nano users/templates/users/verification_email.html
Tento e -mail je pomerne jednoduchý. Berie kontext používateľa, základnú adresu URL pre web a ID používateľa a token, ktoré sa používajú na overenie e -mailu používateľa. Nezabudnite definovať základnú adresu URL v nastaveniach.py skôr, ako napíšeme nejaký kód Python na vykreslenie šablóny. Pokračujte a pridajte nasledujúce riadky do aplikácie/settings.py, na začiatku.
SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
Nakoniec, keď je vaša stránka pripravená na internet a nasadíte ho, budete chcieť definovať svoju doménu ako názov domény, ktoré si kúpite, aby ste zastupovali web. Toto je názov, ktorý zadáte Navbar, aby ste mali prístup k vášmu webu. Zatiaľ môžete nechať doménu prázdnu alebo použiť zástupný symbol. Budete tiež chcieť zmeniť stránku Site_name na meno, ktoré chcete dať svojim webom, podľa vášho výberu.
Predtým, ako odošleme e -mail, vytvorme generátor tokenov, aby sme mohli mať token aktivácie účtu, ktorý nikdy nevyprší. Môžeme to urobiť vytvorením a importom tokenu aktivácie účtu, ktorý vyzerá takto. Upravte súbor:
nano users/tokens.py
Pridajte nasledujúci 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 základný generátor tokenov generuje token, ktorý môžeme poslať používateľovi do adresy URL a používateľ môže použiť na overenie svojho e -mailu a aktiváciu svojho účtu.
Ďalej sa pozrime, ako poslať e -mail. Pomocou Nano, Upravte používateľov/email.py.
nano users/email.py
Odoslanie overovania e -mailu HTML bude vyzerať 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 celkom jednoduché. Importujeme funkcie, ktoré potrebujeme na odoslanie e -mailu, vykresliť e -mail so šablónami a našimi nastaveniami, a potom definujeme e -mail podľa názvu šablóny a odosielame ho používateľom pomocou funkcie. Všimnite si, že sme nedefinovali funkciu na odoslanie pošty, Send_html_email, napriek tomu to napíšeme pod kód, ktorý sme už pridali používateľom/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()
Je to trochu zložitejšie a my sme ešte pripravení spustiť celý tento kód. Všimnite si, že definujeme unsub_link, odkaz, ktorý môže používateľ použiť na zrušenie odberu z našich e -mailov. Je to dôležité, pretože používatelia budú musieť byť schopní odhlásiť sa z našich e -mailov, pokiaľ ich nechcú kedykoľvek vidieť. Do našej správy tiež pridávame alternatívu textu, ktorá je html správou zbavená značiek HTML. Nakoniec skontrolujeme, či e -mail odoslal, a ak to tak nie je, označujeme v profile používateľa, že ich e -mail nie je platný.
Vráťme sa späť k užívateľským modelom, aby sme to všetko mohli fungovať. Musíme definovať funkciu na vygenerovanie odkazu na zrušenie odberu a definovať booleovské pole, ktoré označuje, že e -mail používateľa nie je platný.
Najprv pridajte nasledujúci import do hornej časti používateľov/modelov.py
nano users/models.py
# …
Ďalej pridajme funkcie do modelu používateľa, aby sa token vytvoril a skontroloval token používaný na aktiváciu e -mailu, ako aj pole, aby ste uložili, či používateľ úspešne prijíma svoju poštu. V prípade používateľov/modelov.py znova pridajte nasledujúci kód na koniec modelu (odsadený kód)
# …
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Platí 30 dní
Je to pomerne jednoduché, používame časový pečiatku, ktorý je základným kryptografickým nástrojom, na vytvorenie tokenu, ktorý vyprší po určitom čase, a tiež používame inú funkciu na kontrolu, či je platná. Tieto tokeny používame dvakrát, raz na overenie e -mailu a raz pre odkaz na zrušenie odberu.
Teraz, keď ich máme, posledná práca, ktorú budeme musieť urobiť, je názor. V rámci používateľov/views.py pridajme zobrazenia na overenie e -mailovej adresy a na zrušenie odberu.
nano users/views.py
Najprv pridajte nasledujúci import. Hodil som pár navyše, takže neskôr nebudeme musieť importovať viac položiek.
from .email import send_verification_email # Nezabudnite importovať funkciu odosielania e -mailu overovania
Možno už máte niektoré z týchto dovozov, ale neubližuje ich opakovaniu. Budete musieť importovať funkciu odosielania e -mailov s overením, ako aj účt_activation_token od používateľov.Tokens, okrem iného.
Teraz, v dolnej časti súboru, pridajte nasledujúci kód:
# Odhláste ich
# Inak presmerujte na prihlasovaciu stránku
# SendwelcomeEmail (požiadavka, používateľ)
Toto je veľa kódu. Poďme to rozobrať. Prvá funkcia, čistá a jednoduchá, odhalí používateľa zo zoznamu adries. Druhá funkcia aktivuje ich e -mail a všimnete si, že som pridal komentárovú funkciu SendwelcomeMail. Na odoslanie uvítacieho e -mailu ste vítaní, aby ste použili e -mailovú šablónu a definíciu funkcií, ešte som to ešte neurobil. Posledná funkcia, ktorú som hodil, je dôležitá, pretože vypršajú aktivačné e -maily. Preto budeme musieť nejaký čas znovu odoslať aktivačný e -mail. Na to môžeme použiť základný formulár a zavolať funkciu na odoslanie overovacieho e -mailu. Predtým, ako to urobíme, uistite sa, že sa odosiela na prvom mieste pridaním funkčného hovoru do zobrazenia registra. Pridajte tento riadok tesne pred presmerovaním v zobrazení registra, def Register, do používateľov/views.py.
nano users/views.py
# … (Po) def register (požiadavka):
# … (Predtým) presmerovanie (
Do tohto útržku kódu nemusíte pridávať prvé a posledné riadky, uistite sa, že zobrazenie registra odošle používateľovi overovací e -mail. Malo by to vyzerať takto:
# ... dovoz
send_verification_email(user) # Nezabudnite pridať tento riadok!
Teraz budeme musieť pridať formulár na odoslanie aktivačného e -mailu. V používateľoch/formulároch. Pridajte nasledujúci formulár:
# … (Dovoz)
Budeme tiež potrebovať šablónu, ktorá zodpovedá tomuto formulára o aktivácii e -mailu. Pridajte túto šablónu do. Upravte súbor:
nano users/templates/users/resend_activation.html
Ďalej pridajte do súboru nasledujúci kód.
Whew, to je veľa! Teraz, keď nasadíme kód na náš server, budeme môcť posielať e -mail HTML a aktivovať používateľské účty kliknutím v e -maile. Možno budeme chcieť poslať jednoduchý uvítací e -mail, takže sa pozrime, ako to urobiť. Späť v používateľoch/email.py, pridajte nasledujúci 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)
Na poskytnutie všetkých týchto informácií budeme potrebovať aj šablónu. Na mojej webovej stránke vyzerá šablóna ako nižšie, ale ste vítaní naformátovať ju, akokoľvek sa vám páči.
Všimnite si, že nemáme záverečné telo alebo značky HTML, pretože ich pridávame, keď pridáme odkaz na odber HTML. Sú dôležité, ale nechceme ich definovať dvakrát.
Čo bude teda ďalej? Prešli sme dlhú cestu. Naozaj by sme mali byť pripravení nasadiť stránku na server. Môžeme pridať dekoratéra @Login_Required a zabezpečiť si naše názory, brať registráciu používateľov, odoslať e -mailové e -maily a informácie o vyrovnávacej pamäti, čo je základ toho, čo musí webová stránka urobiť, aby zostala relevantná. Pridáme niekoľko viac užitočných funkcií a potom zostavíme základ pre nasadenie nášho kódu na vzdialený server, nastavenie poštového servera, konfiguráciu domény a filtre tak, aby sa naše stránky stali bezpečnými a vhodnými.
Budeme tiež potrebovať zobrazenie resetovania hesla, takže to pridajte naozaj rýchlo. Vstavané zobrazenie resetovania hesla spoločnosti Django je v niektorých funkciách prerušené, ale pozrieme sa na to, ako napísať vlastné zobrazenie, e -mailovú šablónu, formuláre a vzory URL. Tu je to, ako vyzerá pohľad na používateľov/pohľads.py
# ... dovoz
Tento formulár je zabudovaný do Django, ale na potvrdenie obnovenia hesla potrebujeme šablónu, používatelia/šablóny/používatelia/heslo_reset_confirm.html
Máme tiež šablónu na odoslanie e -mailu s resetom hesla s jednoduchým formulárom v používateľoch/šablóna/Používatelia/heslo_reset.html
Šablóna pre samotný e -mail je jednoduchá, jedná sa o základný súbor HTML, ktorý vykresľuje odkaz na resetovanie hesla, v používateľoch/šablóna/Používatelia/heslo_reset_email.html. Django tento súbor automaticky interpretuje.
Budeme tiež potrebovať ďalšie dve šablóny. Prvým je potvrdenie, že e -mail bol odoslaný. Pohľady na tieto sú už v Django, takže ich potrebujeme osloviť v adresách URLS.py. Táto šablóna sa nachádza na používateľoch/šablóna/Používatelia/heslo_reset_done.html
A nakoniec, aby ste potvrdili, že reset hesla je dokončený, používatelia/šablóny/používatelia/heslo_reset_complete.html
Teraz potrebujeme vzory URL pre tieto názory. V používateľoch/urls.py pridajte nasledujúce vzory URL:
# ... Predchádzajúce adresy URL tu
Štyri šablóny, to je veľa! Ale teraz si môžeme byť istí, že budeme môcť resetovať heslo používateľa, kedykoľvek to potrebujeme, všetko z webového prehľadávača.
Chápem, že je to veľa kódu. Ak sa zdá trochu nad hlavou, je to v poriadku. Vylepšíte sa, vaše porozumenie sa zlepší a čoskoro sa stanete oveľa kompetentnejším s kódom. Ak ste úplne stratení, odporúčam sa vrátiť k tomuto softvéru neskôr po práci na samostatnom učení sa kódovať kurz online. Zvyčajne sú slobodné začať a sprevádzajú vás všetkým, čo potrebujete, aby ste boli úspešní, keď sa vrátite k tomuto projektu. Ak máte pocit, že ste pripravení pokračovať, čítajte ďalej, ďalej, pokryjeme nasadenie vášho kódu na vzdialený server a nastavíme poštový server, ako aj automatizáciu vášho nasadenia pomocou Bash, takže môžete vždy nastaviť nový projekt pomocou niekoľkých jednoduchých príkazov.
Posledná vec, ktorú musíme urobiť pred nasadením na vzdialený server, je, aby bol náš web trochu bezpečnejší. Všimnite si, že prihlasovacie zobrazenie má iba používateľské meno a heslo a neexistuje viac faktorové autentifikácia alebo jednorazový kód. Toto je ľahká oprava as rovnakým kódom môžeme prinútiť naše stránky odosielať textové správy a dokonca reagovať na textové správy odoslané na server. Na začiatok sa vrátime späť do používateľských modelov a pridáme podpisovač časovej pečiatky, ktorý bude predstavovať každé prihlásenie. Do užívateľského modelu tiež pridáme jedinečný rotujúci identifikátor, ktorý sa použije na pridanie ďalšieho zabezpečenia k nášmu prihláseniu. Úpravy používateľských modelov, používatelia/modely.py, pridajte nasledujúci kód:
# Nezabudnite importovať generátor UUID, Signer Timestamp a Generátor URL (spätný)
# Pridajte tento kód tu
# A pridajte túto funkciu
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Platí pre 3 minúty
Uistite sa, že vaši používatelia/modely.py vyzerá takto, okrem komentárov (kód na riadkoch s #). Rozdelenie to je jednoduché. Máme niekoľko importov, časový pečiatku, ktorý je kryptografickým nástrojom, ktorý dokáže vygenerovať zabezpečný kód a overiť ho, aby sa ubezpečil, že je platný, použitý iba raz a nie starší ako určitý počet sekúnd. Používame tiež UUID, ktorý je jedinečným identifikátorom, ktorý identifikuje nášho používateľa pri podpisovaní tokenu a v adrese URL, kde sa token odosiela používateľovi. Túto základnú kryptografiu použijeme na vytvorenie dvojčísového zobrazenia autentifikácie. Predtým, ako urobíme čokoľvek iné, spustíme migrácie, aby boli naše používateľské modely aktualizované. V adresári s manage.py spustite nasledujúce príkazy, aby ste vytvorili a dokončili migráciu.
source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
Je to dôležité, pretože zakaždým, keď urobíme zmeny v modeloch, budeme musieť vytvoriť tabuľky a aktualizovať databázu predvolenými predvolenými hodnotami, aby sme mohli tieto modely skutočne použiť.
Ďalej im improvizujte náš pohľad na prihlasovanie, aby sme presmerovali na sekundárny pohľad na autentifikáciu. V používateľoch/zobrazeniach.py odstráňte funkciu prihlásenia a presmerujte do adresy URL, ktorú sme práve vygenerovali v užívateľských modeloch.
# ... dovoz
if user and user.profile.can_login < timezone.now(): # Upozorňujeme, že teraz skontrolujeme, či sa používateľ môže prihlásiť
# Odstráňte funkciu auth_login, ktorá bola tu
return redirect(user.profile.create_auth_url()) # Všimnite si, že tu presmerujeme na novú adresu URL tu
else: # Ak používateľ nepoužíva viacfaktorovú autentifikáciu, jednoducho ich prihláste.
else: # Ak prihlásenie nebolo úspešné,
user = User.objects.filter(username=username).first() # Toto je časť, kde aktualizujeme profil používateľov
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Takže sa nemôžu znova prihlásiť na pár sekúnd
Takže je to celkom jednoduché, keď ho vytvoríme, máme teraz spôsob, ako presmerovať na dva faktorové autentifikačné zobrazenie. Máme tiež zálož v prípade, že používateľ nepridal telefónne číslo. Čoskoro pridáme základné zobrazenie na pridanie telefónneho čísla a čoskoro sa prihlási pomocou textovej správy.
Najprv potrebujeme jednoduchý spôsob, ako odoslať textovú správu z nášho kódu. Aby sme to dosiahli, môžeme si vybrať z niekoľkých API, ale podľa môjho názoru je najjednoduchšie Twilio. Ponúkajú tiež dobré ceny za menšie projekty, ako aj pre hromadné zľavy. Vytvorte si účet na stránke Twilio.com, vyplňte niektoré podrobnosti o svojom projekte, kúpte si telefónne číslo a skopírujte svoje tlačidlá API na adresu Settings.py. Potom pridajte tento kód do nového súboru, Používatelia/SMS.py.
nano users/sms.py
# Importovať všetky potrebné balíčky
# Tento kód odošle text s Twilio
# Pomocná funkcia na získanie čísla s toľkými číslicami
# Pošlite text na overenie používateľa
# S touto funkciou pošlite používateľovi akýkoľvek text
# Overte kód pomocou tejto funkcie
# Overiť čas
Nezabudnite primerane zmeniť svoje nastavenia a tieto riadky pridať pomocou vašich kľúčov:
# Nezabudnite ich skopírovať zo svojho informačného panela Twilio
AUTH_VALID_MINUTES = 3 # Počet minút, keď je stránka TFA aktívna, akonáhle je inštancia aktívna
Po prvé, budeme potrebovať formuláre pre naše dva faktorové autentifikačné názory. Úpravy používateľov/formy.py, pridajte nasledujúci kód.
# ... dovoz
# Formulár na zadanie nášho telefónneho čísla
# Formulár pre autentifikáciu
Ďalej si vytvorme zobrazenia v používateľoch/views.py
# ... dovoz
Budeme tiež potrebovať šablóny pre oba tieto názory. Pridme najskôr šablónu MFA.
nano users/templates/users/mfa.html
Pridajte tento kód HTML do šablóny
To je celkom vysvetľujúce. Formulár odošle kód alebo prázdny kód a v zobrazení si všimnete, že pošleme kód, ak dostaneme prázdny kód. Potom máme iba dve tlačidlá predloženia, a týmto spôsobom môžeme kód odosielať jedným z tlačidiel. Ďalej pridáme jednoduchý formulár na pridanie telefónneho čísla.
nano users/templates/users/mfa_onboarding.html
Pridajte nasledujúce HTML:
Tento formulár je omnoho jednoduchší, iba vykresľuje formulár telefónneho čísla, ktorý sme vytvorili, a umožňuje používateľovi pridať telefónne číslo.
Vyzerá to naozaj dobre! Pokiaľ je všetko správne nastavené, mali by sme byť schopní odosielať správy a prihlásiť sa používateľom s telefónnym číslom, hneď ako pridáme vzory URL. Posledná vec, ktorú musíme nastaviť, je zobrazenie profilu, aby sme sa ubezpečili, že používateľ môže zmeniť svoje telefónne číslo bez prihlásenia. Nakoniec budeme chcieť pridať možnosť „Stop na ukončenie", aby používateľ mohol textovať text „zastaviť", aby sa rozhodol z budúcich textových správ.
Pridajme zobrazenie profilu do používateľov/zobrazení. Toto zobrazenie aktualizuje bio, e -mail, e -mail, používateľské meno a telefónne číslo používateľa a umožní nám povoliť autentifikáciu viacerých faktorov. Najprv budeme potrebovať ďalšie dva formuláre v používateľoch/formách.py
# ... dovoz
Ďalej môžeme vytvoriť pohľad na použitie obidvoch týchto formulárov. Upravte používateľov/zobrazenia.py a pridajte do zobrazenia.
# Pridajte tieto dovozy
Budeme tiež potrebovať šablónu pre tento názor.
nano users/templates/users/profile.html
Všimnite si, že je to pomerne jednoduchý formulár, ale obsahuje v ňom nejaký JavaScript, ktorý automaticky zverejňuje obsah formulára, keď sa aktualizuje. Je to užitočné, takže ste schopní robiť úpravy bez toho, aby ste zakaždým museli stlačiť Sub.
Ďalej potrebujeme adresy URL, ktoré predstavujú všetky tieto názory vo výške URL Userov. Upraviť používateľov/urls.py a pridajte tento kód:
# … Predchádzajúci kód, import
# ... vzory URL, ktoré sme predtým zadali, pridajte ďalšie tri riadky
Teraz je vhodný čas na vyskúšanie nášho projektu. Najprv však spustíme ďalšiu zálohu.
backup
A spustite server. Predtým, ako sa nasadíme na server Linux, je dobré povoliť dve faktorové autentifikáciu na účte. Urobíme to na našu profilovú adresu URL/používateľov/profil/a začiarkneme políčko, aby sme povolili autentifikáciu po zadaní nášho telefónneho čísla a potom na odoslanie formulára.
python manage.py runserver localhost:8000
Navštívte webovú stránku tým, že pôjdete do vášho webového prehľadávača, v tomto príklade používam Google Chrome a zadávam adresu URL https: // localhost: 8000/účty/profil/
V prípade potreby sa budete môcť prihlásiť a povoliť dve overovanie faktorov.
Tento projekt potrebuje server na spustenie, aby mohol skutočne poslať poštu. Najprv však potrebujeme spôsob, ako vidieť chyby. Všimnite si, že ak spustíte server v režime ladenia, s nastaveniami.debug rovnajúci sa true, server automaticky zobrazuje chyby. Na zobrazenie chýb bez použitia režimu ladenia, ktorý je na výrobnom serveri nebezpečný, mali by sme preň pridať zobrazenie. Najdôležitejšie chyby, ktoré musíme zvládnuť, sú:
Chyba 500 - Problém s naším kódom Chyba 404 - stránka, ktorá nebola nájdená (zlomená adresa URL) Chyba 403 - Povolenie zamietnuté chyba
Pridajte novú aplikáciu na spracovanie týchto chýb, nazývaných chýb.
python manage.py startapp errors
Pridajte to do nastavení.py tak, ako sme to robili predtým, v nastavení inštalovaných_apps a začnite pridaním odkazov do niektorých zobrazení v aplikácii/urls.py, kde aplikácia je názov vášho projektu Django.
handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
To je všetko, čo potrebujeme okrem chybových zobrazení, šablón a trocha middleware. Definujme ich tak:
# Vytvorte si svoje názory tu.
Ďalej definujeme middleware, aby sme tieto chyby zvládli. Urobíme to najprv pridaním do middleware_classes v s est Settings.py s názvom nášho middleware.
# ... Predchádzajúci middleware
Ďalej pridajme 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.')
Pridáme funkciu, aby sme získali aktuálnu výnimku pomocou závitového lokálneho, čo nám pomáha sledovať všetky chyby v našom kóde. Pokiaľ ide o šablóny, potrebujeme iba jednu, pretože v zobrazení dynamicky definujeme názov. Šablóna musí iba vykresliť názov a „Trace", naša prehliadka chýb z kontextu.
nano errors/templates/errors/error.html
Toto je zatiaľ naša najjednoduchšia šablóna, ale je ľahké vidieť chyby v našom projekte. Ďalej poďme zakázať ladenie v nastaveniach.
nano app/settings.py
Nájdite tento riadok, kde je nastavený na true a zmeňte ho na false
DEBUG = False
Choďte do toho a zálohujte aplikáciu hneď teraz. Sme pripravení nasadiť na vzdialený server Linux a odtiaľ pokračujeme v pridávaní funkcií.
sudo backup
Predtým, ako zverejníme tento kód na server, mali by sme zvážiť, že s kódom môžu vyskytnúť problémy. V závislosti od prípadu budú mať stránky, ktoré akceptujú informácie, ktoré im uverejnia zverejnené, problémy s zverejnením spamu a problémom s odstránením spamu. To by sa nemalo stať okamžite, ale ak sa to stane, neskôr preskúmame, ako automaticky zmierniť spam na webe a sťažiť, aby roboty mali prístup na stránku, spolu s tým, ako deaktivovať účty používateľov, a overiť identitu používateľa pomocou skenovania ID alebo biometrickým skenovaním, ako je rozpoznávanie tváre alebo tváre.
Pri pohľade na príklad autentifikácie viacerých faktorov, ktorý sme preskúmali, vo výrobe sa veci môžu líšiť. Všimnite si, ako ohraničujeme prihlasovanie a vyprší tokeny. Ak roboti pristupujú k webe, autentifikácia dvoch faktorov môže byť zložitejšia, pretože môžu zadávať kódy súčasne, keď je používateľ. Na boj proti tomu použite model v používateľských modeloch a deklarujte, ako interagujeme s webom, keď autentifikujeme autentifikáciu viacerých faktorov pomocou telefónneho čísla. Pridáme tiež možnosť na autentifikáciu e -mailom. Začnite úpravou používateľských modelov pomocou Nano.
nano users/models.py
Takto by mal vyzerať model, ktorý pridávame. Nepotrebujeme žiadne metódy, iba premenné na ukladanie ID, používateľa, časovej pešej pešej pešej pešej pešej pešej pešej pečiva a pokusov proti akémukoľvek autentifikácii viacerých faktorov (kód ako 123456 odoslaný do telefónu alebo e -mailu).
# Základný token používaný na prihlásenie na webovú stránku
Pridajme tiež privilégium nášmu používateľovi a my ho teraz nastavíme manuálne, predtým, ako sa nakoniec migrujeme, aby sme automaticky zaradili privilegovaných používateľov. V modeloch používateľov pridajte tento riadok do profilu:
vendor = models.BooleanField(default=False)
Rovnako ako v prípade všetkých zmien v databáze, musíme migrácia a migrovať databázu kedykoľvek upravíme súbor Models.py v Django. Nezabudnite, že to urobíme najskôr zdrojom zdroja (ak sa už nepoužíval od otvorenia terminálu) a potom Python Manage.py na migráciu a migráciu.
cd project-directory-you-named # (Ak je to potrebné)
Zatiaľ môžete pomocou shellu zaradiť všetky účty, ktoré ste vytvorili ako predajcovia.
python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Teraz sa poďme vyvinúť náš pohľad na autentifikáciu viacerých faktorov, aby sme použili tento token. Najprv musíme upraviť naše pomocné služby MFA. Používanie 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
# Autentifikovať používateľa pomocou jeho e -mailu alebo telefónneho čísla
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Filtrujte token hodnotou odovzdanou 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)) # Ak táto relácia nebola vytvorená, vytvorte ju
user = User.objects.filter(id=token.user.id).first() # Získajte používateľa z tokenu
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Ak sú už overené, prihláste sa do
if not user: raise PermissionDenied() # Odoprieť, či nebol nájdený žiadny používateľ
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Skontrolujte token Auth
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Prihláste sa používateľa, ak ešte nie sú prihlásení
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Vykonajte vypršanie ich viac faktorového overenia
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Presmerujte používateľa na ďalšiu stránku
if not user.profile.mfa_enabled: # Skontrolujte, či je povolená MFA
if not check_verification_time(user, token): # Skontrolujte čas
user.profile.mfa_enabled = False # Vymažte telefónne číslo
user.profile.enable_two_factor_authentication = True # Povoliť MFA
user.profile.phone_number = '+1' # Zakážte telefónne číslo
user.profile.save() # Uložte profil
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Prihláste používateľa, ak nie je povolený jeho MFA
if request.method == 'POST' and not fraud_detect(request, True): # Ak je žiadosť žiadosť o príspevok
form = TfaForm(request.POST) # Inštancia formulára
code = str(form.data.get('code', None)) # Získať kód
if code and code != '' and code != None: # Uistite sa, že nie je prázdny
token_validated = user.profile.check_auth_token(usertoken) # Skontrolujte token Auth
is_verified = check_verification_code(user, token, code) # Skontrolovať kód
if token_validated: # Ak všetko
if is_verified: # Je v poriadku
user.profile.mfa_enabled = True # Povoliť MFA (ak ešte nie je povolená)
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Prihláste sa používateľa
for key, value in request.GET.items(): # Zostavte si dotazník pre ďalší parameter (ak existuje)
return HttpResponseRedirect(next) # Presmerovať
elif not token_validated: # Ak bol token neplatný
if p.mfa_attempts > 3: # Keby bolo príliš veľa pokusov
if form.data.get('send_email', False): # Pošlite e -mail (alebo text)
# Vykresliť formulár (pre žiadosti o get)
Keď do tohto kódu pridávame, nezabudnite importovať funkciu na odoslanie e -mailu. V hornej časti súboru sa používateľ zobrazí (s inými importmi), pridajte
from .mfa import send_verification_email as send_mfa_verification_email
Teraz musíme túto funkciu napísať skôr, ako bude niečo z toho fungovať. Mal by rozšíriť našu e -mailovú funkciu a jednoducho poslať e -mail používateľovi s overovacím kódom.
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šetko funguje skvele, teraz máme systém autentifikácie viacerých faktorov, ktorý závisí od telefónneho čísla alebo e -mailu, ktorý sa má prihlásiť. Potrebujeme však aj spôsob, ako odstrániť, alebo aspoň skryť používateľov, ktorí s našimi podmienkami spolupracujú. Mohli by to byť spameri, roboti alebo ktokoľvek, kto pre našu prácu neznamená dobre. Pozrite sa na zobrazenie, ktoré mám na monitorovanie používateľov na svojej webovej stránke:
# dovoz
from .tests import is_superuser_or_vendor # Budeme musieť vytvoriť tento test
# Získajte zoznam používateľov
return render(request, 'users/users.html', { # Vráťte používateľov v šablóne
Upozorňujeme, že tento kód používa test, budeme musieť tento test deklarovať v súbore tests.py a importovať ho. Úpravy používateľov/test.py, vytvorme test.
def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
Je to v spojení s používateľmi/používateľmi.html šablónu, ktorá vyzerá niečo také:
Upozorňujeme, že šablóna obsahuje inú šablónu, používatelia/user.html. Pri používaní šablóny, ktorá má podskupinu a nepoužíva sa rozširuje, je dobré pridať podčiarknutie () pred menom súboru na rozšírenie, aby ste rozlíšili šablóny.
Všimnite si, že je to veľa Jinja, možno nebudete mať všetky tieto premenné definované. Ale takto vyzerá môj kód.
<small># {{user.id}} </small>
Potrebujeme tiež ďalšiu podskupinu, TOGLE_ACTIVE.HTML. Táto šablóna by mala byť formulár, ktorý nám umožňuje prepínať, či je užívateľ aktívny.
Budeme tiež musieť pridať zobrazenie na prepínanie aktivity používateľa a príslušné vzory URL. Keď sme pri tom, pridajme pohľad na odstránenie používateľa v prípade, že to potrebujeme.
# Dovoz
success_url = '/' # Presmerovanie URL úspechu
def test_func(self): # Otestujte, či je užívateľ superužívateľom a má povolenie na odstránenie
Aj keď je to praktické, ak je to potrebné, odstránenie používateľa by nemalo byť väčšinou potrebné, môžeme iba prepnúť viditeľnosť používateľov, ktorí navštívia web, ak ich potrebujeme prepustiť.
Vzory URL, ktoré sme pridali, vyzerajú takto. S Nano, Upravte používateľov/URLS.py a pridajte tieto riadky:
nano users/urls.py
Riadky by mali ísť do zoznamu ciest v zobrazeniach používateľa pred koncom „, ale po začiatku" [".
# …
# …
Teraz nezabudnite zálohovať web, aby ste si ju mohli stiahnuť na webovom serveri, na ktorom budeme pokračovať v práci. Z príkazového riadku,
sudo backup
Teraz je naša stránka zálohovaná.
Takže teraz máme niekoľko užitočných funkcií. Ale čo tu celkový obraz? Tento kód stále nie je prístupný z internetu, zatiaľ nemáme žiadny poštový server a musíme rozšíriť našu aplikáciu tak, aby zahŕňala komplexný proces overovania, ako aj hladké rozloženie, ktoré nám pomôže preskúmať stránku, spolu so zabezpečenými protokolmi pre autentifikáciu privilegovaných používateľov.
K tomu všetkému dostaneme. Najdôležitejšou vecou bude zatiaľ získať tento kód online, čo môžeme urobiť s niekoľkými riadkami bash na serveri Ubuntu. Za to si však budete musieť prenajať server, pokiaľ nemáte server doma a obchodné internetové predplatné, ktoré vám umožní otvoriť porty. Osobne spúšťam svoju webovú stránku na HP Z440, ktorý je nainštalovaný v mojom byte, ale zvyčajne je oveľa lacnejšie pre základné potreby prenajať si virtuálny súkromný server (VPS).
Majte na pamäti, že kód, ktorý teraz prevádzkujeme, je relatívne tenký, bude potrebné ho udržiavať a vylepšiť skôr, ako budeme pripravení použiť to, čo musíme na vybudovanie produktu. Uistite sa, že ste opatrní, čo robíte s internetom, uistite sa, že ak túto stránku nasadíte verejne na web na serveri Linux, máte v pláne blokovať nechcené interakcie s vašimi webovými stránkami. Pravdepodobne to nebude problém spočiatku, ale zameriame sa na rôzne riešenia na boj proti tomu, vrátane strojového učenia, umelej inteligencie a počítačového videnia. Keď sa stane problémom, vyhľadajte v tomto texte ďalej riešenie.
Pokiaľ ide o prenájom VPS, existuje veľa miest, ktoré môžete ísť. Google Cloud má servery VPS, ionos, Kamatera, Amazon AWS a viac poskytovateľov ponúkajú riešenia cloudového servera, ktoré budú vyhovovať našim potrebám.
Budete musieť prekliknúť ich formuláre a vybrať plán, ako začať. Môžete ísť so základným plánom s akýmkoľvek poskytovateľom, ale uistite sa, že poskytovateľ vám umožní otvoriť porty servera Port Mail Server a odoslať e -mail (malo by to byť port 587 a port 25), niektorí poskytovatelia tieto porty blokujú. Doteraz som mal najlepšie skúsenosti s Ionos a Kamatera, obaja mi umožnia poslať neobmedzený e -mail a ich ceny sú dosť lacné.
K svojmu novému serveru sa pripojíte k protokolu s názvom SSH alebo Secure Shell, ktorý vám umožňuje diaľkové rozhranie so serverom presne ako váš osobný počítač z vášho osobného počítača. Keď nastavíte server, poskytovateľ hostingu vás pravdepodobne požiada o pridanie kľúča SSH, alebo vám poskytnú používateľské meno a heslo. Kľúčom SSH je, ako sa prihlásite na server z príkazového riadku na úpravu kódu. Na generovanie klávesu SSH použite možnosti SSH-Keygen.
ssh-keygen
Uložte súbor a prepíšte ho, ak to potrebujete, je dobré otočiť svoje klávesy SSH, ak ste tak ešte neurobili. Teraz môžete použiť nasledujúci príkaz na zobrazenie kľúču SSH. Budete ho chcieť skopírovať na vzdialený server, aby ste ho mohli použiť na autentifikáciu.
cat ~/.ssh/id_rsa.pub
Ak ste pri písaní tohto príkazu videli kľúč SSH (dlhý reťazec číslic a písmen, počínajúc „SSH-RSA AAA"), skúste generovať kľúč RSA (sú bezpečnejšie, takže ich odporúčam používať.) Nasledujúci kód vygeneruje 4096 bit RSA kľúč.
ssh-keygen -t rsa -b 4096
Vytvorte VPS s Ubuntu, ale plánujete to urobiť. Po vytvorení VPS kliknutím na formuláre na webovej stránke poskytovateľov (Kamatera.com, ionos.com alebo podobné), budete sa chcieť prihlásiť. Ak to chcete urobiť, použite príkaz SSH so svojou adresou IP (adresa, ktorá vyzerá ako xx.xx.xx.xx). Budete tiež musieť byť citliví na predvolené používateľské meno na serveri, ktorý sme vytvorili, napríklad Ubuntu.
ssh ubuntu@XX.XX.XX.XX
Môžete byť požiadaní o heslo, ak ste požiadaní o heslo, zadajte ho do.
Začnime pridaním nového súboru SSHD_Config, ktorý serveru povie, ako používať SSH.
nano sshd_config
# Toto je konfiguračný súbor so systémom SSHD Server. Pozrieť sa
# SSHD_Config (5) Ďalšie informácie.
# Tento SSHD bol zostavený s cestou =/usr/lokálne/sbin:/usr/lokálne/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/hry
# Stratégia použitá pre možnosti v predvolenom sshd_config dodaná s
# OpenSSH je určiť možnosti s predvolenou hodnotou, kde
# možné, ale nechajte ich komentovať. Nekomplikované možnosti potlačujú
# predvolená hodnota.
# Port 22
# Adresa
# Počúvajte 0,0.0.0
# PočúvajteDress ::
# Hostkey/etc/ssh/ssh_host_rsa_key
# Hostkey/etc/ssh/ssh_host_ecdsa_key
# Hostkey/etc/ssh/ssh_host_ed25519_key
# Šifry a kľúčovanie
# Relakelimit predvolené
# Protokolovanie
# SyslogFacility Auth
# Info
# Autentifikácia:
# LogingRaceTime 2m
# Povolenie zakazovať
# Striktne áno
# MaxAuthtries 6
# Maxsessions 10
# Očakávajte, že v budúcnosti sa v predvolenom nastavení .ssh/autorized_keys2.
# Autorizované provincipalsfile žiadne
# AutorizedKeysCommand Žiadne
# AutorizedkeysCommanduser nikto
# Aby to fungovalo, budete tiež potrebovať hostiteľské kľúče v/etc/ssh/ssh_known_hosts
# Hostiteľa
# Zmeňte na áno, ak neveríte ~/.ssh/známe_hosts pre
# Hostiteľa
# Ignoreuser knowhosts nie
# Nečítajte si súbory používateľa ~/.Rhosts a ~/.shosts
# Ignorerhosts áno
# Ak chcete deaktivovať tunelované čisté textové heslá, zmeňte tu na nie!
# Povoleniemptypasswords no
# Zmeňte na áno, aby ste povolili heslá s výzvou a reakciou (dajte si pozor na problémy s
# Niektoré moduly a vlákna PAM)
# Možnosti Kerberos
# Kerberosauthentifikácia č.
# Kerberosorlocalpasswd áno
# Kerberostitcleanup Áno
# KerberosgetafStogok
# Možnosti GSSAPI
# GSSAPIAUTHENTICATION NIE
# Gssapicleanupcredentials Áno
# GSSAPISTRICTACCECTORCHECK ÁNO
# GssapikeyExchange no
# Nastavte to na „áno", aby ste povolili autentifikáciu PAM, spracovanie účtu,
# a spracovanie relácií. Ak je to povolené, autentifikácia PAM bude
# byť povolený prostredníctvom kbdinteractiveAuthentication a
# HesloAuthentication. V závislosti od vašej konfigurácie PAM,
# Autentifikácia PAM prostredníctvom kbdinteractiveAuthentication môže obísť
# Nastavenie „PermitRootlogin bez password".
# Ak chcete iba spustiť kontroly účtu a relácie PAM
# Autentifikácia PAM, potom to povolte, ale nastavíte heslo
# a kbdinteractiveAuthentication to „nie".
# Povoliť
# Povoľtetcpforwarding áno
# Brána nie
# X11Displayoffset 10
# X11uselocalhost áno
# Permittty áno
# PrintLastlog ÁNO
# TcpkeePalive áno
# Povolenie
# Kompresia oneskorená
# KlientaliveInterval 0
# KlientaliveCountmax 3
# Použité nie
# Pidfile /run/sshd.pid
# MaxStartups 10: 30: 100
# Permittunnel nie
# Chrootdirectory žiadna
# Verziaddendum non
# žiadna predvolená cesta bannera
# Umožnite klientovi odovzdávať premenné prostredia lokality
# Prepísať predvolené predvolené od subsystémov
# Príklad prehodnocujúcich nastavení na základe používateľa
# Zodpovedá používateľom anoncvs
# X11Forwater nie
# Povolenietcpforwarding no
# Permittty no
# ForceCommand CVS Server
Pamätajte, Ctrl+X a Y na uloženie súboru. Ďalej napíšte základný skript s názvom Inicialize (všetko v predvolenom domovom adresári nášho používateľa).
nano initialize
Pridajte tieto riadky do súboru a nahradiť
# !/bin/bash
Ak chcete prejsť týmto súborom, začnime riadok po riadku. Prvý riadok hovorí kompilátorovi, že ide o skript bash. Potom inštalujeme závislosti, skopírujeme SSHD_Config do správneho adresára, reštartujeme SSH, generujeme klávesy SSH pre root, pridávame užívateľský „tím" (môžete si vybrať meno, ktoré sa vám páči, použite príkaz adduser s ich menom a zakázané heslo teraz). Pridáme tiež tím do skupiny Sudo, vygenerujeme svoj kľúč SSH, pridáme náš kľúč k autorizovaným kľúčom a ich ich a vytlačí ich kľúč. Tento nový používateľ bude spôsob, ako sa prihlásime na stránku.
V novom termináli choďte do toho a znova otvorte server.
ssh team@XX.XX.XX.XX
Tentoraz by ste nemali potrebovať heslo, pretože máte kľúč SSH. Zakázali sme tiež prihlásenie pomocou hesla, aby sme udržali webovú stránku.
Teraz tento server spustí úplne prázdny bez informácií. Začnime klonovaním nášho projektu od spoločnosti Git, aby sme ho mohli stiahnuť a spustiť na vzdialenom počítači. Na vzdialenom serveri pripojenom cez SSH najskôr vytlačte svoj kľúč SSH:
cat ~/.ssh/id_rsa.pub
Ďalej vložte tento kľúč do nastavení GIT, ako sme to robili predtým, aby sme vytvorili naše úložisko GIT. Teraz môžeme klonovať náš projekt priamo na server. Uistite sa, že ste projekt napravili najprv, aby ste si sťahovali na serveri Git Server.
git clone git://github.com/you/yourproject.git
Perfektné. Teraz sú tu všetky súbory. Vidíme ich s LS
ls
Teraz začnime nastaviť server. Najprv skopírujte svoj zoznam projektov do jednoduchého a nezabudnuteľného názvu, ktorý použijeme pre tento projekt.
cp -r yourproject whatyoucalledit
Kde je „WhatyouCalLedit" nový názov vášho projektu. Ďalej budeme musieť zostaviť základný nástroj na nastavenie servera. Tento nástroj uložíme a použijeme ho v budúcnosti. Ak chcete zostaviť tento nástroj, vytvorme užívateľského binárneho zariadenia, aby sme definovali, ako upravujeme skript. Používanie Bash, Edit/usr/bin/ascript
sudo nano /usr/bin/ascript
Nezabudnite tam používať sudo, takže máte povolenia na úpravu súboru. V súbore pridajte tieto riadky:
# !/bin/bash
echo "# !/bin/bash ">>/usr/bin/$ 1
Pamätajte, že tento skript má argument, názov skriptu, ako 1 $. Najprv skontroluje, či existujú súbor alebo ho inak vytvorí, pridá prvý riadok, ktorý deklaruje skript, je bash, zmení jeho povolenia, upravuje ho a pridá svoj názov do /etc /ascripts, ktorý nám umožňuje ukladať názvy skriptov, ktoré vytvárame. Ak súbor už existuje, jednoducho zmeňte povolenia a upravte ho. Uložte súbor a potom zmeníme jeho povolenia. Pokiaľ používame tento skript, nebudeme to musieť robiť už.
sudo chmod a+x /usr/bin/ascript
Perfektné. Teraz vytvorme skript s názvom Nastavenie. Najprv vás neprekonajte, ale pozrite sa na to, ako vyzerá môj skript nastavenia. Prejdeme tým, ako by mal tento skript vyzerať vo vašom projekte, na začiatok nebudete potrebovať všetko v mojom skripte.
# !/bin/bash
# Sudo chmod A+X Scripts/Používateľ
# ./scripts/usersetup
# ssh-keygen
# Zoznam projektov
# Príkazy
# Konfigurácia
# Konfigurácia
# Aktualizovať a inštalovať
# Povoliť antivírus Clamav
# Nastaviť názov hostiteľa
# Nastavte Postgres
# Zavedenie databázy
# Zakázať iptables
# Nainštalujte BitDefender
# Nastavte postfix
# Vytvorte dirs
# Nastaviť Virtuatenv
# Získajte a budujte závislosti
# Stanovte pravidlá brány firewall
# Nainštalujte závislosti pypi
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# PIP inštalujte OpenCv-python == 4.5.5.64
# PIP inštalujte opencv-contrib-python == 4.5.5.64
# Nainštalovať certbot
# Spustiť certifikát
# Obnoviť poštový server
# Skopírovať
# sudo cp /etc/letsencrypt/live/femmebabe.com/privkey.pemv key.pem
# sudo cp /etc/letsencrypt/live/femmebabe.com/cert.pem cert.pem
# Záplata venv
# Nastavte nastavenia používateľa
# Stanoviť povolenia
# Sudo chown -r tím: Používatelia/var/run/
# Sudo Chown Root: Root/Run/Sudo/TS -R
# sudo chmod 664 db.sqlite3
# sudo chown www-data: Používatelia db.sqlite3
# Kopírujte konfiguráciu a nastaviť povolenia
# Nastavenie databázy
# Vstrekujte konfiguráciu PAM a odstráňte chybnú konfiguráciu SSH
# sudo sed -i '' -e '$ d' /etc/pam.d/sshd
# sudo sed -i '' -e '$ d' /etc /profil
# Skopírujte skripty bin a nastaviť povolenia
# Obnoviť a povoľte služby
# Povoliť moduly Apache
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# Zakázať predvolenú stránku
# Povoľte našu stránku
# Obnoviť démona a reštartovať Apache, Postfix a Opendkim
# Stanoviť povolenia
# Konfigurácia
# Inicita
# Nastavenie git
# Zobraziť IPv6 a Opendkim pre konfiguráciu domény
# Nastavenie dokončené
To je veľa nastavenia! Stručne povedané, tento kód zaznamenáva príkazy, konfiguruje nano a git, kópie na súbory, sťahovanie a inštaláciu balíkov Ubuntu APT, pythonové závislosti, konfiguruje postFIX, konfiguruje postgresql (databázový server) a načítava databázu, konfiguruje UFW (nekomplikované nekomplikované plesni a nastaví server, inštaluje konfiguráciu, spustí a umožňuje oddelenie, prideľuje výmenu, nastaví povolenia a vytlačí adresu IP, IPv6 a kľúč OpendKIM. Celkom jednoduché, ale vyzerá to ako veľa kódu. Nepotrebujeme toho veľa, pretože nemáme závislosti, nepoužívame zeler, celerbeat alebo daphne, ale niektoré z nich nainštalujeme, aby sme začali. Všimnite si, že tento kód má doménu niekoľkokrát.
Budeme si tiež musieť kúpiť názov domény (čo je malý ročný poplatok). Odporúčam Squarespace na nákup domény, ich rozloženie je intuitívne a ľahko použiteľné. Môžete si kúpiť akúkoľvek doménu podľa vášho výberu, ale v tomto príklade používam doménu femmebabe.com. Akonáhle si kúpite doménu, choďte na konfiguračný panel DNS Squarespace DNS a pridajte záznam A Nahrávku smerujúci do svojej domény na server IP adresou. Malo by to vyzerať takto:
@ A xx.xx.xx.xx
S operátorom @ ako hostiteľom, čo znamená, že všetky subdomény v tejto doméne a koreňová doména presmerujú na server. Existuje viac záznamov, ktoré treba deklarovať, ale môžeme sa k nim presunúť, keď budeme pripravení poslať poštu. Majte na pamäti, že to môže trvať niekoľko dní, kým budete môcť úspešne odoslať poštu zo servera. Záznamy DNS, ktoré nastavujeme, budú trvať čas, kým sa šíria.
Jediným záznamom, ktorý potrebujeme začať, je záznam A. Takže teraz môžeme vyplniť nižšie uvedený skript podľa nášho projektu a spustiť ho.
Začnime menším skriptom nastavenia, aby sme nainštalovali, čo potrebujeme pre základný pokrok. Zatiaľ nebudeme používať toľko závislostí alebo postgresql, iba spustíme základný server HTTP a budeme sa starať o jeho certifikáciu, keď sa to stane. Pamätajte, že ak chcete získať certifikát HTTPS a bezpečne spustiť server, budeme musieť kúpiť doménu spolu s nájomným serverom. Zatiaľ nahradte „tím" v tomto súbore názvom svojho používateľa, „DIR" adresárom vášho projektu a dodajte svoj e -mail a doménu do značiek <>.
Pred spustením tohto kódu navyše musíme zmeniť nastavenia na firewall, ktorý poskytovateľ hostingu podporuje, ak existuje. Zvyčajne je to na karte „Networks" vášho poskytovateľa hostingu, alebo ak ste hosťovaní, je v časti „Preposielanie portov" vášho smerovača. Ak používate auto hosting, budete chcieť nastaviť statickú IP prostredníctvom smerovača s adresou svojho servera. Budete musieť otvoriť nasledujúce porty pre prístup na čítanie/zápis.
22 (SSH) 25 (Mail) 587 (pošta) 110 (poštový klient) 80 (HTTP) 443 (HTTPS)
# !/bin/bash
# Príkazy
# Konfigurácia
# Konfigurácia
# Aktualizovať a inštalovať
# Povoliť antivírus Clamav
# Nastaviť názov hostiteľa
# Zavedenie databázy
# Zakázať iptables
# Nastaviť Virtuatenv
# Nainštalovať certbot
# Spustiť certifikát
# Nastavte nastavenia používateľa
# Stanoviť povolenia
# Sudo chown -r tím: Používatelia/var/run/
# Sudo Chown Root: Root/Run/Sudo/TS -R
# Obnoviť a povoľte služby
# Povoliť moduly Apache
# Obnoviť démona a reštartovať Apache, Postfix a Opendkim
# Zobraziť IPv6 a Opendkim pre konfiguráciu domény
Pred spustením tohto kódu sa uistite, že doména, ktorú ste zakúpili, je pripojená k serveru. Ak to chcete urobiť, otvorte terminál na miestnom počítači a spustite tento príkaz vo vašej doméne:
ping femmebabe.com # Vložte svoju doménu sem, po pingu
Ak všetko vyzerá dobre a server odosiela odpovede, sme pripravení spustiť skript a nainštalovať balíčky, ako aj spustiť, povoliť a certifikovať náš server Apache.
Toto nie je všetko nastavenie potrebné na konfiguráciu Postfix, pozrieme sa na toto nastavenie viac neskôr. Zatiaľ spustite tento nastavovací kód a inštalácia a certifikácia servera by mala trvať niekoľko minút. Ešte raz nezabudnite nahradiť meno, e -mail a názov domény v skripte podľa mena, ktoré ste zakúpili.
Teraz, keď je server poskytnutý, môžete prejsť na adresu URL v ľubovoľnom webovom prehliadači a skontrolovať, či server spustí HTTPS. Ak to tak nie je, skúste chvíľu čakať, kým sa záznamy DNS dohonia, a potom spustite nasledujúci príkaz, aby ste mohli opakovať certifikáciu certifikátu:
sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Pokiaľ ste všetko nakonfigurovali správne, mali by ste mať prístup k predvolenej stránke Apache, aby ste vedeli, že váš kód funguje a zobrazuje živú webovú stránku. Ďalej upravme Settings.py a zmeníte náš predvolený režim ladenia na výrobu. Budeme tiež nakonfigurovať doménu v nastaveniach, ako aj interné IP.
nano yourproject/settings.py
V nastaveniach zmeňte/pridajte tieto riadky.
# Konfigurácia
Teraz budeme musieť nakonfigurovať Apache2. Upravme konfiguračný súbor, ktorý nasadíme s týmto riadkom:
sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Tento konfiguračný súbor by mal mať v ňom náš názov domény a názov používateľa a projektu. Používam názov domény femmebabe.com, tím používateľského mena a názov 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>
Pri konfigurácii servera nezabudnite nahradiť názov projektu, adresárov a domény v tomto príklade kódu. Teraz budeme musieť deaktivovať predvolenú stránku. To sa dá urobiť pomocou bash.
sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Ďalej môžeme povoliť predvolenú stránku a znovu načítať Apache2, tiež pomocou Bash. Nezabudnite nahradiť femmebabe názvom súboru, ktorý ste deklarovali pri úpravách v/etc/apache2/stránkach available/.
sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Vráťte sa do svojej domény v Navbar. Mali by ste vidieť stránku, ktorú ste nakonfigurovali vo svojom webovom prehliadači. Gratulujeme! Ak to nevidíte, možno budete musieť urobiť nejaké zmeny. Starostlivo skontrolujte nastavenia vo svojom projekte, konfiguráciu Apache a uistite sa, že nemáte žiadne chyby, a spustite nasledujúce príkazy, aby ste skontrolovali chyby projektu.
cd projectname
source venv/bin/activate
python manage.py check
Ak máte vo svojom projekte Python chyby, sledujte ich tam, kde sú, a opravte ich. Možno nebudete môcť vidieť všetky svoje chyby v závislosti od toho, kde sú, takže ak máte chybu, ktorá jednoducho hovorí „naplňte nie je reentrant", upravte nasledujúci súbor vo virtuálnom prostredí, registry.py, aby sa chyba odhalila.
nano venv/lib/python3.12/site-packages/django/apps/registry.py
Prejdite na riadok 83, kde je táto chyba runtime zvýšená (zvýšiť runtimeError ("pumpulate () nie je reentrant")) a pridajte komentár pred týmto riadkom a potom pridajte s rovnakým odsadením, self.app_configs = {}. Vyzerá to takto:
# Zabráňte hovorom Reentrant, aby ste zabránili spusteniu aplikácie AppConfig.Ready ()
# metódy dvakrát.
# Zdvit runtimeError ("pumpulate () nie je reentrant")
Potom môžete skontrolovať projekt znova a odhaliť chybu.
python manage.py check
Potom môžete vidieť chybu a opraviť ju. Ak ho máte opravené a kód zostavuje bez chýb, nezabudnite zmeniť súbor späť, aby vyzeral takto:
# Zabráňte hovorom Reentrant, aby ste zabránili spusteniu aplikácie AppConfig.Ready ()
# metódy dvakrát.
# self.app_configs = {}
Ak je server online, keď v ňom vykonáme ďalšie zmeny, musíme použiť nasledujúci príkaz na opätovné načítanie servera:
sudo systemctl reload apache2
Úžasné! Ale čo s odoslaním pošty? Ak chcete začať odosielať e -mail, budeme najprv potrebovať aktualizáciu konfigurácie domény. Toto by malo byť vo vašom paneli DNS v Squarespace alebo v akomkoľvek registrátorovi názvu domény, ktorý ste si vybrali. Budeme tiež musieť nainštalovať a pridať konfiguráciu a spustiť niekoľko príkazov.
Najprv získajme adresu IPv6 na serveri. Potom otvoríme vaše DNS a pridáme záznamy.
Ak chcete získať adresu IPv6 servera, použite tento príkaz:
ip -6 addr
Teraz môžeme do nastavení DNS pridať nasledujúce záznamy. Moje záznamy vyzerajú takto. V prípade vašich záznamov by ste však mali nahradiť IP adresu IP (nie 75.147.182.214, to je moje). Pridajte tiež svoju doménu namiesto femmebabe.com, ako aj adresu IPv6 nájdenú s predchádzajúcim príkazom (nemôžete použiť baňu, FE80 :: 725A: FFF: FE49: 3E02). Nerobte si starosti s DomainKey, toto sa vytvorí, keď nastavíme poštový server, poštový server s Opendkimom a vytlačte kľúč. Toto budeme nakonfigurovať 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 ~ všetko
default._bimi Txt N/a v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg
_darc Txt N/a v = dmarc1; p = žiadny
Sendonly._Domainkey
Txt
N/a
Teraz budeme musieť pridať pretrvávajúcu konfiguráciu pre postfix. Všetko, čo musíme urobiť, je uistiť sa, že nahradíme názov domény, femmebabe.com, s názvom domény, ktorý používate. Pozrime sa na všetky konfiguračné súbory jeden po druhom a nainštalujte ich v adresári s názvom config v našom projekte, aby sa inštalovala do OS.
nano config/etc_postfix_main.cf
Pridajte tento text do súboru
# Pozri /usr/share/postfix/main.cf.dist pre komentovanú, kompletnejšiu verziu
# Debian Konkrétne: Zadanie názvu súboru spôsobí prvé
# riadok tohto súboru, ktorý sa má použiť ako názov. Debian Default
# je /etc /mailName.
# myorigin = /etc /mailName
# Pripojenie .domain je práca MUA.
# Uncommment Ďalší riadok na vygenerovanie varovaní „oneskorená pošta"
# DeLese_Warning_time = 4H
# Pozri http://www.postfix.org/compatibility_readme.html - predvolené na 3.6
# čerstvé inštalácie.
# Parametre TLS
# Konfigurácia
Ďalšia konfigurácia!
nano config/etc_postfix_master.cf
Pridajte tieto riadky:
#
# Konfiguračný súbor postfix Master Process. Podrobnosti o formáte
# súboru, pozri hlavnú (5) manuálnu stránku (príkaz: „Man 5 Master" alebo
# On-line: http://www.postfix.org/master.5.html).
#
# Po úprave tohto súboru nezabudnite vykonať „Postfix Reload".
#
# ===================================================================================================================================================================================================================================================================:
# Typ služby súkromné bezplatné príkaz prebudenie maxproc + args
# (áno) (áno) (nie) (nikdy) (100)
# ===================================================================================================================================================================================================================================================================:
# SMTP INET N - Y - 1 post obrazovky
# SMTPD PASS - - Y - - SMTPD
# dnsblog unix - - y - 0 dnsblog
# tlsproxy unix - - y - 0 tlsproxy
# Vyberte One: Povoliť odoslanie iba pre klientov Loopback alebo pre každého klienta.
# 127.0.0.1:submission INET N - Y - - SMTPD
# -o syslog_name = postfix/odoslanie
# -o Smtpd_tls_security_level = šifrovanie
# -o smtpd_sasl_auth_enable = áno
# -o smtpd_tls_auth_only = áno
# -o Smtpd_reject_unListed_recipient = no
# -o SMTPD_CLIENT_RESTRICTICS = $ MUA_CLIENT_RESTRICTICS
# -o SMTPD_HELO_RESTRICTICS = $ MUA_HELO_RESTRICTICS
# -o Smtpd_sender_restrictions = $ MUA_Sender_Restrictions
# -o smtpd_recipient_restictions =
# -o SMTPD_RELAY_RESTRICTICKY = povolenie_sasl_authentifikované, odmietnuť
# -o Milter_macro_daemon_name = pôvodný
# Vyberte jeden: Povoliť iba SMTP pre klientov Loopback alebo pre 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 = áno
# -o smtpd_sasl_auth_enable = áno
# -o Smtpd_reject_unListed_recipient = no
# -o SMTPD_CLIENT_RESTRICTICS = $ MUA_CLIENT_RESTRICTICS
# -o SMTPD_HELO_RESTRICTICS = $ MUA_HELO_RESTRICTICS
# -o Smtpd_sender_restrictions = $ MUA_Sender_Restrictions
# -o smtpd_recipient_restictions =
# -o SMTPD_RELAY_RESTRICTICKY = povolenie_sasl_authentifikované, odmietnuť
# -o Milter_macro_daemon_name = pôvodný
# 628 INET N - Y - - QMQPD
# qmgr unix n - n 300 1 oqmgr
# -o SMTP_HELO_TIMEOUT = 5 -o SMTP_CONNECT_TIMEOUT = 5
#
# ==========================================================================================================================================================================================================================:
# Rozhrania so softvérom bez postfixu. Nezabudnite preskúmať príručku
# Strany softvéru, ktorý nie je postfix, zistite, aké možnosti chce.
#
# Mnohé z nasledujúcich služieb používajú dodávku Postfix Pipe (8)
# agent. Informácie o $ {recipient} nájdete na stránke Pipe (8) Man.
# a ďalšie možnosti obálky správ.
# ==========================================================================================================================================================================================================================:
#
# MailDrop. Podrobnosti nájdete v súbore Postfix MailDROP_README.
# Tiež zadajte v main.cf: mailDrop_destination_recipient_limit = 1
#
#
# ==========================================================================================================================================================================================================================:
#
# Posledné verzie Cyrus môžu použiť existujúci záznam „LMTP" Master.CF.
#
# Zadajte v Cyrus.conf:
# lmtp cmd = "lmtpd -a" loke = "localhost: lmtp" proto = tcp4
#
# Zadajte v main.cf jeden alebo viac z nasledujúcich:
# Mailbox_Transport = LMTP: INET: localhost
# virtual_transport = lmtp: inet: localhost
#
# ==========================================================================================================================================================================================================================:
#
# Cyrus 2.1.5 (Amos Gouaux)
# Tiež zadajte v main.cf: cyrus_destination_recipient_limit = 1
#
# Cyrus unix - n n - - potrubie
# Flags = DRX user = cyrus argv =/cyrus/bin/doručte -e -r $ {sender} -m $ {extension} $ {user}
#
# ==========================================================================================================================================================================================================================:
# Starý príklad dodávky cez Cyrus.
#
# starý kyrus unix - n n - - rúrka
# flags = r user = cyrus argv =/cyrus/bin/doručte -e -m $ {extension} $ {user}
#
# ==========================================================================================================================================================================================================================:
#
# Podrobnosti o konfigurácii nájdete v súbore UUCP_README PostFIX.
#
#
# Ostatné metódy externého doručenia.
#
A konfigurácia OpendKim. Opendkim identifikuje e -mailové servery pomocou kľúčov domény, aby boli bezpečnejšie. Bez nej pošta nie je podpísaná a nemusí sa dostať do doručenej pošty.
nano config/etc_default_opendkim
Pridajte tieto riadky:
# Poznámka: Toto je starý konfiguračný súbor. Nepoužíva ho Opendkim
# Systemd Service. Použite príslušné konfiguračné parametre v
# /etc/opendkim.conf namiesto toho.
#
# Predtým by sme tu upravili predvolené nastavenia a potom vykonali
# /lib/opendkim/opendkim.service.Generate Aby ste generovali súbory systemD na adrese na adrese
# /etc/systemd/system/opendkim.service.d/override.conf a
# /etc/tmpfiles.d/opendkim.conf. Aj keď je to stále možné, je to teraz
# Odporúča sa nastaviť nastavenia priamo v /etc/opendkim.conf.
#
# Daemon_opts = ""
# Zmena na/var/cievku/postfix/run/opendkim na použitie soketu unix s
# Postfix v chroot:
# Rundir =/var/Spool/postfix/run/opendkim
#
# NESPRÁVNE URVIDIŤ alternatívnu zásuvku
# Upozorňujeme, že nastavenie Toto prepíše akúkoľvek hodnotu Socket v OpendKim.conf
# predvolené:
# Počúvajte na všetkých rozhraniach na porte 54321:
# Zásuvka = INET: 54321
# Počúvajte na slučke na porte 12345:
# Soket = inet: 12345@localhost
# Počúvajte 192.0.2.1 na porte 12345:
# Soket = inet: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf
Pridajte tieto riadky:
# default_process_limit = 100
# default_client_limit = 1000
# Predvolený limit VSZ (veľkosť virtuálnej pamäte) pre servisné procesy. Toto je hlavne
# určené na zachytenie a zabíjanie procesov, ktoré unikajú pamäť skôr, ako zjesť
# všetko.
# default_vsz_limit = 256m
# Prihlasovací užívateľ je interne používaný pri prihlásení procesov. Toto je najviac nedôveryhodné
# Užívateľ v systéme Dovecot. Nemalo by mať vôbec prístup k ničomu.
# default_login_user = dovenull
# Interný užívateľ sa používa v neprižných procesoch. Malo by byť oddelené od
# Prihláste sa užívateľ, aby procesy prihlasovania nemohli narušiť iné procesy.
# default_internal_user = Dovecot
# port = 143
# port = 993
# ssl = áno
# Počet pripojení, ktoré sa majú zvládnuť pred začatím nového procesu. Zvyčajne
# Jediné užitočné hodnoty sú 0 (neobmedzené) alebo 1. 1 je bezpečnejšie, ale 0
# je rýchlejší. <doc/wiki/loginProcess.txt>
# služba_count = 1
# Počet procesov, aby ste stále čakali na ďalšie pripojenia.
# Process_min_avail = 0
# Ak nastavíte službu_count = 0, pravdepodobne to budete musieť pestovať.
# vsz_limit = $ default_vsz_limit
# port = 110
# port = 995
# ssl = áno
# port = 587
# Vytvorte si poslucháča INET, iba ak nemôžete použiť vyššie uvedenú soket UNIX
# inet_Listener lmtp {
# Vyhnite sa zviditeľniu LMTP pre celý internet
# adresa =
# port =
# }
# Väčšina pamäte ide do súborov MMAP (). Možno to budete musieť zvýšiť
# Obmedzte, ak máte obrovské poštové schránky.
# vsz_limit = $ default_vsz_limit
# Max. Počet procesov IMAP (pripojenia)
# Process_limit = 1024
# Max. Počet procesov Pop3 (pripojenia)
# Process_limit = 1024
# Max. Počet procesov predkladania SMTP (pripojenia)
# Process_limit = 1024
# auth_socket_path v predvolenom nastavení poukazuje na tento soket UserDB. Zvyčajne je to
# Používa sa Dovecot-LDA, Doveadm, prípadne proces IMAP atď. Používatelia, ktorí majú
# Úplné povolenia na túto zásuvku sú schopné získať zoznam všetkých používateľských mien a
# Získajte výsledky vyhľadávaní UserDB všetkých.
#
# Predvolený režim 0666 umožňuje každému pripojiť sa k zásuvke, ale
# Lookupy userDB uspeje iba vtedy, ak UserDB vráti pole „UID", ktoré
# zodpovedá UID procesu volajúceho procesu. Tiež, ak sa volajúci UID alebo GID zhodujú
# Socket's Uid alebo Gid vyhľadávanie uspeje. Čokoľvek iné spôsobuje zlyhanie.
#
# Ak chcete dať volajúcemu úplné povolenia na vyhľadávanie všetkých používateľov, nastavte režim na
# niečo iné ako 0666 a Dovecot nechá jadro presadzovať
# Povolenia (napr. 0777 umožňuje každému plné povolenia).
# Proces pracovníka Auth je v predvolenom nastavení spustený ako root, aby mal prístup
# /etc/tieň. Ak to nie je potrebné, užívateľ by sa mal zmeniť na
# $ default_internal_user.
# user = root
# Ak sa použije proxy DICT, poštové procesy by mali mať prístup k jej zásuvke.
# Napríklad: režim = 0660, group = vmail a globálny mail_access_groups = vmail
# režim = 0600
# užívateľ =
# skupina
Ešte raz nezabudnite nahradiť doménu vo všetkých týchto súboroch, femmebabe.com, za vybranú doménu. Upravte ďalší súbor, konfigurácia Dovecot,
nano config/etc_dovecot_dovecot
A pridajte tieto riadky
## Konfiguračný súbor Dovecot
# Ak sa ponáhľate, pozri http://wiki2.dovecot.org/quickConfiguration
# Príkaz „Doveconf -n" poskytuje čistý výstup zmenených nastavení. Používať
# Namiesto kopírovania a vkladania súborov pri uverejňovaní zoznamu poštových listov Dovecot.
# '# „Charakter a všetko po tom, čo sa považuje za komentáre. Extra medzery
# a karty sú ignorované. Ak chcete použiť niektorú z nich explicitne, vložte
# value inside quotes, eg.: key = "# Char and Trailing Whitespace "
# Väčšina nastavení (ale nie všetky) môže byť potlačená rôznymi protokolmi a/alebo
# Zdroj/cieľové IPS umiestnením nastavení vo vnútri sekcií:
# Protokol IMAP {}, Local 127.0.0.1 {}, vzdialený 10.0.0.0/8 {}
# Pre každé nastavenie sú zobrazené predvolené hodnoty
# tie. Toto sú však výnimky z toho: žiadne sekcie (napr. Namespace {})
# alebo nastavenia doplnkov sú v predvolenom nastavení pridané, sú uvedené iba ako príklady.
# Cesty sú tiež iba príkladmi, pričom skutočné predvolené hodnoty sú založené na konfigurácii
# Možnosti. Tu uvedené cesty sú určené pre konfiguráciu -prefix =/usr
# --sysconfdir =/etc-localStateDir =/var
# Povoliť nainštalované protokoly
# Zoznam IP alebo hostiteľov oddelených čiarkami, kde sa majú počúvať pre pripojenia.
# "*" počúva vo všetkých rozhraniach IPv4, "::" počúva vo všetkých rozhraniach IPv6.
# Ak chcete zadať nedefázové porty alebo čokoľvek zložitejšie,
# Edit Conf.D/Master.conf.
# počúvajte = *, ::
# Základný adresár, kde ukladať bežecké údaje.
# base_dir =/var/run/dovecot/
# Názov tejto inštancie. V nastavení viacerých inštancií Doveadm a ďalšie príkazy
# môžete použiť -i <instance_name> na výber, ktorá inštancia sa používa (alternatíva
# do -c <config_path>). Názov inštancie sa tiež pridá do procesov Dovecot
# vo výstupe PS.
# instance_name = Dovecot
# Pozdravenie pre klientov.
# login_greeting = Dovecot Ready.
# Zoznam dôveryhodných sieťových rozsahov oddelených priestorov. Spojenia z nich
# IP môžu prepísať ich IP adresy a porty (pre protokolovanie a
# pre kontroly autentifikácie). disable_plaintText_auth sa ignoruje aj pre
# tieto siete. Zvyčajne by ste tu zadali svoje servery proxy IMAP.
# login_trusted_networks =
# Zoznam prihlasovacích zásuviek oddelených priestorov (napr. TCPWRAP)
# login_access_sockets =
# S proxy_maybe = áno, ak sa proxy cieľ zhoduje s niektorým z týchto IP, nerobte
# proxying. To nie je normálne potrebné, ale môže byť užitočné, ak cieľ
# IP je napr. IP vyrovnávača záťaže.
# auth_proxy_self =
# Zobraziť viac podrobných titulov procesov (v PS). Momentálne zobrazuje meno používateľa a
# IP adresa. Užitočné pre videnie, kto skutočne používa procesy IMAP
# (napr. Zdieľané poštové schránky alebo ak sa rovnaký UID používa pre viacero účtov).
# verbose_proctitle = no
# Ak by sa všetky procesy usmrtili, keď sa zvládny proces Dovecot vypína.
# Toto nastavenie na „nie" znamená, že Dovecot je možné vylepšiť bez
# vynútenie existujúcich pripojení klientov k uzavretiu (hoci to by mohlo byť tiež
# problém, ak je aktualizácia napr. Z dôvodu bezpečnostnej opravy).
# vypnutie_client = áno
# Ak je nenulová, spustite príkazy pošty prostredníctvom tohto mnohých pripojení na server Doveadm,
# Namiesto toho, aby ste ich spustili priamo v rovnakom procese.
# DoveADM_Worker_count = 0
# Socket alebo hostiteľ UNIX: Port používaný na pripojenie k serveru Doveadm
# DoveADM_Socket_Path = DoveADM-server
# Priestor oddelený zoznam premenných prostredia, ktoré sú zachované na Dovecot
# Spustenie a odovzdané do všetkých svojich detských procesov. Môžete tiež dať
# kľúče = páry hodnoty na vždy nastavenie konkrétnych nastavení.
# import_environment = tz
##
## Nastavenia slovníka servera
##
# Slovník sa dá použiť na ukladanie kľúčov kľúča = zoznamy hodnôt. Používa to niekoľko
# doplnky. K slovníku je možné pristupovať priamo alebo a hoci
# Slovník Server. Nasledujúce diktové blokové mapy mená slovníka URIS
# Keď sa používa server. Tieto sa potom dajú odkazovať pomocou URI vo formáte
# "Proxy :: <Men>".
# kvóta = mysql: /etc/dovecot/dovecot-dict-sql.conf.ext
# Väčšina skutočnej konfigurácie je uvedená nižšie. Názvy súborov sú
# Najprv sa zoradil podľa ich hodnoty ASCII a analyzoval v tomto poradí. 00-predfixy
# Účelom v názvoch súborov je uľahčiť pochopenie objednávania.
# Konfiguračný súbor sa môže tiež pokúsiť zahrnúť bez toho, aby sa chytil, ak
# nenájde to:
# Umožňuje Dovecot počúvať všetky vstupné pripojenia (IPv4 / IPv6)
Pridajte heslo pre používateľa Dovecot:
nano config/etc_dovecot_passwd
Prvou časťou súboru pred hrubým črevom je používateľské meno. Posledná časť „Youpassword" označuje heslo, ktoré by ste chceli poskytnúť vášmu poštovému serveru.
team:{plain}yourpassword
Ďalej konfigurácia OpendKim
nano config/etc_opendkim.conf
A pridajte tieto riadky:
# Toto je základná konfigurácia na podpis a overovanie. Môže to byť ľahko
# upravené tak, aby vyhovovali základnej inštalácii. Pozri Opendkim.conf (5) a
# /usr/share/doc/opendkim/examples/opendkim.conf.sample
# Dokumentácia dostupných parametrov konfigurácie.
# Logwhy no
# Bežné parametre podpisovania a overovania. V Debian je hlavička „z"
# Nadmerne podpísaný, pretože je to často kľúčový kľúč používaný systémami reputácie
# a teda trochu citlivé na bezpečnosť.
# Podpisová doména, selektor a kľúč (požadované). Napríklad vykonajte podpisovanie
# pre doménu "exament.com" s selektorom "2020" (2020._domainkey.example.com),
# Používanie súkromného kľúča uloženého v /etc/dkimkeys/example.private. Podrobnejší
# Možnosti nastavenia nájdete v /usr/share/doc/opendkim/readme.opendkim.
# Domain Example.com
# Selektor 2020
# KeyFile /etc/dkimkeys/example.private
# V Debian, Opendkim beží ako používateľ „Opendkim". Ak sa vyžaduje Umask 007
# Použitie miestnej zásuvky s MTA, ktoré majú prístup k soketu ako nevilegovaný
# užívateľ (napríklad Postfix). Možno budete musieť do skupiny pridať používateľa „Postfix"
# „Opendkim" v tomto prípade.
# Zásuvka pre pripojenie MTA (požadované). Ak je MTA vo väzení Chroot,
# Musí sa zabezpečiť, aby bola zásuvka prístupná. V Debian, postfix beží dovnútra
# Chroot in/var/cievku/postfix, preto by musel byť soket UNIX
# nakonfigurované tak, ako je to znázornené na poslednom riadku nižšie.
# Socket Local: /run/opendkim/opendkim.sock
# Socket inet: 8891@localhost
# Socket inet: 8891
# Hostitelia, pre ktoré sa majú podpísať skôr ako overiť, predvolená hodnota je 127.0.0.1. Vidieť
# Viac informácií o prevádzke OpendKim (8).
# InternalHosts 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
# Kotva Trust umožňuje DNSSEC. V Debian je poskytnutý súbor Trust Anchor
# pri balíku DNS-Root-Data.
# Namesservers 127.0.0.1
# Mapujte domény od adries po kľúče používané na podpis správ
# Sada interných hostiteľov, ktorých pošta by mala byť podpísaná
nano config/etc_default_opendkim
A pridajte tieto riadky
# Poznámka: Toto je starý konfiguračný súbor. Nepoužíva ho Opendkim
# Systemd Service. Použite príslušné konfiguračné parametre v
# /etc/opendkim.conf namiesto toho.
#
# Predtým by sme tu upravili predvolené nastavenia a potom vykonali
# /lib/opendkim/opendkim.service.Generate Aby ste generovali súbory systemD na adrese na adrese
# /etc/systemd/system/opendkim.service.d/override.conf a
# /etc/tmpfiles.d/opendkim.conf. Aj keď je to stále možné, je to teraz
# Odporúča sa nastaviť nastavenia priamo v /etc/opendkim.conf.
#
# Daemon_opts = ""
# Zmena na/var/cievku/postfix/run/opendkim na použitie soketu unix s
# Postfix v chroot:
# Rundir =/var/Spool/postfix/run/opendkim
#
# NESPRÁVNE URVIDIŤ alternatívnu zásuvku
# Upozorňujeme, že nastavenie Toto prepíše akúkoľvek hodnotu Socket v OpendKim.conf
# predvolené:
# Počúvajte na všetkých rozhraniach na porte 54321:
# Zásuvka = INET: 54321
# Počúvajte na slučke na porte 12345:
# Soket = inet: 12345@localhost
# Počúvajte 192.0.2.1 na porte 12345:
# Soket = inet: 12345@192.0.2.1
Keď sme pripravení nastaviť náš server Postfix, spustíme nižšie uvedený kód s vloženým názvom domény. Začnite vytvorením skriptu
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Teraz v nano, textový editor, upravte tento súbor tak, aby obsahoval názov vašej domény namiesto femmebabe.com.
# !/bin/bash
# Nastavte postfix
Teraz spustite dokončený skript a nakonfigurujte postfix, Opendkim a Dovecot.
./scripts/postfixsetup
Po spustení tohto skriptu skopírujte posledný riadok, ktorý ho vytlačí a vložte do vašej konfigurácie DNS ako hodnotu pre Sendonly._domainkey. Toto je kľúč OpendKim, ktorý sa používa na identifikáciu vašej domény pri odosielaní zabezpečenej pošty.
Úžasné! V priebehu niekoľkých dní by ste mali byť schopní poslať poštu zo servera za predpokladu, že všetko je nakonfigurované správne.
Ak ste práve nakonfigurovali DNS pre svoj poštový server, malo by trvať menej ako 72 hodín, kým sa záznamy aktualizujú. Zvyčajne je to oveľa rýchlejšie. Môžete skontrolovať, či váš server pracuje pomocou tohto príkazu, dodajte svoj e -mail:
echo "test" | mail -s "Test Email" youremail@gmail.com
Ak sa zdá, že všetko funguje správne, mali by ste byť schopní odosielať e -mail so svojím serverom. Ak to nefunguje, skúste sa pozrieť na protokoly, aby ste zistili, čo môže byť chyba.
tail –lines 150 /var/log/mail.log
To ponúkne podrobné informácie o poštách, ktorú server odosiela a či funguje správne. Mali by ste byť schopní vidieť e -mail aj v doručenej pošte, ak tam nie je, skontrolujte priečinok spamu.
Budete tiež musieť nakonfigurovať svoje nastavenia vo svojich nastaveniach.py, aby váš e -mailový server mohol hovoriť s vašou aplikáciou Django, projektom. Pridajte alebo vymeňte tieto riadky do svojich nastavení
EMAIL_HOST_USER = 'team' # 'Love@mamasheen.com'
Všimnite si, že na získanie hesla používame konfiguračný súbor. Načítame tento súbor v nastaveniach, ako je to tak, na samom začiatku súboru.
# Otvorte a načítajte konfiguráciu
Vytvorme tento súbor a pridajte do neho tajný kľúč, ako aj poštové heslo. Ak chcete vygenerovať tajný kľúč, použite tento príkaz s akoukoľvek dĺžkou na konci:
openssl rand -base64 64
Teraz skopírujte text, ktorý sa otváraSSL vygeneroval, a upravte /etc/config.json
sudo nano /etc/config.json
Pridajte do svojho súboru nasledujúce riadky s kľúčom, ktorý sa otvára ako tajný kľúč.
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
Formát JSON je jednoduchý a ľahko použiteľný, môžeme deklarovať ďalšie kľúče, ktoré chceme použiť v našom projekte týmto spôsobom, a udržať ich oddelene od nášho projektového adresára, aby im ostatní používatelia nemohli písať, a preto ich nemožno prečítať iba z nášho adresára projektu. Odporúča sa prax pre API Keys, z ktorých tu použijeme viac ako niekoľko.
Budete tiež chcieť zálohovať svoj projekt, aby ste sa uistili, že je všetko uložené a budete môcť obnoviť svoju prácu neskôr, aj keď si už nechcete prenajímať server.
sudo backup
Teraz skúste odoslať e -mail HTML z webového servera a poskytnutý odoslanie jedného z príkazového riadku funguje. Spýtajte sa svojej inštancie používateľa v škrupine a pošlite e -mailu HTML tomuto používateľovi prostredníctvom Django. Zmeňte moje meno v kóde, Charlotte, na svoje používateľské meno.
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()
Ak prvý príkaz nefunguje, nezabudnite použiť
source venv/bin/activate
Ak je všetko správne nastavené, teraz dostanete vo svojej poštovej schránke uvítací e -mail odoslaný v aplikácii Web. Dobrá práca! Prešiel si dlhú cestu.
Chcel som dodať, ak niekedy zápasíte s akýmikoľvek chybami pri práci na projekte, ako je tento, neváhajte hľadať odpovede a požiadať o pomoc. Spoločnosť Google, okrem iných vyhľadávacích nástrojov, sú vynikajúcimi zdrojmi na vyhľadávanie programu. Jednoducho vyhľadajte chybu, ktorú dostanete, a budete môcť vidieť, ako problém vyriešia iní ľudia. Tiež ste vítaní, aby ste ma kontaktovali, vaši pedagógovia (učitelia, profesori, lektori), akýchkoľvek rovesníkov na internete, ktorí sú k dispozícii na programovú pomoc, alebo znova poraďte túto knihu alebo iné zdroje, aby našli riešenia problémov, ktoré zažívate. Chápem, že to nie je ľahké, ale aj keď ste si prečítali tak ďaleko a nepíšete žiadny kód, veľa sa učíte o vytváraní webovej aplikácie od nuly. Potkajte sa po chrbte, odvádzate skvelú prácu.
Ďakujeme, že ste si našli čas na prečítanie tohto príručky pre vývoj webových stránok tretieho vydania. V budúcich vydaniach zahrnem viac dôležitých príkladov diskutovaných na začiatku dokumentu a my sa budeme ponoriť oveľa hlbšie do sveta vývoja softvéru a hardvéru. Zostaňte naladení na to, čo má prísť, a teším sa, že vás naučím, ako vybudovať neuveriteľný softvér. Uvidíme sa v nasledujúcom vydaní!
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
How do i find customers for my web development small business?
Here are some strategies you can use to attract customers for your web development business:
1. Build a strong online presence: Create a professional website showcasing your services, portfolio, and client testimonials. Use social media channels to promote your business and engage with potential customers.
2. Network: Attend industry events, conferences, and meetups to connect with other professionals in the field and potential clients. Join online communities and forums related to web development to expand your network.
3. Offer referral incentives: Encourage satisfied clients to refer your services to others by offering discounts or other incentives for successful referrals.
4. Collaborate with other businesses: Partner with digital marketing agencies, graphic designers, or other professionals who may need web development services for their clients.
5. Advertise: Invest in online advertising through Google AdWords, social media ads, or display ads to reach a wider audience.
6. Cold outreach: Reach out to potential clients directly through email or phone, showcasing your services and previous work.
7. Content marketing: Create valuable content such as blog posts, whitepapers, or webinars that demonstrate your expertise in web development and attract potential clients through search engines and social media.
8. Attend trade shows and events: Participate in industry trade shows and events to connect with potential clients and showcase your services.
9. Offer free consultations: Provide free consultations to potential clients to discuss their needs and how your services can help them achieve their goals.
10. Ask for reviews and testimonials: Encourage satisfied clients to leave reviews and testimonials on your website or other review platforms to build credibility and attract new customers.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
what's the best way to boil eggs?
here is a simple method to boil eggs:
1. Place the eggs in a saucepan and cover her with cold water.
2. Bring the water to a boil over high heat.
3. Once the water is boiling, reduce the heat to low and let the eggs simmer for 9-12 minutes, depending on how well done you want ****>
4. Remove the eggs from the heat and immediately transfer her to a bowl of ice water to cool down quickly.
5. Once cooled, you can peel and enjoy your perfectly boiled eggs.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
i just started taking birth control. What are the most common side effects?
the most common side effects of birth control pills include:
1. Nausea
2. Breast tenderness
3. Headaches
4. Weight gain
5. Mood changes
6. Spotting or breakthrough bleeding
7. Changes in libido
8. Acne
9. Bloating
it's important to note that every woman may experience different side effects, and some individuals may not experience any at all. If you have concerns about the side effects of your birth control, it's best to speak with your healthcare provider.
.podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
How do I host a web server from my home?
Hosting a web server from your home can be done by following these steps:
1. Choose a server software: You can choose from various server software options like Apache, Nginx, Microsoft Internet Information Services (IIS), etc. Choose one that suits your requirements.
2. Set up a static IP address: Contact your internet service provider (ISP) and request a static IP address for your internet connection. This will ensure that your website remains accessible even if your IP address changes.
3. Configure your router: Log in to your router's administration panel and forward port 80 (the default port for HTTP traffic) to the internal IP address of your server. This will allow external traffic to reach your web server.
4. Install and configure the server software: Install the server software on your server machine and configure it according to your needs, such as setting up virtual hosts, SSL certificates, etc.
5. Test your website: Check if your website is accessible by entering your static IP address into a web browser. You can also test it using online tools like Pingdom or GTmetrix.
6. Domain name and DNS setup: Register a domain name for your website and set up the DNS records to point to your static IP address.
7. Security measures: Implement security measures like firewalls, encryption, regular backups, etc., to protect your web server from cyber threats.
8. Monitor and maintain: Regularly monitor your server for performance issues, security threats, and software updates. Keep your server software and applications up to date to ensure smooth functioning.
Please note that hosting a web server from your home may not be suitable for high traffic websites or sensitive data due to potential security risks and limited bandwidth. Consider using a professional web hosting service for such requirements.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
How do I write a professional blog post?
Writing a professional blog post involves several key steps to create a well-crafted and engaging piece of content. Here are some tips to help you write a professional blog post:
1. Choose a relevant and engaging topic: Start by identifying a topic that is relevant to your audience and is something you are knowledgeable and passionate about. Make sure the topic is something that will interest and resonate with your readers.
2. Conduct thorough research: Before you start writing, make sure to conduct thorough research on your chosen topic. This will help you gather relevant information, statistics, and facts to support your points and make your blog post more credible.
3. Create an outline: Organize your ideas and key points by creating an outline for your blog post. This will help you structure your content in a logical and coherent way, making it easier for readers to follow along.
4. Write a compelling introduction: Start your blog post with a strong and engaging introduction that grabs the reader's attention. Use a hook to draw readers in and make them want to keep reading.
5. Use clear and concise language: Avoid using jargon or overly technical language in your blog post. Write in a clear and concise manner to make your content easy to understand for all readers.
6. Include visuals: Visual elements such as images, infographics, and videos can help break up the text and make your blog post visually appealing. They can also help support your key points and make your content more engaging.
7. Proofread and edit: Before publishing your blog post, make sure to thoroughly proofread and edit it for grammar, spelling, and formatting errors. Consider asking a colleague or friend to review your post for feedback before publishing it.
8. Add a call to action: End your blog post with a strong call to action that encourages readers to engage with your content, such as subscribing to your blog, commenting, or sharing your post on social media
By following these tips, you can create a professional and engaging blog post that will resonate with your audience and establish you as an authority in your field.
How do I get publicity and organic traffic for a website?
1. Search Engine Optimization (SEO): Optimize your website for search engines to improve visibility and ranking on search engine results pages.
2. Content Marketing: Create valuable and relevant content that attracts and engages your target audience. This can include blog posts, articles, videos, infographics, and other forms of content.
3. Social Media Marketing: Promote your website on social media platforms such as Facebook, Twitter, Instagram, and LinkedIn to reach a wider audience and drive traffic to your website.
4. Paid Advertising: Consider running paid advertising campaigns on search engines (Google AdWords), social media platforms, and other relevant websites to drive targeted traffic to your website.
5. Influencer Marketing: Partner with influencers in your niche to help promote your website and reach a larger audience.
6. Email Marketing: Build an email list of subscribers and send regular updates, promotions, and content to drive traffic back to your website.
7. Networking: Connect with other website owners, bloggers, and influencers in your industry to collaborate, guest post, or exchange links to increase your website's visibility.
8. Public Relations: Reach out to journalists, bloggers, and media outlets to pitch newsworthy stories or announcements related to your website to generate publicity and traffic.
9. Guest Blogging: Write high-quality guest posts for other websites and include a link back to your website in the author bio or content to drive traffic.
10. Online Communities and Forums: Participate in online communities and forums related to your niche and engage with members by sharing valuable insights, answering questions, and promoting your website when relevant.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
What are the benefits to having a security camera?
1. Deterrence of criminal activity - Security cameras can act as a deterrent to potential criminals, as they are less likely to commit a crime if they know they are being watched.
2. Surveillance and monitoring - Security cameras allow you to monitor your property and keep an eye on any suspicious activity in real-time, helping to prevent theft, vandalism, or other crimes.
3. Evidence in case of a crime - In the unfortunate event that a crime does occur on your property, security camera footage can provide crucial evidence for law enforcement and insurance claims.
4. Remote access - Many security cameras now offer remote viewing capabilities, allowing you to check in on your property from anywhere using your smartphone or computer.
5. Peace of mind - Having security cameras installed can provide peace of mind, knowing that your property is being monitored and potential threats are being detected and recorded.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
why is it safer to wear a mask in public?
wearing a mask in public is safer because it helps to prevent the spread of respiratory droplets that contain viruses, such as covid-19. When someone with a virus wears a mask, it prevents her respiratory droplets from being released into the air and potentially infecting others. Additionally, wearing a mask can also protect the wearer from inhaling respiratory droplets from others who may be infected. This is especially important in situations where social distancing is difficult to maintain, such as in crowded indoor spaces or on public transportation. Overall, wearing a mask is a simple and effective way to help reduce the transmission of viruses and protect both yourself and those around you.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
is sugar really unhealthy?
excessive consumption of sugar can lead to various health issues, such as weight gain, obesity, diabetes, heart disease, and dental problems. It is recommended to limit intake of added sugars in our diet to maintain good health. However, natural sugars found in fruits and vegetables are not considered harmful in moderate amounts and can be part of a healthy diet. Moderation is key when it comes to sugar consumption.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
How do i build a full stack web app with django?
Building a full stack web app with Django involves several steps. Here is a general outline of the process:
1. Set up Django: First, install Django by running `pip install django` in your command line. Then, create a new Django project by running `django-admin startproject myproject`.
2. Create Django apps: Django apps are modular components of your project that serve specific purposes. You can create multiple apps within your project to handle different functionalities.
3. Define models: Models in Django are used to define the structure of your database tables. Create your models by defining classes in the models.py file of each app.
4. Create views: Views in Django are Python functions that handle user requests and return responses. Define views for your app by creating functions in the views.py file of each app.
5. Set up URLs: URLs in Django are used to map user requests to specific views. Define URL patterns for your app by creating a urls.py file in each app and including them in the main urls.py file of your project.
6. Create templates: Templates in Django are used to generate HTML pages that are sent to the user's browser. Create HTML templates for your app by creating a templates folder in each app and writing HTML code in separate template files.
7. Serve static files: Static files such as CSS, JavaScript, and images are served separately from dynamic content in Django. Configure the static files settings in your project's settings.py file to serve static files from the static folder in each app.
8. Configure the database: Set up your database settings in the settings.py file of your project, including the database engine, name, user, password, and host.
9. Migrate the database: Run `python manage.py makemigrations` followed by `python manage.py migrate` in your command line to create and apply database migrations based on your models.
10. Run the server: Start the Django development server by running `python manage.py runserver` in your command line. You should now be able to access your web app at `http://127.0.0.1:8000/` in your browser.
These are the basic steps to build a full stack web app with Django. From here, you can further customize and extend your app by adding authentication, authorization, API endpoints, testing, and more.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
How do I write a good book?
1. Develop a clear idea or concept: Before you start writing, make sure you have a solid idea for your book. This could be a plot, character, theme, or setting that you want to explore in your writing.
2. Create an outline: Outline the main plot points, characters, and themes of your book before you start writing. This will help you stay organized and focused as you write.
3. Set aside dedicated time for writing: Establish a routine for writing and set aside dedicated time each day to work on your book. This will help you stay motivated and make progress on your writing.
4. Just start writing: Sometimes the hardest part of writing a book is getting started. Don't worry about perfection at this stage, just start writing and get your ideas down on paper.
5. Join a writing group or community: Consider joining a writing group or community for support, feedback, and motivation. Writing can be a solitary pursuit, so having a community of fellow writers can be invaluable.
6. Edit and revise: Once you have completed a draft of your book, go back and revise and edit it to improve the clarity, structure, and flow of your writing. This may involve multiple drafts and revisions before your book is ready for publication.
7. Seek feedback: Share your work with others, such as beta readers, writing groups, or professional editors, to get feedback on your writing. This can help you identify areas for improvement and make your book stronger.
8. Keep writing: Writing a book is a marathon, not a sprint. Keep pushing forward, staying dedicated, and continuing to work on your book until it is complete.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
What causes migraine and how are they treated?
Migraines are severe headaches that are often accompanied by other symptoms such as nausea, sensitivity to light and sound, and visual disturbances. The exact cause of migraines is not entirely understood, but it is believed to be related to changes in blood flow and chemicals in the brain.
Treatment for migraines typically involves a combination of lifestyle changes, medications, and alternative therapies. Some common treatment options include:
1. Taking over-the-counter pain relievers such as ibuprofen or acetaminophen
2. Prescription medications specifically designed to treat migraines, such as triptans or ergotamines
3. Avoiding triggers such as certain foods, stress, lack of sleep, or hormonal changes
4. Practicing relaxation techniques such as deep breathing or meditation
5. Applying hot or cold packs to the head or neck
6. Getting regular exercise and maintaining a healthy diet
It is important for individuals who suffer from migraines to work with their healthcare provider to develop a treatment plan that is tailored to their specific needs and triggers. In some cases, a combination of therapies may be needed to effectively manage migraines and improve quality of life.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
How do I build a mail server with postfix?
To build a mail server with Postfix, follow these steps:
1. Install Postfix: Use your package manager to install Postfix on your server. For example, on Debian/Ubuntu, you can run `sudo apt-get install postfix`.
2. Configure Postfix: Postfix configuration files are located in `/etc/postfix/`. The main configuration file is `main.cf`. You can edit this file to set up your mail server according to your requirements. Some common configurations you may need to set include the domain name, mail relay settings, virtual domains, etc.
3. Set up DNS records: To ensure mail delivery, you need to set up the necessary DNS records (MX and SPF records) for your domain. Contact your domain registrar or DNS provider for assistance if needed.
4. Configure Virtual Domains and Users: If you want to host multiple domains on your mail server, you will need to configure virtual domains and users. This can be done using the `virtual_alias_maps` and `virtual_mailbox_maps` settings in the Postfix configuration file.
5. Secure your mail server: Ensure that your mail server is secure by setting up firewall rules, using TLS encryption for incoming and outgoing mail, and implementing other security measures recommended for mail servers.
6. Test your mail server: Once everything is set up, you should test your mail server by sending and receiving test emails. Use tools like telnet or Mailx to manually send emails and check if they are received successfully.
Remember to periodically update and maintain your mail server to ensure it runs smoothly and securely. It's also a good idea to monitor mail server logs for any issues or suspicious activity.
why should i use an apple l out at the l word?
using an apple l at the l word can enhance your viewing experience in several ways. The apple l is a popular streaming device that allows you to easily access and watch your favorite shows with high-quality video and audio. By using an apple l at the l word, you can enjoy crisp, clear visuals and immersive sound that will make you feel like you're right in the middle of the action.
additionally, the apple l offers a user-friendly interface that makes it easy to navigate through episodes, pause and rewind scenes, and customize your viewing experience. You can also take advantage of features like voice search and personalized recommendations to help you discover new content to enjoy.
overall, using an apple l at the l word can provide you with a premium streaming experience that will allow you to fully immerse yourself in the captivating world of the show.
.podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
How do i wear deadlock?
1. Start by growing your hair out to the desired length. Your hair should be at least 2-3 inches long for the best results.
2. Section your hair into small, even parts using a comb. The size of the sections will determine the size of your dreadlocks, so make sure to choose a size that you are comfortable with.
3. Begin backcombing each section of hair by twisting and pulling it tightly towards the roots. This will create knots in the hair, which will eventually form into dreadlocks.
4. Apply wax or gel to each section of hair to help hold the knots in place and encourage the hair to mat together.
5. Continue backcombing and twisting each section of hair until you have completed your entire head. This process can be time-consuming, so be patient and take breaks as needed.
6. Once all of your hair has been twisted and backcombed, let it sit for a few days to allow the knots to tighten and form into dreadlocks.
7. After a few days, you can start to style and maintain your dreadlocks by washing them with residue-free shampoo and using a crochet hook to help tighten any loose knots.
8. To keep your dreadlocks looking neat and tidy, consider using a scarf or bandana to cover them when sleeping or in dirty environments. Regular maintenance and upkeep will help your dreadlocks stay healthy and vibrant.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
How do I send email with a compliant email list and unsubscribe links?
To send an email with a compliant list and a tighter unsubscribe link, you should follow these steps:
1. Ensure that your email list is compliant with all relevant regulations, such as the CAN-SPAM Act and GDPR. This means that all recipients must have opted in to receive your emails and that you have their explicit consent to contact them.
2. Include a clear and prominent unsubscribe link in your email. Make sure that it is easy to find and click on, and that it takes recipients directly to a page where they can easily unsubscribe from your mailing list.
3. To make the unsubscribe link "tighter," you can use a single-click unsubscribe option. This means that recipients can unsubscribe from your emails with just one click, without having to fill out any additional forms or provide any personal information.
4. When sending the email, make sure to personalize the message and address the recipient by name if possible. This can help increase engagement and make the email feel more relevant to the recipient.
5. Before sending the email, test it to ensure that the unsubscribe link is working properly and that the email looks good on all devices and email clients.
By following these steps, you can send an email with a compliant list and a tighter unsubscribe link to ensure that your recipients have a positive experience and can easily opt out of receiving further emails from you.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
Why do people implant nfc implants in their hands?
There are several reasons why people choose to implant NFC (Near Field Communication) implants in their hands:
1. Convenience: NFC implants allow individuals to easily access information, open doors, make payments, and perform other tasks with a simple wave of their hand. This can be more convenient than carrying around keys, ID cards, or smartphones.
2. Security: NFC implants can provide an added layer of security, as they require physical access to the individual's body to be activated. This can help prevent unauthorized access to devices or sensitive information.
3. Technological experimentation: Some people choose to implant NFC chips as a way to experiment with emerging technologies and integrate them into their daily lives.
4. Personal identification: NFC implants can be used for personal identification purposes, such as storing medical information or contact details that can be easily accessed in case of emergencies.
5. Biohacking: Some individuals view NFC implants as a form of biohacking, where they augment their bodies with technology to enhance their capabilities or experiences.
Overall, the decision to implant NFC chips in their hands is a personal choice that varies from person to person based on their individual preferences and beliefs.
How is the crypto market growing so quickly?
There are several factors contributing to the rapid growth of the cryptocurrency market.
1. Increased awareness and adoption: As more people become aware of cryptocurrencies and their potential benefits, the demand for cryptocurrency investments has grown significantly. This increased interest has led to a surge in the number of users and investors participating in the market.
2. Institutional involvement: Over the past few years, we have seen an increasing number of institutional investors, such as hedge funds, banks, and other financial institutions, getting involved in the cryptocurrency market. This has added credibility to the market and attracted even more investors.
3. Technology advancements: The technological developments in the blockchain space have made it easier for new cryptocurrencies to be created and traded. Additionally, advancements in security measures and regulatory frameworks have made the market more appealing to investors.
4. Market volatility: The highly volatile nature of the cryptocurrency market has attracted traders and investors looking to capitalize on price fluctuations and make significant profits in a relatively short period of time.
5. Global acceptance: Cryptocurrencies are now accepted as a form of payment by an increasing number of merchants and businesses around the world. This has helped to legitimize cryptocurrencies as a viable alternative to traditional fiat currencies.
Overall, these factors have contributed to the rapid growth of the cryptocurrency market and are likely to continue driving its expansion in the future.
podľa Daisy / Pohľad | Nákup | Kúpiť s kryptomenou
https://glamgirlx.com
https://glamgirlx.com -
Zanechajte mi tip v bitcoíne pomocou tejto adresy: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE