Praktiline veebipõhine sügav õppimine ja turvalisus eeskujuks

Poolt Daisy
Praktiline veebipõhine sügav õppimine ja turvalisus eeskujuks Kolmas väljaanne Charlotte Harper 3. juuli 2024 Uuendatud/teisendatud 3. juuni 2025
Eessõna:
Turvalisuse kaalutlused veebi tarkvara ehitamisel on oluline osa iga veebiarendaja plaanist ja täitmisest, samal ajal kui prototüübi kavandades, mis on usaldusväärne, stabiilne ja kasulik praktilistel eesmärkidel. DOM (dokumendi objektide märgistus) koos selle HTML, JavaScripti ja CSS -i rakendamisega ning taustaprogrammi tarkvara, mis rakendab Pythoni, C/C ++, Java ja Bashija funktsionaalsus, kujutamine alandlikkust ja iseloomu ning pakuvad nii kasutusmugavust kui ka mugavust ja olulisi teenuseid, mis on keskmise Joe jaoks atraktiivsed, lõppkasutaja, kes soovib aega tappa või Internetis midagi korda teha, tavaliselt puutetundliku ekraaniga nutitelefoni seadmes. Enamik inimesi ei teaks isegi, kust alustada, kui nad soovivad veebisaiti nullist üles ehitada, kipuksid alustama teise inimese veebisaidilt ja ehitama midagi piiratud funktsionaalsusega, usaldusväärsuse ja hõlpsaltJa eriti loovus, kui neil oleks võinud olla kõik uusimaid võimsaid tööriistu, et ehitada midagi kasulikku nuppude pressimise aja raiskamiseta, ja eriti raiskades raha, makstes tarkvarale kallite tellimuste eest, vähesed inimesed tahtsid niikuinii kasutada, arvestades selle piiranguid kasutamise ja paindlikkuse osas. Kui teil on mõni minut seda raamatut läbi lugeda ja teada saada, mida ma teile õpetada tahan, või isegi minuga isiklikult oma eesmärkidest rääkida ja saada mingeid juhiseidTa on õige suund ja on motiveeritud õppima oma tarkvara kodeerima ja kirjutama, selle raamatu koju ja pange natuke aega kõrvale, et õppida üles ehitama järgmise mõjuka, võimsa, sujuva ja olulise veebirakenduse - veebisaidi, mis on kõik teie peal ja teeb täpselt seda, mida soovite, ja vastab teie vajadustele ja vastab teie vajadustele ja vastab teie vajadustele ja vastab teie vajadustele ja vastab teie vajadustele ja vastab teie vajadustele
Minust: Olen tarkvaraarendaja, kellel on lai valik kogemusi C/C ++, Java, Pythoni, HTML, CSS ja JavaScripti alal. Ehitan veebisaite, mida inimesed soovivad kasutada, soovivad külastada ja isegi sõltuvusse saada, et kasutada lihtsalt õppimiseks, taasloomiseks ja tapmiseks ning mis kõige tähtsam - ma müün tarkvara. Kui teil oli idee täpselt sellest, kuidas soovite veebisaiti välja näha ja toimida, oliite nõus mind toetama, et saaksin oma vajadusi rahuldada, kui ma oma teie oma kokku puutun, ja olete nõus katma veebisaidi käitamise kuludEnda ise ehitaksin teile järgmise YouTube'i, Tiktoki, Twitteri, Google'i või isegi kõrgtehnoloogilise turvarakenduse, millele pääsete ainult juurde. Selle asemel, et proovida teile oma aega müüa, üritan teie oma osta: ma tahan teid rääkida juba olemasoleva teabega rakenduse (veebisaidi) ehitamiseks ja õpetada teile, mida peate olema sõltumatu tarkvaraarendaja, ettevõtja, mis juhib edukat karjääri mis tahes valdkonnas, mida soovite. Ja las ma saan selgeks, see haridus, mille ma teile annan, on mitteametlik. SinaLD läheb kooli ja õppige seda kõike formaalse haridusega või lugege seda raamatut koolis isegi lugema, täitke oma ülesanded ja võtke oma haridusest palju ära, kuid ma ei pane teid ametlikult kuumale kohale ja palun teil ülesandeid täita. Ma pole teie professor, võite mõelda minust nagu sõber, kes soovib teid suunata karjääri poole, mida ajendab teie enda isiklik edu. Ja ma ei müü ka teile edu, peate selle oma ajaga ostma. Koodi õppimisel on järskÕppimiskõver ja polnud kunagi lihtne või isegi pidi olema. Peate töötama nii kõvasti kui võimalik ja jätkata proovimist ja uuesti ebaõnnestumist ning proovimist isegi siis, kui olete pettunud, et ise rakendusi õppida ja ehitada. See on koodi enda olemuses. Koodi juhib kompilaator, mis on mõeldud programmeerija tõrketeadetele ja need õpetavad teile kodeerimist, isegi kui kopeerite lihtsalt vea oma otsingumootorisse ja loete teiste inimeste näiteid. Ja ma pean ütlema, sinaSee peab olema äärmiselt rikas, nutikas, edukas või isegi detailsed või organiseeritud rakenduse ehitamiseks. Arvuti hoolitseb selle organisatsiooni eest teie eest. Peate lihtsalt katse -eksituse kaudu püsima, hoidma keskendumist ja tegema kõvasti tööd, mida teete, ja teil on väga edukas karjäär kogu teie jaoks
Kes ma olen: Ma mõistan, et viimane osa oli seotud rohkem õppimisega ja teie selle raamatu kaudu. Kes ma täpselt olen? See on keeruline küsimus. Mul on see iseenesest ebaselge, kuna kannatan meditsiiniliste seisundite all, mis võivad minu jaoks keeruliseks muuta seda raamatut isegi kodeerida või kirjutada, esitades samas väljakutseid sotsialiseerumise ja identiteediprobleemidega, mis muudavad minu elu keerukamaks, kui tegemist on enda tutvustamisega. Lühidalt, kui loete seda raamatut, tõid selle koju, sestTe libistasite selle läbi ja arvasite, et see on kasulik või isegi kui lugesite seda lihtsalt kaugele, olen teile sarnane meelega inimene, kes soovib näha, et teil õnnestub kõiges, mida teete. Olen ise insener, tarkvaraarendaja ja õpilane ning kirjutan seda raamatut teistele tudengitele, kes soovivad oma elu lihtsamaks muuta, kui neil on vajalik tarkvara käsiraamat, mis teeb oma elu lihtsamaks, tuua näiteid, mis sobivad kokku nagu suureks mõistatuseks töötavaks, kasulikuks, suureks, suureks, suureks, suureks, suureks, suureks mõistatuseksNiitiline, ühtne ja kaasahaarav rakendus, mis võib edu saavutada, sõltumata ärivaldkonnast. Suuresti teen seda ma: ehitan rakendusi, mis aitaksid endale ja teistele inimestele õnnestuda. Olen ka autor, ehkki see on minu esimene väljaanne, mille kavatsen oma portfelli kasuliku dokumendi kokku panna, ja olen ka kunstnik. Ma tunnistan seda teile, ma olen omamoodi kummaline inimene. Ma ei ole täiuslik, olen olnud seadusega, mis viis mind isegi kolledžitest lahkuma jaIties ja lahkuvad riigid, et proovida rohkem edu saavutada. Olen sünnituse järgi naine, kannan meiki, teen endast fotosid, kannan kleite ja muid naiste rõivaid ning olen teadlik endast kui naisest oma olemuselt. Mul on varem olnud probleeme teiste inimestega, mis viivad võitlusteni WebAppide kirjutamise ja ehitamisega, ning vabandan, et ma pole seda raamatut varem teie kätte saanud: vajasite seda. Tahad lugeda ja kirjutada koodi, mis näeb välja nagu minuIke oma ja teeb sama asja, kuid veelgi paremini, sest kui saate endale lubada selle raamatu ostmist, selle asemel, et oma klaviatuuri masseerida nagu mina, et luua ainult raamat, mille eest ise raha küsitakse, on teil ressursid, mida vajate oma elus edukaks saamiseks. Mul oli igasuguseid probleeme kasvavate perede, tervislike seisundite, arstide, meedia ja seaduse osas ning minu kood peegeldab sügavalt võitlust, mis on feminism ja naissoost loomus jagunenud ja pettunud maailmas. See raamat on siiski midagiEply hoolib minu lapsest, minu portfellist ja elatist, nii et hindan teie kaalutlust, kui võtate teksti koju ja hakkate selle üle hoolikalt üle, et minult õppida. Pidage meeles, et ma pole täiuslik, sellel raamatul on vigu, parandusi ja uusi väljaandeid ning peate oma loogilise ajuga mõtlema nii hästi kui võimalik, et saada minu kirjutamisega edukas kogemus. Samuti mõistke, et ma mõtlen teile hästi isegi siis, kui kirjutamisel seisate silmitsi väljakutsetega. Mõelge selleleKE See: Kui saate lihtsalt rentida arvutisüsteemi, et teha kõike, mida saate digitaalses ruumis ette kujutada, kogu tekkinud teavet salvestada, analüüsida ja korraldada ning sellest aru saada, puutute paratamatult läbi raskusi selle teabega, mida te alla võtate ja isegi avaldate. Ma ütlen teile seda, sest mul on samu raskusi. Kasutage seda raamatut omal vastutusel, tehke oma kogukonna ja kogukondadega, et luua tarkvara turvalises seadistuses,Ärge võtke asju isiklikult, kui ebaõnnestub või isegi õnnestub valesti: nii jõudsin nii kaugele ja miks ma saan teile selle teksti tuua ja aidata teil õnnestuda, ilma et peaksite minema hullumeelsuse teele, mis jätab mind rikutud, rebenenud ja raputama, kui ma ilmnevad tavalised probleemid, mida kõik teevad globaalses mastaabis tänu paralellistlikule globaalsele mastaabisse, mis töötab Internetis. Te ei pruugi olla eriti tuttav, kes ma olen vaid mõne sõnaga, kuid julgustan teidLugege edasi, saate minuga tuttavaks, kui jätkate minu projektide loomise ajal minu lugemist ja mõistmist. Selle raamatuga ei toimu kodutöid, kui teie professorid ega õpetajad teile seda ei määra, kuid julgustan teid tungivalt üles ehitama ise projektide portfelli, samuti Capstone'i projekti, mis tutvustab, kuidas saate õpitu rakendada. Minu nurgakiviprojekt on enamiku selle raamatus loetud aluseks, kuna seeEttevõtte kood minu eelmistest projektidest, koodist, mille olen loonud ja õppinud metoodiliselt käsitsi kirjutama, ning laias valikus ideid ja näpunäiteid, mis on aidanud mul õnnestuda nii kaugele, et saan keerutada lihtsat rakendust, mis on täielikult esile tõstetud, ja välimus ja käitumine nagu populaarne rakendus, mida võite näha oma sõpra või peret, mida kasutab, Internetis, reklaamitud teile või reklaamitud, või reklaamitud teile või reklaamides, või reklaamitud, või reklaamitud teie jaoks või reklaamitud
Mis see raamat on: See raamat on näite järgi õpetus. Siit leiate koodi, juhiseid koodi õppimiseks, teabe silumise ja vigade parandamise, tõrkeotsingu sammud, juhised koodi varundamiseks ja salvestamiseks, uuesti, kui keegi teie koodi murrab, teie koodi kinnitab, oma koodi kinnitamiseks, koodi loomiseks interaktiivsed veebisaidid, mis on meelelahutuslikud, kaasahaaravad, ja saate oma rakenduseks, kuidas see on, mis on, ja kuidas see on, mis on, et see, mis on, ja kuidas see on, mis on, et see, mis on, ja kuidas see on.Ettevõtte pilt, aga ka tarkvara, mille ehitate kõige parema valgusega, et olla teie veebisaidi külastajatele võimalikult atraktiivsem. Selles raamatus demonstreerin mitmeid näiteid tarkvara kujundamisest, keskendudes nii veebile kui platvormile kui ka turvalisusele. Alustame õppimiskogemuse, ehitades põhiprojekti Unix Shelli abil koos varundamise ja skriptimisfunktsioonidega. Seejärel uurime põhilise ajaveebi veebisaiti, uuendame oma ajaveebi foto ja videogaS, samuti kasutage neid funktsioone turvalahenduste kasutamiseks tasuta tarkvara abil ja kinnitage meie serverit, kasutades Pleggble autentimismoodulit (PAM). Seejärel vaatame teiste mõistete hulgas üle failide käitlemine ja töötlemine, videotöötluse uurimine, hääle annetamine, vöötkoodi skaneerimine ja optiline tähemärkide äratundmine. Tee ääres uurime API -sid, mis aitavad meil muuta oma tarkvara kasulikumaks ja turvalisemaks, tasuta ja tasuliste võimalustega. Tee ääres uurime füüsilist turvalisust jaSõjalised tööriistad, nagu tulirelvad ja laskemoonade kujundamine ja tootmine, sealhulgas tünni- ja kordusprojekteerimine, torn ja droonide kujundamine ning muud direktorid, mille me integreerume oma tarkvaraga olemasolevas võrgus, et kaitsta meie tarkvara ning demonstreerida enesekaitset ja vastupidavust. Mängude ehitamiseks, 2D ja 3D renderdavate mootorite ehitamiseks ning manustatud riistvaraga juhtumiuuringute näidetes põhiline mõõtmete renderdamistarkvara ja elektroonilise vibreeriva näidetega töötame pause ning teeme koostöödR valatud vastavalt silikoonkummi. Tee ääres kasutame tarkvara paremaks kindlustamiseks juba saadaval olevaid masinõppelahendusi. Samuti kasutame protsessi sujuvamaks muutmiseks ja kindlustamiseks veebi jaoks saadaval olevaid aktsiariistu. See raamat on teie edu juhend veebirakenduse loomisel ja selle integreerimisel professionaalse arvutivõrgu ja manustatud mehaaniliste süsteemide ning üldiselt juhend tarkvara ja manustatud riistvara ehitamiseksmaapealsed teadmised või varasemad kogemused.
Mida see raamat pole: Kui soovite tõesti veebisaiti, võiksite lihtsalt seadistada lihtsa poe ja müüa vajaliku, postitada blogi, postitada fotosid või videoid või muul viisil, kirjutamata kunagi ühte koodirida. See raamat pole nii. See raamat õpetab teile, kuidas ehitada tarkvara, mis on kasulikum, täielikult esile tõstetud, funktsionaalne ja turvaline kui mis tahes tarkvara, mida juba leiate, kuna see juurutab uusimat tarkvara, mis on endiselt prototüübid, võib olla kallis, kui käitate vanemate ettevõtete skaalal.Tegutsege ja ei meeldi tagurpidi, keerdunud ettevõtted, kes on loonud raha teenimiseks inimestele, kes tegelikult midagi ei tee. Kui jälgite seda raamatut tähelepanelikult, soovite kirjutada koodi, uurimiskoodi, ehitada oma rakendused ja teenite raha sellest, mida teete. Ma teen sellest raamatust raha, isegi varajases staadiumis, kuna see sisaldab teavet, mida inimesed vajavad ja tahavad lugeda, ja ostavad juba siis, kui nad minu rakendusi ostavad või kasutavad. See raamat ei ehita teile rakendust, kuid see osutabU õiges suunas ja relvastage teid vajalike tööriistadega ning oskusi ja näpunäiteid, mis hõlbustavad teie enda edu veebis tarkvara loomisel, iga koodiliiniga peate kirjutama näitena, mis on valmis kokku panema tarkvara, mida teie ja teie toetajad, külalised, kliendid, sõbrad, pered, külalised, töövõtjad ja Interneti -inimesed soovivad kasutada ja Interneti -inimesi soovivad kasutada.
Mida sa õpid: See raamat õpetab teile, kuidas ehitada ja müüa tarkvara, tõeliselt funktsionaalset, kasulikku tarkvara, meediumiettevõtteid, turvafunktsioone nagu näotuvastus, masina loetav vöötkoodi skaneerimine, veebi API -d, et autentida, salvestada ja renderdada, videoid ja fotosid ning vahetada sõnumeid nagu Bluetooth ja lähivälja (NFC) suhtlus. See raamat õpetab teile, kuidas kasutada võrku ühendatud arvutiTarkvara sujuv, automatiseeritud tuul, kuidas ehitada Python -koodi taustaprogrammi dünaamiliste sõnumite teenindamiseks, stiili asju kenasti, kasutades CSS -i stiile bootstrapiga, lubada kasutaja sisselogimisi ja interaktiivsust võrku ühendatud seadmete kaudu, ehitada interaktiivseid meediume ja võrku teiste veebisaitidega, et pakkuda turvafunktsioone, et pakkuda teie tarkvara, mis on vajalik, et hoida teie tarkvara, mis on vajalik, et teie tarkvaraga või muude eesmärkide jaoks krüptovaluutaga kauplemine,HOONILISED Ülesanded ja palju muud. Saate teada, kuidas ehitada oma Bluetooth -seadmeid koos akude, laadijate, mikrokontrollerite, vooluahelate, mootorite ja anduritega, kasutades joote, traati ja 3D -trükitud ning valatud materjale. Ma demonstreerin aditiivse tootmise ja tööriistade ja die valmistamise jaoks rakendatavaid 3D -disainidirektoreid, nii et saate toota oma manustatud riistvaraseadmeid, millel on integreeritud akud, laadijad, elektroonilised vooluringid ja funktsionaalsed väljundid. ja ühendage need Bluetoothi jae veeb. Täpsemalt uurime kahte juhtumiuuringut, vibreerivat massaaži ja omatehtud tulirelva, mõlemad programmeeritud OpenScadis, mis on saadaval graafilise liidese või käsuridade utiliidina ja mida saab kiiremate tulemuste saamiseks integreerida veebi. Saate teada, kuidas ehitada ja juurutada veebisaiti algusest peale ilma eelneva kogemuseta, muuta see funktsionaalseks, turvaliseks, ilusaks, kasulikuks ja mis kõige tähtsam - praktiline. Õpid, kuidas kasutada masinõpet ja arvutinägemist, et teha aSaidi turvaline ja praktilisem, salvestage oma veebisaidilt video ja heli, annetage oma häält, tehke muusikat ja moduleerige heli kasulike näidiste loomiseks ning kuidas müra läbi murda, kasutades teisi veebisaite, et luua parim võimalik veebisaitide võrk, mida saate otse omavahel linkida, et jagada kogu kasulikku teavet, mida pakute, ja mis veelgi olulisem, tuua inimesi oma tarkvara ja äri juurde. See raamat keskendub kõige tugevamalt meediale, turvalisusele ja masinaleRingi, mis on kolm peamist komponenti, mis aitab teil luua veebi jaoks kasulikku tarkvara, kaasates õiged kasutajad ja eraldades valed viisil, mis on realistlik, praktiline, käed külge ja kaasahaaravad, samas ka automaatne ja vastupidav. See raamat õpetab Unixi, eriti Debiani (Ubuntu), Bash Shelli, Pythonit, HTML -i, CSS -i, JavaScripti ja mitmeid kasulikke tarkvarapakette Pythoni jaoks nagu päringud, aga ka kasulikud bash -tarkvara nagu GIT ja FFMPEG. Õpetan teile ka kuidasKrüptovaluutaga automaatselt kaubelda ja teha makseid krüptovaluuta või tavaliste deebetkaartidelt, makstes samal ajal isegi külastajatele osa oma tuludest, kui otsustate seda teha. Õpetan teile, kuidas oma veebisaidilt raha teenida ka reklaami kaudu, kuidas oma rakendust otsingumootorite jaoks valmistada ja kiireks teha, järjestatud esimeses paremusjärjestuses, mida teie kliendid teie leidmiseks otsivad, ja paremusjärjestus võimalikult paljudes tavalistes otsingutes. Ma õpetan teile, kuidas teie müüaFTWare, reklaamige seda, pöörduge klientide poole, kes otsivad teie teenuseid, ja pange Internetis endale nime juba olemasolevate võimaluste kaudu, on odavad ja töötavad hästi. Õpetan teile, kuidas salvestada oma andmeid teie jaoks töötavate pilvarvutite kohta ja salvestada teie andmeid odavalt, kuidas planeerida ja ehitada veebisaiti, mis teeb seda, mida teie kasutajad soovivad ja mida soovite, ning kuidas hoida oma kasutajaid kaasahaaramiseks, pannes oma saidi oma telefonide, teatiste, e -posti, telefoni, telefoni, telefoni jaD Rohkem võimalusi, et viia teie kasutajad teie veebisaidile tagasi teie käsutuses oleva nupuklõpsu taga ainult teile kinnitatud nupuklõpsu taga. See raamat keskendub meediumide avaldamise ja levitamise praktilisusele suurtes kogustes, alates fotodest kuni videoteni kuni helideni, mis jätab lõppkasutajatele (teie klientuurile) hea mulje ja müüb ennast mis tahes viisil, mida teete veebisaidi loomiseks, rakenduses, mis on teie ja teie jaoks ainult teie ja teie ettevõtte ja teie ettevõtte loomine, ja teie ettevõte näeb hea välja.Parim viis võimalik. Õppite minult ka mõned näpunäited, kodeerimisnõuanded, praktiline edevus nagu meik ja fotograafia, modelleerimine ja näitlemine ning palju muud, mis on oluline enda ja ettevõtte kujutamiseks parima võimaliku valguse kujundamiseks, kasutades kõiki teile pakutavaid tööriistu, kui levitate nii palju sisu, kui vajate tervislikku tasakaalu, et saada tarkvara, mis pole rohkem vaeva näinud, või raha, kui see pole vaja. Selle raamatu nimi onPraktiline veebipõhine sügav õppimine ja turvalisus näitena: "Põhjusel: see tegeleb koodi õppimisega, eriti veebi jaoks, eriti turvalisusele keskendudes praktilisest aspektist, näiteid töökoodist, mis teenindab tekstis esitatud praktilisi eesmärke. Selle teksti õppimiskomponent hõlmab ka masina õppimist, pilti, mida ma näitan, kuidas VIIT -i käitleda.t, eraldusvõime suurendamine, pildi pealdis ja muud ülesanded, näiteks piltidelt pärit ennustusmõõdikud, näiteks pildi olemus autentse, arvutiülekandega pilti või optilise koopiana (foto pildist või trükitud foto). Masinõpe on veebiturbe ja tarkvara turvalisuse osas väga oluline, kuna see võib kujundada ülesandeid, mis olid muidu võimatu. Teie arvuti võib teid pääsukoodiga sisse logida, kuid seda võib olla ohutum kasutada, kui see teie juurde logibOU saab serveriarvuti muuta ohutuks, arvutiks, mis tavaliselt palub teilt kasutajanime ja pääsukoodi, ja logida teid sisse, võib -olla iga uue sisselogimise või uue IP -aadressi kinnitusmärgiga, kuid kui ehitate laiaulatuslikku, hõlpsasti kasutatavat, põhimõtteliselt turvalist ja võimas tarkvara, võib sellest piisata. Tarkvara liiga tihedast sidumisest kellegi teise tarkvaraga, näiteks e -posti teenuse või tekstsõnumi teenuse, ei piisa tarkvara turvaliseks muutmiseks ega kellegi (mis tahes saidile, mida kasutate). Keegio Ehitab tarkvara, mis on laitmatult turvaline, tunneb seda, mida see vihjab. Tarkvara on oma olemuselt ebakindel, kuna seadmed ja kontod, mida me sellele juurde pääsevad, ei ole alati meie käsutuses, vaid need võivad olla igaüks, kellel on tarkvara halvasti, ja seetõttu võivad nad ka tarkvarale endale ohtu kujutada. See on selle raamatu keskmes. Võrgustiku arvuti on vaikimisi turvatud pika võtmega, mida nimetatakse ja SSH või Secure Shell, ning muidu on kõige paremini kinnitatudIth veebiserver, kuna veebiserver pakub serveris töötavaid avatud juurdepääsu ja nüüdisaegseid turvatööriistu. Veebiserveril on juurdepääs kasutaja veebibrauserile, mis on vaieldamatult kasutaja seadme kõige võimsam osa, kuna see on koht, kus kasutaja pääseb võrku ühendatud tarkvarale. See tööriistakomplekt saab renderdada teksti, nähtavaid veebilehti ning salvestada ka pilte, heli ja videot (näiteks fotot või oleku ID), saab lugeda ja kirjutada Bluetooth -raadiosseTõsised ning saavad lugeda ja kirjutada lähivälja transponderi siltidele, odavatele võtmekaartidele, FOB -dele, kleebistele, rõngastele ja isegi kiibiimplantaatidele, millel on ainulaadsed seerianumbrid, mida saab lugeda ja kirjutada, millele on genereeritud ja kinnitatud veebisaidiga seotud veebiserveriga. Kõigi teie käsutuses olevate tööriistade kasutamine koos selle raamatuga varustate end turvalise veebisaidi loomiseks teadmistega ja teie jaoks töötav turvaline võrku ühendatud arvutisüsteem teeb teie pakkumise ning näeb välja ja tunneb
Kust alustada: Olete teretulnud, et jaotisest mööda minna, alustan seda raamatut või mis tahes jaotisega täpse koodiga, mida vajate, eriti kui teil on kogemusi enne kodeerimise kogemusi või mõnda eelnimetatud tööriista, mida ma selles raamatus üksikasjalikult kirjeldan, ning dokumenteerite selle kasutusjuhtumeid ja nende praktilisi näiteid. Kui teil pole koodi kirjutamisel kogemusi, soovitan teil tungivalt lugeda kogu see raamat ja eriti soovitan lugeda eelmisi jaotisi, et veenduda, et see raamat onÕige teile. Kui see raamat pole teie jaoks sobiv, kaaluge selle kinkimist sõbrale või sugulasele, kes võiks olla huvitatud veebiarenduse tundmaõppimisest, ja isegi kaaluge selle tagasi laenamist ja nendelt õppimist, et täita lüngad, kus ma teid kui õpetajat ebaõnnestus, või teised õpetajad tegid seda enne mind. Alustage seal, kus saate, selle raamatu iga osa on kasulik, kui kavatsete luua kasuliku rakenduse, ja mõelge, et parimad rakendused on lõppkasutaja meeles ehitatud: tundke oma klienti. NüüdTunne mind, teate seda raamatut ja olete valmis alustama. Alustuseks haarake arvuti (isegi kõige odavam sülearvuti kastipoest, Amazonist või vana töölauaga töötab ja seadistage see toimides
Kuidas seda raamatut lugeda: Tekst on esile tõstetud, tähistab, et tekst kuulub käsuviibadesse, kus kirjutate käivitatud koodi. Käsuviip on keskendunud tugevalt klaviatuurile ja nõuab klõpsamist vähe või üldse mitte, töövoo kiirendamist ja asjade lihtsamaks muutmist.
Alustamine: Sukeldume sisse. Alustame kohalikus masinas ehitamisest ja alustame ilma Interneti -ühendatud veebisaidi loomiseta. Alustuseks on see turvalisem, ei maksa midagi ja see on teile lihtne. Sõltuvalt teie opsüsteemist on bash -kesta sattumine pisut erinev. Mac OS -i jaoks soovitan sellel hetkel installida virtuaalne masin, kuna saate virtuaalse masinaga kõige rohkem ühilduvust. Erinevad pakkujad, näiteks VirtualBox ja Paralells, saavad käivitada aVirtuaalne masin teile, ehkki Ubuntu on võimalik ka otse masinasse installida, kui eelistate kasutada looduslikku keskkonda, mida soovitatakse kiire ja sujuva kogemuse loomiseks. Kui kasutate Linuxi või Windowsi, mida soovitan, peaks projekti loomine olema üsna lihtne. Avage oma terminal, reguleerige suurust vastavalt sobivaks ja alustage 2. sammu järgimist. Kui kasutate Windowsi, järgige samm
1. samm: - ainult Windowsi kasutajad Windowsis avatud käsuviip administraatorina ja tüüp WSL -INSTALL
2. samm: - Jätkake siin või jätke 1. samm vahele, kui te ei kasuta Windowsi Avatud terminalis (sõltuvalt teie OS -ist, mida nimetatakse Ubuntu Windowsis, Terminal Macis või Linuxis või sarnases nimes), alustage projekti loomisega. Me teeme seda käsu Mkdir, mis loob kataloogi. Kui peate oma projekti salvestamiseks looma kataloogi, mis on soovitatav, kasutage CD -käsku kataloogi ja ja ning ning ning
CD/PATH/TO/kataloog - tee on kaustad (failid), mis eelnevad teie sihtkataloogile, teie vaiketee on ~ või kodu/kasutajanimi (kus kasutajanimi on teie kasutajanimi). Vaikekataloogi muutmiseks tippige CD või CD ~ mkdir näide - asendage "Näide" kataloogi nimega
Nüüd on teil oma projekti jaoks töötav kataloog. Kuna see on nii oluline, et see kataloog on salvestatud juhuks, kui peate vahetama teise masina või kirjutatud koodi, nii et see oleks veebi jaoks valmis, ehitame skripti, et oma kataloogi järgmistes sammudes varundada. Kuid skripti ehitamine võtab natuke koodi ja kood tuleb automatiseerida, et see oleks võimalikult kasulik. Ehitame siis kõigepealt skriptide ehitamiseks skripti. Alustame skripti loomisest ja selle käivitatavaks muutmiseks.Kasutame selleks sudot, chmod ja puudutage ning helistame skriptile
sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Nüüd oleme skripti loonud, teinud selle käivitatavaks ja oleme valmis seda redigeerima. Nano on tekstiredaktor, mis võimaldab teil teksti redigeerida ilma klõpsamiseta, mis on palju lihtsam kui graafilise kasutajaliidese kasutamine. Nanoga faili redigeerimiseks kasutage nano ja seejärel tee faili. Skripti tegemiseks skripti tegemiseks on see üsna sarnane meie skripti valmistamisega. Kasutame sama koodi nagu ülalpool, asendades skripti nime "Ascript" argumendiparameetriga, 1 dollar. See laseb meil helistadaSkript kirjutades lihtsalt Sudo Ascripti ajalehte, milles saame luua mis tahes uue skripti, asendades "Newscript" teie skripti nimega. Nano kood peaks otsima
sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
Ja Nano sulgemiseks saame juhtimisnumbi all hoida ja vajutada X -i, siis y, et tähistada faili, ja vajutada tagasitulekut. Nüüd, et kirjutada need kolm käsku skripti redigeerimiseks, saame skripti uuesti redigeerimiseks kirjutada Sudo Ascripti. See töötab! Ja iga uut skripti saab hõlpsalt käivitada, kui helistate selle kesta. Salvestame nüüd oma töö: kirjutame oma uue skripti salvestamiseks varukoopia ja seejärel varundage see oma projekti kataloogis, varundades samal ajal ka varundusskripti.
sudo ascript backup
Nüüd, nanos:
sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Kus/tee/kataloog on tee projekti juurde, mille loodi koos mkdiriga. Hiljem õpime, kuidas selliseid korduvaid teid silmuse ja loendiga kopeerida, mis on vähem kood, kuid praegu hoidkem seda lihtsana ja teil on paar rida. Selle skripti käivitamiseks ja koodi varundamiseks salvestage fail nanoga kontroll+x, y ja tagastage ning sisestage allpool oma kesta
backup
Kui teil palutakse selle raamatu lugemisel ja kestaga jälgides üldse parooli, sisestage oma kasutaja parool õigesti, enne kui peate käsu uuesti käivitama, on teil kolm katset. Kui peaksite midagi kaks korda käivitama, saate kasutada üles ja alla nooled käskude korrigeerimiseks ja redigeerimiseks. Lihtne vajutage vahelduvalt üles ja alla käsu valimiseks, enne kui käsu redigeerimine parempoolse, vasaku noolte ja kustutamise klahviga ning klaviatuuriga ning selle tagasitulekuga käitamist.
Palju õnne! Teil õnnestus luua vinge varundusskript, mis varundab teie töökataloogi kahte olulist kestaskripti. Võime asju hiljem ringi liikuda, kui projekt suureneb, kuid see töötab praegu. Liigume edasi pilves varundamise juurde, kasutame selleks GitHubit (kuigi varundamiseks on palju muid GIT -lahendusi, need on kõik samad.) Git on Verision Control tarkvara, mis võimaldab teil oma tarkvara redigeerida, kui need serverisse teete, samal ajal kui ka serverisse teete, samal ajalvõimaldades alla laadida oma tarkvara terveid koopiaid parooli või võtme taha. See on oluline teie tarkvara salvestamisel, eriti kui me rändame tagatud Linuxi eksemplaridele, mis mõnikord purunevad, kui koodise rida ebaõnnestub, jättes teid lukustama, kuni teie kood ei pruugi varundada, kui te ei saa võimalust seda automaatselt varundada
Kui te ei kasuta praegu Ubuntu virtuaalmasinat, soovitan praegu Ubuntu virtuaalse masina kasutamist, kuna see muudab teie elu lihtsamaks, kui paigaldatakse kõik vajalikud paketid, et luua töötav veebisait ja kujundada oma arvutisse sügavat õppimistoimingut. Liigume lähitulevikus koodi veebiserverisse, kuid tahame veenduda, et meie veebiserveri taga on vähemalt paar turvalisust, mis on andmepüügi suhtes vastupidavad, ja võtavad tööle aLinuxi pakettide arv selleks. Kui soovite ikkagi Mac OS -i kasutada, olete teretulnud otsima ja installima veebis vajalikke pakette, kuid iga paketi või sarja iga paketi jaoks ei pruugi olla alternatiive
Lisame mõned käsud, et oma tööd varundusskriptiga toime panna, käivitades käsu Sudo Ascripti varukoopia.
# …
Veelkord kontrollige päästmiseks X -i.
Nüüd peame selle projekti jaoks tegema ühekordse konfiguratsiooni. Kuna see on varsti Giti projekt, ei pea me iga käsku iga kord Giti hoidlast kasutusele võtma, kuid kui me oma juurutusskriptide kirjutamisel saame selle riputada. Alustuseks veenduge, et oleme õiges kataloogis ja lähtestame Giti hoidla ja genereerime SSH -klahve.
cd /path/to/directory
git init
git branch -m master
ssh-keygen
Pärast SSH-KeyGeni kirjutamist tuleks uus võti salvestada kodukausta kausta nimega .sssh. Seda nimetatakse id_rsa.pub. Leiame selle võtme ja kopeerime selle. Seda näha,
cd ~
cat .ssh/id_rsa.pub
Kopeerige enne SSH -klahvi oma kontole SSH -klahvi lisamist koostage tekst, mille on tagastatud viimane käsk, ja looge konto oma GIT -i pakkujaga (ideaalis GitHub). Kui teil on konto, klõpsake enne SSH -klahvi SSH ja GPG -klahvide lisamist menüüs juurdepääsu all oleva SSH -klahvi lisamist paremal ülanurgas ja sisestage sätted. Valige lisage SSH -klahv ja lisage oma, kleepides selle sisse ja andes sellele pealkirja, enne kui salvestate ja naaseb GitHubisse uue hoidla loomiseks. See on sarnane teiste Giti pakkujate jaoks, vajatenende dokumentatsiooni lugemiseks. Andke uues hoidla konfiguratsioonis oma hoidlale kirjeldav nimi ja otsustage, kas soovite selle avaldada, ja veenduge, et konfigureerige veel ühegi faili kaasamiseks. Kui hoidla on loodud, kopeerige kloon SSH URL -iga ja kleepige see järgmistesse
git remote add git://… (your remote URL)
Nüüd saate CD -ga oma hoidlasse tagasi liikuda, olete sellega tuttav. Proovige oma varukoopia skripti nüüd varukoopiaga
Tore! Nüüd saame tõesti kodeerimise. Paigaldame Django nüüd, kui meil on hea haare bashis ja gitist. Django laseb meil oma tarkvara automaatselt varundada, ka Bash saab seda teha, kuid Django peaks olema lihtsam ohutum rakendus (seda saab keelata ja hõlpsamini konfigureerida).
Ubuntu tarkvara installimiseks kasutame käsku SUDO APT-GET. Esiteks värskendame ja uuendame juba tarkvara, mis meil juba oli. Seda saab teha koos SUDO APT-GET UPDATE ja SUDO APT-GET-UP -Y -Y-ga. Järgmisena installime Python ja meie virtuaalne keskkond, meie koodi kodu koos järgmise käsuga: Sudo Apt-Get install Python-is-Python3 Python3-venv
See on kõik, mida vajate Djangoga koos tarkvara installimise osas Ubuntu eksemplaris. Windowsi ja Linuxi jaoks peaks see olema üsna sirgjooneline, kuid Maci jaoks võiksite installida sellele virtuaalse masina ja Linuxi, kasutades tasuta või tasulist virtuaalset keskkonda nagu virtuaalkast või Paralells töölauale ja taastada ülaltoodud sammud Ubuntu keskkonna seadistamiseks. Ubuntu on sel juhul kriitiline, kuna see on veebisaidid tarkvara ja see võimaldab neil veebisaite majutadaKõik eelnimetatud
Kaevame Django sisse.
Jälle meie kataloogis CD -ga:
python -m venv venv # Loob virtuaalse keskkonna, kus koodi salvestatakse
source venv/bin/activate # Aktiveerib virtuaalse keskkonna
django-admin startproject mysite . # Kus MySite on projekt, mida alustan oma praeguses kataloogis.
Django just alustab meid, sest Django majutab veebiserverit ja teeb kõike, mida vajame, et saada kohalik veebisait üles ja käivitaks. Nüüd, kui meil on Django installitud, redigeerime sätteid natuke, et see toimiks nii, nagu vajame. Esiteks loome uue rakenduse
python manage.py startapp feed
Võite märgata, et esimest rakendust nimetatakse söödaks. Rakendust tuleks nimetada kõik, mis teile meeldib, ja me loome uusi rakendusi, kuid iga rakenduse nimi peab olema järjekindel iga kord, kui rakendusele koodis viidatakse. Uue rakenduse lisamiseks redigeerime alati sätteid.Py teises kataloogis, mille rakendus lõi, nimega StartProject, edaspidi rakendus. Nano kasutamine,
nano app/settings.py
Seadetes leidke installitud_Apps ja eraldage [] 3 read. Kasutades tühja keskjoonel nelja ruumi, lisage oma rakenduse nimi. See seadete jaotis.py peaks välja nägema:
INSTALLED_APPS = [
'feed',
]
Enne kui unustame, proovime, et Django töötab. Kasutades käsku python manage.py RunServer 0.0.0.0:8000, saame serveri käivitada ja seejärel navigeerida arvutis veebibrauseris, mis käivitab koodi http: // localhost: 8000 ja vaadake näidet veebilehte (see töötab!) Lõpeta server kontroll C -ga, mis on sama, mis mis tahes muu käsuga.
Kavatseme nüüd mõnda Pythoni koodi kirjutada. Djangol on kolm peamist komponenti, kõik juhivad koodi täielikult. Komponente nimetatakse mudeliks, vaade ja mall ning enne veebilehe edastamist on igaüks vastavalt kõrgemal ja madalamal.
Mudel on kood, mis salvestab andmebaasi otsimiseks, sorteerimiseks ja renderdamiseks.
Vaade otsustab, kuidas mudelit renderdatakse, manipuleeritakse ja muudetakse, peaaegu iga vaade kasutab mudelit otse.
Mall on HTML -kood, millel on mõned lisakellad ja vile, mida nimetatakse mallkeeleks. Mall on ette nähtud vaatega, kus see on täidetud Pythoni koodi ja kontekstiga, näiteks mudelid ja teave (kasutatavad strings ja täisarvud) vaatest.
Djangol on ka muid komponente, sealhulgas, kuid mitte ainult:
Seaded, mis konfigureerib rakenduse nii, nagu me arutasime.
URL -id, mis on mustrid, mida kasutaja jälgib, et pääseda juurde veebirakenduse konkreetsetele osadele.
Vormid, mis määratlevad, kuidas serverisse saadetud teavet käsitletakse ja renderdatakse nii andmebaasi kui ka kasutajale. Need on serveri poolel oleva teabe töötlemise alus ja võivad aktsepteerida mis tahes tüüpi teavet, mida arvuti salvestab, eriti tekstistringid, numbrid ja tõesed/valed booleansid (tavaliselt märkeruutu).
Mallid, mis on HTML -kood ja mallkeel ning ühendavad lõhet Pythoni ja HTML -i vahel, mis tähendab, et Pythoni teavet saab teenindada HTML -koodina, millele igaüks pääseb juurde ja saab veebisaiti piiratud juurdepääsuga kaitsta, muutes Pythoni koodi veebis kättesaadavaks ja kasulikuks mitmesugustel eesmärkidel, mis ei vaja serveri lähedal.
Staatilised failid, mis on tavaliselt JavaScript ja selle teegid, mida server serveerib ja on malliga seotud.
Meediumifailid, mida server serveerib või on väliselt hostitud või kirjutatakse lihtsalt serverisse enne töötlemist ja teise serverisse postitamist (ämber) hostimiseks.
Vahetarkvara, mis on kooditükid, mida käitatakse samal ajal iga vaatega ja mida peetakse vaates "kaasatud".
Kontekstiprotsessorid, mis töötlevad iga vaate konteksti ja mida kasutatakse täiendava konteksti lisamiseks.
Testid, mis kinnitavad, et kasutaja või päring läbivad teatud nõuded enne vaate edastamist.
Tarbijad, kes dikteerivad, kuidas WebSocketid suhtlemisel reageerivad ja reageerivad.
Administraator, mida kasutatakse mudelite registreerimiseks, et neid saab üksikasjalikult manipuleerida Django administraatori lehel, kus andmebaasi saab graafilise liidese kaudu manustada.
Seller, mis määratleb asünkroonsed ülesanded Django koodi osad, võivad alustada enne järgmise ülesande või koodirida juurde minekut.
Djangol võib olla palju muid komponente, mida siin üksikasjalikult arutame. Django funktsionaalsemaks muutmiseks on palju võimalusi, lisades kiireid, sujuvamad suhtluskanalid, seller, mis täidab asünkroonseid ülesandeid, ja hulgaliselt muid tarkvaratükke Django laiendamiseks, eriti vaatefunktsioonides, kus suurem osa koodist täidetakse. Vaatefunktsioonid on võtmetähtsusega, kuna need deklareerivad tavaliselt iga koodiosa, mis on konkreetne URL -i mustrile,või osa
Esiteks uurime vaatame funktsioone. Vaatefunktsioonid algavad impordiga, mis tähistab vaates kasutatavat koodi, mis on määratletud tavaliste funktsioonide määratluste või klasside abil. Lihtsaimad vaated on määratletud funktsiooni määratluse DEF -ga ja tagastage põhimalliga HTTPRESS. Alustame põhimõtte määratlemisega teksti "Tere maailm" tagastamiseks. Pidage meeles, et iga kord, kui lisate koodi pärast avaldust nagu def, kui, kui aga jne, peate lisama 4 ruumi igaleEelnevad määratlused soovite oma funktsioonile rakendada. Me satume sellesse, mida igaüks tähendab
Redigeerige meie saidi kataloogist Feed/Views.py faili, kasutades nano ja lisage faili lõppu järgmised read.
from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
Django httpresponse vastab tekstistringiga, mida tähistatakse ava ja sulgemisega ". Iga kord, kui edastate teavet funktsioonile või klassile, näiteks päringule või stringile, peate kasutama sulgudes (, avamist ja sulgemist).
See pole veel kõik, mida peame oma vaateid nägema. Muidugi, me pole serverile öelnud, kus vaade on täpselt, peame ikkagi määratlema tee, mille järgi vaade peaks muutuma. Alustame rakenduses/URLS -is põhitee määratlemisega ja satume hiljem teede rühmadesse.
Rakenduses/urls.py lisage pärast impordi avaldusi pärast selle loodud vaate importimist rida.
from feed import views as feed_views
Määratleme nüüd vaatemustri. Vaademustritel on kolm komponenti, teekomponent, mis ütleb serverile, kus vaade on serveris olemas (URL -i tee, mida kasutaja sisestatakse veebilehe sisenemiseks navigeerimisribale), vaatekomponent, kus vaade on täpsustatud, ja vaate jaoks sõbralik nimi, nii et see on lihtne oma mustrit hankida, kui see on malliga, et seda teha, eriti kui see on vajalik, et seda tehakse, et seda teha, et see saaks veel ühe malliga.Loogiline nimi. On mõistlik teha asju niimoodi ja olla paindlik, sest teie koodibaas on pidevalt muutuv keskkond, mis vajab paindlikkust ja improvisatsiooni, et olla väärtuslik ja hõlpsasti töötav. See, milline teie vaade välja näeb, saate selle lisada urlpatterns = [APP/URLS.PY jaotisse. Vaatemuster on määratletud kolme ülalkirjeldatud komponendiga ja funktsiooniga, mida nimetatakse teeks. Teie URL -i mustrid on nimekiri, nii et lõpetage alati iga üksus neis aOmma, sest see eraldab igaüks. Iga üksus peaks minema ka uuele reale, taas enne seda nelja ruumiga, täpselt nagu rakendus seadetes.py. Me määratleme vaate esimese komponendi tühja stringifunktsiooniga, et luua vaade, mis töötab veebiserveri juurkataloogis. Su urls.py peaks nüüd välja nägema
from feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
See on Djangoga veebisaidi loomise alus, mis on täiesti staatiline. Dünaamilisema veebisaidi loomiseks, kus saame hakata vahemällu salvestamist, näiteks pilte, videoid, heli ja palju muud, peame kasutama mudeleid, mida uurime järgmisena. Nüüd kontrollime oma koodi ja käivitame serveri. Vigade koodi kontrollimiseks käivitage:
python manage.py check
Veateadete olemasolul peaksite hoolikalt üle oma rakenduses tehtud muudatused üle vaatama ja uurima, kas on midagi, mis on vaja fikseerida, näiteks kõrvaline või puuduv ruum, lisaterakter, lisateraline nöör, mis tahes kirjaviga, mis tahes juhuslikult kustutatud tegelane või midagi muud. Lugedes veateadet (kui teil seda on), peaksite nägema loodud või redigeeritud faili teed koos reanumbriga, nii et uurige seda faili ja rida ning vaadake, kas saate midagi parandadasee on seal. Kui olete probleemi lahendanud, käivitage ülaltoodud käsk uuesti. Kui teie tarkvara on käitamiseks valmis ja töötab, näete väljundit "Süsteemi kontrollimine pole tuvastatud probleeme". Nüüd olete valmis minema. Käivitage server
python manage.py runserver 0.0.0.0:8000
Nüüd avage veebibrauser ja liikuge aadressile http: // localhost: 8000. Peaksite nägema sulgudes tagastatud teksti ja oma vaates funktsiooni HTTPResponse tsitaate. See on lihtsalt põhinäide, kuid kui te selle kaugele jõudis, mõistate põhitõdesid, kuidas Linux, bash, Python ja Django töötavad. Kaevame sügavamale andmebaasi modelleerimisele ja uurime Pythoni klassi jõudu teabe salvestamisel. Seejärel hakkame HTML -ist ja CSS -ist kinni saama, enne kui oma saidi täielikult valmistameEsiletõstetud, paindlik ja turvaline JavaScripti ja masina abil
Klassid salvestatakse mudelites.Py teie rakenduse. Kasutades nano, redigeeri rakendust/mudeleid.py ja lisage uus klass. Klass on määratletud klassi määratlusega ja antud superklassist, mille see pärineb, antud juhul mudelite.Model. Klassi nimi tuleb pärast klassi määratlust ja pärast klassi määratlust A: (käärsoole) kasutatakse enne klassiga seotud atribuutide ja funktsioonide määratlusi. Meie klass vajab ID -d, mida saame selle hankimiseks ja ainulaadseks hoidmiseks ning see kaTeabe salvestamiseks on vaja tekstivälja. Hiljem saame lisada ajatempli, faile, tõelisi või valesid määratlusi, mis aitavad meie koodil teha otsuseid, mida mudeliga teha, ja mida saab selle sorteerimiseks kasutada), eksemplari sidumiseks mudeli serverisse sisselogitud kasutajaga ja palju muud. Pakkime koodi lahti
from django.db import models # Import, mida kasutatakse meie klassi ja selle atribuutide määratlemiseks
class Post(models.Model): # Meie klassi enda määratlus
id = models.AutoField(primary_key=True) # Meie mudeli ID, automaatselt genereeritud võti, mis võimaldab meil mudeli päringuid küsida, hoida seda ainulaadseks ja on kasulik, kui peame mudeliga suhelda, kui see on loodud.
text = models.TextField(default='') # Meie klassi atribuut salvestab sel juhul tühja stringi vaikeseade.
Sulgege ja salvestage fail, nagu me enne seda lõpetasime.
Seal on palju muid valdkondi ja võimalusi, mida uurime, kui värskendame seda klassi meie rakenduse arenedes, kuid see on põhi vajadus rakenduse loomiseks mõne teksti postitamiseks. See mudel aga üksi ei tööta. Nagu varem kirjeldatud, vajame selle mudeli toimimiseks kohandatud vaadet ja kohandatud URL -i mustrit ning ka vormi koos malliga. Uurime kõigepealt vormi.
Vormi määratlemiseks redigeerige rakendust/vorme.Py Nanoga ja lisage järgmised read. Vajame kahte impordi, meie vormide klassi, samuti meie loodud mudelit (Feed.Models.post), mudeliga sarnast klassi määratlus ja väli koos alaklassiga Meta, mis määratleb mudeli, millega vorm interakteerub. Vormil võib olla ka initsialiseerimisfunktsioon, mis seab selle päringu, mudeli või muu teabe põhjal, uurime seda hiljem.
Mudeli vormid on nii kasulikud, kuna need saavad mudeli luua või mudelit redigeerida, nii et kasutame neid mõlema jaoks. Määratleme ühe vormidena.py allpool.
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',)
See on põhitõed, kuidas vorm ja mudel välja näevad. Seda mudeli vormi saab kasutada postituse kiirendamiseks või redigeerimiseks, selle sisalduse teksti muutmiseks. Vaatame selle vormi integreerimist järgmise vaatesse. Esiteks teeme ränne ja migreerime andmebaasi, et meie kood saaks mudeliga suhelda. Selleks käivitage järgmised käsud:
python manage.py makemigrations
python manage.py migrate
Selle käivitamine võtab minut, kuid kui see juhtub, võimaldab see teil juurde pääseda mudelile vaadetes, vahetarkvaras või mujal tarkvaras. Jätkame, tehes vaade, kus näeme oma mudelit. Redigeerige voogu/vaateid.Py ja lisage järgmine kood, nagu märgitud. Pärast # -märki ei pea te midagi lisama, see kood on kommentaarid, mida kasutatakse koodi kohta teabe tähistamiseks. Alustuseks impordime oma mudeli vaadetes ja lisame selle konteksti, kus saame selle amall kui kuvamise nimekiri. Järgmisena lisame malli, kus saame vormi ja mudeli nupuga renderdada, et luua uus objekt, mis põhineb mudelil, ja postitada see serverisse. See kõlab keerukana, nii et astugem see lihtsalt samm -sammult. Enne kui vaade lõpetame, loome malli, mis lihtsalt mudeli muudab ja veenduge, et näeme seda, luues kesta uue postituse. Siit saate teada, kuidas see vaade peaks
posts = Post.objects.all() # Küsige kõik andmebaasis olevad postitused seni
See kõik näeb üsna lihtne välja, kuni jõuame põhja. Render, mis tagastab funktsiooni, mitte HTTP vastuse, nagu eelmine näide, võtab alati selle esimese sisendina päringu, aktsepteerib konteksti (antud juhul andmebaasi postitusi), mida saab nüüd mallis renderdada, ja tagastab funktsiooni määratletud malli. Mall saab olema HTML -dokument, millel on natuke keelt nimega Jinja2, mis muudab Pythoni teabe HTML -i.
Mallide loomiseks tehke sööt kaks kataloogi.
mkdir feed/templates
mkdir feed/templates/feed
Järgmisena redigeerige ülaltoodud kataloogis malli, sööda/mallid/sööda ja lisage selle näite kood. Vaatame selle näite malli.
See on väga lihtne mall. See määratleb HTML -siltide avamise ja sulgemise, dokumendi tüüpi sildi, legendi pealkirjaga kehasildi, murdesildi, mis lisab ekraanile väikese rea, ja ahela jaoks, mis muudab iga postituse postituste loendis malli lõiguna. See on kõik, mis kulub postituste renderdamiseks, kuid andmebaasis pole veel ühtegi. Loome mõned kestaga. Saame kesta hallata.pyga joosta
python manage.py shell
Impordime nüüd oma postitusmudel
from feed.models import Post
Järgmisena loome stringiga lihtsa postituse ja väljume kestast. String võib olla ükskõik, kui see on kehtiv tekst.
Post.objects.create(text='hello world')
exit()
Lõpuks peame oma söödale lisama URL -i mustri. Kuna meie söödarakendus kasutab mitut URL -i ja me tahame hoida failide suurusi väikesed, loome oma söödarakenduses kohalikud URL -id, mis näeb välja selline:
from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
Samuti peame redigeerima URLS.Py baasrakenduses, ükskõik, mida otsustasime seda nimetada, see oli esimene meie loodud kataloog. Redigeeri rakendust/app.py ja lisage URL -i mustritele järgmine
from django.urls import include # tipus
# ... eelmine kood siin
Nüüd, kui käivitame serverit koos python haldamise.py RunServeriga, näeme meie loodud lehte, kuna meil on mudel, vaade ja mall ning ka URL -i mustr koos andmebaasis olevate üksustega. Järgmisena rakendame loodud vormi ja alustame oma postituste loomist. Kuid enne kui kirjutame liiga palju koodi, teeme varukoopia, kasutades varem kirjutatud skripti. Käivitage see skript kesta, oodake mõni hetk ja kogu kood toetatakse meie Giti hoidlasse.
backup
Vormi rakendamine on suhteliselt lihtne. Impordime oma vormi, lisame vaatele postitaotluse käitleja ja salvestame postituse andmebaasi enne samale vaatele suunamist. Saame kasutada juba imporditud ümbersuunamisfunktsiooni ja veel ühte funktsiooni, mida kutsutakse tagurpidi, et saada URL vaatemustri jaoks. Küsime selle stringiga „Sööda: voog", kuna lisatud mustri nimeruum on sööda ja vaadet nimetatakse ka söötmiseks.
posts = Post.objects.all() # Küsige kõik andmebaasis olevad postitused seni
if request.method == 'POST': # Käsitlege postitaotlust
form = PostForm(request.POST) # Looge vormi eksemplar ja salvestage andmed sellele
if form.is_valid(): # Vorm kinnitama
form.save() # Salvestage uus objekt
return redirect(reverse('feed:feed')) # Suunake sama URL -i koos get -päringuga
'form': PostForm(), # Pange vorm kindlasti konteksti, et saaksime selle renderdada.
Nüüd peame uue vormi arvestamiseks malli värskendama. Saame seda teha, kasutades
Jagame selle maha. Seal on uus vormiklass, sümbool, vorm ise ja nupp Esita. Päris lihtne, kuid kui me seda vaatame, võiksime selle paremaks muuta. See töötab, saame vormiga uusi postitusi postitada ja need on nüüd andmebaasi salvestatud. Siin toimub mõned asjad. Me kasutame HTML -silte, et deklareerida, et dokument on HTML -dokument, kasutame vormi renderdamiseks malli silti ({ %… %}) ja vormi renderdamiseks veel ühe, {{…}}}. Meil on ka silmusteksti renderdamiseks ploki siltide ja malli sildi abil. Block -sildid on tõesti olulised, kuna saame määratleda, kuidas malli lõigud nendega muudetakse, ja mallisildid on aluseks sellele, kuidas me muutujaid meiesse paneme
Nüüd peame oma rakenduse paremaks muutma, sest praegu näeb see välja tõesti põhiline. Saame seda teha, kasutades CSS -i, kas sisemist või klassides, mis on seotud dokumendi iga objektiga. CSS on tõesti tore, sest see ütleb lehel kõik, kuidas see peaks välja nägema, ja võib muuta selle tõeliselt heaks. Seal on mõned raamatukogud, mis saavad seda teha, kuid minu isiklik käik on Bootstrap.
Bootstrapi saab alla laadida nende veebisaidilt,getbootstrap.com/. Kui olete seal, vajutage nuppu, et lugeda installidokumendid, ja kopeerige kood CDN -i jaotise kaudu. Teil on vaja seda koodi oma HTML -dokumendi ülaosas sildil nimega Head. Samuti läheme edasi ja loome baasmalli, nii et me ei pea neid linke igas mallis uuesti looma.
Tehke uus kataloog, mille nimi on MKDIR -i mallidega, ja seejärel redigeerige malle/base.html.
See peaks välja nägema selline:
Kopeerige kindlasti CSS ja JavaScript, .CSS ja .js -failid, sest meil on vaja JavaScripti, et meie sait tulevikus funktsionaalsemaks muuta.
Nüüd pöördugem tagasi bash -kesta juurde ja käivitame kiire käsu. Pidage meeles, et kui teil on kunagi vaja juurdepääsu virtuaalsele keskkonnale, tippige allikas Venv/bin/aktiveerimine. See võimaldab teil Pythoni pakette kohapeal installida viisil, mis võimaldab Djangol neile juurde pääseda. Django Bootstrapi klasside loodud vormide saamiseks kasutame Pythoni paketti nimega Crispy vormid. Saame selle alla laadida järgmise käsuga
pip install django-crispy-forms
Kui see on installitud, lisage see sätetesse.py
# … Eelmine kood siin
Nüüd saame tagasi oma sööda mallis mõned asjad eemaldada. Eemaldame dokumendi algus ja lõpp ning asendame see pärandiga meie baasmallist, kasutades laiendamist ja ploki määratlust. Samuti lisame vormile mallifiltri impordi koos koormusega ja mallifiltriga. Lõpuks lisame vormi nupule bootstrap -klassi, et see näeks rohkem nuppu. See peaks välja nägema selline:
Ilus! See on juba üsna palju koodi. Järgmisena peaksime seda proovima ja veenduma, et näeme, et kõik näeb kena välja, ja veenduge, et kõik töötab korralikult. Käivitage server varasemate juhiste kohaselt ja veenduge, et sait näeks välja ja töötab hästi. Suurepärane töö! Olete valmis liikuma järgmise sammu juurde, kus lisame kasutaja sisselogimisfunktsioonid, kasutades sarnaseid URL -e, vorme, vaateid ja malle. Baasmall on oluline ja jätkame selle muutmist ja muudatuste tegemistvastavalt vajadusele, kuid keskendume praegu oma saidi turvalisemaks muutmisele, võimaldades kasutajatel sisse logida kasutajanime ja pääsukoodiga ning lõpuks veelgi olulisem teave, mis aitab hoida teie rakendust turvaliselt ja teie enda konto juurdepääsetavaks ainult ainult
Selleks peame kasutama Djangosse sisseehitatud kasutajamudelit. Kasutajamudel on andmebaasimudel, nagu meie postitus, ja mida saab kasutaja veebisaidile logida. Tulevikus laiendame enne saidi Internetti juurutamist seda mudelit teiste sellele omistatud mudelitega ja koostame andmepüügile vastupidava sisselogimise jaoks täiendavaid turvameetmeid. Alustuseks kasutame mõnda sisseehitatud sisselogimisvormi, mida Django pakub. Esiteks loome uue rakenduse, milleks me kasutamerenderdage põhiligude põhilehe mallid ja vaated. Samuti loome rakenduse, sealhulgas pincode, näotuvastuse, lähedase põllusuhtluse, väliste seadmete, mitmefaktorilise autentimise, ja sõrmejälje tagamiseks ka muud rakendused, et esindada jätkuvaid sisselogimisprobleeme, sealhulgas pincode, näotuvastus, välised seadmed, mitmefaktoriline autentimine ja sõrmejälg
Rääkisime juba rakenduse loomisest. Meie kataloogist, virtuaalkeskkonnas, pange halla.Py need argumendid
python manage.py startapp users
Nüüd peaks meil olema uue rakenduse kataloog. Alustame sellest kataloogis vaade, mis vastab kasutaja sisselogimisele. Django on kasutajate sisselogimiste jaoks vaated sisse ehitanud, kuid need ei sobi meile, kuna vajame kohandatud vaadet, mida eelistatavalt tehakse määratlusega.
Selles vaates kontrollime postituse päringut, edastage päring.post Djangost imporditud sisselogimisvormile, autentige kasutajakonto ja logime kasutaja sisse, enne kui need meie söödarakendusele ümber suunatakse.
Kasutajad/Views.py lisage järgmine kood
username = request.POST['username'] # Hankige postituse päringust kasutajanimi ja parool
password = request.POST['password'] # Autentige kasutaja
See on kõik, mida vajate põhilise sisselogimisvaate jaoks. Loome nüüd vaate vorm, laiendades baasmalli. Alustuseks loome USE -i kausta mallide jaoks uue kataloogi.
mkdir users/templates
mkdir users/templates/users
Nüüd peaksime suutma muuta kasutajaid/malle/kasutajaid/sisselogimist.html. Selle ajal, kui oleme, loome malli, mis võimaldab kasutajal registreeruda.
nano users/templates/users/login.html
Nüüd mallis,
See on sisselogimismalli põhitõed. See on tõesti täpselt nagu teine struktuuriline mall, kuid selle renderdamisel näeb see natuke teistsugune välja. Saame selle koodi kopeerida, et ehitada veel üks väga sarnane mall nimega Register.html, kus muudame sõnastust ja kasutame uut meie ehitatavat vormi. Teeme kõigepealt malli. Redigeerige kasutajaid/malle/kasutajaid/register.html ja lisage järgmine kood:
Ehitame nüüd oma kasutaja registreerimiseks vorm ja ringi liikuge vaadete juurde, enne kui uuendame oma kasutaja sisselogimisi mudeli abil. Teeme selle vormi alustamiseks põhiliseks, kuid lisame tulevikus rohkem üksikasju ja turvafunktsioone, näiteks lepinguid ja captcha. Redigeerige vorme nanokasutajate/vormide abil.py ja lisage järgmine kood.
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']
Nii et meil on siin teine vorm, mis töötab üsna lihtsalt. See on kasutajanime, e -posti ja parooliga kasutajaregistri vorm, samuti kinnitusparool. Pange tähele, et see vorm ei laienda tavalisi vorme. Vormi klassi, see on mudeli vorm, mis tähendab, et sellel on meta. Üks väli on määratletud täpselt sama ja klassimeta määratleb mudeli. Vorm vastab ülejäänud vormile kirjutatud teabele. Suurem osa sellest eksisteerib juba Django sisseehitatud UserCreationForm, nii et meiekasutab seda klassi alusena (möödunud
Järgmisena uurime kasutaja registreerimist, nüüd, kui meil on vorm ja mall. See on modifikatsioon, nagu ka uue postituse vaates. Redigeerige kasutajaid/vaateid.Py ja lisage järgmine kood:
# … Import
See on kõik, mida vajame kasutaja registreerimiseks, kuid meil peaks olema rohkem teavet. Tahame teada, kui kasutaja registreeris, mis kell nad saidil viimati olid, nende kohta, näiteks biograafia, ajavöönd jne, peame värskendama oma voomudeli, postitamist, et arvestada kasutajamudeli ja atribuutide postitusi igale kasutajale. Selleks värskendame mudeleid.py mõlemas rakenduses. Alustame söödamudeli redigeerimisega. See peaks nüüd välja nägema:
from django.db import models # … Import
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Lisage sellele reale
Pöörake tähelepanu teisele reale, mis faili lisati. See on võõras võti, mis omistab iga postituse ühele postituse kohta, nii et saame veenduda, et salvestame postitused kasutaja kasutajapõhiselt ja postitusi ei saa teha ilma kasutajale omistamata. Me määratleme selle võõra võtme klassiga, mida see esindabjuba loodud postitustes ja sellega seotud nimedes, mida saame kasutada kasutaja loodud postitusobjektidele. See seotud nimi, erinevalt Post.Autor, postituse autor, annab meile kasutaja, kes postituse ise postitas. Nüüd saame postitused, mille kasutaja on teinud kasutaja.posts.all (), või
Teeme nüüd oma sisselogimised vastupidavamaks. Saame oma saidi juba andmepüügi suhtes palju vähem haavatavaks muuta, kui lihtsalt piirata saidi sisselogimise kordi, on see üsna lihtne. Hakkame ka enne iga kasutaja kohta teavet salvestama, kuna jätkame oma rakenduse väljatöötamist. Kasutajate/mudelite redigeerimine.PY, lisage järgmine kood.
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='')
Pange tähele, et see mudel on üsna sarnane postmudeliga. Meil on täiendav import, Timesone, mis võimaldab meil seada vaikeväljadel vaikeseadeid, ja meil on ka tegelaskuju ja tekstiväli nagu postitus. Kõigi nende ajatemplite kasutamine aitab meil saiti kindlustada ja mõista selle kasutamist ning tekstiväljad annavad meile veebisaidil teavet iga kasutaja või autori kohta. Onetoonefield peaks olema ainus väike kaalutlus, see käitub täpselt samamoodi nagu eelkingi, kuidainult ühe järgneva mudeli kohta. Nii on kasutajal ainult üks profiil, samas kui neil võib olla palju
Parandame nüüd oma sisselogimise ja registreerime vaated profiili arvestamiseks. Esiteks muutke kasutajaid/vaateid.Py ja keskenduge registrivaatele:
# … Import
Profile.objects.create(user=user) # Lisage see rida kindlasti, et luua kasutajale profiil
See loob kasutajale lihtsalt profiili, ilma et oleksite midagi teavet täitmata. Nüüd tahame veenduda, et kasutajakontot ei saa liiga sageli sisse logida, või vähemalt paroole ei saa liiga sageli proovida, nii et värskendame sisselogimisvaadet.
# … Import
if user and user.profile.can_login < timezone.now(): # Pange tähele, et nüüd kontrollime, kas kasutaja saab sisse logida
else: # Kui sisselogimine ei õnnestunud,
user = User.objects.filter(username=username).first() # See on osa, kus värskendame kasutajate profiili
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Nii et nad ei saa mõneks sekundiks uuesti sisse logida
See on turvalisuse põhiline põhialus. Veenduge, et sait pole haavatav selle suhtes, kes lihtsalt proovib kõiki võimalikke paroolide kombinatsioone, või isegi mõnda neist korraga. See ei ole pettumust valmistav tavakasutajale, kes teab nende pääsukoodi ja logib sisse mõnesse seadmesse, kuid see hoiab arvukalt andmepüügiroboteid rakendusest välja. Pange tähele, et lisasime muutujaga IF -lause CAN_LOGIN, see peaks olema aeg minevikus, ja värskendada seda iga ebaõnnestunud sisselogimisega, kasutadesSama kasutajanimi. Nii ei saa pahatahtlik kasutaja parooli nii kiiresti lähedale arvata. Ka DateTime.timedelta () sekundite arvu saab värskendada ja veebisait on vastupidavam, kuid pisut vähem kasutatav sekunditega. Soovitan alustada 15
Pidage meeles, et oma töö salvestamiseks ehitasime varundusskripti, nii et lähme edasi ja varundame seda, mis meil seni on, et veenduda, et meil on kõik salvestatud. Käivitage käsk:
sudo backup
Veelkord päästab see teie töö seni. Soovitan oma töö säästmiseks käitada sagedasi varukoopiaid ja võiksite isegi varukoopiat automaatselt käivitada. Seda saate teha, kasutades UNIX -i utiliiti nimega Cron. Selle utiliidi aktiveerimiseks käivitage järgmine käsk ja sisestage oma parool:
sudo crontab -e
Kui te pole veel Nano jaoks valikut valinud, siis tekstiredaktor, kellega peaksite juba tuttav olema, ja kerige nooleklahvide abil faili põhja. Lisage järgmine rida:
0 * * * * sudo backup
Cron kasutab formaadis minutit, tundi, kuu, kuu, nädalapäeva, kus * või arv tähistab, millal käsku käivitada. Kasutades 0 minutiks ja * ülejäänud võimaluste jaoks, saame käsu käivitada minuti alguses iga tunni esimesel minutil. See võimaldab meil koodi automaatselt varundada. Kõik Croni töökohad, kui neid käivitatakse koos juurtena, nii et me ei pea iga tunni parooli sisestama.
Meie koodi varundamiseta lihtsamaks ilma parooli kasutamata, keelame meie varukoopia parooli. Teeme seda järgmise käsu täitmisega ja parooli sisestamisega:
sudo visudo
Kerige nüüd faili põhja ja lisame veel ühe rea:
ALL ALL=NOPASSWD: /bin/backup
See võimaldab meil käivitada käsu "varundamine" kui iga kasutaja, ilma paroolita. Selle vorming on lihtne, lihtsalt eesli rida "kõik kõik = nopasswd:/bin/" ja lõpetage käsuga, näiteks/bin/varundamine, mis eksisteerib/usr/bin/.
Alustame nüüd e -postiga töötama. E -post on veebisaitide jaoks tõesti oluline, kuna see on viis, kuidas veebisaiti turvalisemaks hoida, kontrollida, kas kasutajad on tõelised inimesed, ja isegi turustatavad tooted või teenused klientidele. Paljud inimesed, kes Interneti -ühed käivad, kontrollivad oma e -posti iga päev ja saavad igasuguseid turundusmeilisid, mis on huvitatud toodete ja teenuste kohta. Django veebisaidil e -kirjade lubamisel on mõned võimalused ja olete teretulnud valima, kumb teie jaoks kõige paremini töötab.
Esiteks saate maksta e -posti teenuse eest, mis võimaldab teil oma domeenist e -posti saata ja nõuab minimaalset koodi. Seda pakuvad palju teenuseid, näiteks Google Workspace, Sendinblue, Mailgun ja palju muud.
Vastasel juhul ehitate oma serverisse nullist oma e -posti teenuse hästi. Soovitan seda valikut, isegi kui see on rohkem kood ja võib vajada spetsiaalset hostimist. Tõenäoliselt ei saa te oma koduarvutist meiliserverit käivitada, nii et lähme edasi ja uurime konfiguratsiooni ja koodi e -posti saatmiseks, enne kui me pilves serveri käivitame ja omaenda meiliserveri loome.
Esiteks muutke sätteid.Py järgmise käsuga:
nano app/settings.py
Kus rakendus on rakenduse nimi, mille loodi StartAppiga.
Lisage järgmised read:
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)
Muutke neid kindlasti, kui olete oma rakenduse juurutamiseks valmis, vaatame selle hiljem uuesti läbi. E -post_addressi säte peaks olema meilisõnum, millelt soovite saata, ja parool (Emale_host_password) tuleks seada serveri jaoks genereeritud paroolile. Laadin parooli konfiguratsioonifailist, et see koodist eemal hoida, kasutades järgmist loogikat, nende ridade kohal sätetes.py:
import os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
Seejärel olen seadistanud JSON -faili koos konfiguratsiooniga /etc/config.json, kasutades nano järgmiselt.
Faili redigeerimiseks:
sudo nano /etc/config.json
Lisage järgmised read:
{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
Jätkame konfiguratsioonifaili redigeerimist ja lisame kõik paroolid ja võtmed, mida rakenduses kasutame. Nüüd uurime kiiresti, kuidas saata e -kirju Pythoni abil. Esiteks loome malli kinnitusmeili jaoks, mida saame oma kasutajatele saata, ja lisada see kasutaja mallide kataloogi. See mall kirjutatakse HTML -is.
nano users/templates/users/verification_email.html
See e -kiri on üsna lihtne. See võtab kasutaja konteksti, saidi baas -URL -i ning kasutaja e -posti kontrollimiseks kasutatava kasutajatunnuse ja märgi. Määratlege kindlasti seadete alus URL.Py, enne kui kirjutame malli renderdamiseks mõne Pythoni koodi. Minge edasi ja lisage järgmised read rakendustele/seadetele.PY, alguse lähedal.
SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
Lõpuks, kui teie sait on Interneti jaoks valmis ja kasutate seda, soovite määratleda oma domeeni saidi esindamiseks ostetava domeeninimena. See on nimi, mille sisestate navbari, et oma saidile pääseda. Praegu võite jätta domeeni tühjaks või kasutada kohahoidjat. Samuti soovite muuta saidi_nimi nimeks, mille soovite oma saidile oma valitud.
Enne e -posti saatmist loome sümboolse generaatori, et meil oleks konto aktiveerimise sümbol, mis kunagi aegub. Saame seda teha, ehitades ja importides konto aktiveerimismärgi, mis näeb välja nagu järgmine. Redigeerige faili:
nano users/tokens.py
Lisage järgmine kood:
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()
See põhitoode generaator genereerib märgi, mida saame kasutaja URL -i saata ja kasutaja saab kasutada oma e -posti kontrollimiseks ja konto aktiveerimiseks.
Järgmisena vaatame, kuidas meili saata. Nano kasutades redigeerige kasutajaid/e -posti aadressil.py.
nano users/email.py
HTML -i e -posti kinnituse saatmine näeb välja järgmine:
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)
See on üsna lihtne. Me impordime funktsioonid, mida vajame e -kirja saatmiseks, mallide ja seadetega e -kirja renderdamiseks, ning siis määratleme e -kirja malli nime järgi ja saadame selle kasutajale funktsiooni abil. Võite märgata, et me pole veel määratlenud, et e -posti saatmine, send_html_email, nii et kirjutagem see koodi alla, mille me juba kasutajatele lisasime/e -post.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()
See on natuke keerulisem ja me pole veel valmis kogu seda koodi käivitama. Pange tähele, et määratleme UNUB_LINKi, linki, mida kasutaja saab kasutada meie e -kirjade tellimuseks. See on oluline, kuna kasutajad peavad saama meie e -kirjadest loobuda, kui nad ei taha neid igal ajal näha. Lisame ka oma sõnumile teksti alternatiivi, mis on HTML -i siltidest eemaldatud HTML -teade. Lõpuks kontrollime, kas meilisõnum saadeti, ja kui seda ei teinud, tähistame kasutaja profiili, et nende e -post pole
Liigume tagasi kasutajamudelite juurde, et saaksime selle kõik tööd teha. Peame määratlema funktsiooni, et genereerida link tellimusest loobumiseks, ja määratlema Boole'i välja, et märkida, et kasutaja e -post ei kehti.
Esiteks lisage järgmine import kasutajate/mudelite tippu.PY
nano users/models.py
# …
Järgmisena lisame kasutajamudelile funktsioonid, et teha märk ja kontrollige e -kirja aktiveerimiseks kasutatavat sümbolit, samuti valdkonda, et salvestada, kas kasutaja saab edukalt oma meili. Kasutajad/mudelid.py lisage jälle järgmine kood mudeli lõppu (kandekood)
# …
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Kehtib 30 päeva
See on üsna lihtne, kasutame ajatempsigner, mis on põhilise krüptograafia tööriist, et luua märk, mis aegub teatud aja pärast, ja kasutame ka mõnda muud funktsiooni, et kontrollida, kas see kehtib. Me kasutame neid žetoone kaks korda, üks kord e -kirja kontrollimiseks ja üks kord tellimuse tühistamise lingi saamiseks.
Nüüd, kui need olemas on, on viimane töö, mida peame tegema, vaadetes. Kasutaja/Views.py lisame e -posti aadressi kontrollimiseks ja tellimuse tühistamiseks vaated.
nano users/views.py
Esiteks lisage järgmine import. Viskasin paar lisa, nii et me ei pea hiljem rohkem üksusi importima.
from .email import send_verification_email # Importige kindlasti kinnitusmeili saatmisfunktsioon
Võib -olla on teil juba mõni neist impordist, kuid nende korramine ei tee haiget. Peate muu hulgas impordi hulgas importima kinnitusmeili saatmise funktsiooni, samuti konto_aktivatsiooni_token.
Nüüd lisage faili allosas järgmine kood:
# tühista need
# Muidu suunake sisselogimislehele
# sendwelcomeEmail (päring, kasutaja)
See on palju koodi. Jagame selle maha. Esimene funktsioon, puhas ja lihtne, tühistab kasutaja meililistist. Teine funktsioon aktiveerib nende e -posti aadressi ja märkate, et lisasin kommenteeritud funktsiooni, SendwelcomeEmail. Olete teretulnud kasutama e -posti malli ja funktsiooni määratlust, et saata tervitusmeili, ma lihtsalt pole seda veel teinud. Viimane funktsioon, mille sisse viskasin, on oluline, kuna aktiveerimise e -kirjad aeguvad. Seetõttu peame aktiveerimise e -kirja osa mõne aja kohta uuesti üles võtma. Meiesaab selle jaoks kasutada põhivormi ja helistada funktsioonile, et saata kinnitusmeili. Enne kui me seda teeme, veenduge, et see saadetakse kõigepealt, lisades funktsioonikõne registrivaatele. Lisage see rida vahetult enne ümbersuunamist registrivaates, def register, sisse
nano users/views.py
# … (Pärast) def register (taotlus):
# … (Enne) ümbersuunamist (
Te ei pea sellesse koodilõigu esimest ja viimast rida lisama, veenduge, et registrivaade saadaks kasutajale kinnitusmeili. See peaks välja nägema selline:
# … Import
send_verification_email(user) # Lisage see rida kindlasti!
Nüüd peame aktiveerimise e -kirja uuesti leidmiseks lisama vormi. Kasutajad/vormid.py lisage järgmine vorm:
Vajame ka malli, mis vastab sellele Resendi e -posti aktiveerimisvormile. Lisame selle malli sisse. Redigeerige faili:
nano users/templates/users/resend_activation.html
Järgmisena lisage faili järgmine kood.
Whew, seda on palju! Nüüd, kui me koodi oma serverisse juurutame, saame saata HTML -i e -posti aadressi ja aktiveerida kasutajakontod e -posti aadressil. Samuti võiksime saata lihtsa tervitusmeili, nii et vaatame, kuidas seda teha. Tagasi kasutajate/e -posti aadressil lisage järgmine kood:
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)
Pange tähele, et meil pole keha ega HTML -silte, kuna lisame need sisse, kui lisame hTML -i tellimusest loobumise lingi. Need on olulised, kuid me ei taha neid kaks korda määratleda.
Mis siis edasi saab? Oleme jõudnud kaugele. Tõesti, me peaksime olema valmis saidi serverisse minema. Saame lisada @login_required dekoraatori ja muuta meie vaated turvaliseks, võtta kasutaja registreerumisi, saata nõuetele vastavaid e -kirju ja vahemälu teavet, mis on alus, mida veebisait peab tegema, et jääda asjakohaseks. Lisame veel mõned kasulikud funktsioonid ja loome siis aluse oma koodi juurutamiseks kaugserverisse, meiliserveri seadistamiseks, domeeni konfiguratsiooni ja filtrite seadistamiseks, et muuta meie sait turvaliseks ja
Vajame ka parooli lähtestamise vaadet, nii et lisame selle väga kiiresti. Django sisseehitatud parooli lähtestamise vaade on mõnes funktsioonis katki, kuid vaatame, kuidas kirjutada oma vaade, e -posti malli, vorme ja URL -i mustreid. Siit saate teada, kuidas vaade välja näeb, kasutajate/vaade.py
# ... import
See vorm on sisse ehitatud Djangosse, kuid parooli lähtestamise kinnitamiseks on vaja malli, kasutajad/mallid/kasutajad/parool_reset_confirm.html
Meil on ka mall, et saata parooli lähtestamise e -posti aadressiga, kasutajate/mallide/kasutajate/parool_reset.html
E -kirja enda mall on lihtne, see on põhiline HTML -fail, mis muudab parooli lähtestamise lingi, kasutajate/mallide/kasutajate/parooli_reset_email.html. Django tõlgendab seda faili automaatselt.
Vajame ka veel kahte malli. Esimene on kinnitada, et e -kiri on saadetud. Vaated nende jaoks on juba Djangos, nii et peame lihtsalt pöörduma nendega URLS.PY. See mall asub kasutajate/mallide/kasutajate juures/parool_reset_done.html
Ja lõpuks, et kinnitada, et parooli lähtestamine on täielik, kasutajad/mallid/kasutajad/parool_reset_complete.html
Nüüd vajame nende vaadete jaoks URL -i mustreid. Lisage kasutajad/URLS.PY järgmised URL -i mustrid:
# ... eelmised URL -id siin
Neli malli, see on palju! Kuid nüüd saame kindlasti kasutada kasutaja parooli igal ajal, kui vajame, kõik veebibrauserist.
Ma saan aru, et see on palju koodi. Kui see tundub natuke üle pea, on see ok. Parandate, teie arusaam paraneb ja muutute koodiga palju paremini kompetentsemaks. Kui olete täielikult kadunud, soovitan pärast isetehingu kallal töötamist selle tarkvara juurde tagasi tulla. Need on tavaliselt alustamiseks tasuta ja juhendavad teid kõike, mida vajate selle projekti juurde tagasi tulles edukaks. Kui tunnete, et oleteJätkamiseks, lugemiseks, järgmisena kajastame teie koodi juurutamise kaugserverisse ja seadistamisserveri seadistamisega, samuti automatiseerime oma juurutuse automatiseerimisega, et saaksite alati seadistada uue projekti mõne lihtsa projektiga
Viimane asi, mida peame enne kaugserverisse juurutamist tegema, on meie saidi natuke turvalisem. Võite märgata, et sisselogimisvaade võtab ainult kasutajanime ja parooli ning seal pole mitmefaktorilist autentimist ega ühe ajakoodi. See on lihtne parandus ja sama koodiga saame panna meie saidi tekstisõnumid ja isegi reageerima serverisse saadetud tekstsõnumitele. Alustuseks läheme tagasi kasutajamudelitesse ja lisame ajatempli allkirjastaja, mis tähistab iga sisselogimist. Me teemeLisage kasutajamudelile ka ainulaadne, pöörlev identifikaator, mida kasutatakse meie sisselogimise lisa turvalisuse lisamiseks. Kasutajamudelite, kasutajate/mudelite redigeerimine.PY, lisage järgmine
# Importige kindlasti UUID, Timesmp Ac et Signer ja URL -i generaator (vastupidine)
# Lisage see kood siia
# Ja lisage see funktsioon
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Kehtib 3 minutit
Veenduge, et teie kasutajad/mudelid.py näeb välja lisaks kommentaaridele (kood ridadel #). Selle lagundamine on lihtne. Meil on mõned import, ajatempligner, mis on krüptograafiline utiliit, mis suudab genereerida turvalise koodi ja kontrollida seda, et veenduda, et see on kehtiv, mida kasutatakse ainult üks kord, ja mitte vanem kui teatud arv sekundeid. Kasutame ka UUID -d, mis on ainulaadne identifikaator, mis identifitseerib meie kasutaja märgi allkirjastamisel ja URL -is, kuhu märgi saadetaksekasutaja. Me kasutame seda põhilist krüptograafiat kahefaktorilise autentimisvaate loomiseks. Enne kui teeme midagi muud, käivitame ränne, et meie kasutajamudeleid värskendataks. Käivitage kataloogis halla.py järgmised käsud, et teha ja täita
source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
See on oluline, kuna iga kord, kui mudelites muudatusi teeme, peame enne mudeleid tegelikult kasutama tabeleid ja värskendama andmebaasi vaikeseadega.
Järgmisena improviseerime oma sisselogimisvaade, et suunata sekundaarne autentimisvaade. Kasutajad/Views.py eemaldage sisselogimisfunktsioon ja suunake ümber URL -i, mille me lihtsalt genereerisime kasutajamudelites.
# … Import
if user and user.profile.can_login < timezone.now(): # Pange tähele, et nüüd kontrollime, kas kasutaja saab sisse logida
# Eemaldage funktsioon Auth_login, mis oli siin
return redirect(user.profile.create_auth_url()) # Pange tähele, et suuname siia uue URL -i
else: # Kui kasutaja ei kasuta mitmefaktorilist autentimist, logige need lihtsalt sisse.
else: # Kui sisselogimine ei õnnestunud,
user = User.objects.filter(username=username).first() # See on osa, kus värskendame kasutajate profiili
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Nii et nad ei saa mõneks sekundiks uuesti sisse logida
Nii et see on üsna lihtne, nüüd on meil võimalus selle loomisel suunata kahe teguri autentimisvaade. Meil on ka varu, kui kasutaja pole telefoninumbrit lisanud. Lisame põhivaade, et varsti telefoninumber lisada ja peagi tekstsõnumiga sisse logida.
Esiteks vajame oma koodist tekstisõnumi saatmiseks lihtsat viisi. Selleks võime valida paljude API -de hulgast, kuid minu arvates on kõige lihtsam Twilio. Samuti pakuvad nad head hinnakujundust väiksematele projektidele, aga ka hulgioodustusi. Looge konto saidil Twilio.com, täitke mõned üksikasjad oma projekti kohta, ostke telefoninumber ja kopeerige oma seadetele API -võtmed.PY. Seejärel lisage see kood uue faili alla, kasutajad/sms.py.
nano users/sms.py
# Importige kõik vajalikud paketid
# See kood saadab teksti Twilioga
# Abistaja funktsioon, et saada number nii paljude numbritega
# Saada tekst kasutaja kontrollimiseks
# Saada kasutajale selle funktsiooniga teksti
# Kood kinnitage selle funktsiooniga
# Aega kinnitama
Muutke kindlasti oma sätteid asjakohaselt, lisades need read oma klahvidega:
# Kopeerige need kindlasti oma Twilio armatuurlaualt
AUTH_VALID_MINUTES = 3 # TFA leht on minutite arv aktiivne, kui see on kiirendatud
Esiteks vajame oma kahe faktori autentimisvaate jaoks vorme. Kasutajate/vormide redigeerimine.PY, lisage järgmine kood.
# … Import
# Vorm meie telefoninumbri sisestamiseks
# Vorm autentimiseks
Järgmisena loome vaated kasutajatest/vaadetes.py
# … Import
Vajame mõlema vaate jaoks ka malle. Lisame kõigepealt MFA malli.
nano users/templates/users/mfa.html
Lisage see HTML -kood mallile
See on üsna iseenesestmõistetav. Vorm saadab kas koodi või tühja koodi ja märkate vaates, et saadame koodi, kui saame tühja koodi. Siis on meil lihtsalt kaks esitamisnuppu ja sel viisil saame koodi saata nupuga. Järgmisena lisame telefoninumbri lisamiseks lihtsa vormi.
nano users/templates/users/mfa_onboarding.html
Lisage järgmine HTML:
See vorm on palju lihtsam, see lihtsalt muudab meie loodud telefoninumbri vormi ja laseb kasutajal lisada telefoninumbri.
See näeb väga hea välja! Kuni kõik on korralikult üles seatud, peaksime saama sõnumeid saata ja kasutaja sisse logida niipea, kui lisame URL -i mustrid. Viimane asi, mida peame seadistama, on profiilivaade, et saaksime veenduda, et kasutaja saab oma telefoninumbrit muuta ilma sisse logitamata. Samuti tahame lõpuks lisada valiku "Stop to Tut Tuth", et kasutaja saaks tulevaste tekstisõnumite valimiseks teksti "STOP" teksti saada.
Lisame kasutajatele/vaadetele profiilivaade.PY. See vaade värskendab kasutaja biograafiat, e -posti, kasutajanime ja telefoninumbrit, samuti võimaldab meil lubada mitmefaktorilist autentimist. Esiteks vajame kasutajatel/vormis veel kahte vormi.py
# ... import
Järgmisena saame luua vaate mõlema vormi kasutamiseks. Redigeerige kasutajaid/vaateid.Py ja lisage vaade.
# Lisage need import
Vajame selle vaate jaoks ka malli.
nano users/templates/users/profile.html
Võite märgata, et see on üsna lihtne vorm, kuid sellel on natuke JavaScripti, mis postitab vormi sisu automaatselt nende värskendamisel. See on kasulik, nii et saate redigeerida, ilma et peaksite iga kord vajutama.
Järgmisena vajame URL -e, mis esindavad kõiki neid vaateid kasutajate URL -i mustrites. Redigeerige kasutajaid/URLS.py ja lisage see kood:
# … Eelmine kood, import
# … URL -i mustrid, mille me varem sisenesime, lisage järgmised kolm rida
Nüüd on hea aeg meie projekti proovimiseks. Kuid kõigepealt joostame veel ühe varukoopia.
backup
Ja käivitage server. Enne Linuxi serverisse kasutuselevõtmist on hea mõte lubada kontol kahe faktori autentimine. Teeme seda oma profiili URL -ile,/kasutajatele/profiilile/, ja kontrollime kasti autentimise lubamiseks pärast meie telefoninumbri sisestamist ja vormi saamist.
python manage.py runserver localhost:8000
Külastage veebilehte, minnes oma veebibrauserisse, kasutan selles näites Google Chrome'i ja sisestades URL https: // localhost: 8000/konto/profiil/profiil/
Vajadusel saate sisse logida ja lubada kahefaktorilise autentimise.
See projekt vajab serverit, et töötada, et see saaks tõesti posti saata. Kuid kõigepealt vajame vigu nägemiseks viisi. Võite märgata, et kui käivitate serveri silumisrežiimis, seadete.debug on võrdne true, näitab server autosid automaatselt. Vigade kuvamiseks ilma silumisrežiimi kasutamata, mis on tootmisserveris ohtlikud, peaksime selle lisama vaate. Kõige olulisemad vead, mida me peame hakkama saama, on järgmised:
Viga 500 - probleem meie koodiga Viga 404 - leht, mida ei leitud (purustatud URL) Viga 403 - luba keelatud viga
Lisame nende vigade käsitlemiseks uue rakenduse, mida nimetatakse vigadeks.
python manage.py startapp errors
Lisage see seadetele.Py nagu me varem, installitud_APPS -i seade, ja lisage viited mõnele rakendusele/URLS.PY vaatele, kus rakendus on teie Django projekti nimi.
handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
See on kõik, mida vajame lisaks veavaadete, mallide ja natuke vahetarkvarale. Määratleme need nii:
# Looge siin oma vaated.
Järgmisena määratleme nende vigade käsitlemiseks vahetarkvara. Me teeme seda kõigepealt seadete vahetarkvara_klassidele.
# ... eelmine vahevara
Järgmisena lisame vahetarkvara.
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.')
Lisame funktsiooni, et saada praegune erand, kasutades keermestavat kohalikku, mis aitab meil oma koodis sisalduvaid vigu jälgida. Mallide osas vajame ainult ühte, kuna määratleme dünaamiliselt vaates pealkirja. Mall peab lihtsalt pealkirja ja "jälgi", meie veakontekstist tagasivõtmise.
nano errors/templates/errors/error.html
See on meie kõige lihtsam mall, kuid nii lihtne on meie projekti vigu näha. Järgmisena keelame silumise seadetes.
nano app/settings.py
Leidke see rida, kus see on seatud tõele, ja muutke see valeks
DEBUG = False
Minge edasi ja varundage rakendus nüüd. Oleme valmis Linuxi serverisse kasutusele võtma ja lisage sealt funktsioone.
sudo backup
Enne selle koodi serverisse postitamist peaksime arvestama, et koodiga võib olla probleeme. Sõltuvalt juhtumist on saididel, kes neile postitatud teavet aktsepteerivad, rämpsposti postitamisega ja rämpsposti eemaldamisega. See ei tohiks juhtuda kohe, kuid kui see juhtub, uurime hiljem, kuidas saidil automaatselt mõõdutada ja muuta robotite juurde pääseda saidile, lisaks kasutajakontode desaktiveerida ning kontrollida kasutaja identiteetiNende isikutunnistuse või biomeetrilise skaneerimise skaneerimisega, nagu näiteks sõrmejälg või näohooldus
Vaadates mitmefaktorilist autentimise näidet, mida me uurisime, võivad tootmises asjad olla erinevad. Pange tähele, kuidas me hindame sisselogimisi, ja aeguvad märgid. Kui robotid pääsevad saidile, võib kahefaktorilise autentimine olla keerulisem, kuna need võivad sisestada koode samal ajal, kui kasutaja on. Selle vastu võitlemiseks kasutame kasutajamudelites mudelit, kuulutades, kuidas me saidiga suhtleme, kui autentime, kasutades mitmefaktorilist autentimist telefoninumbriga. Lisame ka Anvõimalus e -postiga autentida. Alustage kasutajamudelite redigeerimisega
nano users/models.py
See on see, kuidas meie lisatud mudel peaks välja nägema. Me ei vaja mingeid meetodeid, lihtsalt muutujaid ID, kasutaja, ajatempli, aegumist, pikkust ja katseid mis tahes mitmefaktorilise autentimise vastu (kood nagu 123456 saadetud telefonile või e -posti aadressile).
# Põhimärgi, mida kasutati veebisaidile sisselogimiseks
Lisame oma kasutajale ka privileegi ja seame selle praeguseks käsitsi, enne kui lõpuks privilegeeritud kasutajate automaatseks värbamiseks. Lisage kasutajamudelites see rida profiilile:
vendor = models.BooleanField(default=False)
Nagu kõigi andmebaasi muudatuste puhul, peame ka rände tegema ja andmebaasi ületama igal ajal, kui redigeerime mudelid.py -faili Djangos. Pidage meeles, et selleks kasutame kõigepealt allikat (kui seda pole juba kasutatud pärast terminali avatud) ja siis Python Manage.PY rännete valmistamiseks ja rännakuks.
cd project-directory-you-named # (vajadusel)
Praegu saate koore abil värvata kõik kontod, mille olete müüjatena loonud.
python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Nüüd arendame selle märgi kasutamiseks meie mitmefaktorilise autentimisvaate. Esiteks peame muutma oma MFA abistaja utiliite. Nano kasutamine,
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
# Autentige kasutajat nende e -posti või telefoninumbri abil
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Filtreerige märk URL -is edastatud väärtuse järgi (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)) # Kui seda seanssi pole loodud, looge see
user = User.objects.filter(id=token.user.id).first() # Hankige kasutaja märgist
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Kui nad on juba autentitud, logige need sisse
if not user: raise PermissionDenied() # Eitada, kui kasutajat ei leitud
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Kontrollige autelimärki
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Logige kasutaja sisse, kui neid pole veel sisse logitud
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Määrake nende mitmefaktorilise autentimise aegumine
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Suunake kasutaja järgmisele lehele
if not user.profile.mfa_enabled: # Kontrollige, kas MFA on lubatud
if not check_verification_time(user, token): # Kontrollige aega
user.profile.mfa_enabled = False # Tühjendage telefoninumber
user.profile.enable_two_factor_authentication = True # Luba MFA
user.profile.phone_number = '+1' # Keela telefoninumber
user.profile.save() # Salvestage profiil
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Logige kasutaja sisse, kui nende MFA pole lubatud
if request.method == 'POST' and not fraud_detect(request, True): # Kui taotlus on postitaotlus
form = TfaForm(request.POST) # Vormi kiirendada
code = str(form.data.get('code', None)) # Hankige kood
if code and code != '' and code != None: # Veenduge, et see pole tühi
token_validated = user.profile.check_auth_token(usertoken) # Kontrollige autelimärki
is_verified = check_verification_code(user, token, code) # Kontrollige koodi
if token_validated: # Kui kõik
if is_verified: # On korras
user.profile.mfa_enabled = True # Luba MFA (kui pole veel lubatud)
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Logi sisse kasutaja
for key, value in request.GET.items(): # Ehitage järgmise parameetri querüstring (kui see on olemas)
return HttpResponseRedirect(next) # Suunama
elif not token_validated: # Kui märk oli kehtetu
if p.mfa_attempts > 3: # Kui katseid oleks liiga palju
if form.data.get('send_email', False): # Saada e -kiri (või tekst)
# Renderdage vorm (get päringute jaoks)
Kui lisame selle koodi, importige kindlasti meilisõnumi saatmiseks funktsioon. Faili ülaosas vaatab kasutaja (koos muude impordiga), lisage
from .mfa import send_verification_email as send_mfa_verification_email
Nüüd peame selle funktsiooni kirjutama enne, kui see kõik töötab. See peaks laiendama meie saatmise e -posti funktsiooni ja saatma kasutajale lihtsalt kinnituskoodiga meilisõnumi.
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))
Nii et see kõik töötab suurepäraselt, nüüd on meil mitmefaktoriline autentimissüsteem, mis sõltub sisselogimiseks telefoninumbrist või e -posti aadressist. Kuid vajame ka viisi eemaldamiseks või vähemalt peita kasutajaid, kes ei tee meie tingimustega koostööd. Need võivad olla rämpspostitajad, robotid või keegi, kes ei tähenda meie töö jaoks hästi. Heitke pilk vaade, mis mul on minu veebisaidil kasutajate jälgimiseks:
# import
from .tests import is_superuser_or_vendor # Peame selle testi looma
# Hankige kasutajate nimekiri
return render(request, 'users/users.html', { # Tagastage kasutajad mallil
Pange tähele, et see kood kasutab testi, peame selle testi testides deklareerima. Kasutajate redigeerimine/testid.py, loome testi.
def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
See on koos kasutajate/kasutajatega.html mall, mis näeb välja umbes selline:
Pange tähele, et mall sisaldab teist malli, kasutajaid/kasutaja.html. Kui kasutate malli, millel on alam- ja ei kasuta laiendusi, on see hea mõte lisada alakoor () enne faili nime pikendamiseks, mallide eristamiseks.
Pange tähele, et see on palju Jinjat, te ei pruugi kõiki neid muutujaid määratleda. Kuid see näeb välja minu kood.
<small># {{user.id}} </small>
Vajame ka teist subtiplaati, Toggle_Active.html. See mall peaks olema vorm, mis võimaldab meil lülitada, kas kasutaja on aktiivne.
Samuti peame lisama vaate kasutaja tegevuse ja sobivate URL -i mustrite ümberlülitamiseks. Kui me oleme selle juures, lisame kasutaja kustutamiseks vaade, kui seda vajame.
# Import
success_url = '/' # Edu URL -i ümbersuunamine
def test_func(self): # Test, kui kasutaja on superkasutaja ja tal on luba kustutada
Kuigi see on vajadusel praktiline, ei tohiks kasutaja kustutamine olla vajalik enamasti, saaksime lihtsalt ümber lükata seda saiti külastavate kasutajate nähtavust, kui peame need vallandama.
Meie lisatud URL -i mustrid näevad välja sellised. Nano abil redigeerige kasutajaid/urls.py ja lisage need read:
nano users/urls.py
Liinid peaksid minema kasutajate vaadete teede loendisse enne lõppu "]", kuid pärast algust "[".
# …
# …
Nüüd varundage sait kindlasti, et saaksite selle veebiserverisse alla laadida, mille kallal jätkame. Käsurealt,
sudo backup
Nüüd on meie sait varundatud.
Nii et nüüd on meil veel paar kasulikku funktsiooni. Aga kuidas on siin suure pildiga? Sellele koodile pole endiselt Internetist juurdepääsetav, meil pole veel meiliserverit ja peame laiendama oma rakendust, et lisada nii põhjalik kontrollimisprotsess kui ka sujuvad paigutused, mis aitavad meil seda saiti uurida, koos turvaliste protokollidega privilegeeritud kasutajate autentimiseks.
Selle kõige juurde jõuame. Praegu on kõige olulisem see kood lihtsalt veebist hankida, mida saame teha vaid mõne Bash -i rida Ubuntu serveris. Selle jaoks peate serveri rentima, välja arvatud juhul, kui teil pole kodus serverit ja ettevõtte Interneti -tellimust, mis võimaldab teil sadamaid avada. Käitan isiklikult oma veebisaiti minu korterisse installitud HP Z440 -l, kuid virtuaalse privaatserveri (VPS) rentimiseks on tavaliselt palju odavam vajadus.
Pidage meeles, et praegu töötav kood on suhteliselt õhuke, seda tuleb enne, kui oleme valmis kasutama toote ehitamist. Olge kindlasti ettevaatlik, mida teete Internetiga, veenduge, et kui kasutate seda saiti Linuxi serverisse avalikult veebisse, on teil plaan blokeerida soovimatu suhtlus oma veebisaidiga. Tõenäoliselt pole see alguses probleem, kuid uurime mitmesuguseid lahendusi selle vastu võitlemiseks, sealhulgas masinõppe,tehisintellekt ja arvutinägemine. Kui see muutub probleemiks, vaadake selle teksti juurde a
VPS -i rentimise osas on palju kohti, kuhu saate minna. Google Cloud on VPS -serverid, Ionos, Kamatera, Amazon AWS ja rohkem pakkujaid pakuvad pilveserveri lahendusi, mis sobivad meie vajadustele.
Peate klõpsama nende vormid ja valima alustamiseks plaan. Võite minna iga pakkujaga põhiplaaniga, kuid veenduge, et pakkuja lubab teil avada e -kirjade saatmiseks pordi e -posti serveri pordid (see peaks olema port 587 ja port 25), mõned pakkujad blokeerivad need pordid. Siiani on mul olnud Ionose ja Kamateraga parimad kogemused, mõlemad võimaldavad mul saata piiramatuid e -kirju ja nende hinnakujundus on üsna odav.
Ühendate oma uue serveriga protokolli nimega SSH või Secure Shell, mis võimaldab teil serveriga kaugliidest täpselt nagu personaalarvuti, personaalarvutist. Serveri seadistamisel palub hostiteenuse pakkuja tõenäoliselt lisada SSH -klahvi või nad annavad teile kasutajanime ja parooli. SSH -klahv on see, kuidas koodi redigeerimiseks serverisse sisse logite. SSH-võtme genereerimiseks kasutage allpool toodud SSH-KeyGen.
ssh-keygen
Salvestage fail ja kirjutage see vajadusel üle, kui te seda pole veel teinud, on hea SSH -klahve pöörata. Nüüd saate oma SSH -klahvi nägemiseks kasutada järgmist käsku. Soovite selle kopeerida oma kaugserverisse, et saaksite seda autentimiseks kasutada.
cat ~/.ssh/id_rsa.pub
Kui te ei näinud selle käsu kirjutamisel SSH-võtit (pikk numbrite ja tähtede string, mis algab "SSH-RSA AAA"), proovige genereerida RSA-klahvi (need on turvalisemad, nii et soovitan neid kasutada.) Järgmine kood genereerib 4096-bitist RSA SSH-võti.
ssh-keygen -t rsa -b 4096
Looge Ubuntu töötav VPS, kuid kavatsete seda teha. Kui olete VPS -i loonud, klõpsates pakkujate veebisaidil (Kamatera.com, Ionos.com või muu sarnane), soovite sisse logida. Selleks kasutage käsku SSH -käsku koos oma IP -aadressiga (aadress, mis näeb välja nagu xx.xx.xx.xx). Samuti peate olema tundlik meie loodud serveri vaikekasutajanime suhtes, näiteks Ubuntu.
ssh ubuntu@XX.XX.XX.XX
Teil võidakse küsida paroolilt, kui teilt küsitakse parool, sisestage see sisse. Me ei kasuta vaikimisi kasutajanime, nii et alustame uue kasutaja loomisega ja lisades nende kontole SSH -võtme.
Alustame uue SSHD_CONFIG -faili lisamisega, mis ütleb serverile, kuidas SSH -d kasutada.
nano sshd_config
# See on SSHD-serveri hõlmav konfiguratsioonifail. Nägema
# SSHD_CONFIG (5) Lisateabe saamiseks.
# See SSHD koostati teega =/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/mängud
# STRATEEGIA KASUTATAKSE VAJALIK VAHE
# OpenSSH peab täpsustama valikud koos vaikeväärtusega, kus
# Võimalik, kuid jätke nad kommenteerima. Mitteotsustamata võimalused alistavad
# vaikeväärtus.
# 22. port
# Aadress
# Kuulake 0.0.0.0
# Kuulake ::
# Hostkey/etc/ssh/ssh_host_rsa_key
# Hostkey/etc/ssh/ssh_host_ecdsa_key
# Hostkey/etc/ssh/ssh_host_ed25519_key
# Šifrid ja klahv
# RekeyLiMIT vaikeseade pole
# Logimine
# SyslogFacility Auth
# Logleveli teave
# Autentimine:
# Logingracetime 2m
# Loll Rootlogin keelab-passi
# RangedModes Jah
# Maxauthtries 6
# Maksimaalselt 10
# Eeldatakse, et tulevikus ei arvestata .sssh/volitatud_keys2.
# Volitatudprincpalsfile puudub
# VolitatudKeyscommand pole ühtegi
# VolitatudKeyscommander keegi
# Selle tööks vajate ka host võtmeid/etc/ssh/ssh_known_hosts
# HostbaasAuthentication nr
# Muutke jah, kui te ei usalda ~/.sssh/tuntu_hosts
# Võõrustaja
# Ignoreerynokhosts ei
# Ärge lugege kasutaja ~/.RHOSTS ja ~/.SOSTS -faile
# Ignorerhostid jah
# Tunnelitud selgete tekstiparoolide keelamiseks muutke siin NO!
# Lollymptypasswords nr
# Muutke JAH-le, et lubada väljakutse-reageerimise paroolid (ole ettevaatlikud probleemid
# mõned PAM -moodulid ja niidid)
# Kerberose valikud
# Kerberosauthenticication nr
# KerberosorlocalPasswd jah
# KerberosticketCleanup jah
# KerberosgetAfstoken Ei
# GSSAPI valikud
# GSSAPIAATHENTICATION NO
# GSsapicLeanupcredentials Jah
# GSsapistricticcepceptorcheck jah
# Gssapikeyexchange nr
# Pange see PAM -i autentimise, konto töötlemise lubamiseks „jah"
# ja seansi töötlemine. Kui see on lubatud, siis PAM autentimine
# olla lubatud KBDinteractiveauthiction kaudu ja
# ParoolAuthentication. Sõltuvalt teie PAM -i konfiguratsioonist,
# PAM autentimine KBDinteractiveauthentiction kaudu võib mööda minna
# seadistus "PERMITROOTLOGIN ilma -ta sõnadeta".
# Kui soovite lihtsalt PAM -i kontot ja seansi tšekke ilma käivitada
# PAM autentimine, siis lubage see, kuid määrake parooliAuthentication
# ja kbdinteractiveauthentiction to 'ei'.
# AndogentForwarding Jah
# AndytcpForwarding Jah
# Gatewayports Ei
# X11Displayoffset 10
# X11uselocalhost jah
# Lubatud jah
# PrintLastlog Jah
# TCPEKUNALIVE JAH
# Permituuse keskkond nr
# Kokkusurumine hilines
# CLANSTENIVINTERVAL 0
# KliendilivecountMax 3
# Kasutatud nr
# Pidfile /run/ssshd.pid
# Maxstartups 10: 30: 100
# Lubatud nr
# ChrootDirectory Puudub
# VersioonidDendum pole
# vaike ribatee pole
# Laske kliendil läbida lokaalse keskkonnamuutujad
# NO alamsüsteemide vaikeseade
# Näide seadete ülekasutaja alusel
# Sobitada kasutaja anoncvs
# X11Forwarding Ei
# Lubage nr lubada
# Lubatud nr
# Forcecommand CVS -server
Pidage meeles, et faili salvestamiseks Ctrl+X ja Y. Järgmisena kirjutame põhiskripti nimega Initialize (kõik meie kasutaja vaikekataloogis).
nano initialize
Lisage need read faili, asendades
# !/bin/bash
Sellest failist läbi jalutamiseks alustame ridade kaupa. Esimene rida ütleb kompilaatorile, et see on bash -skript. Seejärel installime sõltuvusi, kopeerime SSHD_CONFIG õigesse kataloogi, taaskäivitame SSH -i, genereerides Root SSH -klahve, lisades kasutaja 'meeskonna' (saate selle jaoks vajaliku nime valida, kasutage käsku Adduseri nimega ja praegu puudega parooliga). Lisame ka meeskonda Sudo gruppi, genereerime nende SSH -võtme, lisame oma võtme volitatud võtmete ja ka nende omadele ning ka nende ning nende oma.printige nende võti. See uus kasutaja on see, kuidas me sisse logime
Uues terminalis minge edasi ja avage server uuesti.
ssh team@XX.XX.XX.XX
Teil ei tohiks seekord parooli vajada, kuna teil on SSH -võti. Samuti oleme saidi turvalisemaks hoidmiseks keelanud parooliga sisselogimise.
Nüüd algab see server täiesti tühjaks, ilma et oleks teavet selle kohta. Alustame oma projekti kloonimisega Gitist, et saaksime selle kaugmasinas alla laadida ja käivitada. Printige kõigepealt SSH -klahvi SSH -ga ühendatud kaugserveris:
cat ~/.ssh/id_rsa.pub
Järgmisena kleepige see võti Giti sätetesse, nagu me varem tegime oma Giti hoidla seadistamiseks. Nüüd võime oma projekti otse serverisse kloonida. Veenduge, et olete projekti kõigepealt kohapeal varundanud, nii et GIT -serveris allalaadimine on.
git clone git://github.com/you/yourproject.git
Täiuslik. Nüüd on kõik failid siin. Näeme neid LS -iga
ls
Nüüd hakkame serveri seadistama. Esiteks kopeerige oma projekti kataloog lihtsasse, meeldejäävaks nimeks, mida projekti jaoks kasutame.
cp -r yourproject whatyoucalledit
Kus on teie projekti uus nimi. Järgmisena peame serveri seadistamiseks üles ehitama põhiliiti. Salvestame selle utiliidi ja kasutame seda tulevikus. Selle utiliidi loomiseks loome kasutaja binaarse, et määratleda, kuidas skripti redigeerime. Kasutades bashit, redigeeri/usr/bin/ascript
sudo nano /usr/bin/ascript
Kasutage seal kindlasti Sudo, et teil oleks faili redigeerimiseks luba. Lisage failis need read:
# !/bin/bash
echo "# !/bin/bash ">>/usr/bin/$ 1
Pidage meeles, et see skript võtab argumendi, skripti nime 1 dollarina. Kõigepealt kontrollib ta, kas fail on olemas või loob selle muul viisil, lisab skripti deklareerimiseks esimese rea, muudab oma õigusi, redigeerib seda ja lisab oma nime /etc /astcripts, mis võimaldab meil salvestada meie loodud skriptide nimed. Kui fail on juba olemas, muutke lihtsalt õigusi ja muutke seda. Salvestage fail ja järgmisena muudame selle õigusi. Kuni me seda skripti kasutame, ei pea me seda enam tegema.
sudo chmod a+x /usr/bin/ascript
Täiuslik. Loome nüüd skripti nimega Setup. Esiteks, mitte teid ületama, vaid vaadake, milline näeb välja minu seadistusskript. Käime läbi, milline see skript teie projektis välja näeb, te ei vaja minu skripti alustamiseks kõike.
# !/bin/bash
# sudo chmod a+x skriptid/kasutajatup
# ./scripts/usersetup
# SSH-Keygen
# Projekti kataloog
# Logi käsud
# Nano konfiguratsioon
# Git konfiguratsioon
# Uuendage ja installige
# Luba Clamavi viirus
# Määra hostinimi
# Seadistamine postgres
# Seadistamise andmebaasi varundamine
# Keela iptables
# Installige Bitdefender
# Seadistamine Postfix
# Loo dirs
# Seadistamine virtualenv
# Hankige ja ehitage sõltuvusi
# Määra tulemüürireeglid
# Installige pypi sõltuvused
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# PIP-install OpenCV-Python == 4.5.5.64
# PIP-installige OpenCV-Contrib-Python == 4.5.5.64
# Installige CertBot
# Käivitage sertbot
# Laadige uuesti meiliserver
# Koopiatooted
# sudo cp /etc/letlessencrypt/live/femmebabe.com/privkey.pem privkey.pem
# sudo cp /etc/letlesencrypt/live/femmebabe.com/cert.pem cert.pem
# Plaastri venv
# Seadke kasutaja seaded
# Seadistama õigused
# sudo chown -r meeskond: kasutajad/var/run/joon/
# sudo chown juur: juur/run/sudo/ts -r
# sudo chmod 664 db.sqlite3
# sudo chown www-data: kasutajad db.sqlite3
# Kopeerige konfiguratsioon ja määrake õigused
# Seadistamise andmebaas
# Süstige pam konfiguratsioon ja eemaldage vigane SSH Config
# sudo sed -i '' -e '$ d' /etc/pam.d/sshd
# sudo sed -i '' -e '$ d' /etc /profiil
# Kopeeri prügikastide skriptid ja määrake õigused
# Laadige uuesti teenused
# Luba Apache moodulid
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# Keela vaikesait
# Luba meie sait
# Laadige uuesti deemon ja taaskäivitage Apache, Postfix ja Opendkim
# Seadistama õigused
# Vahetuse konfiguratsioon
# Init -pealdismootor
# Seadistus Git
# Kuva domeeni konfiguratsiooni jaoks IPv6 ja Opendkim
# Seadistamine valmis
See on palju seadistusi! Lühidalt öeldes logib see kood logib, konfigureerib nano ja giti, koopiaid failide kaudu, allalaadimisi ja installib Ubuntu APT pakette, pythoni sõltuvusi, konfigureerib PostFixi, konfigureerib PostgreSQL (The Database Server) ja laadib andmebaasi, konfigureerib UFW -i, installib, installib antientsid (Deabs Deabs), Deabs Makebs, Deabs Masebs, Discoubs Iptable, allalaadimine, allalaadimine, allalaadimine, IPPABles, IPPABLE, IPPABLE, IPPABLE, DEPABS, DAIGLID, IPPABLE ja seadistab serveri, installib konfiguratsiooni, käivitab ja lubab seviandi, eraldab vahetuse,Määrab õigused ja prindib IP, IPv6 aadressi ja Opendkimi klahvi. Üsna lihtne, kuid see näeb välja nagu palju koodi. Me ei vaja seda palju, kuna meil pole sõltuvusi, me ei kasuta sellerit, selleriburki ega daphne, vaid installime neist nagunii alustamiseks. Pange tähele, et sellel koodil on domeen kuulutatud mitu
Samuti peame ostma domeeninime (mis on väike aastatasu). Soovitan domeeni ostmiseks Squarespace'i, nende paigutus on intuitiivne ja hõlpsasti kasutatav. Saate osta mis tahes valitud domeeni, kuid ma kasutan selles näites domeeni femmebabe.com. Kui olete domeeni ostnud, minge Squarespace DNS -i konfiguratsioonipaneelile ja lisage oma domeen serverile IP -aadressi abil. See peaks välja nägema selline:
@ A xx.xx.xx.xx
Kui hostina operaatoriga on @, mis tähendab, et kõik selle domeeni all olevad alamdomeenid ja juur domeen suunavad kõik serverisse. Deklareerimiseks on veel dokumente, kuid saame nende juurde liikuda, kui oleme valmis posti saatma. Pidage meeles, et see võib võtta mitu päeva, enne kui saate serverist posti edukalt saata. Meie seadistatud DNS -i kirjed võtavad levitamiseks aega.
Igatahes on ainus rekord, mida peame alustama, plaat. Nii et nüüd saame alloleva skripti oma projekti järgi täita ja seda käivitada.
Alustame väiksema seadistamisskriptiga, et lihtsalt installida põhiagredu jaoks vajalik. Me ei kasuta veel nii palju sõltuvusi ega PostgreSQL -i, alustame lihtsalt põhilise HTTP -serveri ja muretseme selle sertifitseerimise pärast, kui see on tehtud. Pidage meeles, et HTTPS -sertifikaadi saamiseks ja serveri turvalise käivitamiseks peame ostma domeeni koos serveri rentimisega. Praegu asendage selles failis "meeskond" oma kasutaja nimega "dir" oma projekti kataloogiga ja tarnige oma e -posti ja domeen sisse<>
Lisaks peame enne selle koodi käivitamist muutma sätted tulemüürile, mida hostimise pakkuja toetab, kui neid on. Tavaliselt on see teie hostiteenuse pakkuja vahekaardil „Võrkud" või kui te ise majutate, on see teie ruuteri jaotises „Pordi edastamine". Kui kasutate ise hostimist, soovite oma ruuteri kaudu staatilise IP -d seadistada. Lugemis-/kirjutamisjuurdepääsu jaoks peate avama järgmised pordid.
22 (SSH) 25 (post) 587 (post) 110 (posti klient) 80 (HTTP) 443 (HTTPS)
# !/bin/bash
# Logi käsud
# Nano konfiguratsioon
# Git konfiguratsioon
# Uuendage ja installige
# Luba Clamavi viirus
# Määra hostinimi
# Seadistamise andmebaasi varundamine
# Keela iptables
# Seadistamine virtualenv
# Installige CertBot
# Käivitage sertbot
# Seadke kasutaja seaded
# Seadistama õigused
# sudo chown -r meeskond: kasutajad/var/run/joon/
# sudo chown juur: juur/run/sudo/ts -r
# Laadige uuesti teenused
# Luba Apache moodulid
# Laadige uuesti deemon ja taaskäivitage Apache, Postfix ja Opendkim
# Kuva domeeni konfiguratsiooni jaoks IPv6 ja Opendkim
Enne selle koodi käivitamist veenduge, et teie ostetud domeen oleks serveriga ühendatud. Selleks avage oma kohalikul masinal terminal ja käivitage see käsk koos oma domeeniga:
ping femmebabe.com # Sisestage oma domeen siia pärast pingi
Kui kõik näeb hea välja ja server saadab vastuseid, oleme valmis skripti käitama ja pakette installima ning alustama, lubama ja sertifitseerima oma Apache'i serverit.
See pole ainult Postfixi konfigureerimiseks vajalik seadistus, vaatame seda seadistust hiljem rohkem. Praegu käivitage see seadistuskood ja serveri installimiseks ja sertifitseerimiseks peaks kuluma mõni minut. Veelkord asendage skriptis nime, e -posti ja domeeninimi järgi teie ostetud nime järgi.
Nüüd, kui server on ette nähtud, võite minna igas veebibrauseris URL -i ja kontrollida, kas server töötab HTTPS -i. Kui see pole nii, proovige natuke aega oodata, et DNS -i kirjed järele jõuaksid ja seejärel käivitage järgmine käsk, et proovida Certboti sertifikaati:
sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Kuni olete kõik õigesti konfigureerinud, peaksite pääsema Apache vaikelehele lihtsalt selleks, et teada saada, et teie kood töötab ja kuvab reaalajas veebilehte. Järgmisena redigeerime sätteid.py, et muuta meie vaikesilumisrežiim tootmiseks. Konfigureerime ka domeeni seadetes, aga ka sisemises IP -s.
nano yourproject/settings.py
Seadetes muutke/lisage need read.
# Saidi konfiguratsioon
Nüüd peame konfigureerima Apache2. Redigeerime konfiguratsioonifaili, mille me selle reaga kasutusele võtame:
sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Sellel konfiguratsioonifailil peaks olema meie domeeninimi ning kasutaja ja projekti nimi. Ma kasutan domeeninime femmebabe.com, kasutajanime meeskonda ja projekti nimi 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>
Selle näite koodis oma serveri konfigureerimisel asendage kindlasti projekti, kataloogide ja domeeni nimi. Nüüd peame vaikesaidi keelama. Seda saab teha bashi abil.
sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Järgmisena saame vaikesaidi lubada ja Apache2 uuesti laadida, kasutades ka BASH -i. Ärge unustage asendada femmebabe faili nimega, mille deklareerisite redigeerimisel/etc/apache2/saidid-saidil/.
sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Minge navbaris tagasi oma domeeni juurde. Peaksite nägema saiti, mille olete oma veebibrauseris konfigureeritud. Palju õnne! Kui te seda ei näe, peate võib -olla tegema mõned muudatused. Vaadake hoolikalt üle oma projekti seaded, Apache konfiguratsioon ja veenduge, et teil pole vigu, ja käivitage järgmised käsud, et projekti tõrgete kontrollimiseks kontrollida.
cd projectname
source venv/bin/activate
python manage.py check
Kui teil on Pythoni projektis vigu, jälgige neid sinna, kus nad asuvad, ja parandage need. Võimalik, et te ei näe kõiki oma vigu sõltuvalt sellest, kus nad asuvad, nii et kui teil on tõrge, mis ütleb lihtsalt, et "asustatud pole uuesti kinnine", muutke vea paljastamiseks virtuaalses keskkonnas register.py järgmist faili.
nano venv/lib/python3.12/site-packages/django/apps/registry.py
Kerige rida 83, kus see käitusaja tõrge tõstetakse (RAGE RuntimeError ("Asukoha () ei ole uuesti kinnine") ja lisage selle rea ette kommentaar, seejärel lisage sama taandumisega iseenda.App_Configs = {}. See näeb välja nagu see:
# Vältige uuestintrantkõnesid, et vältida AppConfig.Ready () käitamist
# meetodid kaks korda.
# RAGE RuntimeError ("Asukoha () ei ole uuesti")
Seejärel saate projekti uuesti kontrollida ja vea paljastada.
python manage.py check
Siis näete viga ja parandama selle. Kui see on fikseeritud ja kood kompileerib vigadeta, muutke fail kindlasti tagasi, nii et see näeb välja selline:
# Vältige uuestintrantkõnesid, et vältida AppConfig.Ready () käitamist
# meetodid kaks korda.
# Self.App_configs = {}
Eeldusel, et server on võrgus, kui teeme sellega täiendavaid muudatusi, peame serveri uuesti laadimiseks kasutama järgmist käsku:
sudo systemctl reload apache2
Vinge! Aga kuidas on posti saatmisega? E -posti saatmise alustamiseks peame kõigepealt värskendama domeeni konfiguratsiooni. See peaks olema teie DNS -paneelis Squarespace'is või mis tahes domeeni nime registripidaja. Samuti peame installima ja lisama konfiguratsiooni ning käivitama paar käsku.
Kõigepealt saame serveri IPv6 -aadressi. Seejärel avame teie DNS ja lisame kirjed.
Serveri IPv6 aadressi saamiseks kasutage seda käsku:
ip -6 addr
Nüüd saame DNS -i sätetesse lisada järgmised kirjed. Minu plaadid näevad välja sellised. Siiski peaksite oma kirjete jaoks IP -aadressi asendama oma IP -ga (mitte 75.147.182.214, see on minu oma). Lisage ka oma domeen femmebabe.com asemel, samuti eelmise käsuga leitud IPv6 -aadress (te ei saa kasutada minu oma, FE80 :: 725A: FFF: FFF: FE49: 3E02). Ärge muretsege praegu domeeni pärast, see luuakse siis, kui seadistame Postfixi, meiliserveri Opendkimiga ja printime klahvi. Me teemekonfigureerige see
@ 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 ~ kõik
vaikimisi._bimi Txt N/a v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg
_DMARC Txt N/a v = dMarc1; p = puudub
Sendonly._Domainkey
Txt
N/a
Nüüd peame Postfixi jaoks lisama püsiva konfiguratsiooni. Kõik, mida peame tegema, on veenduda, et asendaksime domeeninime femmebabe.com koos teie kasutatava domeeninimega. Vaatame kõiki konfiguratsioonifaile ükshaaval ja installime need meie projekti kataloogi nimega Config, et installida OS -i.
nano config/etc_postfix_main.cf
Lisage see tekst faili
# Kommenteeritud, terviklikuma versiooni kohta vaata /usr/share/postfix/main.cf.dist
# Debian spetsiifiline: failinime määramine põhjustab esimese
# Selle faili rida, mida kasutatakse nimena. Debiani vaikimisi
# IS /etc /MailName.
# mürigin = /etc /mailnimi
# Lisamine .Domain on MUA töö.
# Lahendus järgmine rida genereerida hoiatusi "hilinenud posti"
# viivitus_warning_time = 4h
# Vt http://www.postfix.org/Compatibility_readme.html - vaikimisi kuni 3.6
# Värsked paigaldused.
# TLS parameetrid
nano config/etc_postfix_master.cf
Lisage need read:
#
# PostFixi põhiprotsessi konfiguratsioonifail. Vormingu üksikasju leiate
# On-line: http://www.postfix.org/master.5.html).
# Ärge unustage pärast selle faili redigeerimist käivitada "PostFix Reaud".
#
# ================================================================================================================================================================================================================================================================================================ =
# Teenuse tüüp Privaat Unpiv Chroot WakeUp MaxProc Command + Args
# (jah) (jah) (ei) (mitte kunagi) (100)
# ================================================================================================================================================================================================================================================================================================ =
# smtp inet n - y - 1 postikraani
# smtpd pass - - y - - smtpd
# dnsblog unix - - y - 0 dnsblog
# tlsproxy unix - - y - 0 tlsproxy
# Valige üks: lubage esitada ainult Loopback klientidele või mis tahes kliendile.
# 127.0.0.1:Submission INET N - Y - - SMTPD
# -o syslog_name = postfix/alistumine
# -o smtpd_tls_security_level = krüpt
# -o smtpd_sasl_auth_enable = jah
# -o smtpd_tls_auth_only = jah
# -o smtpd_reject_unListed_recipient = nr
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o smtpd_helo_restrictions = $ mua_helo_restrictions
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
# -o smtpd_recipient_restrictions =
# -o smtpd_relay_restrictions = loit_sasl_authenticated, tagasilükkamine
# -o milter_macro_daemon_name = päritolu
# Valige üks: lubage SMTP -d ainult Loopback klientide jaoks või mis tahes kliendi jaoks.
# 127.0.0.1:SMTPS INET N - Y - - SMTPD
# smtps inet n - y - - smtpd
# -o syslog_name = postfix/smtps
# -o smtpd_tls_wrappermode = jah
# -o smtpd_sasl_auth_enable = jah
# -o smtpd_reject_unListed_recipient = nr
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o smtpd_helo_restrictions = $ mua_helo_restrictions
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
# -o smtpd_recipient_restrictions =
# -o smtpd_relay_restrictions = loit_sasl_authenticated, tagasilükkamine
# -o milter_macro_daemon_name = päritolu
# 628 INET N - Y - - QMQPD
# QMGR UNIX N - N 300 1 OQMGR
# -o smtp_helo_timeout = 5 -o smtp_connect_timeout = 5
#
# ==============================================================================================================================
# Liidesed mitte-postfaksi tarkvarasse. Uurige kindlasti käsiraamatut
# POSTFIX-i tarkvara lehed, et teada saada, milliseid võimalusi see soovib.
#
# Paljud järgmistest teenustest kasutavad PostFixi toru (8) kohaletoimetamist
# agent. Lisateavet $ {adressaadi} kohta leiate toru (8) mehe lehelt
# ja muud sõnumite ümbriku valikud.
# ==============================================================================================================================
#
# Maildrop. Üksikasjade leiate faili PostFix Maildrop_readme.
# Määrake ka saidil main.cf: maildrop_destination_recipient_limit = 1
#
#
# ==============================================================================================================================
#
# Viimased CYRUS -i versioonid saavad kasutada olemasolevat "LMTP" master.cf kirjet.
#
# Täpsustage jaotises Cyrus.conf:
# lmtp cmd = "lmtpd -a" kuula = "localhost: lmtp" proto = tcp4
#
# Määrake main.cf üks või mitu järgmist:
# postbox_transport = lmtp: inet: localhost
# Virtual_transport = LMTP: INET: LocalHost
#
# ==============================================================================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Määrake ka saidil main.cf: cyrus_destination_recipient_limit = 1
#
# Cyrus unix - n n - - toru
# lipud = drx user = cyrus argv =/cyrus/bin/tarn -e -r $ {saatja} -m $ {laiend} $ {user}
#
# ==============================================================================================================================
# Vana näide kohaletoimetamisest Cyruse kaudu.
#
# Vana -tsürus unix - n n - - toru
# lipud = r user = cyrus argv =/cyrus/bin/tarn -e -m $ {laiend} $ {user}
#
# ==============================================================================================================================
#
# Konfiguratsiooni üksikasju leiate faili PostFix UUCP_README.
#
#
# Muud välised kohaletoimetamise meetodid.
#
Ja Opendkimi konfiguratsioon. Opendkim identifitseerib e -posti serverid domeenivõtmetega, et muuta need turvalisemaks. Ilma selleta pole Mail allkirjastatud ega pruugi postkasti pääseda.
nano config/etc_default_opendkim
Lisage need read:
# MÄRKUS. See on pärandi konfiguratsioonifail. Seda ei kasuta Opendkim
# SystemD teenus. Palun kasutage vastavaid konfiguratsiooniparameetreid
# /etc/opendkim.conf.
#
# Varem redigeeriks siin vaikeseadeid ja seejärel käivitage
# /lib/opendkim/opendkim.service.generate SystemD genereerimiseks failide alistamine aadressil
# /etc/systemd/system/opendkim.service.d/override.conf ja
# /etc/tmpfiles.d/opendkim.conf. Kuigi see on endiselt võimalik, on see nüüd
# Soovitatav reguleerida seadeid otse /etc/opendkim.conf.
#
# Daemon_opts = "" "
# Muutke/var/pooli/postfix/run/opendkim, et kasutada UNIX -i pistikupesa
# Postfix Chrootis:
# Rundir =/var/pool/postfix/run/opendkim
#
# Lahtiklus alternatiivse pistikupesa määramiseks
# Pange tähele, et selle seadistamine alistab opendkim.confis igasuguse pistikupesa väärtuse
# vaikimisi:
# Kuulake kõigil liidestel pordi 54321:
# Pistikupesa = INET: 54321
# Kuulake Pordi 12345 loopbackil:
# Pistikupesa = INET: 12345@localhost
# Kuulake 192.0.2.1 saidil 12345:
# Pistikupesa = INET: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf
Lisage need read:
# default_process_limit = 100
# default_client_limit = 1000
# Vaikeväärtus VSZ (virtuaalne mälu suurus) teenuse protsesside piirmäärad. See on peamiselt
# eesmärk on püüda ja tappa protsesse, mis lekivad mälu enne söömist
# Kõik.
# default_vsz_limit = 256m
# Sisselogimiskasutajat kasutavad sisselogimisprotsessid sisemiselt. See on kõige ebausaldusväärsem
# Kasutaja DoveCoti süsteemis. Sellel ei tohiks olla üldse juurdepääsu millelegi.
# default_login_user = dovenull
# Sisekasutajat kasutavad ebasoovitamata protsessid. See peaks olema eraldi
# Sisselogimise kasutaja, nii et sisselogimisprotsessid ei saaks teisi protsesse häirida.
# default_internal_user = dovecot
# port = 143
# port = 993
# SSL = jah
# Enne uue protsessi alustamist käitlevate ühenduste arv. Tavaliselt
# Ainsad kasulikud väärtused on 0 (piiramatu) või 1. 1 on turvalisem, kuid 0
# on kiirem. <doc/wiki/loginProcess.txt>
# teenuse_count = 1
# Protsesside arv, et alati oodata rohkem ühendusi.
# protsess_min_avail = 0
# Kui seate teenuse_count = 0, peate seda tõenäoliselt kasvatama.
# vsz_limit = $ default_vsz_limit
# port = 110
# port = 995
# SSL = jah
# port = 587
# Looge inet -kuulaja ainult siis, kui te ei saa ülaltoodud UNIX -i pistikupesa kasutada
# INET_LISTENER LMTP {
# Vältige LMTP nähtavaks kogu Interneti jaoks nähtavaks
# aadress =
# port =
# }
# Suurem osa mälust läheb MMAP () ING -failidele. Võimalik, et peate seda suurendama
# Piirake, kui teil on tohutud postkastid.
# vsz_limit = $ default_vsz_limit
# Max. IMAP -protsesside arv (ühendused)
# protsess_limit = 1024
# Max. POP3 protsesside arv (ühendused)
# protsess_limit = 1024
# Max. SMTP esitamisprotsesside arv (ühendused)
# protsess_limit = 1024
# Auth_Socket_Path osutab vaikimisi selle kasutajadb -pistikupesale. Tavaliselt on see
# kasutab Dovecot-LDA, Doveadm, võib-olla IMAP protsess jne. Kasutajad, kellel on
# Selle pistikupesa täielikud õigused saavad saada kõigi kasutajanimede ja
# Hankige kõigi UserDB otsingute tulemused.
#
# Vaikimisi 0666 režiim võimaldab kõigil pistikupesaga ühenduse luua, kuid
# UserDB otsingud õnnestub ainult siis, kui kasutajadB tagastab välja "UID"
# Sobib helistaja protsessi UID -ga. Ka siis, kui helistaja UID või GID sobib
# Socket on UID või GID Otsingud õnnestuvad. Kõik muu põhjustab läbikukkumist.
#
# Kõigi kasutajate otsimiseks helistajatele täielike õiguste andmiseks määrake režiim väärtuseks
# midagi muud kui 0666 ja Dovecot laseb tuumal jõustada
# Lubad (nt 0777 võimaldab kõigile täielikke õigusi).
# Autotöötaja protsessi käivitatakse vaikimisi juurtena, nii et sellele pääseb juurde
# /jne/vari. Kui see pole vajalik, tuleks kasutajat muuta
# $ default_internal_user.
# kasutaja = juur
# Dikti puhverserveri kasutamisel peaksid postiprotsessidel olema juurdepääs pistikupesale.
# Näiteks: režiim = 0660, grupp = vmail ja globaalne mail_access_groups = vmail
# režiim = 0600
# kasutaja =
# rühm =
Veelkord asendage domeen kõigis neis failides, femmebabe.com, teie valitud domeeniga. Redigeeri järgmist faili, DoveCot's Config,
nano config/etc_dovecot_dovecot
Ja lisage need read
## Dovecoti konfiguratsioonifail
# Kui teil on kiire, vaadake http://wiki2.dovecot.org/quickconfiguration
# "Doveconf -n" käsk annab muudetud sätete puhta väljundi. Kasutage seda
# Failide kopeerimise ja kleepimise asemel Dovecoti meililisti postitamisel.
# '# 'I iseloomu ja kõike pärast seda käsitletakse kommentaaridena. Lisaruumid
# ja vahekaarte eiratakse. Kui soovite mõnda neist selgesõnaliselt kasutada, pange
# value inside quotes, eg.: key = "# Char ja jälitav vingumine "
# Enamiku (kuid mitte kõiki) sätteid saab erinevate protokollide ja/või
# lähte-/sihtkoha IPS, paigutades seaded sektsioonidesse, näiteks:
# Protokoll IMAP {}, kohalik 127.0.0.1 {}, kaugmaht 10.0.0.0/8 {}
# Kuvatakse vaikeväärtused iga seade jaoks
# need. Need on siiski erandid: puuduvad lõigud (nt nimeruum {})
# või pistikprogrammi sätted lisatakse vaikimisi, need on loetletud ainult näidetena.
# Teed on ka lihtsalt näited, mille tegelikud vaikeseaded põhinevad konfigureerimisel
# Valikud. Siin loetletud teed on konfigureerimiseks -prefix =/usr
# --sysconfdir =/etc--localstantedir =/var
# Luba installitud protokollid
# Koma eraldatud IP -de või võõrustajate loetelu, kuhu ühendusi kuulata.
# "*" Kuulab kõigis IPv4 liidestes, "::" Kuulab kõigis IPv6 liidestes.
# Kui soovite täpsustada vaikeseadeid või midagi keerukamat,
# Redigeeri Conf.D/Master.conf.
# Kuula = *, ::
# Baaskataloog, kus käitamisandmeid salvestada.
# base_dir =/var/run/dovecot/
# Selle juhtumi nimi. Mitme instantsi seadistuses Doveadm ja muud käsud
# saab kasutada -i <eksemplar_name>, et valida, millist eksemplari kasutatakse (alternatiiv
# to -c <config_path>). Eksemplari nimi lisatakse ka protsessidele
# PS väljundis.
# eksemplar_name = DoveCot
# Tervitussõnum klientidele.
# login_greeting = dovecot valmis.
# Kosmose eraldatud loetelu usaldusväärsetest võrguvahemikest. Nende ühendused
# IP -del lubatakse nende IP -aadressid ja pordid alistada (logimiseks ja logimiseks
# autentimiste kontrollimiseks). Samuti eiratakse ka keelata_plaintext_auth
# Need võrgud. Tavaliselt täpsustate siin oma IMAP -puhverserveri serverid.
# login_trusted_networks =
# Ruumi eraldatud sisselogimise juurdepääsu kontrollimise pistikupesade (nt TCPWRAP) loend
# login_access_sockets =
# Proxy_maybe = jah, kui puhverserveri sihtkoht vastab mõnele neist IP -dest, ärge tehke seda
# puhverserver. See pole tavaliselt vajalik, kuid võib olla kasulik, kui sihtkoht
# IP on nt. Koormuse tasakaalustaja IP.
# authe_proxy_self =
# Näidake rohkem verbose protsessi pealkirju (PS -s). Näitab praegu kasutajanime ja
# IP -aadress. Kasulik nägemiseks, kes tegelikult kasutavad IMAP -protsesse
# (nt jagatud postkastid või kui sama UID -d kasutatakse mitme konto jaoks).
# verbose_proctitle = ei
# Kas tuleks kõik protsessid tappa, kui DoveCot Masteri protsess välja lülitub.
# Selle seadistamine "ei" tähendab seda, et DoveCot saab ilma uuendada ilma
# sundida olemasolevaid kliendiühendusi sulgema (kuigi see võib olla ka
# Probleem, kui uuendus on nt. Turvalisuse paranduse tõttu).
# Shutdown_clients = jah
# Kui see pole null
# selle asemel, et neid otse samas protsessis käitada.
# doveadm_worker_count = 0
# UNIX -i pistikupesa või host: port, mida kasutatakse Doveadmi serveriga ühendamiseks
# doveadm_socket_path = doveadm-server
# Ruumi eraldatud keskkonnamuutujate loetelu, mis on säilinud DoveCotis
# Startup ja edastati kõigile oma lasteprotsessidele. Võite anda ka
# võti = väärtuspaarid, et alati seada konkreetsed sätted.
# Import_environment = tz
##
## Dictionary Serveri sätted
##
# Sõnastikku saab kasutada võtme = väärtuse loendite salvestamiseks. Seda kasutab mitu
# pistikprogrammid. Sõnaraamatule pääseb juurde kas otse või ehkki a
# Sõnastiku server. Järgmine dikt plokiga kaardistab sõnaraamatu nimed URIS -iga
# Kui serverit kasutatakse. Seejärel saab neile viidata URI -dele vormingus
# "Puhverserver :: <name>".
# Kvoodi = mysql: /etc/dovecot/dovecot-dict-sql.conf.ext
# Suurem osa tegelikust konfiguratsioonist lisatakse allpool. Failinimed on
# Esmakordselt sorteeritakse nende ASCII väärtuse järgi ja parsib selles järjekorras. 00-eelsed
# FileName'is on mõeldud tellimuse mõistmise lihtsamaks.
# Konfiguratsioonifaili saab proovida ka kaasata ilma tõrke andmata
# Seda ei leitud:
# Võimaldab DoveCot kuulata kõiki sisendühendusi (IPv4 / IPv6)
Lisage Dovecoti kasutaja parool:
nano config/etc_dovecot_passwd
Faili esimene osa enne käärsoole on kasutajanimi. Viimane osa "YourPassword" tähistab parooli, mida soovite oma e -posti serverile anda.
team:{plain}yourpassword
Järgmisena Opendkimi konfiguratsioon
nano config/etc_opendkim.conf
Ja lisage need read:
# See on põhikonfiguratsioon allkirjastamiseks ja kontrollimiseks. See võib kergesti olla
# Kohandatud põhilise installatsiooni jaoks. Vt Opendkim.conf (5) ja
# /usr/share/doc/opendkim/examples/opendkim.conf.sample COMPLEKT
# Saadaolevate konfiguratsiooniparameetrite dokumentatsioon.
# Logwhy ei
# Ühised allkirjastamise ja kontrollimise parameetrid. Debianis on päisest "From"
# Ülendatud, kuna see on sageli identiteedi võti, mida kasutavad mainesüsteemid
# ja seega mõnevõrra turvatundlik.
# Domeeni, valija ja võtme allkirjastamine (vajalik). Näiteks tehke allkirjastamine
# domeeni "näide.com" jaoks koos valijaga "2020" (2020._Domainkey.example.com),
# kasutades privaatvõtme kasutamist /etc/dkimkeys/example.private. Granulaarsem
# Seadistusvalikud leiate saidilt /usr/share/doc/opendkim/readme.opendkim.
# Domeen näide.com
# Valija 2020
# KeyFile /etc/dkimkeys/example.private
# Debianis töötab Opendkim kasutajana "Opendkim". 007 umask on vajalik, kui
# Kasutades kohaliku pistikupesa koos MTA-dega, mis pääseb pistikupesale mitte-privileegina
# Kasutaja (näiteks PostFix). Võimalik, et peate gruppi lisama kasutaja "PostFix"
# "Opendkim" sel juhul.
# MTA ühenduse pistikupesa (vajalik). Kui MTA asub Chroot vanglas,
# Tuleb tagada, et pistikupesa on juurdepääsetav. Debianis jookseb Postfix sisse
# Chroot in/var/pooli/postfix, seetõttu peaks olema Unixi pistikupesa
# konfigureeritud, nagu näidatud alloleval viimasel real.
# Kohalik pistikupesa: /run/opendkim/opendkim.sock
# Pistikupesa: 8891@localhost
# Pistikupesa: 8891
# Hostid, millele pigem allkirjastada, mitte kontrollida, on vaikimisi 127.0.0.1. Vaata
# Opendkimi (8) operatsiooni jaotis lisateabe saamiseks.
# Internathosts 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
# Usaldusankur võimaldab DNSSEC -i. Debianis on esitatud usaldusankuri toimik
# Pakendi poolt DNS-Root-Data.
# Nimeserverid 127.0.0.1
# MAP -domeenid aadressilt aadresside ja sõnumite allkirjastamiseks kasutatavate võtmeteni
# Sisemiste võõrustajate komplekt, mille post tuleks allkirjastada
nano config/etc_default_opendkim
Ja lisage need read
# MÄRKUS. See on pärandi konfiguratsioonifail. Seda ei kasuta Opendkim
# SystemD teenus. Palun kasutage vastavaid konfiguratsiooniparameetreid
# /etc/opendkim.conf.
#
# Varem redigeeriks siin vaikeseadeid ja seejärel käivitage
# /lib/opendkim/opendkim.service.generate SystemD genereerimiseks failide alistamine aadressil
# /etc/systemd/system/opendkim.service.d/override.conf ja
# /etc/tmpfiles.d/opendkim.conf. Kuigi see on endiselt võimalik, on see nüüd
# Soovitatav reguleerida seadeid otse /etc/opendkim.conf.
#
# Daemon_opts = "" "
# Muutke/var/pooli/postfix/run/opendkim, et kasutada UNIX -i pistikupesa
# Postfix Chrootis:
# Rundir =/var/pool/postfix/run/opendkim
#
# Lahtiklus alternatiivse pistikupesa määramiseks
# Pange tähele, et selle seadistamine alistab opendkim.confis igasuguse pistikupesa väärtuse
# vaikimisi:
# Kuulake kõigil liidestel pordi 54321:
# Pistikupesa = INET: 54321
# Kuulake Pordi 12345 loopbackil:
# Pistikupesa = INET: 12345@localhost
# Kuulake 192.0.2.1 saidil 12345:
# Pistikupesa = INET: 12345@192.0.2.1
Kui oleme valmis oma PostFixi serveri seadistama, käivitame alloleva koodi, manustatakse sobiva domeeninimega. Alustage skripti loomisega
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Nüüd redigeerige seda faili Nanos tekstiredaktor, nii et see sisaldab femmebabe.com asemel teie domeeninime.
# !/bin/bash
# Seadistamine Postfix
Nüüd käivitage lõpetatud skript, et konfigureerida PostFix, Opendkim ja DoveCot.
./scripts/postfixsetup
Kui see skript on käivitatud, kopeerige viimane rida, mille see prindib, ja kleepige selle oma DNS -i konfiguratsiooni väärtuseks Sendonly._Domainkey väärtuseks. See on Opendkimi võti, mida kasutatakse teie domeeni tuvastamiseks turvalise posti saatmisel.
Vinge! Mõne päeva jooksul peaksite saama serverist posti saata, kui kõik on õigesti konfigureeritud.
Kui konfigureerisite lihtsalt oma meiliserveri DNS -i, peaks kirjete värskendamiseks kuluma vähem kui 72 tundi. See on tavaliselt palju kiirem. Saate kontrollida, kas teie server töötab selle käsu abil, edastasite oma e -posti aadressi:
echo "test" | mail -s "Test Email" youremail@gmail.com
Kui näib, et kõik töötab õigesti, peaksite saama oma serveriga e -kirju saata. Kui see ei tööta, proovige vaadata logisid, et näha, milline võib olla viga.
tail –lines 150 /var/log/mail.log
See pakub verbose teavet serveri saatmise posti kohta ja kas see töötab korralikult. Te peaksite nägema ka postkastis e -kirja, kui seda pole, kontrollige oma rämpsposti kausta.
Samuti peate seaded oma sätetes konfigureerima. Lisage või asendage need read oma seadetes
EMAIL_HOST_USER = 'team' # 'Love@mamasheen.com'
Pange tähele, et parooli saamiseks kasutame konfiguratsioonifaili. Laadime selle faili sätetesse nagu nii, faili alguses.:
# Avatud ja laadige konfiguratsioon
Loome selle faili ja lisame sellele salajase võtme, samuti posti parooli. Salajase võtme genereerimiseks kasutage seda käsku, mis iga pikkusega, mis teile lõpus meeldib:
openssl rand -base64 64
Kopeerige nüüd genereeritud ja redigeerige /etc/config.json redigeerige tekst
sudo nano /etc/config.json
Lisage oma faili järgmised read koos klahviga, mis avati salajaseks võtmeks.
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
JSON -vorming on lihtne ja hõlpsasti kasutatav, võime kuulutada ka muid võtmeid, mida me oma projektis kasutada tahame, ja hoida neid meie projekti kataloogist eraldi, et teised kasutajad ei saaks neile kirjutada ja nii ei saa neid lugeda meie projekti kataloogist. See on API võtmete jaoks soovitatav praktika, millest siin kasutame rohkem kui mõnda.
Samuti soovite oma projekti varundada, et veenduda, et kõik on salvestatud, ja saate oma töö hiljem taastada, isegi kui te ei soovi enam serverit rentida.
sudo backup
Nüüd proovige saata veebiserverist HTML -i e -kiri, kui käsurealt ühe saatmine töötab. Küsige oma kasutajajuhtumi kesta ja saatke Django kaudu sellele kasutajale HTML -i e -kiri. Muutke minu nimi koodis, Charlotte, oma kasutajanimeks.
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()
Kui esimene käsk ei tööta, veenduge kindlasti
source venv/bin/activate
Kui kõik on õigesti seadistatud, saate nüüd oma veebirakenduse saadetud postkasti tervitusmeili. Hea töö! Sa oled jõudnud kaugele.
Tahtsin lisada, et kui olete kunagi sellise projekti kallal töötades hädas vigadega, siis ärge kartke otsida vastuseid ja küsida abi. Google on muude otsingumootorite hulgas suurepärased ressursid programmeerimisabi otsimiseks. Otsige lihtsalt saadavat viga ja näete, kuidas teised inimesed probleemi lahendavad. Samuti võtate ühendust minuga, teie koolitajate (õpetajad, professorid, juhendajad), Interneti -eakaaslastega, kes on programmeerimiseks saadavalAidake või pöörduge selle raamatu või muude ressursside poole, et leida lahendusi teie probleemidele. Ma saan aru, et see pole lihtne, kuid isegi kui olete nii kaugelt lugenud ega kirjuta ühtegi koodi, õpite palju veebirakenduse nullist ehitamist. Patta ennast selga, sa teed suurepäraselt
Täname, et leidsite aega selle kolmanda väljaande veebiarendusjuhendi lugemiseks. Tulevastes väljaannetes lisan rohkem dokumendi alguses käsitletud olulisi näiteid ja me sukeldume palju sügavamale tarkvara ja riistvara arendamise maailma. Olge kursis tulevase ja ootan teile õpetamist, kuidas luua uskumatut tarkvara. Kohtumiseni järgmises väljaandes!
https://glamgirlx.com/et/practical-web-based-deep-learning-and
https://glamgirlx.com/et/practical-web-based-deep-learning-and -
Jätke mulle selle aadressi abil Bitcoini näpunäide: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE