Web bidez oinarritutako ikaskuntza sakona eta segurtasuna adibide bidez

-Z Daisy
Web bidez oinarritutako ikaskuntza sakona eta segurtasuna adibide bidez Hirugarren edizioa Charlotte Harper 2024ko uztailaren 3a Eguneratua / 2025eko ekainaren 3an
Hitzaurre:
Sareko softwarerako segurtasun-kontsiderazioak web garatzailearen plan eta gauzatzeren zati garrantzitsuak dira, ingeniaritza froga, egonkorra, egonkorra eta erabilgarria den helburu praktikoetarako. DOM (dokumentu objektuaren markaketa), Python, C / C ++, Java eta Bash inplementatzeko bacenden softwarea da, sormena adierazten duten hainbat proiektu sortzeko. Denbora hiltzeko edo Interneten zerbait lortzeko, normalean ukipen-pantailako telefono gailu batean. Jende gehienak ez luke jakingo hutsetik webgunea eraiki nahi dutenean, eta, batez ere, botoiak ezabatzeko, eta, batez ere, software gutxik ordaindutako diru-sarrerarik gabeko tresnak eraiki ahal izango zituzten. Liburu honen bidez irakurtzeko minutu batzuk eta norabidean norabidean irakatsi nahi dut, eta zure software propioa idazten eta idazten ikasteko motibatuta daude.
Niri buruz: SOFTWARE garatzailea naiz, C / C ++, Java, Python, HTML, CSS eta JavaScript-en esperientzia ugari dituena. Webguneak erabili nahi ditudan webguneak eraikitzen ditut, bisitatu nahi dut, eta mendekotasuna lortu nahi dut ikasteko, birsortu eta hiltzeko, eta garrantzitsuena softwarea saltzen dut. Webgune bat itxura eta funtzio bat nahi zenuen ideia izan bazenuen, nire beharrak asetzeko prest egon bazina, zure webgunea betetzen ari naizen bitartean. Nire denbora saltzen saiatu beharrean, aplikazio bat (webgunea) eraikitzera hitz egin nahi dut dagoeneko existitzen den informazioarekin, eta irakatsi ezazu zer behar duzun software garatzaile independentea izan behar duzun, ekintzaileak, nahi duzun edozein arlotan arrakasta arrakastatsua izatea. Utz iezadazu argi utzi, ematen dizudan hezkuntza informala izango da. Eskolara joan eta hori guztia ikas dezakezu hezkuntza formalarekin, edo liburu hau irakurri ere eskolan, zereginak bete eta zure heziketatik asko kenduko zaitut, baina ez zaitut formalki eserleku beroan sartuko eta zereginak betetzeko eskatuko dizut. Ez naiz zure irakaslea, pentsa dezakezu zure arrakasta pertsonalak bultzatutako karrerara gidatu nahi duen lagun bat bezala. Eta ez zaitut arrakasta saltzen, zure denborarekin erosi beharko duzu. Kodeak ikastea ikaskuntza kurba gogorra du eta ez zen inoiz erraza, ezta ustez ere. Ahalik eta gogor lan egin behar duzu eta saiatu eta saiatzen jarraitu eta saiatu berriro ere zapuztuta zaudenean, zeure burua ikasteko eta eraikitzeko. Hori da kodearen beraren izaeran. Kodea programatzailearen errore mezuak emateko diseinatutako konpiladore batek zuzentzen du eta hauek nola kodetzen irakatsiko dizu, akatsa kopiatzen baduzu zure bilatzailean kopiatzen baduzu eta besteen adibideak irakurtzen badituzu. Eta esan behar dut, ez duzu oso aberats, adimentsua, arrakastatsua izan behar, edo aplikazio bat eraikitzeko edo antolatuta. Ordenagailuak erakunde hori zaintzen du zuretzat. Epaiketa eta akatsen bidez iraun behar duzu, fokua mantendu eta lan gogorra egin behar duzu, eta egiten duzunaren osotasunean oso arrakastatsua izango duzu.
Nor naiz: Konturatzen naiz azken atala ikastekoari buruz gehiago zela eta liburu honetatik bide bat hartzea. Nor naiz zehazki? Hori da galdera korapilatsua. Neure burua ez dut argi, niretzat zaila egin dezaketen baldintza medikoak jasaten ditudanez, niretzat liburu hau idaztea edo idaztea, nire bizitza zailagoa denean nire bizitza zailagoa bihurtzen dutenak. Azken batean, liburu hau irakurtzen ari bazara, etxera eraman zenuen eta erabilgarria zela uste duzulako, edo hau oso urruti irakurtzen baduzu ere, zuk egiten duzun guztia ikusi nahi duzun bezalako adimen bat naiz. Neure burua, software garatzailea eta ikaslea naiz, eta bizitza hau erraztu nahi duten beste ikasle batzuentzat idazten ari naiz, beren bizitza erraztu behar dutenak. Zuen, hori da egiten dudana: aplikazioak eraikitzen ditut neure burua eta beste batzuek arrakasta izaten laguntzeko. Egilea ere naiz, nahiz eta hau osatzeko asmoa dudan lehenengo argitalpena nire zorroa dokumentu erabilgarri batean jartzeko asmoa dudan lehenengo argitalpena, eta baita artista ere. Hori onartuko dizut, pertsona arrotz bat naiz. Ez naiz perfektua, zuzenbidearekin zuzentzen naute, nahiz eta institutuak eta unibertsitateak uztera eta estatuek arrakasta handiagoa izaten saiatzeko. Emakume bat jaiotzez naiz, makillajea janzten dut, argazkiak ateratzen ditut, jantzi soinekoak eta beste emakumeentzako jantziak, eta nire buruaz kontziente izaten ditut naturaz emakumezko gisa. Iraganeko beste pertsona batzuekin arazoak izan ditut idazteko eta webapps eraikitzeko borrokan borrokatzea eta barkamena eskatzen dizut ezin izan dudala liburu hau zure eskuetan ahalik eta behin: hori behar zenuen. Nire itxura duen kodea irakurri eta idatzi nahi duzu eta gauza bera egiten du eta are hobeto funtzionatzen du, izan ere, liburu hau erosteko aukera ematen baduzu, zure kabuz dirua sortzea besterik ez da zure bizitzan arrakasta izan behar duzu. Mota guztietako gaiak izan ditut familia hazten, osasun baldintzekin, medikuekin, medikuekin, medikuekin eta legearekin, eta nire kodeak sakonki islatzen du feminismoa eta emakumezkoen izaera mundu banatu eta frustratuan dagoen borroka. Hala ere, liburu hau oso ondo zaintzen dudan zerbait da, nire haurra, nire zorroa eta nire bizibidea, beraz, zure kontura kontutan hartzen dut testua etxera eramaten duzunean eta arretaz poro gainean nigandik ikasteko. Kontuan izan ez naizela perfektua, liburu honek akatsak, berrikuspenak eta edizio berriak izango ditu, eta zure burmuin logikoarekin pentsatu beharko duzu ahalik eta ondoen, nire idazkerarekin esperientzia arrakastatsua izan dezan. Era berean, ulertu zuretzako erronkak egiterakoan erronkak izan ditzakezunean ere. Pentsa ezazu hau bezalakoa: ordenagailu sistema bat alokatu dezakezu espazio digitalean imajina dezakezuen edozer, bilatu, aztertu eta antolatu, eta ulertu, ezinbestean aurkituko duzu irensten ari zaren informazioarekin eta baita argitalpenak ere. Hau diotsuet zailtasun berdinak topatzen ditudalako. Erabili liburu hau zure ardurapean, zure komunitate eta komunitateekin softwarea ezarpen seguruan eraikitzeko. Horrela lortuko zaitut, eta zergatik harrapatu nauzu, urratu eta urratzen nauen arazo arruntak topatzen nituenean. funtzionatuko du, Internet. Baliteke ez zarela oso ezaguna nor naizen hitz batzuekin, baina irakurtzera animatzen zaitut, irakurri eta ulertzen jarraituko didazu zure proiektuak eraikitzen ari zaren bitartean. Liburu honekin ez da etxeko lanik egingo, zure irakasleek edo irakasleek ez dizute inor esleitzen, baina oso animatzen zaitut proiektuen zorro bat eraikitzera zeure burua irakurtzen duzunean, baita ikasitakoa nola aplikatu dezakezuen erakusteko proiektua ere. Nire CAPSTone proiektua liburu honetan irakurri duzuenaren oinarria da, nire aurreko proiektuetatik sortu eta metodikoki eskuz idazten hasi naizen kode eta aholku ugarirekin. Aplikazio sinple bat egin dezaketen eta zure lagun edo familia erabilita, Interneten iragarkia edo albisteetan edo albisteetan ikus dezaketen.
Liburu hau zer den: Liburu hau adibide bidez tutorial da. Kodea aurki dezakezu hemen, arazketa-kodeari buruzko informazioa eta akatsak konpontzeko argibideak, arazoak konpontzeko, zure kodea ziurtatu, entretenituak direnak, eta nor naizen, zure aplikazioa eta enpresaren irudia nola irudikatzeko, baita zure softwarea ere Eraiki ezazu argi onena zure azken erabiltzaileentzat ahalik eta erakargarriena izateko, zure webgunearen bisitariak. Liburu honetan, software diseinuaren hainbat adibide erakutsiko ditut webgunean plataforma gisa eta segurtasun gisa. Ikasteko esperientzia abiaraziko dugu Unix shell erabiliz oinarrizko proiektua eraikiz, segurtasun kopia eta script-funtzioak erabiliz. Ondoren, oinarrizko blogaren webgunea aztertuko dugu, argazki eta bideo-funtzioekin eta bideo-funtzioekin berritu eta erabili funtzio horiek segurtasun irtenbideak erabiltzeko software librea erabiliz eta gure zerbitzaria ziurtatu entxufe autentifikazio modulua erabiliz (PAM). Ondoren, fitxategien manipulazioa eta prozesamendua berrikusiko ditugu, bideo edizioa, ahotsaren dohaintza, barra-kodea eskaneatzea eta karaktere optikoa aitortzea arakatzea, besteak beste. Bidean APIak aztertuko ditugu, gure softwarea erabilgarriagoa eta seguruagoa bihurtzen lagunduko diguna, doako eta ordaindutako aukerekin. Bidean, segurtasun fisikoak eta munizioak diseinatzeko eta fabrikatzeko tresna fisikoak arakatuko ditugu, esaterako, upelak eta errepikatzaileen diseinua, dorrea eta drone diseinua, eta gure softwarearekin batera integratuko ditugu gure softwarea babesteko eta autodefentsa eta egoitza erakusteko. Bidean zehar apurketak egingo ditugu jokoak, 2D eta 3D errendatzeko motorrak eraikitzeko eta kapsulatutako hardwarearekin lan egiten dugu, oinarrizko dimentsioko errendatze softwarearen adibideak eta silikonazko gomazko silikonazko gomazko bibrazio elektronikoko adibideak. Bidean, dagoeneko erabilgarri dauden makinaren ikaskuntza soluzioak ere erabiliko ditugu gure softwarea hobeto ziurtatzeko. Weberako eskuragarri dauden stock tresnak ere erabiliko ditugu prozesua erraztu eta ziurtatzeko. Liburu hau web aplikazio bat eraikitzeko eta ordenagailu eta kapsulatutako sistema mekanikoen sare profesional batekin integratzeko gida da eta, gainera, softwarea eraikitzeko eta hardware kapsulatu gabeko gida bat da, ezagutzarik edo aurreko esperientziarik gabe.
Liburu hau zer ez da: Webgune bat izan nahi baduzu, denda soil bat konfiguratu eta behar duzuna saldu, bloga bidali, argazkiak edo bideoak bidali, edo bestela, kode lerro bakarra idatzi gabe. Liburu hau ez da hori. Liburu honek dagoeneko aurki ditzakezun edozein softwarea baino erabilgarriagoa den softwarea eraikitzen irakatsiko dizu. Liburu hau estu jarraitzen baduzu, kodea, ikerketa kodea idatzi nahi duzu, zure aplikazioak eraiki eta dirua irabaziko duzu. Liburu honetatik dirua irabaziko dut, nahiz eta hasierako faseetan, informazio jendeak behar du eta irakurri nahi du eta dagoeneko erosten ari dira erosten edo nire aplikazioak erabiltzen dituztenean. Liburu honek ez du zuretzat aplikaziorik eraikiko, baina norabide egokian seinalatuko zaitu. Webgunearen eraikuntzako softwarean zure arrakasta eta aholkuek adibide gisa idatziko dute.
Zer ikasiko duzu: Liburu honek softwarea, software funtzionala, erabilgarria, erabilgarria, segurtasuna grabatzeko, segurtasun-ezaugarriak, makina-kodeen eskaneatzea, bideo eta argazkiak autentikatzeko, erregistratzeko eta errendatzeko web apisak eta Bluetooth eta NFC (NFC) komunikazioa (NFC) bezalako mezuak trukatzeko irakatsiko dizu. Liburu honek Sareko ordenagailua nola erabili irakatsiko dizu, nola eraiki Bash kodea instalatu eta babesteko. Python kodea modu egokian instalatu eta babesteko, sareko gailuen bidez. Multimedia eta sare interaktiboak eraiki, egiaztatzeko testu mezuak bezalako segurtasun-ezaugarriak eskaintzeko. edo beste helburu batzuk, ID eskaneatzea, irudia eta bideo neurritasuna, datu mikrotransakzioak zure softwarea segurua, ordainketa prozesatzeko, kriptokurrentziaren negoziazioa, zeregin asinkronikoak eta gehiago. Zure Bluetooth gailuak nola eraikitzen ikasiko duzu, bateriak, kargagailuak, mikrokontrolagailuak, zirkuituak, motorrak eta sentsoreak, soldadura, alanbrea eta 3D inprimatutakoak erabiliz, baita materialak ere. Fabrikazio eta tresna gehigarrietan aplikatutako 3D diseinurako zuzendariak erakutsiko ditut eta, beraz, zure kapsulatutako gailuak, bateriak, kargagailuak, zirkuitu elektronikoak eta irteera funtzionalak fabrikatzeko gai zara. eta sar itzazu Bluetooth eta web bidez. Zehazki, bi kasu azterketa, masaje bibragarria eta etxeko suzko arma bat aztertuko ditugu, biak OpenScad-en programatuta, interfaze grafiko edo komando lerroko erabilgarritasun gisa eskuragarri baitago eta emaitza bizkorragoak lortzeko webgune batean integratu daitezke. Webgune bat eraikitzen eta zabaltzen ikasiko duzu lurretik aldez aurretik esperientziarik gabe, funtzionala, segurua, ederra, erabilgarria eta garrantzitsuena praktikoa. Makina ikaskuntza eta ordenagailuaren ikuspegia nola erabili ikasiko duzu, zure webgunetik, musika eta audioak zure webgunetik erregistratu, eta zarata modu egokian aprobetxatuz, zure webguneak zuzenean estekatzeko, zure webgunera zuzenean estekatu ahal izango duzu. Liburu hau gehienetan oinarrituko da komunikabideetan, segurtasun eta makinen ikaskuntzan, erabiltzaileentzako software erabilgarria eraikitzen lagunduko dutenak, erabiltzaile egokiak erakarri eta okerrak deskubrituz, errealista, praktikoa, eskuak piztuz eta automatikoak eta sendoak diren bitartean. Liburu honek UNIX irakasten du, zehazki debian (Ubuntu), Bash Shell, Python, HTML, HTML, JavaScript eta hainbat software pakete erabilgarria eskaerak bezala, baita git eta ffmpeg bezalako software erabilgarria ere. Kriptokuntzia automatikoki merkaturatzen irakatsiko dizut eta ordainketak kriptokurrenean edo ordainketak egiten ditut edo ohiko zordunketa-txarteletatik ateratzen dituzun bitartean, zure bisitariek zure diru-sarreren kuota ordaintzen lagunduko dizute, hori aukeratzen baduzu. Zure webgunetik dirua nola irabazi irakatsiko dizut, nola prestatu zure aplikazioa bilatzaileentzako eta azkar egiteko, zure bezeroek aurkituko duten lehen sailkapenean sailkatuta, eta ahalik eta ohiko bilaketa gehienetan sailkatzea. Zure softwarea nola saldu irakatsiko dizut, iragarkia, zure zerbitzuak bilatzen dituzten bezeroei helegitea eta interneten izena jartzen dutenak jada existitzen diren etorbideen bidez, eta ondo funtzionatzen dute. Zure datuak nola aurrezten diren zure datuak merkean gordetzen irakatsiko dizut, nola zure erabiltzaileek nahi duzuna eta nola nahi duten zure webgunea. Liburu honek komunikabideak kantitate handietan argitaratzeko eta banatzeko praktikotasunean oinarrituko da, irudikapenak audiora, inpresio ona eginez erabiltzaileen (zure bezeroen) eta zure webgunea sortzeko, zure eta zure softwarea eta zure softwarea eta zure softwarea eta zure softwarea eta zure softwarea eta zure softwarea eta zure softwarea eta zure softwarea eta zure softwarea eta zure softwarea eta zure softwarea nahi duzunean nahi duzunean. Niretzako aholku eta trikimailu batzuk ere ikasiko dituzu, makillajea eta argazkigintza, modelatzea eta jardutea bezalako hutsune praktikoak, zure burua eta zure enpresa ahalik eta argirik onenean erretratatzeko. Liburu hau "praktikoa" deritzoAdibidez, ikaskuntza sakona eta segurtasuna "arrazoi batengatik: zehazki, segurtasunari buruzkoa da. Irudiak, irudien azpitituluak eta irudien inguruko irudiak bezalako irudiak bezalako irudien izaera bezalakoa da, hala nola, ordenagailuz ordenagailuz transferitutako irudia (irudiaren argazkia edo inprimatutako argazkia). zure aurpegian. Zerbitzariaren ordenagailua segurua da, normalean erabiltzaile izen bat eta pasahitza eskatuz gero, behar bezala. erabiltzen duzu). Secureski segurua den softwarea eraikitzen duen edonork badu horrek dakarrena. Softwarea berez segurua da, sarbidea erabiltzen ditugun gailuak eta kontuak ez baitira beti gure eskura. Hau liburu honen ardatz da. Sareko ordenagailua lehenetsitako tekla luze batekin ziurtatuta dago, deitzen dena eta ssh edo shell tekla segurua da eta bestela, web zerbitzari batekin segurtatu da, web zerbitzariak sarbidea eskaintzen baitu eta baita zerbitzariko segurtasun tresnen egoera eskaintzen baita. Web zerbitzariak erabiltzailearen web arakatzailerako sarbidea du, eta horrek dudarik gabe, erabiltzailearen gailuaren zatirik ahaltsuena da, erabiltzaileak sareko softwarea sar dezakeen lekua delako. Tresna-oharrek testua, ikusitako web orriak, audio eta bideo batek (aurpegiaren edo estatuaren ID baten argazki bat bezala) ere egin ditzakete, irakurri eta idatzi eta idatzi ditzakete eremuko transpondedor etiketetan, funtsezko txartelak eta baita webguneari lotutako web zerbitzari batek sortutako eta balioztatutako datu-serieko zenbakiekin irakurri eta idatz ditzaketen. Zure eskura dauden tresna guztiak erabiliz, webgune segurua eraikitzeko ezagutzarekin hornituko duzu eta zuretzako lan egiten duen sareko sistema informatiko segurua da, zure lizitazioa eta itxura eta sentitzen du
Nondik hasi: Ongi etorriko zara, edo edozein atalekin, edo edozein ataletan, behar duzun kode zehatzari ekstatzera, batez ere kodetzearekin edo aipatutako tresnetako edozein esperientzia baduzu, liburu honetan zehatz-mehatz deskribatuko ditut, baita erabilera kasuak eta adibide praktikoak dokumentatuz. Idazteko kodean esperientziarik ez baduzu, oso gomendatzen dut liburu hau guztia irakurtzea, eta batez ere aurreko atalak irakurtzea gomendatzen dut, liburu hau zuretzako egokia dela ziurtatzeko. Liburu hau zuretzat egokia ez bada, kontuan hartu web garapenari buruz ikasteko interesa izan dezaketen lagun edo erlatiboari, eta are gehiago mailegatzea eta haietatik ikastea irakasle gisa huts egin nuen hutsuneak betetzeko edo beste irakasle batzuek nire aurrean egin nuen hutsuneak betetzeko. Hasi non egingo duzun, liburu honen zati bakoitza erabilgarria izango da aplikazio erabilgarria eraikitzeko asmoa baduzu eta kontuan hartu aplikazio onenak azken erabiltzailearekin eraikitzen direla kontuan: zure bezeroak ezagutu. Orain ezagutzen nauzu, liburu hau ezagutzen duzu, eta hasteko prest zaude. Hasteko, ordenagailua hartu (nahiz eta ordenagailu eramangarri merkeena kaxa denda batetik, Amazon edo mahaigain zahar batek lan egiten du eta zuretzat lan egiten duen modu batean konfiguratu.
Nola irakurri liburu hau: Testua nabarmenduta, testua komando gonbita batean dagoela adierazten du, eta bertan exekutatzen duzun kodea idatziko duzu. Komandoaren gonbita oso teklatua da.
Hasteko: Murgil dezagun. Bertako makina batean kode eraikitzen hasiko gara eta Internetera konektatutako webgunea eraiki gabe hasiko gara. Hori hasteko seguruagoa da, ezer kostatzen da eta zuretzako erraza da. Zure sistema eragilearen arabera, bash shell batean sartzea apur bat desberdina izango da. Mac OSrako, une honetan makina birtuala instalatzea gomendatzen dut, makina birtual batekin bateragarritasun gehien lortuko duzulako. Birtualbox eta paralereek bezalako hainbat hornitzaile zuretzat makina birtuala exekutatu dezakete, nahiz eta Ubuntu zuzenean makinan instalatzeko aukera izan, nahiago baduzu, esperientzia azkarra eta errazagoa sortzeko gomendagarria den jatorrizko ingurunea erabili nahi baduzu. Linux edo Windows erabiltzen ari bazara, gomendatzen dut, nahiko erraza izan beharko litzateke proiektu bat sortzea. Ireki zure terminala, doitu neurria egokitzen zarenean eta hasi hurrengo urratsa. Leihoak erabiltzen ari bazara, jarraitu 1. urratsa.
1. urratsa: - Windows erabiltzaileak bakarrik Windows-en, Ireki Komandoaren galdetegia administratzaile eta mota gisa wsl--stall
2. urratsa: - Jarraitu hemen, edo saltatu 1. urratsa hemen ez baduzu Windows erabiltzen Terminal irekian (zure OSaren arabera, Ubuntu deituriko leihoetan, Mac edo Linux-en terminalean edo antzeko izenarekin), hasi proiektu bat sortuz. Hau egiten dugu mkdir komandoarekin, direktorio bat sortzen duena. Proiektua gordetzeko direktorio bat sortu behar baduzu, erabili CD komandoa direktoriora aldatzeko eta eta
CD / PATH / TO / Directory - Zure helmuga direktorioaren aurreko karpetak (fitxategiak) dira, zure bide lehenetsia ~ edo / home / erabiltzaile izena da (non erabiltzaile izena zure erabiltzaile izena da). Direktorio lehenetsira, idatzi CD edo CD ~ MKDIR Adibidea - "Adibidea" ordezkatu direktorioaren izenarekin
Orain zure proiektuarentzako lan direktorio bat duzu. Direktorio hau gordetzea hain garrantzitsua denez, beste makina batera aldatu edo idatzi duzun kodea zabaldu behar baduzu, weberako prest dago, zure direktorioaren babeskopia egiteko gidoia eraikiko dugu hurrengo pausoetan. Gidoi bat eraikitzeak kode pixka bat hartzen du eta kodea automatizatu behar da ahalik eta erabilgarri izan dadin. Eraiki dezagun gidoi bat lehenik scriptak eraikitzeko. Has gaitezen gidoia sortuz eta exekutagarria bihurtuz. Sudo, Chmod eta ukitu horretarako erabiliko dugu eta "ascript" gidoia deituko dugu.
sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Orain, gidoia sortu dugu, exekutagarria bihurtu da eta editatzeko prest daude. Nano testu-editore bat da, testua klik egin gabe editatzeko utziko dizuna, erabiltzailearen interfaze grafiko bat erabiltzea baino askoz errazagoa da. Nano-rekin fitxategi bat editatzeko, erabili nano eta gero fitxategiaren bidea. Gidoi bat egiten duen gidoia egiteko, nahiko antzekoa da gure gidoia lehenik egotea. Goiko bezala kode bera erabiliko dugu, "ascript" izenarekin ordezkatuz, argumentu parametro batekin, $ 1. Honek gidoia deitzeko aukera ematen digu Suzko Ascript-eko albistegian idatzita, zein puntuan sor dezakegu edozein gidoi berriaren "albistegia" zure gidoiaren izenarekin ordezkatuz. Nanoko kodeak itxura izan beharko luke:
sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
Nano ixteko, kontrol tekla sakatuta egon eta X sakatu, orduan fitxategia gordetzen ari gara eta itzulera jo du. Gidoi bat editatzeko hiru komando hauek idatzi beharrean, Script berriro editatzeko sudo ascript ascript idatzi ahal izango dugu. Honek funtzionatzen du! Eta edozein gidoi berri erraz exekutatu daiteke maskorra deituz. Gorde dezagun gure lana orain: idatzi dezagun babes-script bat gure gidoi berria gordetzeko eta, ondoren, babestu gure proiektuaren direktorioan, backup gidoia babesten baduzu.
sudo ascript backup
Orain, Nano:
sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Non / PATH / TO / Directory Mkdir-ekin sortu zenuen proiektuaren bidea da. Geroago, begizta eta zerrenda batekin errepikatzen diren bideak nola kopiatu ikasiko dugu, kode gutxiago duena, baina oraingoz sinplea izan dezagun eta lerro batzuk izan ditzagun. Gidoi hau exekutatzeko eta zure kodea babesteko, gorde fitxategia nanan kontrol + x, y eta itzuli eta idatzi beheko maskorra
backup
Liburu hau irakurtzen ari zaren bitartean pasahitz bat eskatuko bazaizu eta shell-en jarraituz gero, sartu zure erabiltzaile pasahitza behar bezala, hiru saiakera beharko dituzu komandoa berriro exekutatu aurretik. Gora eta behera geziak erabil ditzakezu komandoak eta editatzeko, bi aldiz exekutatu behar baduzu. Sakatu Sakatu gora eta behera, komandoa hautatzeko, komandoa eskuinarekin, ezkerreko geziekin eta ezabatu tekla eta teklatua ezabatu aurretik.
Zorionak! Zure lan direktorioan bi shell script garrantzitsu babesten dituen babes-script ikaragarria sortzea lortu zenuen. Gauzak geroago mugitu ahal izango genituzke proiektua handitu ahala, baina oraingoz funtzionatzen du. Mugitu gaitezen hodeian gordetzeko, backup-ri buruzko beste irtenbide ugari erabiliko ditugu.) Git hau da. Zure softwarea aurrezteko tresna da, batez ere kode-lerro bakarra huts egiten duenean linux kasu seguruetara migratzen dugulako, blokeatuta uzten baduzu zure kodea babesten ez baduzu, automatikoki babesteko aukerarik ez baduzu, estaliko dugu.
Ubuntu makina birtual bat erabiltzen ez baduzu, une honetan Ubuntu makina birtuala erabiliz gomendatzen dut. Kodea web zerbitzari batera eramango dugu etorkizun hurbilean, baina ziurtatu nahi dugu gutxienez segurtasun geruza batzuk daudela phishingarekiko erresistenteak diren gure web zerbitzariaren atzean, eta Linux pakete ugari erabiltzen dituztela horretarako. Mac OS erabili nahi baduzu, ongi etorria zara beharrezko paketeak bilatzeko eta instalatzeko linean, baina ezin da pakete bakoitzarentzako alternatibak izango liburu edo serie honek estaliko du.
Gehitu ditzagun komando batzuk gure lana backup gidoiarekin konpromisoa hartzeko, Sudo Ascript-eko babeskopia komandoa exekutatuz.
# ...
Berriro ere, kontrolatu x aurrezteko.
Orain proiektu honetarako denbora-konfigurazioa egin behar dugu. Laster Git Proiektua izango da, ez dugu komando guztiak idatzi behar git biltegi batetik hedatzen dugun bakoitzean, baina honen zintzilikazioa lortuko dugu gure inplementazio scriptak idazten ditugunean. Hasteko, ziurtatu direktorio egokian gaudela eta Git biltegia hasieratu eta SSH gakoak sortu.
cd /path/to/directory
git init
git branch -m master
ssh-keygen
SSH-Keygen idatzi ondoren, gako berria etxeko karpetan gorde behar da .Ssh izeneko karpeta baten azpian. ID_RSA.PUB deritzo. Aurkitu dezagun gako hau eta kopiatu. Ikusteko,
cd ~
cat .ssh/id_rsa.pub
Kopiatu azken komandoak itzultzen duen testua eta sortu kontu bat zure Git Hornitzailearekin (Ideal GitHub), SSH gakoa zure kontuan gehitu aurretik. Kontua izan ondoren, egin klik goiko eskuineko menuan eta sartu ezarpenak, SSH gakoa gehitu aurretik SSH eta GPG teklak menuan sartzeko. Hautatu Gehitu SSH tekla eta gehitu zurea itsatsita eta izenburu bat emanez, GitHub-era itzuli aurretik, biltegi berri bat sortzeko. GIT hornitzaileen antzekoa da, haien dokumentazioa irakurri beharko duzu. Biltegi berriko konfigurazioan, eman zure biltegia izen deskribatzailea eta erabaki ezazu argitaratu nahi duzun ala ez, eta ziurtatu oraindik ez duzula fitxategirik konfiguratzeko. Biltegia sortu ondoren, kopiatu klona SSH URLarekin eta itsatsi hurrengo komando honetan.
git remote add git://… (your remote URL)
Orain zure biltegira itzuli zaitezke CDarekin, hau ezagutuko duzu. Saiatu zure babeskopia gidoia babes kopiarekin
Handia! Orain, kodeketa lor dezakegu. Instalatu dezagun Django orain baja eta git-en ezagutu ona dugula. Django-k gure softwarea automatikoki babestuko digu, Bash-ek ere egin dezake, baina Djangok ezarpen seguruagoa izan beharko luke (desgaituta egon daiteke eta erraz konfiguratu daiteke).
Ubuntu-n softwarea instalatzeko, Sudo Apt-Get komandoa erabiliko dugu. Lehenik eta behin, eguneratu eta berritu dagoeneko izan dugun softwarea. SUDO Apt-Lortu eguneratzearekin eta sudo apt-bertsio berritu daiteke. Ondoren, instalatu dezagun Python eta gure ingurune birtuala, gure kodearen etxea, komando hauekin: Sudo Apt-Get Python-is-python3 python3-venv
Hau da Django-rekin joan behar duzun guztia Ubuntu instantzian software instalazioei dagokienez. Windows eta Linux nahiko erraza izan behar da, baina Mac-rako makina birtuala eta linux bat instalatu nahi dituzu VirtualBox edo Paralels Mahaigainaren antzekoa eta birsortu eta birsortu ubuntu ingurunea konfiguratzeko. Ubuntu kritikoa da kasu honetan, webguneak exekutatzen diren softwarea delako eta aipatutako software guztiekin webguneak antolatzeko aukera ematen die.
Django sartu dezagun.
Gure direktorioan berriro, CDarekin:
python -m venv venv # Kodea gordetzen den ingurune birtuala sortzen du
source venv/bin/activate # Ingurune birtuala aktibatzen du
django-admin startproject mysite . # Non dago nire uneko direktorioan hasi naizen proiektua.
Django hasi gintuen, Django web zerbitzaria ostatatzen ari delako eta oinarrizko tokiko webgunea martxan jartzeko behar dugun guztia egiten ari delako. Orain Django instalatuta dugula, editatu dezagun ezarpenak pixka bat nola behar dugun funtziona dezan. Lehenik eta behin, sor dezagun aplikazio berria
python manage.py startapp feed
Ohartuko zara lehen aplikazioa feed deritzo. Aplikazioa nahi duzuna deitu behar da eta aplikazio berriak sortuko ditugu, baina aplikazio bakoitzaren izena koherentea izan behar da aplikazioa kodean aipatzen den bakoitzean. Aplikazio berri bat gehitzeko, beti editatuko ditugu ezarpenak.py Beste direktorioko aplikazioa sortu da, hasierako aplikazioa hemendik aurrera. Nano erabiliz,
nano app/settings.py
Ezarpenetan, aurkitu instalatutako_apps eta bereizi [] 3 lerroetan. Zentro hutseko lerroan lau espazioak erabiliz, gehitu 'jarioa' edo zure aplikazioaren izena. Ezarpenak.py atal honen atal hau:
INSTALLED_APPS = [
'feed',
]
Ahaztu aurretik, probatu dezagun Django lanean ari dela. Python Manages.py Command Verserver erabiliz, zerbitzaria exekutatu dezakegu eta, ondoren, ordenagailuan nabigatu dezakegu kode hau exekutatzen duen ordenagailuan.
Orain, digu python kode batzuk idazteko. Django hiru osagai nagusi ditu, guztiak kodearekin batera. Osagaiak eredu, ikuspegi eta txantiloia deitzen dira, eta bakoitza maila altuagoa eta baxuagoa da hurrenez hurren, web orria erabiltzaileari entregatu aurretik.
Eredua datu-basean informazioa berreskuratzeko, ordenatzeko eta errendatzeko informazioa gordetzen duen kodea da.
Ikuspegiak erabakitzen du eredua nola errendatzen den, manipulatuta eta aldatuta, ia ikuspegi guztiek eredu bat zuzenean erabiliko dute.
Txantiloia HTML kodea da txantiloien hizkuntza izeneko kanpai eta txistu gehigarri batzuekin. Txantiloia python kodez eta testuinguruz betetzen den ikuspuntua da, hala nola ereduak eta informazioa (Usuall kateak eta zenbaki osoak) ikuspegitik.
Django-k beste osagai batzuk ere baditu, baina ez bakarrik mugatuta:
Ezarpenak, aplikazioa eztabaidatu genuen moduan konfiguratzen duena.
URLak, erabiltzaileak web aplikazioaren zati jakin batzuetarako sarbidea lortzen duten ereduak dira.
Inprimakiak, zerbitzarira bidaltzen den informazioa datu-baseari eta erabiltzaileari ere kudeatzen zaiona definitzen dutenak. Hauek dira zerbitzariaren aldean informazioa prozesatzeko oinarria, eta ordenagailu dendak, batez ere testu-kateak, zenbakiak eta egiazko / faltsuak (normalean kontrol-laukiak) onartzea (normalean kontrol-laukiak).
Txantiloiak, HTML kodea eta txantiloien hizkuntza eta HTML arteko hutsunea, esan nahi du Python informazioa, esan nahi du edonork sar dezakeen eta webgune bat sar dezakeen webgune bat.
Fitxategi estatikoak, normalean JavaScript eta zerbitzariak zerbitzatzen dituzten liburutegiak dira eta txantiloiarekin lotuta daude.
Multimedia fitxategiak, zerbitzariak barne hartzen dituena edo kanpotik ostatatzen dutenak, edo zerbitzarira idatzi aurretik, ostalaritzarako beste zerbitzari batean (ontzi bat) argitaratu aurretik.
Middleware, ikuspegi guztietan aldi berean exekutatzen diren kode zatiak dira eta ikuspegian "barne" kontsideratzen dira.
Testuinguru prozesadoreak, ikuspegi bakoitzaren testuingurua prozesatzen dutenak eta testuinguru gehigarria gehitzeko erabiltzen dira.
Probak, erabiltzaileak edo eskaerak baldintza batzuk zehaztu aurretik balioztatzen dutenak.
Kontsumitzaileek, webguneek komunikazioari nola kudeatu eta erantzuten dien.
Admin, ereduak erregistratzeko erabiltzen dena, Django Admin Orriaren barruan zehatz-mehatz manipulatu ahal izateko, non datu-basea interfaze grafiko baten bidez administratu daiteke.
Django kodearen zeregin asinkronikoak definitzen dituen apioa, Django kodearen zatiak korrika hasi ahal izango dira berehala hurrengo zereginetara edo kode lerroan jarraitu aurretik.
Django-k beste osagai asko izan ditzake, hemen zehatz-mehatz eztabaidatuko ditugula. Django funtzionalagoa egiteko modu ugari daude, webguneak azkar eta azkarragoak diren komunikazio bideak, apioa, zeregin asinkronikoak eta beste software ugari egiten dituztenak Djangoa zabaltzeko, batez ere ikuspegi funtzioetan, non kode gehienak gauzatzen diren. Ikusi funtzioak funtsezkoak dira, normalean URL eredu jakin bati edo zerbitzariaren atal zehatz bat deklaratzen delako.
Lehenik eta behin, azter ditzagun ikuspegiaren funtzioak. Ikusi funtzioak Ikuspegian erabiliko den kodea adierazten duten inportazioekin hasi eta funtzio edo klase erregularrak erabiliz definitzen dira. Ikuspegi sinpleenak funtzioen definizioaren bidez definitzen dira eta httpressponse oinarrizko txantiloia itzultzen dute. Has gaitezen oinarrizko ikuspegia definitzen "Kaixo mundua" testua itzultzeko. Gogoratu def bezalako adierazpen baten ondoren kodea gehitzen duzun bakoitzean, hala ere, eta abar, zure funtzioan aplikatu nahi zenukeen definizio bakoitzeko 4 espazioak gehitu beharko dituzu. Laster esan nahi duenean sartuko gara.
Gure gunearen direktoriotik, editatu jarioa / bistak.py fitxategia Nano erabiliz eta gehitu lerro hauek fitxategiaren amaierara.
from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
Django-ren Httpression-ek testu-kate batekin erantzuten du, inaugurazioarekin eta itxierarekin ". Informazioa funtzio edo klase batera pasatzen duzun bakoitzean, eskaera edo kate bat bezala, parentesia (, irekitzea eta ixteko) erabili beharko dituzu.
Hau ez da gure ikuspegia oraindik ikusi behar dugu. Jakina, ez diogu zerbitzaririk esan ikuspegia zehazki, oraindik ere, ikuspegiak eman behar duen bide bat definitu behar dugu. Has gaitezen aplikazio / urls.py oinarrizko bidea definitzen, eta geroagoko taldeetan sartuko gara.
App / URLS.py-n, gehitu lerro bat inportazioen adierazpenen ondoren sortu berri dugun ikuspegia inportatu ondoren.
from feed import views as feed_views
Orain, zehaztu dezagun ikuspegi eredua. Ikuspegiak hiru osagai ditu, zerbitzaria zerbitzariaren barruan dagoen zerbitzaria (erabiltzaileak nabigazio barran dagoen bidea agertzen da webgunean sartzeko), eta, beraz, oso erraza da eredua da txantiloi batekin lan egitean, batez ere izena aldatu eta eguneratu daitekeela beste ikuspegi bat egiteko edo izen logikoagoa egiteko beharrezkoa izanez gero. Zentzuzko zentzua du horrela egitea eta malgua izatea, zure kodea aldatzen ari den ingurune aldakorra izango baita malgutasuna eta inprobisazioa behar dituena, baliotsua eta erraza izan dadin. Hona hemen zure ikuspegia nolakoa izango den, URLPATTERNS = [App / URLS.py atala. Ikuspegi eredua goian deskribatutako hiru osagaiekin definitzen da eta bide izeneko funtzioa. Zure URL ereduak zerrenda dira, beraz ziurtatu elementu bakoitza koma batekin beti amaitzea, hori bakoitza bereizten delako. Elementu bakoitzak lerro berri batean ere joan beharko luke, berriro ere lau espazioekin aurretik, aplikazioa ezarpen.py-n bezala. Ikuspegiaren lehen osagaia kate funtzio huts batekin definituko dugu, web zerbitzariaren root direktorioan exekutatzen den ikuspegia sortzeko. Zure urls.py orain horrelakoa izan beharko luke:
from feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
Hori da erabat estatikoa den Django-rekin webgune bat sortzeko oinarria. Webgune dinamikoagoa egiteko, non cache informazioa, irudiak, bideoak, audioak eta gehiago bezala hasi ahal izateko, ereduak erabili beharko ditugu, hurrengoan arakatuko ditugunak. Oraingoz, egiaztatu dezagun gure kodea eta exekutatu zerbitzaria. Akatsak egiteko kodea egiaztatzeko, exekutatu:
python manage.py check
Akats mezuak badaude, zure aplikazioan egindako aldaketak berrikusi beharko zenituzke eta ikusi behar den ezer finkatu behar den ala ez, kanpoko edo falta den espazio bat bezala, karaktere gehigarria, edozein idazkera, ustekabean ezabatutako edozein karaktere edo beste edozer. Errorearen mezuaren bidez irakurtzea (bat baduzu), lerro zenbaki batekin sortu edo editatutako fitxategi batera bidea ikusteko gai izan beharko zenuke, beraz, begiratu fitxategi horri eta lerro horretara eta ikusi bertan dagoen guztia konpondu dezakezu. Gaia konpondu baduzu, exekutatu goiko komandoa berriro. Zure softwarea exekutatzeko prest dagoenean eta funtzionatzen duenean, "Sistemaren egiaztapena ez da arazorik identifikatu" ikusiko duzu. Orain joateko prest zaude. Exekutatu zerbitzaria honekin:
python manage.py runserver 0.0.0.0:8000
Orain ireki web arakatzailea eta nabigatu http: // localhost: 8000. Ikusi behar duzu httpressponse funtzioaren etekina eta aipamenak zure ustez. Oinarrizko adibidea besterik ez da, baina urruti egin bazenuen, Linux, Bash, Python eta Django lanaren oinarriak ulertzen dituzu. Datu sakonago datu baseen modelizazioan eta aztertu informazioa gordetzeko python klase baten boterea. Ondoren, HTML eta CSS-en atxikimendua lortzen hasiko gara gure gunea guztiz probatu, malgua eta segurua izan aurretik JavaScript eta makina ikastea erabiliz.
Klaseak zure aplikazioaren modeloetan gordetzen dira. Nano erabiliz, editatu aplikazioa / modeloak.py eta gehitu klase berri bat. Klase bat definitzen da klasearen definizioarekin eta berretsi duen superlasa bat da, kasu honetan modeloak.model. Klasearen izena klasearen definizioaren ondoren dator, eta klasearen definizioa ondoren A: (Colon) erabiltzen da, klasean lotuta dauden atributuak eta funtzioen definizioak aurretik adierazten dira. Gure klaseak erabil dezakegun ID bat behar du berreskuratzeko eta berezia mantentzeko, eta testu-eremua ere behar du informazioren bat gordetzeko. Geroago, denboraren arabera, fitxategiak, booleanak, booleanak (benetako edo gezurrezko definizioak gehitu ditzakegu, gure kodearekin zer egin ere ereduarekin zer egin erabakiak hartzen eta ordenatzeko. Deskonektatu beheko kodea:
from django.db import models # Gure klasea eta atributuak definitzeko erabiltzen den inportazioa
class Post(models.Model): # Gure klasearen beraren definizioa
id = models.AutoField(primary_key=True) # Gure ereduaren IDa, automatikoki sortutako gakoa, eredua zalantzan jarriko diguna, mantendu ezazu eta erabilgarria da ereduarekin elkarreragin egin behar dugunean.
text = models.TextField(default='') # Gure klaseko dendak, kasu honetan, testu batzuk, kate huts bat lehenetsiz.
Itxi eta gorde fitxategia aurretik amaitu genuen bezala.
Klase hau eguneratzen dugunean, gure aplikazioa eboluzionatzen dugunean, beste eremu eta aukera ugari daude, baina testu bat argitaratzeko aplikazio bat sortzeko oinarrizko beharrak dira. Hala ere, eredu honek ez du bakarrik funtzionatuko. Aurretik deskribatu bezala, pertsonalizatutako ikuspegia eta URL eredu pertsonalizatua beharko ditugu eredu hau lantzeko, eta txantiloi batekin batera formulario bat ere beharko dugu. Azter ditzagun inprimakia lehenik.
Inprimaki bat definitzeko, editatu aplikazioa / inprimakiak.py nano-rekin eta gehitu lerro hauek. Bi inportazio beharko ditugu, gure inprimakiak klaseak, baita sortu dugun eredua ere (Feed.models.post), ereduaren antzeko definizioa, eta meta izeneko azpi-klase batekin batera, eredua elkarreragiten du. Inprimakiak hasierako funtzioa ere izan dezake, eskaeran, eredua edo bestela informazioa oinarritzat hartuta, geroago aztertuko dugu.
Eredu formak hain erabilgarriak dira eredu bat sor dezaketelako edo eredu bat editatu dezaketelako, beraz, bientzat erabiliko ditugu. Definitu dezagun Inprimaki.py azpian.
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',)
Hau da forma eta eredua nolakoa den. Eredu formulario hau mezu bat berehala edo editatzeko erabil daiteke, daukan testua aldatuz. Inprimaki hau ikuspegi batean integratzea aztertuko dugu. Lehenik eta behin, egin ditzagun migrazioak eta migratu datu-basea, beraz, gure kodea ereduarekin elkarreragin dezake. Horretarako, exekutatu komando hauek:
python manage.py makemigrations
python manage.py migrate
Horrek minutu bat iraungo du exekutatzeko, baina behin, ereduan sartzeko aukera emango dizu softwarean, hidroian edo beste edozein lekutan. Jarrai dezagun gure eredua ikus dezakegun ikuspegi bat eginez. Editatu Feed / Views.py eta gehitu ondorengo kodea, adierazi bezala. Ez duzu # zeinuaren ondoren ezer gehitu behar, kodea kodeari buruzko informazioa izendatzeko erabiltzen diren iruzkinak dira. Gure eredua bistan inportatuz hasiko gara, eta testuinguru batera gehituko dugu, txantiloian bistaratzeko zerrenda gisa eman dezakegun. Ondoren, txantiloia gehituko diogu non inprimakia eta eredua botoi batekin errendatzeko, eredua oinarritutako objektu berria sortzeko eta zerbitzarian argitaratzeko. Honek konplexua dirudi, beraz, eman dezagun pausoz pauso. Ikuspegia amaitu aurretik, sor dezagun eredua ematen duen txantiloia eta ziurtatu ikus dezakegula maskorrean mezu berri bat sortuz. Hona hemen ikuspegi horrek nola begiratu behar duen:
posts = Post.objects.all() # Kontsultatu orain arte datu baseko mezu guztiak
Hau guztia nahiko erraza da behealdera iritsi arte. Errendatu, aurreko adibidea bezalako http erantzunak izan beharrean, funtzioak lehen sarrera gisa hartzen du. Txantiloia HTML dokumentua izango da Jinja2 izeneko hizkuntza pixka bat duena, Python informazioa HTML bihurtzen duena.
Txantiloiak sortzen hasteko, egin bi direktorio jarioan.
mkdir feed/templates
mkdir feed/templates/feed
Ondoren, editatu txantiloi bat goiko direktorioan, feed / txantiloiak / jarioan eta gehitu adibide honetarako kodea. Ikus dezagun adibide honetarako txantiloia.
Oso txantiloi sinplea da. HTML etiketak irekitzea eta ixtea, dokumentu motako etiketa, kondairaren izenburua duen gorputz-etiketa definitzen du, lerro txiki bat gehitzen duena pantailan zehar, eta mezu bakoitza txantiloiaren paragrafo gisa mezuen zerrendan mezu bakoitza idazten duen begizta. Hau da mezuak errendatzeko behar duen guztia, baina oraindik ez dago datu basean. Sortu ditzagun batzuk maskorrarekin. Maskorra kudeatu ahal izango dugu.py-rekin
python manage.py shell
Orain, inportatu dezagun gure posta eredua
from feed.models import Post
Ondoren, mezu sinplea sortuko dugu kate batekin eta shelletik irten. Katea edozer izan daiteke, baliozko testua da.
Post.objects.create(text='hello world')
exit()
Azkenik, URL eredu bat gehitu beharko diogu gure jarioari. Gure jario aplikazioak hainbat URL erabiliko dituelako eta fitxategi tamainak txikiak mantendu nahi ditugulako, sor ditzagun tokiko URLS.PY gure jario aplikazioan honelakoa da:
from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
Urls.py base aplikazioan ere editatu beharko dugu, deitzea erabaki duguna, sortu genuen lehen direktorio hori izan da. Editatu aplikazioa / App.py eta gehitu honako hau URL ereduak
from django.urls import include # Goialdean
# ... Aurreko kodea hemen
Orain, zerbitzaria Python Manages.py-rekin exekutatzen dugunean, Runerserver, sortu dugun orria ikusiko dugu eredua, ikuspegia eta txantiloia eta URL eredua ditugulako, datu baseko elementuekin batera. Ondoren, ezarri dezagun sortu dugun forma eta hasi gure mezuak sortzen. Kode gehiegi idatzi aurretik, egin dezagun babeskopia bat lehenago idatzi dugun gidoia erabiliz. Exekutatu script hau shell-en, itxaron une batzuk eta kode guztia gure GIT biltegiraino babestuko da.
backup
Inprimakia ezartzea nahiko erraza da. Gure formularioa inportatuko dugu, mezuak eskaeraren kudeatzailea gehitu eta datu baseko mezua gorde ezazu ikuspegi berera birbideratu aurretik. Dagoeneko inportatu dugun birzuzenketa funtzioa erabil dezakegu, eta alderantzizkoa deitzen den beste funtzio bat URLa ikusteko eredua lortzeko. Hau "Feed: Feed" katearekin kontsultatuko dugu, barne-ereduaren izen-espazioa elikadura dela eta ikuspegia ere iturria deritzo.
posts = Post.objects.all() # Kontsultatu orain arte datu baseko mezu guztiak
if request.method == 'POST': # Bidali posta eskaera
form = PostForm(request.POST) # Sortu inprimakiaren instantzia bat eta gorde datuak
if form.is_valid(): # Formularioa balioztatu
form.save() # Gorde objektu berria
return redirect(reverse('feed:feed')) # Birzuzenketa URL berera eskaerarekin
'form': PostForm(), # Ziurtatu inprimakia testuinguruan pasatzea, errendatzeko.
Orain, txantiloia eguneratu beharko dugu formulario berria kontatzeko. Hau egin dezakegu
Hautsi dezagun hau. Inprimaki klase berri bat, token bat, forma bera eta bidalketa botoia daude. Nahiko erraza da, baina begirada bat hartzen dugunean, itxura hobea izan nahi dugu. Funtzionatzen du, mezu berriak inprimakiekin argitaratu ditzakegu eta datu basean gordeta daude. Hemen gertatzen dira zenbait gauza. HTML etiketak erabiltzen ditugu dokumentua HTML dokumentua dela deklaratzeko, txantiloiaren etiketa erabiltzen dugu ({% ...%}) tokenak formularioa lortzeko, eta beste bat, inprimakia eratzeko. Begizta ere badugu testua blokeatzeko etiketak eta txantiloiaren etiketa erabiliz. Blokeen etiketak oso garrantzitsuak dira txantiloiaren atalak haiekin nola errendatzen diren zehaztu dezakegulako, eta txantiloiaren etiketak dira aldagaiak gure kodean nola jartzen ditugun.
Orain gure aplikazioa itxura hobea izan behar dugu, izan ere, oraingoz oso oinarrizkoa da. Hori egin dezakegu CSS erabiliz, lerroko edo dokumentuko objektu bakoitzari lotutako klaseetan. CSS oso polita da orrialdean dena kontatu behar duelako eta oso ona izan dezakeelako. Liburutegi batzuk egin daitezke, baina nire pertsonala joateko bootstrap da.
Bootstrap beren webgunetik deskarga daiteke,getbootstrap.com/. Behin han, sakatu botoia instalazio dokumentuak irakurtzeko eta kopiatu kodea CDN atalaren bidez. Kode hau zure HTML dokumentuaren goiko aldean beharko duzu, burua izeneko etiketa batean. Gainera, aurrera egin dezagun eta oinarrizko txantiloia sortu, beraz, ez dugu esteka horiek birsortu behar txantiloi bakoitzean.
Egin txantiloiak izeneko direktorio berri bat MKDIR txantiloiekin eta, ondoren, editatu txantiloiak / base.html.
Horrelakoa izan beharko luke:
Ziurtatu CSS eta JavaScript, .css eta .js fitxategiak kopiatzen, izan ere, JavaScript beharko dugu etorkizunean gure gunea funtzionalaagoa izan dadin.
Orain, itzul gaitezen Bash Shell-era eta exekutatu komando azkarra. Gogoratu, inoiz ingurune birtualera sartu behar baduzu, idatzi iturria venv / bin / aktibatu. Honek Python Paketeak lokalean instalatzeko aukera emango dizu Django sarbidea ahalbidetzen duen moduan. Django Bootstrap-ek sortutako gure inprimakiak emateko, forma kurruskariak izeneko python pakete bat erabiliko dugu. Honako komandoarekin deskarga dezakegu
pip install django-crispy-forms
Hau instalatuta dagoenean, gehitu ezarpenak.py
# ... Aurreko kodea hemen
Orain, gure jario txantiloian itzuli, zenbait gauza kendu ditzakegu. Dekretu dokumentuaren hasiera eta amaiera eta ordezkatu oinordetza gure oinarrizko txantiloitik, hedapenak eta blokearen definizioa erabiliz. Gainera, txantiloi iragazkiaren inportazio bat gehituko dugu karga eta txantiloi iragazkia inprimakira. Azkenik, gehitu dezagun bootstrap klasea inprimakiaren botoian botoiaren antzekoa izan dadin. Hori horrela izan beharko luke:
Ederra! Hori da dagoeneko kode pixka bat. Ondoren, probatu beharko genuke eta ziurtatu dena itxura polita dela eta ziur egon behar dela dena ondo funtzionatzen duela. Exekutatu zerbitzaria aurreko argibideen arabera eta ziurtatu gunea itxura eta ondo funtzionatzen duela. Lan bikaina! Hurrengo urratsean aurrera egiteko prest zaude, eta bertan erabiltzailearen saioa hasteko funtzionalitatea gehituko dugu antzeko URLak, inprimakiak, ikuspegiak eta txantiloiak erabiliz. Oinarriaren txantiloia garrantzitsua da, eta aldatzen jarraituko dugu behar den moduan, baina oraingoz gure webgunea seguruago egitera bideratzen da, erabiltzaileek erabiltzaile izenarekin eta pasahitz batekin saioa hasteko aukera ematen dutenak, eta, azkenean, zure aplikazioa segurua eta zure kontu bakarra zure eskura jarriko du.
Horretarako, Djangon eraikitako erabiltzaile eredua erabili beharko dugu. Erabiltzailearen eredua datu-base eredua da, gure mezua bezala, erabiltzaile bat webgunean erregistratzeko errendatu daitekeena. Etorkizunean, gunea Internetera zabaldu baino lehen, eredu hau berari egotzitako beste modelo batzuekin zabalduko dugu eta segurtasun neurri osagarriak eraiki ahal izango dira phishingarekiko erresistenteak diren saioa egiteko. Django-k eskaintzen dituen saioa hasteko moduko batzuk erabiliz hasiko gara. Lehenik eta behin, sor dezagun aplikazio berria erabiliko dugun aplikazioen oinarrizko saioa hasteko. Aplikazioa ziurtatzeko, beste aplikazio batzuk ere sortuko ditugu aplikazioa ziurtatzeko, pincode bat, aurpegiko aitorpena, eremuko komunikazioa, kanpoko gailuak, faktore anitzeko autentifikazioa eta hatz markako aitorpena.
Dagoeneko hitz egin dugu aplikazio bat hasteko. Gure direktoriora, ingurune birtualaren barruan, gainditu kudeatu.py argumentu hauek
python manage.py startapp users
Orain, aplikazio berriaren direktorio bat izan beharko genuke. Has gaitezen erabiltzaileari saioa hasteko dagokion direktorio horretan. Django erabiltzaileen saioa egiteko ikuspegian eraiki da, baina hauek ez dira guretzat egokiak izango ikuspegi pertsonalizatua behar dugulako, hau da, definizio batekin egiten baita.
Ikuspegi honetan, Post eskaera egiaztatzen hasiko gara, Pasatu eskaera. Django-tik inportatutako loginformari, erabiltzaile kontua autentikatu eta erabiltzaile saioa hasi gure jario aplikaziora birbideratu aurretik.
Erabiltzaileetan / Views.py-n, gehitu kode hau
username = request.POST['username'] # Lortu erabiltzaile izena eta pasahitza posta-eskaeratik
password = request.POST['password'] # Erabiltzailea autentifikatu
Hau da oinarrizko saioa hasteko ikuspegi bat behar duzun guztia. Orain, sor ditzagun ikuspegi bat oinarrizko txantiloia luzatuz. Erabiltzaileen karpetan txantiloiak direktorio berri bat sortuz hasiko gara.
mkdir users/templates
mkdir users/templates/users
Orain, erabiltzaileak / txantiloiak / erabiltzaileak / login.html editatu ahal izango ditugu. Bertan gauden bitartean, txantiloia sortuko dugu erabiltzaileari ere izena emateko.
nano users/templates/users/login.html
Orain, txantiloian,
Hau da saioa hasteko txantiloiaren oinarriak. Benetan beste txantiloia egituran bezala da, baina apur bat desberdina da errendatzen denean. Kode hau kopiatu dezakegu izena eman duen beste txantiloi bat eraikitzeko. HTML, non hitza aldatuko dugu eta eraikitzen dugun formulario berria erabiliko dugu. Egin dezagun txantiloia lehenik. Editatu erabiltzaileak / Txantiloiak / erabiltzaileak / register.html eta gehitu kode hau:
Orain, eraiki dezagun gure erabiltzaileen erregistroa egiteko eta biribildu bistaratzera itzuli gure erabiltzaileen saioak eredu batekin berritu aurretik. Forma hau oinarrizkoarekin hasiko dugu, baina etorkizunean hitzarmenak eta captcha bezalako xehetasun eta segurtasun ezaugarri gehiago txertatuko ditugu. Editatu inprimakiak Nano erabiltzaileekin / Inprimakiak.py eta gehitu ondorengo kodea.
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']
Beraz, beste forma bat dugu hemen, nahiko funtzionatzen duena. Erabiltzaile izena, posta elektronikoa eta pasahitza dituen erabiltzailearen erregistroaren inprimakia da, baita pasahitz eremua berresten ere. Kontuan izan formulario honek ez dituela formulario erregularrak.Form klaseak luzatzen, eredu forma da, hau da, meta bat duela esan nahi du. Eremu bat berdin definitzen da, eta klaseko meta eredua formularioari idatziko zaion gainerako informazioari dagokion eredua definitzen du. Gehienak dagoeneko Django erabiltzaileak erabiltzeko eraikitakoan existitzen dira, beraz, klasearen oinarri gisa erabiliko dugu (parentesi artean pasatu da).
Ondoren, erabiltzaile bat erregistratzeko ikuspegia aztertuko dugu, orain inprimakia eta txantiloia ditugula. Hau modelo forma da, mezu berriaren ikuspegi berrian bezala. Editatu erabiltzaileak / Views.py eta gehitu kode hau:
# ... Inportazioak
Hau da erabiltzaile bat erregistratu behar dugun guztia, baina informazio gehiago beharko genuke. Erabiltzaileak erregistratu duen denbora jakin nahi dugu, zer ordutan azkenean egon ziren gunean, eta horiei buruzko informazio batzuk, biografia bezala, denbora-zona eta abar bezala, gure elikagai eredua, mezua, erabiltzaile bakoitzari mezuak attributzea eta atributuak kontuak eguneratu beharko dizkiegu erabiltzaile bakoitzari erabiltzaile eredua eta atributu mezuak. Horretarako, bi aplikazioetan modeloak.py eguneratuko ditugu. Has gaitezen jario eredua editatzen. Horrela izan beharko luke orain:
from django.db import models # ... Inportazioak
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Gehitu lerro honetan
Arreta ezazu fitxategian gehitu den bigarren lerroan. Hau atzerriko gakoa da, mezu bakoitza mezu bakoitzeko erabiltzaile bakar batean egotziko duena, beraz, erabiltzailearen erabiltzailearen arabera mezuak gordetzen ditugula ziurtatu dezakegu eta ez da mezuik egin erabiltzaile bati egotzi gabe. Atzerriko giltza hau adierazten duen klasearekin definitzen dugu, mezuak erabiltzaileekin ezabatzen direla ziurtatzeko, erabiltzaileak beharrezkoak izanez gero, erabiltzaileak kendu ditzakegula ziurtatzeko eta erabiltzaileak sortutako mezuak aipatzeko erabil dezakegun mezuak ez dituztela ziurtatzeko. Erlazionatutako izen honek, Post.Author-ek, mezuaren egileak ez bezala, bidalketa berak argitaratu duen erabiltzaileari ematen digu. Erabiltzaileak erabiltzailea exekutatuz () edo egile.posts.all () erabiliz egindako erabiltzaileak jaso ditzakegu.
Orain, egin dezagun gure saioak erresilienteagoak. Dagoeneko gure webgunea askoz ere ahulagoa izan daiteke phishing-a, tasa mugatuz, gunean saioa ahalbidetuko dugun kopurua mugatuz, hau nahiko erraza da. Hasi gaitezen erabiltzaile bakoitzari buruzko informazioren bat gordetzen gure aplikazioa garatzen jarraituko dugun bezala. Erabiltzaileak / Models.py editatzea, gehitu kode hau.
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='')
Kontuan izan eredu hau post ereduaren antzekoa dela. Inportazio osagarria dugu, ordu-zona, datu-eremuetan lehenetsiak ezartzeko aukera emango diguna, eta mezua bezalako karaktere-eremua eta testu-eremua ere baditugu. Timestamp horiek guztiak erabiltzeak gunea ziurtatzen eta bere erabilera ulertzen laguntzen digu, eta testu-eremuek erabiltzaile bakoitzari edo egileari buruzko informazioa ematen digute webgunean. Onetoonefield-ek kontuan izan behar du kontuan, lehentasunezko berdina da, baina ondorengo eredu bakoitzeko bakarra da. Horrela, erabiltzaileak profil bakarra du, mezu asko izan ditzakete.
Orain, hobetu dezagun gure saioa hasteko eta erregistratu ikuspegiak profila kontatzeko. Lehenik eta behin, editatu erabiltzaileak / Views.py eta arreta jarri erregistroaren ikuspegian:
# ... Inportazioak
Profile.objects.create(user=user) # Ziurtatu lerro hau gehitzen, erabiltzailearen profila sortzeko
Horrek erabiltzailearentzako profila sortzen du, informazioren bat bete gabe. Orain, erabiltzaile kontua sarritan ezin dela saioa ziurtatu nahi dugu, edo gutxienez pasahitzak ezin dira maiz saiatu, beraz eguneratu dezagun saioa hasteko ikuspegia.
# ... Inportazioak
if user and user.profile.can_login < timezone.now(): # Kontuan izan erabiltzaileak saioa egin dezakeen egiaztatzen dugula
else: # Saioa hasi ez bada,
user = User.objects.filter(username=username).first() # Hau da erabiltzaileen profila eguneratzen dugun zatia
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Beraz, ezin dute berriro segundo batzuetan saioa hasi
Segurtasunaren oinarrizko oinarrizko oinarrizkoa da. Ziurtatu gunea ez dela norbaiten aurrean pasahitz konbinazio posibleak probatzen, edo horietako batzuk aldi berean. Hau ez da frustrantea beren pasahitza ezagutzen duen erabiltzaile arruntarekin eta gailu batzuetan saioa hasi besterik ez da egin, baina phishing robot ugari gordeko ditu aplikaziotik kanpo. Kontuan izan aldagai batekin, Can_Login aldagai batekin, iraganean denbora bat izan beharko litzatekeela, eta eguneratu arrakastarik gabeko saioa hasteko erabiltzaile izen bera erabiliz. Horrela, erabiltzaile maltzurrak ezin izango du pasahitza asmatu nahi bezain laster. DataTime.TimeDelta () segundo kopurua ere eguneratu daiteke, eta webgunea zaharragoa izango da baina segundo gehiago erabilgarriagoa izango da segundo gehiagorekin. 15 hasteko gomendatzen dut.
Gogoratu, backup script bat eraiki genuen gure lana aurrezteko, beraz, aurrera egin dezagun orain arte daukaguna dena gorde duzula ziurtatzeko. Exekutatu komandoa:
sudo backup
Berriro ere, horrek zure lana orain arte gordeko du. Zure lana gordetzeko maiztasuneko segurtasun kopiak egitea gomendatzen dut eta baliteke segurtasun kopia bat automatikoki exekutatu nahi izatea. Hau egin dezakezu Cron izeneko UNIX erabilgarritasuna erabiliz. Erabilera hau aktibatzeko, exekutatu komando hau eta sartu zure pasahitza:
sudo crontab -e
Aukera 1 hautatu ez baduzu Nanorako, testu editorea dagoeneko ezaguna izan behar duzu eta joan fitxategiaren behealdera geziak erabiliz. Gehitu lerro hau:
0 * * * * sudo backup
Cron-ek formatua, ordua, hilaren eguna, hilabetea, asteko eguna erabiltzen ditu, non * edo zenbaki batek komandoa exekutatzen denean adierazten du. 0 minutu eta * erabiltzea gainerako aukeretarako, agindu bat exekutatu dezakegu minutu bakoitzeko lehen minutuetan. Horrek kodea automatikoki babesten digu. Cronen lanpostu guztiak sudo exekutatzen direnean erro gisa exekutatzen direnean, beraz, ez dugu pasahitz bat idatzi behar.
Pasahitza erabili gabe gure kodea babesteko errazagoa izan dadin, desgaitu dezagun zure backup komandoetarako pasahitza. Hau egingo dugu hurrengo agindua exekutatuz eta pasahitz bat sartuz:
sudo visudo
Orain, joan dezagun fitxategiaren behealdera eta gehitu beste lerro bat:
ALL ALL=NOPASSWD: /bin/backup
Honek "Backup" komandoa edozein erabiltzaile gisa exekutatzen du, pasahitzik gabe. Horretarako formatua erraza da, "Guztiak = nopasswd: / bin /" "lerroa baino lehen, adibidez / bin / backup, / usr / bin / bin / backup-ekin amaitzea.
Orain, has gaitezen posta elektronikoz lanean. Posta elektronikoa oso garrantzitsua da webguneetarako, webgune bat seguruago mantentzeko modua delako, egiaztatu erabiltzaileak pertsona errealak direla eta baita bezeroei produktuak edo zerbitzuak ere. Interneten interneten maiz agertzen diren jende askok egunero egiaztatzen du eta interesatzen zaizkion produktuei eta zerbitzuei buruzko marketin-mezu mota guztiak jasotzen ditu. Aukera batzuk daude Django webgune batean posta elektronikoa gaitzeko orduan, eta ongi etorria da zuretzako onena aukeratzeko.
Lehenik eta behin, posta elektronikoko zerbitzua ordaindu dezakezu zure domeinutik posta elektronikoa bidaltzeko eta kode minimo bat behar duzula. Hau eskaintzen duten zerbitzu ugari daude, hala nola Google Workspace, Sendinblue, Mailgun eta beste.
Bestela, zure zerbitzariaren barruan zure zerbitzariaren zerbitzua eraikitzen ari zara hutsetik. Aukera hau gomendatzen dut, nahiz eta kode gehiago izan eta ostatu berezia behar izan dezakeen. Ezin izango duzu etxeko ordenagailutik mezu elektroniko bat abiarazi.
Lehenik eta behin, editatu ezarpenak.py honako komandoarekin:
nano app/settings.py
Non aplikazioa abiarazlearekin sortu zenuen aplikazioaren izena.
Gehitu lerro hauek:
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)
Ziurtatu zure aplikazioa zabaltzeko prest zaudenean, hau berrikusiko dugu gero. Email_address ezarpena bidali nahi zenukeen mezu elektronikoa izan beharko litzateke, eta pasahitza (email_host_password) zerbitzarirako sortutako pasahitzari ezarri behar zaio. Pasahitza konfigurazio fitxategi batetik kargatzen dut kodetik kanpo uzteko, lerro hauen gainetik ezarpenak.py:
import os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
Ondoren, JSON fitxategia konfiguratu dut /etc/config.json-en konfigurazioarekin Nano honela erabiliz.
Fitxategia editatzeko:
sudo nano /etc/config.json
Gehitu lerro hauek:
{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
Konfigurazio fitxategia editatzen jarraituko dugu eta aplikazioan erabiliko ditugun pasahitz eta tekla guztiak gehitzen ditugu. Oraingoz, azkar azter ditzagun Python erabiliz posta elektronikoa nola bidali. Lehenik eta behin, sor ditzagun txantiloia egiaztatzeko posta elektroniko baterako gure erabiltzaileei bidali eta erabiltzailearen txantiloien direktorioan jarri. Txantiloi hau HTML-n idatziko da.
nano users/templates/users/verification_email.html
Mezu elektroniko hau nahiko erraza da. Erabiltzaile baten testuingurua, gunearen oinarriaren URLa eta erabiltzailearen posta elektronikoa egiaztatzeko erabiltzen diren erabiltzaile IDa eta token bat behar ditu. Ziurtatu oinarrizko URLa Ezarpenak.py-n definitzen duzula txantiloia errendatzeko python kode batzuk idatzi aurretik. Anima zaitez eta gehitu lerro hauek aplikazio / ezarpenak.py, hasieratik gertu.
SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
Azkenean, zure gunea Interneterako prest dagoenean eta zabaltzen duzunean, zure domeinua definitu nahi duzu gunea irudikatzeko erosten duzun domeinu izen gisa. Hau da Navbar-en idatziko duzun izena zure webgunera sartzeko. Oraingoz, domeinua hutsik utzi dezakezu edo leku-marka bat erabili. Gune_Name aldatu nahi duzu zure webgunea eman nahi duzun izenarekin, aukeratzeko.
Posta elektronikoa bidali aurretik, sor dezagun token sorgailua, inoiz iraungitzen ez den kontuen aktibazioaren token bat izan dezagun. Honako hau itxura duen kontua aktibatzeko eta inportatuz egin dezakegu. Editatu fitxategia:
nano users/tokens.py
Gehitu kode hau:
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()
Oinarrizko token sorgailu honek erabiltzaileari URL batean bidal diezaiokegun token bat sortzen du eta erabiltzaileak bere posta elektronikoa egiaztatzeko eta kontua aktibatzeko erabil dezake.
Ondoren, ikus dezagun mezu elektroniko bat nola bidali. Nano erabiliz, editatu erabiltzaile / email.py.
nano users/email.py
Egiaztapena bidaltzeak HTML posta elektronikoa bidaliko du:
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)
Hau nahiko erraza da. Posta elektronikoa bidali behar dugun funtzioak inportatzen ditugu, posta elektronikoa txantiloiekin eta gure ezarpenekin errendatu eta, ondoren, posta elektronikoa txantiloiaren izenarekin definitzen dugu eta erabiltzaileari funtzio bat erabiliz bidaltzen diogu erabiltzaileari. Ohartuko zara ez dugula funtzioa bidali posta elektronikoa bidaltzeko, Send_HTML_EMAIL, beraz, idatzi dezagun erabiltzaile / email.py erabiltzaileei gehitutako kodearen azpian
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()
Hau konplexuagoa da, eta ez gara kode hau guztia exekutatzeko prest. Kontuan izan ezezagun bat definitzen ari garela, erabiltzaileak gure mezu elektronikoetatik harpidetzeko erabil dezakeen esteka. Garrantzitsua da, erabiltzaileek gure mezu elektronikoetatik kanpo uzteko gai izan behar baitute, edozein unetan ikusi nahi ez badituzte. Testu alternatiba bat ere gehitzen dugu gure mezuan, hau da HTML mezuen html mezuak. Azkenean, mezu elektronikoa bidali den ala ez egiaztatzen dugu, eta ez badu, erabiltzailearen profilean markatzen dugu posta elektronikoa ez dela baliozkoa.
Mugitu dezagun erabiltzaileen modeloetara, hau guztia lan egin dezagun. Ezabatu beharreko esteka sortzeko funtzioa definitu behar dugu, eta boolear eremua definitzeko erabiltzailearen posta elektronikoa ez dela baliozkoa da.
Lehenik eta behin, gehitu inportazio hauek erabiltzaile / modeloak.py goiko aldean
nano users/models.py
# ...
Ondoren, gehitu ditzagun erabiltzailearen ereduari tokenak egiteko eta egiaztatzeko erabiltzailea posta elektronikoa aktibatzeko erabilitako tokia, baita erabiltzailea posta elektronikoa jasotzen ari den ala ez aurrezteko erabilitako eremua ere. Erabiltzaileak / Models.py-n berriro, gehitu kode hau ereduaren amaieran (kode koska)
# ...
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Baliozkoa 30 egunez
Nahiko erraza da, Timestampsigner bat erabiltzen dugu, oinarrizko kriptografia tresna bat da, denbora jakin baten ondoren iraungiko den token bat sortzeko eta baliozkoa den egiaztatzeko beste funtzio bat ere erabiltzen dugu. Tokenak bi aldiz erabiltzen ditugu, behin posta elektronikoa egiaztatzeko eta behin harpidetzeko esteka baterako.
Horiek baditugu, egin beharko dugun azkena bistan da. Erabiltzaileen barruan / Views.py-ren barruan, gehitu dezagun bistak helbide elektronikoa egiaztatzeko eta bertan behera uzteko.
nano users/views.py
Lehenik eta behin, gehitu inportazio hauek. Gutxi gorabehera gutxi batzuk bota nituen, ez ditugu berriro gehiago inportatu beharko.
from .email import send_verification_email # Ziurtatu egiaztatzeko posta elektronikoa bidaltzeko funtzioa inportatzen
Agian izan ditzakezu inportazio horietako batzuk, baina ez du minik horiek errepikatzea. Egiaztapen-mezu elektronikoa bidaltzeko funtzioa inportatu beharko duzu, baita kontuak_aktibazioa erabiltzaileak.Tokens-en, beste inportazioen artean.
Orain, fitxategiaren behealdean gehitu kode hau:
# Harpidetu itzazu
# Bestela, birbideratu saioa hasteko
# SendwelIcomeMail (eskaera, erabiltzailea)
Kode asko da. Hautsi dezagun. Lehenengo funtzioa, garbia eta erraza, erabiltzaileak posta zerrendatik izena eman du. Bigarren funtzioak posta elektronikoa aktibatzen du eta komentatutako funtzioa gehituko dizut, SendwelcomeMail. Ongi etorri posta elektronikoaren txantiloia erabiltzea eta funtzioen definizioa erabiltzea ongietorri mezu elektronikoa bidaltzeko, oraindik ez dut oraindik. Eztanda egin nuen azken funtzioa garrantzitsua da, aktibazio mezu elektronikoak iraungitzea delako. Hori dela eta, aktibazioaren mezu elektronikoa berriro bidali beharko dugu. Horretarako oinarrizko forma erabil dezakegu eta funtzioari deitzeko egiaztapen elektronikoa bidaltzeko. Hori egin aurretik, ziurtatu lehenik bidaltzen ari dela, funtzio dei bat gehituz Erregistroaren ikuspegian. Gehitu lerro hau birzuzenketa egin baino lehen, erregistroan, def erregistratu, erabiltzaileetan / Views.py-n.
nano users/views.py
# ... (ondoren) Def Register (Eskaera):
# ... (aurretik) birzuzenketa (
Ez duzu kode horretako lehen eta azken lerroak gehitu behar, ziurtatu erregistroaren ikuspegiak egiaztatzeko mezu elektronikoa erabiltzaileari bidaltzen diola. Horrelakoa izan beharko luke:
# ... Inportazioak
send_verification_email(user) # Ziurtatu lerro hau gehitzen!
Orain, aktibazio elektronikoa bidaltzeko inprimakia gehitu beharko dugu. Erabiltzaileetan / Forms.py-n, gehitu formulario hau:
# ... (inportazioak)
Bidalketa elektronikoaren aktibazio formulario honi dagokion txantiloia ere beharko dugu. Gehitu dezagun txantiloi hau. Editatu fitxategia:
nano users/templates/users/resend_activation.html
Ondoren, gehitu hurrengo kodea fitxategian.
Whew, hori asko da! Orain, kodea gure zerbitzarira zabaltzen dugunean, HTML posta elektronikoa bidali eta erabiltzaile-kontuak aktibatu ahal izango ditugu posta elektronikoan klik batekin. Baliteke ongietorri mezu sinple bat ere bidali nahi izatea, ikus dezagun nola egin. Itzuli erabiltzaile / email.py, gehitu kode hau:
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)
Gainera, informazio hori guztia errendatzeko txantiloia beharko dugu. Nire webgunean, txantiloiak beheko itxura du, baina ongi etorria zara nahi duzun arren.
Kontuan izan ez dugula ixteko gorputza edo HTML etiketarik, HTML Harpidetu esteka gehitzen dugunean gehitzen ditugulako. Garrantzitsuak dira, baina ez ditugu bi aldiz definitu nahi.
Orduan, zer da hurrengoa? Bide luzea egin dugu. Benetan, gunea zerbitzari batera zabaltzeko prest egon beharko genuke. @Login_Required dekoratzailea gehitu eta gure iritziak seguruak izan gaitezke, erabiltzaileak erregistratu, bidali posta elektronikoa eta cache informazioa, hau da, webgune batek garrantzitsuak izateko zer egin behar duen. Ezaugarri erabilgarriagoak gehituko ditugu eta, ondoren, gure kodea urruneko zerbitzari batera zabaltzeko oinarria eraiki, posta zerbitzari bat konfiguratzeko, domeinuaren konfigurazioa eta iragazkiak gure webgunea segurua eta egokia izan dadin.
Pasahitza berrezartzeko ikuspegia ere beharko dugu, beraz, gehitu dezagun benetan azkar. Pasahitza berrezartzeko ikuspegia eraikitako Django-k funtzio batzuetan hautsita dago, baina gure ikuspegia, posta elektronikoko txantiloiak, inprimakiak eta URL ereduak nola idatzi aztertuko ditugu. Hona hemen zer itxura duen, erabiltzaile / views.py-n
# ... Inportazioak
Inprimaki hau Django-ra sartzen da, baina pasahitza berrezarri, erabiltzaile / txantiloiak / erabiltzaileak / pasahitza / pasahitza / pasahitza berresteko txantiloia beharko dugu.
Pasahitza berrezartzeko mezu elektronikoa bidaltzeko txantiloia ere badugu, erabiltzaile / txantiloietan / erabiltzaile / pasahitz / pasahitz_reset.html
Posta elektronikoa beraren txantiloia erraza da, pasahitza berrezartzeko, erabiltzaile / txantiloietan / erabiltzaile / pasahitz_reset_email.html-en esteka berrezartzeko estekaren oinarrizko html fitxategia da. Django-k automatikoki interpretatuko du fitxategi hau.
Beste bi txantilo ere beharko ditugu. Lehena mezu elektronikoa bidali dela baieztatzea da. Hauetarako bistak Django-n daude jada, beraz, URLS.py-n zuzendu behar ditugu. Txantiloi hau erabiltzaile / txantiloietan / erabiltzaile / pasahitz_reset_done.html kokatuta dago
Azkenean, pasahitza berrezarri osoa dela baieztatzeko, erabiltzaileak / txantiloiak / erabiltzaileak / pasahitza_reset_complete.html
Orain, URL ereduak behar ditugu ikuspegi horietarako. Erabiltzaile / urls.py-n, gehitu URL eredu hauek:
# ... Aurreko URLak hemen
Lau txantiloi, hori asko da! Baina orain ziurtatu dezakegu erabiltzailearen pasahitza berrezarri behar dugun edozein unetan, guztiak web arakatzailetik.
Ulertzen dut hau kode asko dela. Buruaren gainean pixka bat dirudien arren, ondo dago. Hobetuko duzu, zure ulermena hobetu egingo da eta laster kodearekin askoz eskudunagoa izango zara. Guztiz galduta bazaude, gomendatzen dut software honetara itzultzea gero, auto-erritmoa linean ikasteko ikastaroa lantzen hasi ondoren. Normalean doakoak dira hasteko, eta proiektu honetara itzultzen zarenean arrakasta izan behar duzun guztiaren bidez gidatuko zaitu. Jarraitzeko prest zaudela sentitzen baduzu, irakurri zure kodea urruneko zerbitzari batera zabalduko dugu eta posta zerbitzari bat konfiguratuko dugu, baita zure hedapena automatizatzea ere Bash erabiliz, proiektu berri bat konfiguratu ahal izateko komando sinple batzuekin beti.
Urruneko zerbitzari batera zabaldu aurretik egin behar dugun azkena gure gunea seguruagoa da. Ohartuko zara saioa ikusteak erabiltzaile izena eta pasahitza soilik hartzen dituela, eta ez dago faktore anitzeko autentikaziorik edo aldi baterako kodea. Konponketa erraza da, eta kode berarekin, gure webgunea testu mezuak bidal ditzakegu eta zerbitzarira bidalitako testu mezuei ere erantzun diezaiekegu. Hasteko, erabiltzaileen ereduetara itzuliko gara eta saioa hasteko puntuazio-sinatzaile bat gehituko dugu. Identifikatzaile berezia eta birakaria ere gehituko dugu gure saioa gehitzeko erabiliko den erabiltzaile ereduari. Erabiltzaile ereduak editatzea, erabiltzaileak / modeloak.py, gehitu kode hau:
# Ziurtatu UUID, Timestamp Sinatzailea eta URL sorgailua (alderantzikatu) inportatzea
# Gehitu kode hau hemen
# Eta gehitu funtzio hau
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Baliozkoa 3 minutuz
Ziurtatu zure erabiltzaileak / modeloak.py-k itxura du, iruzkinez gain (# lerroetako kodeak). Hau apurtzea, erraza da. Inportazio batzuk ditugu, timestampsigner bat, kode segurua sor dezakeen erabilgarritasun kriptografikoa da eta baliozkoa dela ziurtatzeko, behin bakarrik erabili da, eta ez segundo jakin bat baino zaharragoa. UUID bat ere erabiltzen dugu, hau da, gure erabiltzaileak token sinatzean identifikatzen duen identifikatzaile bakarra da, eta token erabiltzaileari bidaltzen zaion URLan. Oinarrizko kriptografia hau erabiliko dugu bi faktoreen autentifikazio ikuspegia eraikitzeko. Beste edozer egin aurretik, exekutatu dezagun migrazioak, beraz, gure erabiltzaile ereduak eguneratzen dira. Kuded.py-rekin duen direktorioan, exekutatu komando hauek migrazioak egiteko eta osatzeko.
source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
Garrantzitsua da hau modeloetan aldaketak egiten ditugun bakoitzean, taulak sortu eta datu-basea eguneratu beharko ditugu lehenetsitakoak ereduak erabili ahal izateko.
Ondoren, inprobisatu dezagun gure login ikuspegia bigarren mailako autentifikazio ikuspegi batera birbideratzeko. Erabiltzaile / Views.py-n, kendu saioa hasteko funtzioa eta birbideratu erabiltzaileen ereduetan sortutako URLra.
# ... Inportazioak
if user and user.profile.can_login < timezone.now(): # Kontuan izan erabiltzaileak saioa egin dezakeen egiaztatzen dugula
# Kendu hemen zegoen auth_login funtzioa
return redirect(user.profile.create_auth_url()) # Oharra hemen URL berri batera birbideratzen dugu
else: # Erabiltzailea faktore anitzeko autentifikazioa erabiltzen ez bada, sartu saioa.
else: # Saioa hasi ez bada,
user = User.objects.filter(username=username).first() # Hau da erabiltzaileen profila eguneratzen dugun zatia
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Beraz, ezin dute berriro segundo batzuetan saioa hasi
Beraz, hau nahiko erraza da, orain sortzen dugunean bi faktoreen autentifikazio ikuspegira birbideratzeko modua dugu. Erabiltzailea ere telefono zenbakirik gehitu ez bada ere. Oinarrizko ikuspegia gehituko dugu laster telefono zenbaki bat gehitzeko eta laster saioa hasteko testu mezu batekin.
Lehenik eta behin, gure kodetik testu mezu bat bidaltzeko modu erraza behar dugu. Horretarako, apis kopuru bat aukeratu dezakegu, baina nire ustez errazena twilio da. Proiektu txikiagoetarako prezio onak ere eskaintzen dituzte, baita ontziratu gabeko deskontuak ere. Sortu kontu bat Twilio.com-en, bete zure proiektuari buruzko xehetasun batzuk, erosi telefono zenbaki bat eta kopiatu zure API gakoak zure ezarpenak.py. Ondoren, gehitu kode hau fitxategi berri baten azpian, erabiltzaile / sms.py.
nano users/sms.py
# Inportatu beharrezko pakete guztiak
# Kode honek Twilio-rekin bidaltzen du testua
# Laguntzaile funtzioa, hainbeste digitu dituen zenbaki bat lortzeko
# Bidali testua erabiltzailea egiaztatzeko
# Bidali erabiltzaile bati edozein testu funtzio honekin
# Balidatu kodea funtzio honekin
# Denbora balioztatu
Ziurtatu zure ezarpenak modu egokian aldatzen dituzula, lerro hauek zure teklekin gehituz:
# Ziurtatu horiek zure Twilio Arbeletik kopiatzea
AUTH_VALID_MINUTES = 3 # TFA orria aktibo dagoen minutu kopurua berehala aktibatuta dago
Lehenik eta behin, gure bi faktoreen autentifikazio ikuspegietarako inprimakiak beharko ditugu. Erabiltzaileak / Forms.py editatzea, gehitu kode hau.
# ... Inportazioak
# Gure telefono zenbakia sartzeko inprimakia
# Autentifikatzeko inprimakia
Ondoren, sor ditzagun erabiltzaileen ikuspegiak / views.py
# ... Inportazioak
Ikuspegi bietarako txantiloiak ere beharko ditugu. Gehitu dezagun MFA txantiloia lehenik.
nano users/templates/users/mfa.html
Gehitu HTML kode hau txantiloian
Hau nahiko azalpena da. Inprimakiak kodea edo kode huts bat bidaltzen du eta kode huts bat jasotzen badugu, kodea bidaltzen dugu. Ondoren, bi bidalketa botoiak besterik ez ditugu, eta horrela kodea bi botoiekin bidal dezakegu. Ondoren, formulario sinplea gehituko dugu telefono zenbaki bat gehitzeko.
nano users/templates/users/mfa_onboarding.html
Gehitu honako HTML:
Inprimaki hau askoz sinpleagoa da, sortu dugun telefono zenbakiaren inprimakia besterik ez du ematen eta erabiltzaileari telefono zenbaki bat gehitzeko aukera ematen dio.
Benetan itxura ona da! Dena behar bezala konfiguratuta dagoen neurrian, mezuak bidali beharko genituzke eta erabiltzaileak telefono zenbakiarekin saioa egin beharko genuke URL ereduak gehitu bezain laster. Konfiguratu behar dugun azken gauza da erabiltzaileak telefono zenbakia alda dezakeela ziurtatu ahal izateko. Gainera, azkenean, "Utzi" aukera "aukera gehitu nahi diogu, beraz, erabiltzaileak" gelditu "testu-mezuetatik kanpo utzi ahal izango du.
Gehitu profilaren ikuspegia erabiltzaileei / Views.py-ri. Ikuspegi honek erabiltzailearen bio, posta elektronikoa, erabiltzaile izena eta telefono zenbakia eguneratuko ditu, baita faktore anitzeko autentifikazioa gaitzeko aukera ematen digu ere. Lehenik eta behin, erabiltzaile / formS.py-n beste bi forma beharko ditugu
# ... Inportazioak
Ondoren, biak formulario horiek erabiltzeko ikuspegia sor dezakegu. Editatu erabiltzaileak / Views.py eta gehitu ikuspegian.
# Gehitu inportazio hauek
Ikuspegi honetarako txantiloia ere beharko dugu.
nano users/templates/users/profile.html
Ohartuko zara hau nahiko forma erraza dela, baina bertan JavaScript batzuk ditu, inprimakiaren edukia automatikoki eguneratzen den heinean. Hau erabilgarria da, beraz, editazioak egiteko gai zara behin bidali beharrik izan beharrik izan beharrik izan gabe.
Ondoren, erabiltzaileen URL hautagailuetan ikuspegi horiek guztiak ordezkatzen dituzten URLak behar ditugu. Editatu erabiltzaileak / URLS.PY eta gehitu kode hau:
# ... Aurreko kodea, inportazioak
# Aurretik sartu genituen URL ereduak, gehitu hurrengo hiru lerroak
Orain oso ondo dago gure proiektua probatzeko. Baina lehenik, exekutatu dezagun beste babes bat.
backup
Eta exekutatu zerbitzaria. Linux zerbitzari batera zabaldu baino lehen, ideia ona da kontuan bi faktoreko autentifikazioa gaitzea. Gure profil URLra, / erabiltzaile / profilera / eta laukia egiaztatzea lortuko dugu gure telefono zenbakia sartu ondoren autentikazioa gaitzeko eta gero inprimakia bidaltzeko.
python manage.py runserver localhost:8000
Bisita ezazu web orria zure web arakatzailera joanez, Google Chrome erabiltzen ari naiz adibide honetan, eta URL https: // localhost: 8000 / kontu / profila /
Behar izanez gero saioa hasi eta bi faktore autentifikazioa ahalbidetuko duzu.
Proiektu honek zerbitzari bat behar du exekutatzeko, beraz, posta elektronikoa bidaltzeko. Baina lehenik, akatsak ikusteko modu bat behar dugu. Zerbitzaria arazketa moduan exekutatzen baduzu, ezarpenak.debug egia berdina da, zerbitzariak akatsak automatikoki erakusten ditu. Ekoizpen zerbitzarian ez da segurua ez den arazketa modua erabili, hau da, ikuspegi bat gehitu beharko genioke. Kudeatzeko gai izan behar ditugun akats garrantzitsuenak hauek dira:
500 errorea - gure kodearekin arazoren bat 404 errorea - aurkitu ez den orrialdea (URL hautsia) 403 errorea - Baimen ukatua errorea
Gehitu dezagun aplikazio berri bat akats horiek kudeatzeko, akatsak deritzo.
python manage.py startapp errors
Gehitu hau ezarpenak.py-ri aurretik egin genuen bezala, instalatutako_apps ezarpenean eta hasi App / URLS.py-n ikuspegi batzuen erreferentziak gehituz, non aplikazioa zure Django proiektuaren izena.
handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
Hau da, akatsak, txantiloiak eta erdiko pixka bat behar ditugun guztia. Definitu dezagun horrela:
# Sortu zure iritziak hemen.
Ondoren, definitu dezagun erdiko akatsak kudeatzeko. Hau egingo dugu lehenik MiddleWelSess-en ezarpenak.py-n gehituz, gure erdialdearen izenarekin.
# ... Aurreko Middleware
Ondoren, gehitu dezagun erdikoa.
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.')
Funtzio bat gehitzen dugu uneko salbuespena lortzeko, bertako harizti bat erabiliz, gure kodean akatsak trazatzen laguntzen diguna. Txantiloiei dagokienez, bakarra behar dugu, dinamikoki definitzen dugulako izenburua ikuspegian. Txantiloiak izenburua eta "arrastoa" eman behar ditu, testuingurutik gure errorea.
nano errors/templates/errors/error.html
Hau da oraindik gure txantiloi sinpleena, baina zein erraza da gure proiektuan akatsak ikustea. Ondoren, desgaitu gaitezen arazketa ezarpenetan.
nano app/settings.py
Aurkitu lerro hau non ezarrita dagoen eta aldatu faltsua
DEBUG = False
Anima zaitez eta segurtasun kopia egin. Urruneko Linux zerbitzari batera zabaltzeko prest gaude eta hortik ateratako ezaugarriak gehitzen jarraitzeko prest gaude.
sudo backup
Kode hau zerbitzari batera bidali aurretik, kontuan hartu beharko genuke kodearekin arazo batzuk egon daitezkeela. Kasuaren arabera, hauei bidalitako informazioa onartzen duten guneek argitaratutako spamak eta zatikiak kentzeko arazoak izango dituzte. Hori ez da berehala gertatu behar, baina geroago spam modua automatikoki aztertuko dugu gunean, gunera sartzeko gogorragoa izan dadin, erabiltzaileen kontuak desaktibatzeko moduarekin batera, eta erabiltzailearen identitatea egiaztatzeko, hatz marka edo aurpegiko aitorpena bezala.
Ekoizpenean aztertu dugun faktore anitzeko autentifikazio adibidea aztertzen, gauzak desberdinak izan daitezke. Kontuan izan nola baloratzen ari garen saiakuntzak, eta tokenak iraungitzea. Robotak gune batera sartzen badira, bi faktoreko autentifikazioa zailagoa izan daiteke erabiltzaileak aldi berean kodeak sartu ahal izateko. Honi aurre egiteko, erabil dezagun eredua erabiltzaileen modeloetan, webgunearekin nola elkarreragiten dugun deklaratuz faktore anitzeko autentifikazioa telefono zenbaki batekin autentikatzen ari garenean. Posta elektronikoarekin autentikatzeko aukera ere gehituko dugu. Hasi erabiltzaile ereduak nano editatzen.
nano users/models.py
Hau da gehitzen ari garen eredua nolakoa izan behar da. Ez dugu metodoik behar, NANa, erabiltzailea, erabiltzailea, iraungitze, iraungitze, luzera eta edozein faktoreren autentifikazioaren aurkako saiakerak gordetzeko (123456 telefono edo posta elektronikora bidali da).
# Webgunean saioa hasteko erabiltzen den oinarrizko token bat
Gehitu ditzagun gure erabiltzaileari pribilegioa, eta oraingoz eskuz jarriko gara, azkenean erabiltzaile pribilegiatuak automatikoki zerrendara migratu aurretik. Erabiltzaileen modeloetan, gehitu lerro hau profilean:
vendor = models.BooleanField(default=False)
Datu-basean izandako aldaketekin gertatzen den bezala, migrazioak egin behar ditugu eta datu-basea migratu behar dugu Django-n eredu.py fitxategia editatzen dugun edozein unetan. Gogoratu, hau da, iturria erabiltzen dugula lehenengo (dagoeneko erabili ez bada terminala irekita zegoenetik) eta gero Python Manage.py migrazioak eta migrazioa egiteko.
cd project-directory-you-named # (Beharrezkoa bada)
Oraingoz, shell erabiliz saltzaile gisa sortutako edozein kontu zerrendatu ditzakezu.
python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Orain, eboluzionatu dezagun gure faktore anitzeko autentifikazio ikuspegia token hau erabiltzeko. Lehenik eta behin, gure MFA laguntzaile utilitateak aldatu behar ditugu. Nano erabiliz,
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
# Autentifikatu erabiltzailea posta elektronikoa edo telefono zenbakia erabiliz
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Iragazi tokena URLan pasatutako balioa (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)) # Saio hau sortu ez bada, sortu
user = User.objects.filter(id=token.user.id).first() # Lortu erabiltzaileak tokenetik
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Autentifikatuta badaude, erregistratu
if not user: raise PermissionDenied() # Ukatu erabiltzaile bat aurkitu ez bada
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Egiaztatu auth token
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Sartu erabiltzaileak saioa hasi ez badira
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Ezarri iraungitzea beren faktore anitzeko autentikazioan
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Birbidali erabiltzaileari hurrengo orrialdera
if not user.profile.mfa_enabled: # Egiaztatu MFA gaituta dagoen ala ez
if not check_verification_time(user, token): # Begiratu ordua
user.profile.mfa_enabled = False # Garbitu telefono zenbakia
user.profile.enable_two_factor_authentication = True # Gaitu MFA
user.profile.phone_number = '+1' # Desgaitu telefono zenbakia
user.profile.save() # Gorde profila
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Erabiltzaileak saioa egin du bere MFA gaituta ez badago
if request.method == 'POST' and not fraud_detect(request, True): # Eskaera posta eskaera bada
form = TfaForm(request.POST) # Inprimakia berehala
code = str(form.data.get('code', None)) # Lortu kodea
if code and code != '' and code != None: # Ziurtatu hutsik ez dagoela
token_validated = user.profile.check_auth_token(usertoken) # Egiaztatu auth token
is_verified = check_verification_code(user, token, code) # Egiaztatu kodea
if token_validated: # Dena bada
if is_verified: # Ordenan dago
user.profile.mfa_enabled = True # Gaitu MFA (dagoeneko gaituta ez badago)
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Erabiltzaileak saioa hasi
for key, value in request.GET.items(): # Eraiki querystring hurrengo parametroa (baldin badago)
return HttpResponseRedirect(next) # Biruntziagailu
elif not token_validated: # Token baliogabea balitz
if p.mfa_attempts > 3: # Saiakera gehiegi egongo balitz
if form.data.get('send_email', False): # Bidali mezu elektronikoa (edo testua)
# Errendatu inprimakia (eskaerak lortzeko)
Kode honetan gehitzen ari garenean, ziurtatu funtzioa inportatu mezu elektronikoa bidaltzeko. Fitxategiaren goiko aldean, erabiltzaileen ikuspegia (beste inportazio batzuekin), gehitu
from .mfa import send_verification_email as send_mfa_verification_email
Orain, funtzio hori idatzi behar dugu horren aurretik funtzionatuko duela. Bidali posta elektronikoaren funtzioa luzatu beharko luke eta erabiltzaileari mezu elektroniko bat bidali besterik ez du egiaztatzeko kodearekin.
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))
Beraz, horrek oso ondo funtzionatzen du, orain faktore anitzeko autentifikazio sistema dugu, saioa hasteko telefono zenbaki edo posta elektroniko baten araberakoa da. Baina, gainera, kentzeko modua ere behar dugu edo, gutxienez, gure baldintzekin lankidetzan aritzen diren erabiltzaileak ezkutatzeko modua behar dugu. Hauek spammers, robotak edo gure lana ondo esan nahi ez dutenak izan litezke. Begiratu erabiltzaileak kontrolatzeko dudan ikuspegi bat nire webgunean:
# Inportazioak
from .tests import is_superuser_or_vendor # Proba hau sortu beharko dugu
# Lortu erabiltzaileen zerrenda
return render(request, 'users/users.html', { # Erabiltzaileak txantiloi batean itzultzea
Kontuan izan kode honek proba bat erabiltzen duela, proba hau probaS.py fitxategi batean deklaratu beharko dugu eta inportatu. Erabiltzaileak / probak editatzea.py, sor dezagun proba.
def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
Erabiltzaile / users.html txantiloiarekin batera dago, hau da:
Kontuan izan txantiloiak beste txantiloia, erabiltzaile /user.html. Azpimplatoa duen eta ez erabiltzearen txantiloia erabiltzen duzunean, ideia ona da azpimarra gehitzea () Irabazi beharreko fitxategiaren izena baino lehen, txantiloiak bereizteko.
Kontuan izan hau Jinja asko dela, baliteke ez izatea definitutako aldagai horiek guztiak. Baina nire kodea nolakoa da.
<small># {{user.id}} </ small>
Beste azpimultzo bat ere behar dugu, toggle_active.html. Txantiloi honek erabiltzaile bat aktibo dagoen ala ez txandakatzeko aukera ematen digu.
Gainera, erabiltzailearen jarduera eta URL eredu egokiak txandakatzeko ikuspegi bat gehitu beharko dugu. Bertan gauden bitartean, gehitu dezagun erabiltzaile bat ezabatzeko hori behar badugu.
# Inportazioak
success_url = '/' # Arrakasta URLan birzuzenketa
def test_func(self): # Probatu erabiltzailea superuserra bada eta ezabatzeko baimena du
Beharrezkoa denean, beharrezkoa denean, erabiltzaile bat ezabatzeak ez du beharrezkoa izan behar gehienetan, gunea bisitatzen duten erabiltzaileen ikusgarritasuna txandakatu dezakegu baztertu behar baditugu.
Gehitu ditugun URL ereduak horrelakoak dira. Nano-rekin, editatu erabiltzaile / urls.py eta gehitu lerro hauek:
nano users/urls.py
Lerroak erabiltzaileen ikuspegiko bideen zerrendan joan beharko lirateke, amaiera baino lehen "]" hasi ondoren "[".
# ...
# ...
Orain, ziurtatu gunea babesten duzula web zerbitzarian deskargatu ahal izateko lanean jarraituko dugu. Komando lerrotik,
sudo backup
Orain gure gunea babesten da.
Beraz, zenbait ezaugarri erabilgarriagoak ditugu. Baina zer gertatzen da argazki handiaren inguruan? Kode hau ez da oraindik Interneten eskura, oraindik ez dugu posta zerbitzaririk, eta gure aplikazioa zabaldu behar dugu egiaztapen prozesu integrala eta gunea arakatzen laguntzeko.
Hori guztia lortuko dugu. Oraingoz garrantzitsuena kode hau linean lortzea besterik ez da izango, Ubuntu zerbitzari batean Bash lerro batzuekin egin dezakeguna. Zerbitzari bat alokatu beharko duzu honetarako, hala ere, zerbitzaria etxean eta negozioen Interneteko harpidetza izan ezean, portuak irekitzeko aukera ematen du. Pertsonalki nire webgunea martxan jartzen dut nire apartamentuan instalatuta dagoen HP Z440 batean, baina normalean askoz merkeagoa da oinarrizko beharrak zerbitzari pribatu birtual bat alokatzeko (VPS).
Gogoan izan orain exekutatzen ari garen kodea nahiko mehea dela, produktu bat eraiki behar duguna erabiltzeko prest gauden aurretik mantendu eta hobetu beharko dela. Ziurtatu Internetekin zer egiten duzun kontuz, ziurtatu gune hau publikoki zabaltzen baduzu sarean Linux zerbitzari batean, nahi ez dituzun interakzioak zure webgunearekin blokeatzeko plana baduzu. Litekeena da arazorik izango ez dela hasieran, baina hainbat irtenbide aztertuko ditugu horri aurre egiteko, makina ikaskuntza, adimen artifiziala eta informatikaren ikuspegia barne. Arazo bihurtzen denean, begiratu testu honetan irtenbide bat lortzeko.
VPS bat alokatzeari dagokionez, joan zaitezkeen leku asko daude. Google Cloud-ek VPS zerbitzariak ditu, Ionos, Kamatera, Amazon AWS, eta hornitzaile gehiagok gure beharretara egokituko diren hodeiko zerbitzarien soluzioak eskaintzen dituzte.
Inprimakien bidez klik egin beharko duzu eta abiarazteko plana hautatu beharko duzu. Oinarrizko plan batekin joan zaitezke edozein hornitzailearekin, baina ziurtatu hornitzaileak Port Mail Server Ports-ek posta elektronikoa bidaltzeko aukera ematen duela (hau izan behar du 587 portua eta 25 portua), hornitzaile batzuek portu horiek blokeatzen dituzte. Orain arte, Ionos eta Kamatera-rekin izandako esperientziarik onena izan dut, biak posta elektroniko mugagabea bidaltzeko aukera emango didate eta prezioak nahiko merkeak dira.
Zure zerbitzari berrira SSH edo Secure Shell izeneko protokolo baten bidez konektatuko zara, eta horrek zure ordenagailu pertsonala bezalako zerbitzariarekin urrunetik interfazea ahalbidetzen du. Zerbitzaria konfiguratzen duzunean, ostalaritza hornitzaileak ssh tekla gehitzeko eskatuko dizu edo erabiltzaile izena eta pasahitza emango dizkizu. SSH gakoa da nola saioa hasiko duzun zerbitzarian komando lerroan kodea editatzeko. Erabili azpitik SSH-Keygen aukerak SSH gakoa sortzeko.
ssh-keygen
Gorde fitxategia eta gainidatzi behar izanez gero, ona da zure SSH teklak biratzea dagoeneko ez baduzu. Orain, hurrengo komandoa erabil dezakezu zure SSH tekla ikusteko. Zure urruneko zerbitzarian kopiatu nahi duzu, autentifikatzeko erabili ahal izateko.
cat ~/.ssh/id_rsa.pub
Komando hori idazterakoan SSH gakoa ikusi ez baduzu, saiatu "SSH-RSA AAA" rekin hasita.
ssh-keygen -t rsa -b 4096
Sortu VPS exekutatzen den Ubuntu, hala ere, hau egiteko asmoa duzu. VPS bat sortu ondoren hornitzaileen webgunean (Kamatera.com, ionos.com edo antzeko formularioen bidez klik eginez gero saioa hasi nahi duzu. Horretarako, erabili SSH komandoa zure IP helbidearekin (xx.xx.xx.xx.xx itxura duen helbidea). Era berean, erabiltzaile izen lehenetsia sentikorra izan behar duzu sortu dugun zerbitzarian, adibidez, Ubuntu.
ssh ubuntu@XX.XX.XX.XX
Pasahitza eskatuko zaizu, pasahitza eskatuko balizu, sartu. Ez dugu erabiltzaile izen lehenetsia erabiliko, beraz, has gaitezen erabiltzaile berri bat sortuz eta SSH gako bat gehituz bere kontura.
Has gaitezen sshd_config fitxategi berri bat gehitzen, eta horrek zerbitzariak nola erabili SSH erabiltzen du.
nano sshd_config
# Hau da SSHD zerbitzariaren sistemaren konfigurazio fitxategia. Ikusi
# SSHD_CONFIG (5) Informazio gehiago lortzeko.
# SSHD hau bidearekin = / usr / local / sbin konpilatu zen: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games
# SSHD_CONFIG lehenetsitako aukerak erabilitako estrategia
# Openssh aukerak zehaztu behar dira lehenetsitako balioarekin
# posible, baina utzi komentatu. Erabakitako aukerak baliogabetu
# Balio lehenetsia.
# 22 portua
# Helbidefamily edozein
# ListenDDress 0.0.0.0
# Listenaddress ::
# Hosty / etc / ssh / ssh_host_rsa_key
# Hosty / etc / ssh / ssh_host_ecdsa_key
# Hosty / etc / ssh / ssh_host_ed25519_key
# Zifrak eta giltza
# Rekeylimit lehenetsia Bat ere ez
# Lograma
# Syslogfacility auth
# Loglevel Info
# Autentifikazioa:
# Logingracetime 2m
# PermentsarenRogin Debekuaren pasahitza
# Strictmodes Bai
# MaxauthTries 6
# MaxSessions 10
# Espero .ssh / baimendutako_keys2 etorkizunean lehenetsita egotea.
# BaimendutaPrincipalsFile Bat ere ez
# BaimenderKEYSCommand Bat ere ez
# BaimenderEzyyscommanduser Inork ez du
# Horretarako funtziona dezazuen ostalariaren teklak ere / etc / ssh / ssh_nownowss
# Hostbasedauthentication ez
# Aldatu Bai ez baduzu fidatzen ~ / .ssh / ezagun_hosts
# Hostbasedauthenticatication
# Ignoreusernownhosts ez
# Ez irakurri erabiltzailearen ~ / .rhosts eta ~ / .Shosts fitxategiak
# Ezikinak Bai
# Tennelatutako testu pasahitzak desgaitzeko, aldatu hemen ez!
# Baimendik gabeko hitzak ez
# Aldatu Bai, erronka-erantzunaren pasahitzak gaitzeko (kontuz arazoekin
# PAM modulu eta hari batzuk)
# Kerberos Aukerak
# Kerberosauthentication zk
# Kerberosorlocalpasswd bai
# KerberosticketCleanup Bai
# Kerberosgetafstoken zk
# GSSAPI aukerak
# Gssapiauthentication ez
# GSSapicLeanupcredentials Bai
# GssapistricceptorCheck Bai
# Gssapikeyexchange zk
# Ezarri hau "bai" PAM autentifikazioa gaitzeko, kontua prozesatzeko,
# eta saioaren prozesamendua. Hau gaituta badago, PAM autentifikazioa borondatea
# baimendu KBDinTinTactiveAuthenticatication-en bidez
# Pasahitza. Zure PAM konfigurazioaren arabera,
# PAM autentifikazioa KBDIntintiveAticaticatication-en bidez saihestu dezake
# "Permplrootlogin pasahitzik gabeko" ezarpena.
# Pam kontua eta saioko egiaztapenak egin nahi badituzu
# PAM autentifikazioa, ondoren gaitu hau, baina pasahitza ezarri
# eta kbdintaktivaceakintication "no".
# AllowAgentForwarding Bai
# Allowtcporworing bai
# Gatewayports ez
# X11displayoft 10
# X11UselocalHost Bai
# Permitty bai
# Printlastlog bai
# TCPkeepalive bai
# Baikortasun-ingurua ez
# Konpresioa atzeratu egin da
# BezeroAliveinterval 0
# BezeroAriveCountmax 3
# Erabilitako ez
# Pidfile /run/sshd.pid
# Maxstarteps 10: 30: 100
# Permitunnel ez
# ChrootDirectory Bat ere ez
# BertsioaDendum bat ere ez
# Bandera bide lehenetsirik ez
# Baimendu bezeroak tokiko ingurune aldagaiak gainditzea
# Gainditu azpisistemarik ez lehenetsi
# Erabiltzaile bakoitzeko ezarpenak gainidazteko adibidea
# Erabiltzailearen anoncvs
# X110Zeriz ez
# Allowtcpforwarding ez
# Permitty ez
# FORCECOMMAND CVS zerbitzaria
Gogoratu, Ktrl + X eta Y fitxategia gordetzeko. Ondoren, idatzi dezagun hasieran izeneko oinarrizko gidoia (denak gure erabiltzailearen hasierako direktorio lehenetsian).
nano initialize
Gehitu lerro hauek fitxategian, ordezkatuz
# ! / bin / bash
Fitxategi honen bidez ibiltzeko, has gaitezen lerroaren arabera. Lehen lerroak konpiladoreari Bash gidoia dela esaten dio. Ondoren, mendekotasunak instalatzen ari gara, SSHD_CONFIG direktorio egokian kopiatzen ari gara SSH berrabiarazten, SSHko teklak sortzea sustraitzeko, erabiltzailearen taldea gehituz (honetarako nahi duzun izen bat aukeratu dezakezu, oraingoz adduser komandoa erabili izena eta ezgaitutako pasahitza erabiltzeko). SUDO Taldeari taldeari ere gehitzen diogu, SSH tekla sortzen dugu, gure gakoa baimendutako gakoei eta berei ere gehitu eta tekla inprimatu. Erabiltzaile berri hau gunean saioa hasten dugunean izango da.
Terminal berri batean, aurrera eta ireki berriro zerbitzaria.
ssh team@XX.XX.XX.XX
Ez zenuke pasahitzik behar oraingoan, SSH gakoa izanez gero. Pasahitzarekin saioa hasi dugu, gunea seguruago mantentzeko.
Orain, zerbitzari hau erabat hutsik hasten da horri buruzko informaziorik gabe. Has gaitezen gure proiektua git-tik klonatzen, urruneko makinan deskargatu eta exekutatu ahal izateko. SSH bidez konektatutako urruneko zerbitzarian, lehenengo inprimatu zure SSH gakoa:
cat ~/.ssh/id_rsa.pub
Ondoren, itsatsi giltza hau gure git biltegia konfiguratzeko aurretik egin genuen git ezarpenetan. Baliteke gure proiektua zuzenean zerbitzarira jo dezakegu. Ziurtatu proiektua lokalean babesten duzula lehenik eta behin, git zerbitzarian deskargatzeko.
git clone git://github.com/you/yourproject.git
Perfektua. Fitxategi guztiak hemen daude. LS-rekin ikus ditzakegu
ls
Orain, has gaitezen zerbitzaria konfiguratzen. Lehenik eta behin, kopiatu zure proiektuaren direktorio proiektuarentzako erabiliko dugun izen gogoangarria.
cp -r yourproject whatyoucalledit
Non "whatyoucalledit" zure proiektuaren izen berria da. Ondoren, zerbitzaria konfiguratzeko oinarrizko erabilgarritasuna eraiki beharko dugu. Erabilera hau gordeko dugu eta etorkizunean erabiliko dugu. Erabilgarritasun hori eraikitzeko, sor dezagun erabiltzaile bat Binary gidoia nola editatzen dugun zehazteko. Bash erabiliz, edit / usr / bin / asscript erabiliz
sudo nano /usr/bin/ascript
Ziurtatu sudo erabiltzea bertan fitxategia editatzeko baimenak izan ditzazun. Fitxategian, gehitu lerro hauek:
# ! / bin / bash
echo "# ! / bin / bash ">> / usr / bin / $ 1
Gogoratu gidoi hau argumentua hartzen du, gidoiaren izena, $ 1 gisa. Lehenik eta behin, fitxategiak sortzen badu edo bestela sortzen du, lehenengo lerroa gehitzen du script-a deklaratzeko, bere baimenak aldatzea, aldatzen du eta bere izena / etc / etc / ascripts gehitzen dizkigun, sortzen ari garen gidoien izenak gordetzeko aukera ematen digu. Fitxategia lehendik badago, besterik gabe, aldatu baimenak eta editatu. Gorde fitxategia, eta hurrengoa baimenak aldatuko ditugu. Gidoi hau erabiltzen dugun bitartean, ez dugu berriro egin beharrik izango.
sudo chmod a+x /usr/bin/ascript
Perfektua. Orain sortu ditzagun konfigurazio deitutako gidoia. Lehenik eta behin, ez zarela gainbegiratzeko, baina begiratu nire konfigurazio gidoia nolakoa den. Gidoi honek zure proiektuan nolakoa izan behar duen ibiliko gara, ez duzu nire gidoian dena behar hasteko.
# ! / bin / bash
# sudo chmod a + x scriptak / usersetup
# ./scripts/usersetup
# ssh-keygen
# Proiektuaren direktorio
# Erregistro komandoak
# Nano konfigurazioa
# Git konfigurazioa
# Eguneratu eta instalatu
# Gaitu Clamav Antivirus
# Ezarri ostalariaren izena
# Konfigurazio postgreak
# Konfigurazio datu-basearen backup
# Desgaitu Iptables
# Instalatu bitdefender
# Konfigurazio postfix
# Sortu dirs
# Konfiguratu Virtualenv
# Mendekotasunak lortu eta eraiki
# Ezarri suebakiaren arauak
# Instalatu PPY mendekotasunak
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# PIP instalatu opencv-python == 4.5.5.64
# PIP instalatu opencv-contrib-python == 4.5.5.64
# Instalatu certbot
# Exekutatu Certbot
# Kargatu posta zerbitzaria
# Kopiatu ziurtagiriak
# sudo cp /etc/letsencrypt/live/femmebabe.com/privkey.pem pribatiboa.pem
# sudo cp /etc/letsencrypt/live/femmebabe.com/cert.pem cert.pem
# Adabaki venv
# Ezarri erabiltzailearen ezarpenak
# Ezarri baimenak
# sudo chown -r taldea: erabiltzaileak / var / run /
# sudo chown root: root / run / sudo / ts -r
# sudo chmod 664 db.sqlite3
# sudo chown www-datuak: erabiltzaileak db.sqlite3
# Kopiatu konfigurazioa eta ezarri baimenak
# Konfigurazio datu-basea
# Injektatu Pam Konfigurazioa eta kendu SSH konfigurazio okerra
# sudo sed -i '-e' $ d '/etc/pam.d/sshd
# sudo sed -i '-e' $ d '/ etc / profila
# Kopiatu bin scriptak eta ezarri baimenak
# Kargatu eta gaitu zerbitzuak
# Gaitu Apache moduluak
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# Desgaitu gune lehenetsia
# Gaitu gure gunea
# Kargatu daemon eta berrabiarazi Apache, postfix eta Opendkim
# Ezarri baimenak
# Swap konfigurazioa
# Init Ogition Motor
# Konfigurazio git
# Erakutsi IPv6 eta Opendkim domeinuaren konfiguraziorako
# Konfigurazioa amaitu da
Hori konfigurazio handia da! Laburbilduz, kode-erregistroak komandoak erregistratzen ditu, Nano eta Git konfiguratzen ditu, Pythons Menpekotasunak konfiguratzen ditu, PytreSQL (datu-basearen zerbitzaria) konfiguratzen du eta UFW-k konfiguratzen du (deskargatu da antibirusak, zuzendariak, klonen menpekotasunak, ziurtagiriak instalatzen ditu eta ziurtagiriak eta instalazioak egiten ditu Zerbitzaria konfiguratzen du, konfigurazioa instalatzen du, Swap-ek, swap esleitu, baimenak ezartzen ditu eta IP, IPv6 helbidea eta Opendkim tekla inprimatzen ditu. Nahiko sinplea, baina kode asko dirudi. Ez dugu horretaz asko behar mendekotasunak ez ditugulako, ez dugu apioa, apioa edo Daphne erabiltzen, baina horietako batzuk instalatuko ditugu, hala ere hasteko. Kontuan izan kode honek hainbat aldiz deklaratutako domeinua duela.
Domeinu izena ere erosi beharko dugu (urteko kuota txiki bat da). Domeinua erosteko karratu gomendatzen dut, haien diseinua intuitiboa eta erabilerraza da. Aukeratutako edozein domeinutan eros dezakezu, baina adibide honetan FemMebabe.com domeinua erabiltzen ari naiz. Domeinu bat erosi ondoren, burua laukizuzen DNS konfigurazio panelera joan eta gehitu erregistro bat zure domeinua zerbitzariari seinalatuz. Horrelakoa izan beharko luke:
@ A xx.xx.xx.xx
@ Operadorea ostalari gisa, esan nahi du domeinu honen azpian dauden azpidomeinu guztiak eta root domeinua zerbitzarira birbideratuko dira. Erregistro gehiago daude deklaratzeko, baina horietara joan gaitezke mezu elektronikoak bidaltzeko prest gaudela. Gogoan izan, zenbait egun lehenago behar duzu zerbitzaritik posta ongi bidaltzeko gai izan aurretik. Ezartzen ari garen DNS erregistroak denbora beharko da hedatzeko.
Dena den, hasi behar dugun disko bakarra erregistro bat da. Beraz, beheko gidoia gure proiektuaren arabera bete dezakegu eta exekutatu.
Has gaitezen konfigurazio-gidoi txikiago batekin oinarrizko aurrerapen bat behar duguna instalatzeko. Oraindik ez dugu hainbeste mendekotasun edo postgreSQl erabiliko, oinarrizko http zerbitzari bat abiaraziko dugu eta hori ziurtatzeaz kezkatuko gara. Gogoratu, https ziurtagiria lortzeko eta zerbitzaria modu seguruan exekutatu, domeinu bat erosi beharko dugu alokairuko zerbitzari batekin batera. Oraingoz, ordezkatu "taldea" fitxategi honetan zure erabiltzailearen izenarekin, "dir" zure proiektuaren direktorioarekin eta eman zure posta elektronikoa eta domeinua <> Etiketan.
Gainera, kode hau exekutatu aurretik, ezarpenak aldatu behar ditugu suebaki ostalaritza hornitzaileak onartzen badituzu. Normalean hau da zure ostalaritza hornitzailearen 'sareak' fitxan, edo auto hostinga bazara, zure bideratzailearen 'ataka birbidaltzeko' atalean dago. Zure bideratzailearen bidez IP estatiko bat konfiguratu nahi duzu zure zerbitzariaren makinaren helbidearekin, autopalta erabiltzen ari bazara. Irakurtzeko / idazteko sarbideetarako honako portuak ireki beharko dituzu.
22 (ssh) 25 (Posta) 587 (Posta) 110 (posta bezeroa) 80 (http) 443 (https)
# ! / bin / bash
# Erregistro komandoak
# Nano konfigurazioa
# Git konfigurazioa
# Eguneratu eta instalatu
# Gaitu Clamav Antivirus
# Ezarri ostalariaren izena
# Konfigurazio datu-basearen backup
# Desgaitu Iptables
# Konfiguratu Virtualenv
# Instalatu certbot
# Exekutatu Certbot
# Ezarri erabiltzailearen ezarpenak
# Ezarri baimenak
# sudo chown -r taldea: erabiltzaileak / var / run /
# sudo chown root: root / run / sudo / ts -r
# Kargatu eta gaitu zerbitzuak
# Gaitu Apache moduluak
# Kargatu daemon eta berrabiarazi Apache, postfix eta Opendkim
# Erakutsi IPv6 eta Opendkim domeinuaren konfiguraziorako
Kode hau exekutatu aurretik, ziurtatu erosi duzun domeinua zerbitzariarekin konektatuta dagoela. Horretarako, ireki terminal bat zure makinan, eta exekutatu komando hau zure domeinuarekin:
ping femmebabe.com # Sartu zure domeinua hemen, ping ondoren
Guztiak ondo ikusten badira eta zerbitzaria erantzunak bidaltzen ari da, gidoia exekutatzeko prest gaude eta paketeak instalatzeko, baita Apache zerbitzaria hasteko, gaitu eta ziurtatzeko.
Hau ez da postfix konfiguratzeko behar den konfigurazio guztia, geroago konfigurazio hori gehiago aztertuko dugu. Oraingoz, exekutatu konfigurazio-kode hau eta minutu batzuk behar dira zure zerbitzaria instalatu eta ziurtatzeko. Berriro ere, ziurtatu script-en izena, posta elektronikoa eta domeinu izena ordezkatu dituzun izenaren arabera.
Zerbitzaria hornituta dagoela, edozein web arakatzaileko URLra joan zaitezke eta egiaztatu zerbitzaria https exekutatzen ari dela ziurtatzeko. Ez bada, saiatu denbora pixka bat itxaroten DNS erregistroak harrapatzeko eta ondoren exekutatu komando hau CertBot ziurtagiria berriro saiatzeko:
sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Dena behar bezala konfiguratu duzun bitartean, Apacheren orrialde lehenetsian sartzeko gai izan beharko zenuke zure kodea lanean ari dela jakiteko eta zuzeneko web orria bistaratzeko. Ondoren, editatu ditzagun ezarpenak.py gure arazketa modu lehenetsia ekoizpenera aldatzeko. Gainera, domeinua ezarpenetan konfiguratuko dugu, baita barne IPak ere.
nano yourproject/settings.py
Ezarpenetan, aldatu / gehitu lerro hauek.
# Gunearen konfigurazioa
Orain, Apache2 konfiguratu beharko dugu. Editatu dezagun lerro honekin zabalduko dugun konfigurazio fitxategia:
sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Konfigurazio fitxategi honek gure domeinu izena eta erabiltzailearen izena eta proiektuaren izena izan beharko lituzke. FEMMEBABE.COM, erabiltzaile izena taldea eta FEMMebaberen izenaren izena erabiltzen ari naiz.
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>
Ziurtatu adibide kode honetan proiektuaren, direktorioen eta domeinuaren izena ordezkatzen duzula zure zerbitzaria konfiguratzean. Orain, gune lehenetsia desgaitu beharko dugu. Hau bash erabiliz egin daiteke.
sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Ondoren, gune lehenetsia gaitu eta Apache2 berriro kargatu dezakegu, Bash erabiliz. Gogoratu femmebabe ordezkatzen duzun fitxategiaren izenarekin ordezkatzea / etc / apache2 / guneak editatzean /.
sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Itzuli zure domeinura Navbarrean. Zure web arakatzailean konfiguratu duzun gunea ikusi beharko zenuke. Zorionak! Ikusten ez baduzu, baliteke aldaketa batzuk egin behar izatea. Arretaz berrikusi zure proiektuaren ezarpenak, Apache konfigurazioa eta ziurtatu akatsik ez duzula eta exekutatu komando hauek proiektua akatsak egiaztatzeko.
cd projectname
source venv/bin/activate
python manage.py check
Zure python proiektuan akatsak badituzu, arrastatu non dauden eta konpondu. Agian ezingo dituzu zure akats guztiak non dauden ikusiko, beraz, "populazioa ez da berriro jartzen", editatu hurrengo fitxategia ingurune birtualan, erregistro.py, errorea azaltzeko.
nano venv/lib/python3.12/site-packages/django/apps/registry.py
Joan 83. lerroera, non exekutatu RuntimeError ("populazioa () ez da berriro sartu"), eta gehitu iruzkin bat lerro honen aurrean, eta ondoren gehitu, koska berdina, auto.app_configs = {}. Honek hau da:
# Saihestu deitzen diren deiak appconfig.ready () exekutatzea ekiditeko ()
# metodoak bi aldiz.
# Altxatu RuntimeError ("populazioa () ez da berriro")
Proiektua berriro egiaztatu eta errorea azaldu dezakezu.
python manage.py check
Ondoren, akatsa ikusi eta konpondu dezakezu. Konpondu duzunean eta kodeak akatsik gabe konpilatzen du, ziurtatu fitxategia aldatzea atzera egin dezan:
# Saihestu deitzen diren deiak appconfig.ready () exekutatzea ekiditeko ()
# metodoak bi aldiz.
# auto.app_configs = {}
Zerbitzaria linean badago, aldaketarik gehiago egiten dugunean, zerbitzaria berriro kargatzeko komando hau erabili behar dugu:
sudo systemctl reload apache2
Ikaragarria! Baina zer gertatzen da posta bidaltzea? Posta elektronikoa bidaltzen hasteko, lehenik domeinuaren konfigurazioa eguneratu beharko dugu. Hau zure DNS panelean egon beharko litzateke laukian, edo edozein domeinu izena aukeratu duzun erregistratzaile. Konfigurazioa instalatu eta gehitu beharko dugu, eta komando batzuk exekutatu.
Lehenik eta behin, eskuratu dezagun zerbitzariaren IPv6 helbidea. Ondoren, zure DNS irekiko dugu eta erregistroak gehituko ditugu.
Zerbitzariaren IPv6 helbidea lortzeko, erabili komando hau:
ip -6 addr
Orain, DNS ezarpenetara honako erregistroak gehitu ditzakegu. Nire erregistroak horrelakoak dira. Hala ere, zure erregistroetarako, IP helbidea zure IParekin ordezkatu beharko zenuke (ez 75.147.182.214, hori da nirea). Gehitu zure domeinua FemMebabe.com-en lekuan, baita aurreko komandoarekin topatutako zure IPv6 helbidea ere (ezin duzu nirea erabili, FFF: FFF: FFF: FFF: FFF: 3E02). Ez kezkatu domainkey oraingoz, postfix, posta zerbitzaria, OpenDkim-ekin eta tekla inprimatu ezartzen dugunean sortzen da. Azken hau konfiguratuko dugu.
@ -A N / a 75.147.182.214
@ Mx 10 femmebabe.com
@ Or N / a femmebabe.com
@ Txt N / a Txt @ v = spf1 mx ip75.147.182.214IP6: FE80 :: 725a: FFF: FFF: FE49: 3E02 ~ Guztiak
default._bimi Txt N / a v = bimi1; l = https: //femmebabe.com/media/static/femmeBabe.svg
_dmarc Txt N / a v = dmarc1; P = Bat ere ez
sendonly._domainkey
Txt
N / a
Orain, postfixarentzako jarraitutako konfigurazioren bat gehitu beharko dugu. Egin behar dugun guztia domeinu izena, femmeBabe.com ordezkatzen dugula ziurtatzea da, erabiltzen ari zaren domeinu izenarekin. Ikus ditzagun konfigurazio fitxategi guztiak banan-banan, eta instalatu gure proiektuan konfiguratutako direktorio batean, instalatzeko.
nano config/etc_postfix_main.cf
Gehitu testu hau fitxategian
# Ikus /usr/share/postfix/main.cf.dist bertsio komentatu batengatik
# Debian espezifikoa: fitxategi izen bat zehaztea lehenengoa eragingo du
# Izen gisa erabili beharreko fitxategi horren lerroa. Debian default
# / etc / posta izena da.
# myorigin = / etc / posta izena
# .Domain eranskina MUAren lana da.
# Hurrengo lerroa "atzeratu posta" abisuak sortzeko hurrengo lerroa
# atzerapena_warning_time = 4h
# Ikus http://www.postfix.org/compatibility_readme.html - 3,6 lehenetsia
# Instalazio freskoak.
# TLS parametroak
# Milter konfigurazioa
Hurrengo konfigurazioa!
nano config/etc_postfix_master.cf
Lerro hauek gehitu:
#
# Postfix Master Prozesuen Konfigurazio fitxategia. Formatuari buruzko xehetasunak lortzeko
# fitxategiaren, ikus Master (5) eskuzko orria (komandoa: "Man 5 maisua" edo
# Linean: http://www.postfix.org/master.5.html).
#
# Ez ahaztu "postfix berriro kargatu" fitxategi hau editatu ondoren exekutatzea.
#
# ================================================================================================
# Zerbitzu mota Unpriv Chroot WakeUp MaxProC komandoa + args
# (bai) (bai) (ez) (ez) (inoiz) (100)
# ================================================================================================
# SMTP INET N - Y - 1 PostScreen
# SMTPD PASS - - Y - - - SMTPD
# DNSBLOG UNIX - - Y - 0 DNSBLOG
# tlsproxy unix - - y - 0 tlsproxy
# Aukeratu bat: gaitu bidalketa begizta bezeroei soilik edo edozein bezeroentzat.
# 127.0.0.1:Submission Inet n - y - - - - SMTPD
# -o syslog_name = postfix / bidalketa
# -o smtpd_tls_security_level = Zifratu
# -o smtpd_sasl_auth_enable = Bai
# -o smtpd_tls_auth_only = bai
# -o smtpd_reject_unlisted_recipient = Ez
# -O smtpd_client_restrizctions = $ mua_client_restRICTIONS
# -O smtpd_helo_restrizctions = $ mua_helo_restrizctions
# -o smtpd_sender_restrizctions = $ mua_sender_restrizctions
# -O smtpd_recipient_restrrizces =
# -o smtpd_relay_restrizctions = baimena_sasl_authenticated, baztertu
# -o miler_macro_daemon_name = jatorria
# Aukeratu bat: gaitu SMTPS LOOPBABS bezeroak soilik edo edozein bezeroentzat.
# 127.0.0.1:Smtps Inet n - y - - - - SMTPD
# SMTPS INET N - Y - - SMTPD
# -o syslog_name = Postfix / SMTPS
# -o smtpd_tls_wrappermode = bai
# -o smtpd_sasl_auth_enable = Bai
# -o smtpd_reject_unlisted_recipient = Ez
# -O smtpd_client_restrizctions = $ mua_client_restRICTIONS
# -O smtpd_helo_restrizctions = $ mua_helo_restrizctions
# -o smtpd_sender_restrizctions = $ mua_sender_restrizctions
# -O smtpd_recipient_restrrizces =
# -o smtpd_relay_restrizctions = baimena_sasl_authenticated, baztertu
# -o miler_macro_daemon_name = jatorria
# 628 inet n - y - - qmqpd
# qmgr unix n - n 300 1 oqmgr
# -o smtp_helo_timeut = 5 -o smtp_connect_timeout = 5
#
# ===========================================================
# Interfazeak postfix ez diren softwarera. Ziurtatu eskuliburua aztertzen
# Postfix ez-softwarearen orriak zer aukera nahi dituen jakiteko.
#
# Honako zerbitzu hauetako askok Postfix Pipe (8) entrega erabiltzen dute
# agente. Ikusi kanala (8) gizon orria $ {hartzailea} buruzko informazioa lortzeko
# eta beste mezu gutunazal aukerak.
# ===========================================================
#
# MailDrop. Ikusi postfix maildrop_readme fitxategia xehetasunetarako.
# Zehaztu ere main.cf: maildrop_destination_recipient_limit = 1
#
#
# ===========================================================
#
# Cyrus bertsio berriek lehendik dagoen "LMTP" Master.CF sarrera erabil dezakete.
#
# Zehaztu Cyrus.Conf-en:
# LMTP CMD = "LMTPD -A" Entzun = "LocalHost: LMTP" Proto = TCP4
#
# Zehaztu Main.cf-en hauetako bat edo gehiago:
# Postbox_transport = LMTP: INET: LocalHost
# virtual_transport = LMTP: INET: LocalHost
#
# ===========================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Zehaztu ere main.cf: cyrus_destination_recipient_limit = 1
#
# Cyrus Unix - n n - - hodi
# Flags = Drx User = Cyrus argv = / cyrus / bin / entregatu -e -r $ {igorle} $ {luzapena} $ {User}
#
# ===========================================================
# Cyrus bidez bidalketaren adibide zaharra.
#
# Zaharra-Cyrus Unix - N N - - Hodia
# banderak = r erabiltzailea = Cyrus argv = / cyrus / bin / entregatu -e -m $ {luzapena} $ {USE
#
# ===========================================================
#
# Ikusi Postfix Uucp_readme fitxategia konfigurazio xehetasunetarako.
#
#
# Kanpoko entrega metodoak.
#
Eta Opendkim konfigurazioa. Opendkim-ek posta elektronikoko zerbitzariak identifikatzen ditu domeinuko teklak dituztenak seguruagoak izan daitezen. Hori gabe, posta ez da sinatu eta baliteke sarrerako ontzian ez izatea.
nano config/etc_default_opendkim
Lerro hauek gehitu:
# Oharra: ondarearen konfigurazio fitxategia da. Opendkim-ek ez du erabiltzen
# Systemd zerbitzua. Mesedez, erabili dagokion konfigurazio parametroak
# /etc/opendkim.conf ordez.
#
# Aurretik, ezarpen lehenetsiak hemen editatuko lituzke eta gero exekutatu
# /lib/opendkim/opendkim.service.Generate sistemaren baliogabetze fitxategiak sortzea
# /etc/systemd/system/opendkim.service.d/override.conf eta
# /etc/tmpfiles.d/opendkim.conf. Hau posible den arren, orain da
# Gomendagarria ezarpenak zuzenean zuzenean doitzea /etc/opendkim.conf-en.
#
# Daemon_opts = ""
# Aldatu / var / spool / postfix / run / opendkim unix socket erabiltzeko
# postfix chroot batean:
# Rundir = / var / spool / postfix / run / opendkim
#
# Ez da konpromisoa ordezko entxufe bat zehazteko
# Kontuan izan ezartzeak Opendkim.Conf-en edozein entxufe baliogabetuko duela
# Lehenespenez:
# Entzun 54321 portuko interfaze guztiak:
# Socket = Izena: 54321
# Entzun Loopback 12345 portuan:
# Socket = Inet: 12345 @ localhost
# Entzun 192.0.2.1ean 12345 portuan:
# Socket = inet: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf
Lerro hauek gehitu:
# default_process_limit = 100
# default_client_limit = 1000
# Lehenetsitako VSZ (memoria tamaina birtuala) Zerbitzu-prozesuetarako muga. Hau da batez ere
# Jan aurretik memoria iragazten duten prozesuak harrapatu eta hiltzeko asmoa du
# Dena.
# default_vsz_limit = 256m
# Saioa hasierako erabiltzaileak saioa hasteko prozesuak erabiltzen ditu. Hau da fidagarriena
# Erabiltzailea DoveCot sisteman. Ez luke ezer sartu behar.
# default_login_user = Dovenull
# Barne-erabiltzailea prozesurik gabeko prozesu bidez erabiltzen da. Bereizi beharko litzateke
# Sartu erabiltzailea, saioa hasteko prozesuak ezin ditu beste prozesurik traba egin.
# default_internal_user = DoveCot
# port = 143
# port = 993
# ssl = bai
# Prozesu berri bat hasi aurretik kudeatzeko konexio kopurua. Normalean
# Balio erabilgarri bakarrak 0 (mugagabeak) edo 1 dira. 1 seguruagoa da, baina 0
# azkarragoa da. <doc / wiki / loginprocess.txt>
# service_count = 1
# Konexio gehiago zain egoteko prozesu kopurua.
# Process_min_avail = 0
# Service_count = 0 ezartzen baduzu, seguruenik hau hazten joan behar duzu.
# vsz_limit = $ default_vsz_limit
# port = 110
# port = 995
# ssl = bai
# port = 587
# Sortu Inet entzulea soilik UNIX socket-ena ezin baduzu erabili
# inet_listener lmtp {
# Saihestu LMTP Internet osorako ikusgai
# helbidea =
# port =
# }}
# Memoria gehienak MMAP () fitxategietara doa. Baliteke hau handitu behar izatea
# Mugatu postontzi erraldoiak badituzu.
# vsz_limit = $ default_vsz_limit
# Max. IMAP prozesu kopurua (konexioak)
# Process_limit = 1024
# Max. POP3 prozesu kopurua (konexioak)
# Process_limit = 1024
# Max. SMTP bidaltzeko prozesu kopurua (konexioak)
# Process_limit = 1024
# auth_socket_path erabiltzaileak erabiltzaile honetara seinalatzen du lehenespenez. Normalean da
# DoveCot-LDA, DoveAdm-ek, seguru asko IMAP prozesua eta abar erabiltzen ditu
# Entxufe honetarako baimen osoak erabiltzaile izenen zerrenda lortzeko gai dira eta
# Lortu guztion erabiltzaileen erabiltzaileen bilaketak.
#
# 0666 modu lehenetsiak edonork konektatzeko aukera ematen du, baina
# userdb bilaketak arrakasta izango du UserDB-k "UID" eremua itzultzen badu soilik
# deitzailearen prozesuaren UIDarekin bat dator. Deitzailearen UID edo GIDarekin bat datorren arren
# Socket-en UID edo GID bilaketak arrakasta izaten du. Beste edozeinek porrota eragiten du.
#
# Erabiltzaile guztiak bilatzeko baimen osoak emateko, ezarri modua
# 0666 baino beste zerbait eta usoak nukleoa betearazten du
# Baimenak (0777 e.g.-k guztiei baimen osoak ematen dizkie).
# Auth Langileen Prozesua lehenetsitako erro gisa exekutatzen da, beraz, sar daiteke
# / etc / itzala. Hori beharrezkoa ez bada, aldatu egin behar da erabiltzailea
# $ default_internal_user.
# user = root
# Dict proxy erabiltzen bada, posta prozesuek bere entxuferako sarbidea izan beharko lukete.
# Adibidez: Mode = 0660, Group = VMail eta Global Mail_access_Groups = VMail
# modua = 0600
# user =
# taldea =
Berriro ere, ziurtatu domeinua fitxategi hauetako guztietan ordezkatzen duzula, FEMMEBABE.COM, hautatu duzun domeinuarekin. Editatu hurrengo fitxategia, DoveCot-en konfigurazioa,
nano config/etc_dovecot_dovecot
Eta lerro hauek gehitu
## DoveCot konfigurazio fitxategia
# Presaka bazaude, ikus http://wiki2.dovecot.org/quickConfiguration
# "Doveconf -n" komandoak aldatutako ezarpenen irteera garbia ematen du. Erabili
# Proiektuaren ordez, DoveCot posta zerrendan argitaratzean kopiatu eta itsatsitako fitxategiak.
# '# 'Pertsonaia eta dena iruzkin gisa tratatu ondoren. Espazio gehigarriak
# eta fitxak alde batera uzten dira. Horietako bat esplizituki erabili nahi baduzu, jarri
# value inside quotes, eg.: key = "# char eta amaierako zurizko espazioa "
# Ezarpen gehienak (baina ez dira) protokolo ezberdinek eta / edo
# Iturburu / helmuga IPak Ezarpenak atalen barruan jarriz, adibidez:
# protokoloa imap {}, tokiko 127.0.0.1 {}, urruneko 10.0.0.0/8 {}
# Balio lehenetsiak ezarpen bakoitzerako erakusten dira, ez da konpromisorik behar
# horiek. Hauek dira, hala ere, ez dira atalik: atalik (adibidez, izen-espazioa {})
# Edo pluginen ezarpenak lehenespenez gehitzen dira, adibide gisa soilik agertzen dira.
# Bideak ere konfigurazioan oinarritutako benetako lehenetsiak dituzten adibideak dira
# Aukerak. Hemen agertzen diren bideak konfiguratzeko dira --prefix = / usr
# --sysconfdir = / etc --localstatedir = / var
# Gaitu instalatutako protokoloak
# Konexioak entzuteko IP edo ostalarien zerrenda bananduta.
# "*" IPv4 interfaze guztiak entzuten ditu, "::" IPv6 interfaze guztiak entzuten ditu.
# Lehenetsitako portuak edozer gauza konplexuagoak zehaztu nahi badituzu,
# Editatu confr.d / master.conf.
# Entzun = * ,:
# Base direktorioa, non exekutatzen diren datuak gordetzeko.
# base_dir = / var / run / dovecot /
# Instantzia honen izena. Instantzia anitzeko konfigurazioko doveadm eta beste komando batzuetan
# erabil dezake -i <instance_name> zein instantzia erabiltzen den hautatzeko (alternatiba bat)
# -c <config_path>). Instantziaren izena DoveCot prozesuetan ere gehitzen da
# PS irteeran.
# instance_name = DoveCot
# Bezeroentzako zorion-mezua.
# login_greeting = Dovecot prest.
# Sareko konfiantzazko sortaren zerrenda bereizita. Hauetatik konexioak
# IPS onartzen dira IP helbideak eta portuak baliogabetzeko (erregistratzeagatik eta
# autentifikazio egiaztapenetarako). disable_plintext_auth ere ez da jaramonik egiten
# Sare hauek. Normalean zure IMAP proxy zerbitzariak zehaztuko dituzu hemen.
# login_trusted_networks =
# Saioa sartutako sarbide-kontrol-zuloen zerrenda (e.g. tcpwrap)
# login_access_sockets =
# Proxy_maybe = bai, proxy helmuga IP horietakoren batekin bat egiten badu, ez egin
# proxying. Hori ez da beharrezkoa normalean, baina erabilgarria izan daiteke helmuga bada
# IP da e.g. karga orekatzailearen IPa.
# auth_proxy_self =
# Erakutsi hitzezko prozesuaren izenburuak (PS-n). Gaur egun erabiltzaile izena eta
# IP helbidea. IMAP prozesuak erabiltzen ari diren ikusteko erabilgarria
# (adibidez, partekatutako postontziak edo UID bera erabiltzen bada kontu anitzetarako).
# verbose_proctitle = Ez
# Prozesu guztiak hil beharko lirateke DoveCot Master Prozesua itzaltzen denean.
# Hori "ez" ezartzeak esan nahi du DoveCot berritu daitekeela
# Lehendik dauden bezeroen konexioak ixteko behartzea (nahiz eta hori ere izan liteke
# arazoa berritzea adostasuna bada. segurtasun konponketa batengatik).
# shutdown_clients = Bai
# Zero ez bada, exekutatu posta komandoak DoveAdm Server-ekin konexio askoren bidez,
# prozesu berean zuzenean exekutatu beharrean.
# usoadm_worker_count = 0
# Unix socket edo ostalaria: DoveAdm Server-era konektatzeko erabiltzen den portua
# usoadm_socket_path = Doveadm-zerbitzaria
# DOVECOT-en gordetzen diren ingurumen aldagaien zerrenda bereizita
# Abiarazi eta bere seme-alaben prozesu guztietara pasatu zen. Eman ere egin dezakezu
# Key = Balio bikoteak ezarpen zehatzak beti ezartzeko.
# import_environment = tz
##
## Hiztegiaren ezarpenak
##
# Hiztegia gakoa = balio zerrendak gordetzeko erabil daiteke. Hau hainbat erabiltzen da
# Pluginak. Hiztegia zuzenean eskura daiteke edo a
# Hiztegi zerbitzaria. Hurrengo Dict Block Maps Dictionary izenak uris
# Zerbitzaria erabiltzen denean. Orduan, URIS formatuan aipatu daitezke
# "Proxy :: <name>".
# quota = mysql: /etc/dovecot/dovecot-dict-sql.conf.ext
# Benetako konfigurazio gehiena behean sartzen da. Fitxategi-izenak dira
# lehenik bere ASCII balioaren arabera ordenatuta eta orden horretan analizatuta. 00-aurrizkiak
# fitxategi-izenetan ordenatzea errazagoa izan dadin nahi da.
# Konfigurazio fitxategia ere saiatu daiteke erroreik eman gabe
# Ez da aurkitu:
# DoveCot-ek sarrera konexio guztiak entzuteko aukera ematen du (IPv4 / IPv6)
Gehitu pasahitza usoaren erabiltzaileari:
nano config/etc_dovecot_passwd
Fitxategiaren lehen zatia, kolonaren aurretik, erabiltzaile izena da. Azken zatia, "YourPassword", zure posta zerbitzariari eman nahi zeniokeen pasahitza adierazten du.
team:{plain}yourpassword
Ondoren, Opendkim Config
nano config/etc_opendkim.conf
Eta gehitu lerro hauek:
# Hau sinatzeko eta egiaztatzeko oinarrizko konfigurazioa da. Erraz egon daiteke
# oinarrizko instalazio batera egokituta. Ikusi Opendkim.Conf (5) eta
# /usr/share/doc/Opendkim/examples/Opendkim.conf.Sample Osatzeko
# Eskuragarri dauden konfigurazio parametroen dokumentazioa.
# Logwy ez
# Sinadura eta egiaztapen parametro arruntak. Debian-en, "From" goiburua da
# gainbegiratuta, askotan ospe sistemek erabiltzen duten nortasun gakoa delako
# eta, beraz, segurtasun sentikorra.
# Domeinua sinatzea, hautatzailea eta gakoa (beharrezkoa da). Adibidez, egin saioa
# "Adibide" domeinuarentzat "2020" hautatzailearekin (2020._Domainkey.example.com),
# /etc/dkimkeys/example.private-n gordetako gako pribatua erabiliz. Granular gehiago
# Konfigurazio aukerak /usr/share/doc/Opendkim/readme.Opendkim-en aurki daitezke.
# Domeinuaren adibidea.com
# 2020 hautatzailea
# Gakoa /etc/dkimkeys/example.private
# Debian-en, Opendkim-ek "Opendkim" erabiltzailea da. 007ko umask bat behar da noiz
# Tokiko entxufe bat erabiliz, entxufe bat sartzen ez den mta erabiliz
# Erabiltzailea (adibidez, postfix). Baliteke "postfix" taldeko erabiltzaileari gehitu behar izatea
# "Opendkim" kasu horretan.
# Entxufea MTA konexiorako (beharrezkoa). MTA chroot kartzela baten barruan badago,
# Entxufea eskuragarri dagoela ziurtatu behar da. Debian-en, postfix-ek exekutatzen du
# Chroot in / var / spool / postfix, beraz, Unix socket bat izan beharko litzateke
# konfiguratuta beheko azken lerroan erakusten den moduan.
# Socket lokala: /run/Opendkim/Opendkim.sock
# Socket Inet: 8891 @ LocalHost
# Socket Inet: 8891
# Egiaztatu beharrean sinatu beharreko ostalariak, lehenetsia 127.0.0.1 da. Ikusi
# Opendkim-en (8) operazio atala informazio gehiagorako.
# Barruko 192.168.0/016, 10.0.0/8, 172.16.0/12
# Konfiantza aingurak DNSSEC gaitzen du. Debian-en, konfiantza ainguraren fitxategia ematen da
# paketearen DNS-root-datuen arabera.
# Izen-markak 127.0.0.1
# MAPA Domeinuak Mezuak sinatzeko erabiltzen diren gakoetara
# Barruko ostalari multzo bat, posta sinatu behar da
nano config/etc_default_opendkim
Eta lerro hauek gehitu
# Oharra: ondarearen konfigurazio fitxategia da. Opendkim-ek ez du erabiltzen
# Systemd zerbitzua. Mesedez, erabili dagokion konfigurazio parametroak
# /etc/opendkim.conf ordez.
#
# Aurretik, ezarpen lehenetsiak hemen editatuko lituzke eta gero exekutatu
# /lib/opendkim/opendkim.service.Generate sistemaren baliogabetze fitxategiak sortzea
# /etc/systemd/system/opendkim.service.d/override.conf eta
# /etc/tmpfiles.d/opendkim.conf. Hau posible den arren, orain da
# Gomendagarria ezarpenak zuzenean zuzenean doitzea /etc/opendkim.conf-en.
#
# Daemon_opts = ""
# Aldatu / var / spool / postfix / run / opendkim unix socket erabiltzeko
# postfix chroot batean:
# Rundir = / var / spool / postfix / run / opendkim
#
# Ez da konpromisoa ordezko entxufe bat zehazteko
# Kontuan izan ezartzeak Opendkim.Conf-en edozein entxufe baliogabetuko duela
# Lehenespenez:
# Entzun 54321 portuko interfaze guztiak:
# Socket = Izena: 54321
# Entzun Loopback 12345 portuan:
# Socket = Inet: 12345 @ localhost
# Entzun 192.0.2.1ean 12345 portuan:
# Socket = inet: 12345@192.0.2.1
Gure postfix zerbitzaria konfiguratzeko prest gaudenean, beheko kodea exekutatuko dugu, domeinu izen egokia kapsulatuta. Hasi gidoia sortuz
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Orain, Nano-n, testu editoreak, editatu fitxategi hau, beraz, zure domeinu izena femmebabe.com-en ordez.
# ! / bin / bash
# Konfigurazio postfix
Orain, exekutatu bukatutako gidoia postfix, Opendkim eta DoveCot konfiguratzeko.
./scripts/postfixsetup
Gidoi honek exekutatu ondoren, kopiatu azken lerroa inprimatu eta itsatsi zure DNS konfigurazioan Sendonly._Domainkey-ren balio gisa. Hau zure domeinua mezu segurua bidaltzean zure domeinua identifikatzeko erabiltzen den Opendkim gakoa da.
Ikaragarria! Egun batzuen buruan, zerbitzaritik posta bidaltzeko gai izan beharko zenuke, dena behar bezala konfiguratuta dagoela.
Zure posta zerbitzariaren DNS konfiguratzen baduzu, 72 ordu baino gutxiago beharko lirateke erregistroak eguneratzeko. Normalean askoz azkarragoa da. Zure zerbitzaria komando hau erabiliz funtzionatzen duen egiaztatu dezakezu, zure posta elektronikoa eman:
echo "test" | mail -s "Test Email" youremail@gmail.com
Dena behar bezala funtzionatzen ari dela badirudi, zure zerbitzariarekin posta elektronikoa bidaltzeko gai izan beharko zenuke. Lanean ez badago, saiatu erregistroak aztertzen akatsa zein izan daitekeen ikusteko.
tail –lines 150 /var/log/mail.log
Honek zerbitzarian bidaltzen duen posta elektronikoari buruzko informazioa eskainiko du eta behar bezala funtzionatzen duen ala ez. Posta elektronikoa zure sarrerako ontzian ere ikusteko gai izan beharko zenuke, ez badago, egiaztatu zure spam karpeta.
Zure ezarpenak zure ezarpenak konfiguratu beharko dituzu zure ezarpenak.py, beraz, zure posta elektronikoko zerbitzariak zure Django aplikazioarekin hitz egin dezake. Lerro hauek gehitu edo ordezkatu zure ezarpenetan
EMAIL_HOST_USER = 'team' # 'Love@mamasheen.com'
Kontuan izan pasahitza lortzeko konfigurazio fitxategia erabiltzen ari garela. Kargatu dezagun fitxategi hau bezalako ezarpenetan, fitxategiaren hasieran:
# Ireki eta kargatzeko konfigurazioa
Sortu dezagun fitxategi hau eta gehitu gako sekretu bat, baita posta pasahitza ere. Gako sekretu bat sortzeko, erabili komando hau, edozein dela ere amaieran nahi duzunarekin:
openssl rand -base64 64
Orain, kopiatu irekitzen duen testua /etc/config.json
sudo nano /etc/config.json
Gehitu hurrengo lerroak zure fitxategian, gako sekretu gisa sortzen duen gakoa.
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
JSON formatua erabiltzeko erraza eta erraza da, gure proiektuan ere erabili nahi ditugun beste teklak deklaratu ditzakegu, eta mantendu bereizten gure proiektuaren direktoriora, beraz, beste erabiltzaileek ezin diete idatzi eta, beraz, ezin dira gure proiektuaren direktoriora bakarrik irakurri. API gakoetarako gomendagarria da, horietatik batzuk hemen baino gehiago erabiliko ditugula.
Zure proiektuaren babeskopia egin nahi duzu, dena gorde daitekeela ziurtatzeko eta gero zure lana berreskuratzeko gai izango zara, zerbitzari bat alokatu nahi ez baduzu ere.
sudo backup
Orain, saiatu HTML posta elektronikoa bidaltzen web zerbitzaritik, emandako komando lerrotik bidalita. Kontsultatu zure erabiltzailearen instantzia maskorrean eta bidali HTML mezu elektroniko bat erabiltzaile horri Django bidez. Aldatu izena kodea, Charlotte, zure erabiltzaile izenarekin.
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()
Lehen komandoak funtzionatzen ez badu, ziurtatu erabiliko duzula
source venv/bin/activate
Eman behar da dena behar bezala konfiguratuta, orain ongietorriko mezu elektronikoa jasoko duzu zure web aplikazioak bidalitako postontzian. Lan ona! Bide luzea etorri zara.
Gehitu nahi nuen, inoiz bezalako proiekturen batean borrokan ari bazara, ez izan zalantzarik erantzunak bilatzeko eta laguntza eskatu. Google, beste bilatzaileen artean, baliabide bikainak dira programazio laguntza bilatzeko. Besterik ez baduzu lortzen ari zaren errorea, eta beste jendeak arazoa nola konpontzen duen ikusi ahal izango duzu. Gainera, ongi etorria da nirekin harremanetan jartzeko, zure hezitzaileak (irakasleak, irakasleak, tutoreak), programaziorako erabilgarri daudenak, edo liburu hau berriro edo beste baliabide batzuk kontsultatzeko, bizitzen ari zaren gaiei irtenbideak aurkitzeko. Ulertzen dut ez dela erraza, baina urrutira irakurri baduzu eta ez duzu inolako koderik idazten, asko ikasten ari zara hutsetik web aplikazioa eraikitzeari buruz. Bizkarrean zeure burua, lan bikaina egiten ari zara.
Eskerrik asko hirugarren edizioko web garapen gida hau irakurtzeko denbora hartzeagatik. Etorkizuneko edizioetan, dokumentuaren hasieran eztabaidatutako adibide garrantzitsuenak sartuko ditut eta software eta hardwarearen garapenaren munduan askoz sakonago murgilduko gara. Egon adi zer etorriko den, eta espero dut software sinestezina nola eraikitzen irakastea. Ikusi hurrengo edizioan!
https://glamgirlx.com/eu/practical-web-based-deep-learning-and
https://glamgirlx.com/eu/practical-web-based-deep-learning-and -
Utzi punta bat bitcoin helbide hau erabiliz: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE