Uutiset - Vierailupaikassa
Pelaa väri -väriä verkossa - ilmainen Colordoku -peli Tämä on ilmainen pelaamaan Color Sudoku (Colordoku) -peli. ***

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa



OstaA

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Kaksi pelaajan väri sudoku verkossa ilmaiseksi Pelaa yhteistyöväriä Sudoku ystävän kanssa ilmaiseksi.Kutsu ystävä Liittyä peliin ***
OstaA

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Käytännöllinen verkkopohjainen syvä oppiminen ja tietoturva esimerkkien mukaan Kolmas painos Charlotte Harper 3. heinäkuuta 2024 Päivitetty/muunnetaan 3. kesäkuuta 2025 Esipuhe: Verkon ohjelmistojen turvallisuusnäkökohdat ovat tärkeä osa minkä tahansa web -kehittäjän suunnitelmaa ja toteuttamista suunnitellessaan luotettavaa, vakaata ja hyödyllistä prototyyppiä käytännöllisiin tarkoituksiin. DOM (Document Object Markep), kun se on toteuttanut HTML, JavaScript ja CSS sekä taustaohjelmistotPython, C/C ++, Java ja Bash, antavat web -kehittäjille vapauden ja voiman luoda monenlaisia projekteja, jotka ilmaisevat luovuutta, tarjoavat helppokäyttöisyyttä ja toiminnallisuutta, kuvaavat nöyryyttä ja luonnetta ja tarjoavat helppokäyttöisyyttä sekä mukavuutta ja tärkeitä palveluita, jotka ovat kaikki houkuttelevia keskimääräiselle Joelle, loppukäyttäjälle tai saada jotain Internetissä, yleensä kosketusohjelmalla. Useimmat ihmiset eivät edes tiedä mistä aloittaa, kun he haluavatUll -verkkosivusto tyhjästä, heillä on taipumus aloittaa toisen henkilön verkkosivustolla ja rakentaa jotain rajoitettua toiminnallisuutta, luotettavuutta, helppokäyttöisyyttä ja erityisesti luovuutta, kun heillä olisi ollut käytettävissä olevia viimeisimpiä tehokkaita työkaluja, jotta ne voidaan rakentaa jotain hyödyllistä tuhlaamatta aikaa painostavia painikkeita, ja etenkin rahan tuhlaaminen kalliiden tilausten maksamiseksi ohjelmistoille, jotka harvat ihmiset halusivat käyttää, kun otetaan huomioon sen rajoitukset helppokäyttöön ja joustavuuteen. Jos sinäVe muutaman minuutin lukeminen tämän kirjan läpi ja oppia mitä haluan opettaa sinulle tai jopa puhua kanssani henkilökohtaisesti tavoitteistasi ja hankkia ohjeita oikeaan suuntaan, ja heitä motivoituvat oppimaan koodaamaan ja kirjoittamaan omaa ohjelmistoa, ottamaan tämä kirja kotiin ja varaa jonkin aikaa oppimaan rakentamaan seuraava vaikutusvaltainen, voimakas, virtaviivainen ja tärkeä verkkosovellus. Minusta: Olen aFTware -kehittäjä, jolla on laaja kokemus C/C ++, Java, Python, HTML, CSS ja JavaScript. Rakennan verkkosivustoja, joita ihmiset haluavat käyttää, haluan käydä ja jopa saada riippuvaisen käyttämään vain oppia, luoda uudelleen ja tappaa aikaa ja mikä tärkeintä, myyn ohjelmistoja. Jos sinulla olisi käsitys siitä, kuinka halusit verkkosivuston näyttävän ja toiminnan, olit halukas tukemaan minua, jotta voin vastata omat tarpeesi vastaamaani omasi ja olet valmis kattamaan verkkosivuston hoitamisen kustannukset, haluaisinSeuraava YouTube, Tiktok, Twitter, Google tai jopa korkean teknologian tietoturvasovellus vain voit käyttää. Sen sijaan, että yrittäisin myydä sinulle aikani, yritän ostaa omasi: Haluan puhua itsesi rakentamisesta (verkkosivusto) jo olemassa olevilla tiedoilla ja opettaa sinulle, mitä sinun on oltava riippumaton ohjelmistokehittäjä, yrittäjä, mikä johtaa menestyvää uraa millä tahansa haluamallasi alalla. Ja anna minun tehdä selvä, koulutus, jonka annan sinulle, on epävirallinen. Voit mennä kouluun jan kaikki tämä muodollisella koulutuksella tai jopa lukenut tämän kirjan koulussa, suorita tehtävät ja vie paljon koulutuksestasi, mutta en laita sinua muodollisesti kuumaan istuimeen ja pyydä sinua suorittamaan tehtävät. En ole professori, voit ajatella minua kuin ystävä, joka haluaa opastaa sinua kohti omaa henkilökohtaista menestystäsi ajavaa uraa. Ja en myöskään myy sinulle menestystä, sinun on ostettava se aikasi. Koodin oppimisessa on jyrkkä oppimiskäyrä ja se oliEmely Rich, älykäs, menestyvä tai jopa yksityiskohtainen tai järjestetty sovelluksen rakentamiseen. Tietokone huolehtii organisaatiosta puolestasi. Sinun on vain jatkettava kokeilun ja virheen kautta, ylläpidettävä keskittymistä ja työskentelemään kovasti tekemäsi suhteen, ja sinulla on erittäin menestyvä ura koko tekemäsi. Kuka olen: Ymmärrän, että viimeinen osa koski enemmän oppimista ja otettavan tapoja tästä kirjasta. Kuka olen tarkalleen? Se on monimutkainen kysymys. Olen epäselvä siitä, että itse,ER -sairauksista, jotka voivat vaikeuttaa minua toisinaan edes koodaamaan tai kirjoittamaan tätä kirjaa, samalla kun esität haasteita sosialisointi- ja identiteettikysymyksistä, jotka vaikeuttavat elämääni itselleni esittelyyn. Lyhyesti sanottuna, jos luet tätä kirjaa, toit sen kotiin, koska selasit sen läpi ja ajattelit, että se oli hyödyllinen tai vaikka luit vain niin pitkälle, olen sinulle samanlainen henkilö, joka haluaa nähdä sinun onnistuneen kaikessa tekemässäsi. OlenItse insinööri, ohjelmistokehittäjä ja opiskelija, ja kirjoitan tämän kirjan muille opiskelijoille, jotka haluavat helpottaa heidän elämäänsä käyttämällä käsikirjaa ohjelmistosta, jota he tarvitsevat elämänsä helpottamalla antamalla esimerkkejä kopioimiseksi, joka sopii yhteen kuin iso palapeli toimivaan, hyödylliseen, suureen, toimivaan, yhtenäiseen ja kiinnostavaan sovellukseen, joka voi ajaa menestystä riippumatta liiketoiminnan linjasta. Suurelta osin tämän teen: Rakennan sovelluksia auttaakseni itseäni ja muita ihmisiä onnistumaan. Olen kirjoittajaL, vaikka tämä on ensimmäinen julkaisuni, jonka aion suorittaa salkuni, jotta voin laittaa salkuni hyödylliseksi asiakirjaksi, ja olen myös taiteilija. Myönnän tämän sinulle, olen eräänlainen outo ihminen. En ole täydellinen, minulla on ollut INS -laki edes johtaen minua jättämään korkeakoulut ja yliopistot ja jättämään valtiot yrittääkseen antaa itselleni nimeä enemmän menestystä. Olen syntymästään nainen, käytän meikkiä, otan valokuvia itsestäni, käytä mekkoja ja muita naisten vaatteita ja pysynScious itsestäni naisena luonteeltaan. Minulla on aiemmin ollut ongelmia muiden ihmisten kanssa, jotka johtavat taisteluihin WebAppien kirjoittamisen ja rakentamisen kanssa, ja pyydän anteeksi, että en ole pystynyt saamaan tätä kirjaa käsissäsi aikaisemmin: tarvitsit tätä. Haluat lukea ja kirjoittaa koodi, joka näyttää minun ja toimii minun kaltaiseni ja tekee saman asian, mutta vielä paremmin, koska jos sinulla on varaa ostaa tätä kirjaa näppäimistön mashoamisen sijasta, kuten minä vain luomaan kirjan itse, pyydät rahaa sille,sinulla on resurssit, joita tarvitset menestyäksesi elämässäsi. Minulla oli kaikenlaisia kysymyksiä perheen kasvaessa, terveystiloissa, lääkäreissä, tiedotusvälineissä ja laissa, ja koodini heijastaa syvästi feminismiä ja naisluontoa jakautuneessa ja turhautuneessa maailmassa. Tämä kirja on kuitenkin asia, josta välitän syvästi, vauva, portfolioni ja toimeentuloni, joten arvostan harkintaa, kun otat tekstin kotiin ja huokosi sen yli oppiaksesi minulta. Pitää kiinniMielestäni en ole täydellinen, tässä kirjassa on virheitä, versioita ja uusia versioita, ja sinun on mietittävä loogisella aivoillasi parhaalla mahdollisella tavalla, jotta saat onnistuneen kokemuksen kirjoittamiseni kanssa. Ymmärrä myös, että tarkoitan sinulle hyvin, vaikka kohtaat haasteita kirjoittaessasi. Ajattele sitä näin: Kun voit vuokrata tietokonejärjestelmän tehdäksesi kaiken, mitä voit kuvitella digitaalisessa tilassa, tallentaa kaikki kohtaamasi tiedot, analysoida ja järjestää sen ja tuleItse asiassa, joudut väistämättä vaikeuksiin nielemälläsi ja jopa julkaisemasi tiedoilla. Kerron teille tämän, koska kohdan samat vaikeudet. Käytä tätä kirjaa omalla vastuulla, työskentele yhteisösi ja yhteisöjen kanssa, jotta voit rakentaa ohjelmistoja turvallisessa ympäristössä, äläkä vie asioita henkilökohtaisesti, kun epäonnistut tai edes onnistut väärällä tavalla: näin pääsin niin pitkälle ja miksi voin tuoda sinulle tämän tekstin ja auttaa sinua menestymättä erottamattaHulluuden Ath, joka jättää minut pilaantuneeksi, revittyyn ja harhautuneena, kun kohtaan tavallisia ongelmia, jotka kaikki tekevät maailmanlaajuisesti verkon paralellistisen globaalin mittakaavan ansiosta, jossa työskentelemme, Internet. Et ehkä ole kovin perehtynyt siihen, kuka olen vain muutamalla sanalla, mutta kehotan teitä lukemaan, tunnet minut, kun jatkat lukemista ja ymmärrät minua rakennettaessa omia projekteja suorittamaan työsi. Tämän kirjan kanssa ei ole kotitehtäviä, kunhan sinunRofessorit tai opettajat eivät määritä sinulle mitään, mutta rohkaisen sinua itse rakentamaan portfolion itse, kun luet, samoin kuin Capstone -projekti, joka esittelee, kuinka voit soveltaa oppimasi. Capstone -projektini on perusta suurimmalle osalle tämän kirjan lukemistasi, koska se sisältää koodin aiemmista projekteistani, koodista, jonka olen luonut ja oppinut kirjoittamaan metodisesti käsin, ja laaja valikoima ideoita ja vinkkejä, jotka ovat auttaneet minua menestymään siihen pisteeseen, että voin pyöriäP Yksinkertainen sovellus, joka on täysin esillä ja näyttää ja käyttäytyy kuin suosittu sovellus, jonka saatat nähdä ystäväsi tai perheesi käyttävän Internetissä, mainostettuna sinulle tai uutisissa. Mikä tämä kirja on: Tämä kirja on esimerkki. Löydät koodin täältä, ohjeet koodin oppimiseen, koodin virheenkorjaus- ja korjausvaiheiden korjaamisen, vianetsintävaiheiden, ohjeiden varmuuskoodin ja tallentamisen, uudelleen käyttöönoton avulla, jos joku rikkoo koodisi, suojata koodisi, ota koodi, rakennaNteraktiiviset verkkosivustot, jotka ovat viihdyttäviä, kiinnostavia ja riippuvuutta aiheuttavia, ja saat käsityksen siitä, kuka olen, miksi tämä on tärkeää, ja kuinka kuvata itseäsi, sovellustasi ja yrityksen imagoa sekä ohjelmistoa, jonka rakennat ehdottoman parhaan valon olevan mahdollisimman houkuttelevin loppukäyttäjille, verkkosivustosi kävijöille. Tässä kirjassa esittelen useita esimerkkejä ohjelmistosuunnittelusta keskittyen verkkoon sekä alustana että turvallisuutena. Aloitamme oppimisenXperience rakentamalla perusprojekti UNIX -kuorella varmuuskopiointi- ja komentosarjojen ominaisuuksilla. Sitten tarkastelemme perusblogisivustoa, päivittää blogiimme valokuva- ja videoominaisuuksilla sekä käyttää näitä ominaisuuksia käyttääksesi tietoturvaratkaisuja ilmaisella ohjelmistolla ja turvaamme palvelimemme käyttämällä liukettavissa olevaa todennusmoduulia (PAM). Tarkastelemme sitten tiedostojen käsittelyä ja käsittelyä, tutkimalla videon muokka...
Käytännöllinen verkkopohjainen syvä oppiminen ja tietoturva esimerkkien mukaan

Käytännöllinen verkkopohjainen syvä oppiminen ja tietoturva esimerkkien mukaan Kolmas painos Charlotte Harper 3. heinäkuuta 2024 Päivitetty/muunnetaan 3. kesäkuuta 2025

Esipuhe:

Verkon ohjelmistojen turvallisuusnäkökohdat ovat tärkeä osa minkä tahansa web -kehittäjän suunnitelmaa ja toteuttamista suunnitellessaan luotettavaa, vakaata ja hyödyllistä prototyyppiä käytännöllisiin tarkoituksiin. DOM (dokumenttiobjektin merkinnät), kun se on toteuttanut HTML: n, JavaScriptin ja CSS: n sekä taustaohjelmiston, joka toteuttaa pythonia, c/c ++, Java ja bash, antavat verkkokehittäjille vapauden ja valta luoda monenlaisia projekteja, jotka ilmaisevat luovuuden, ja tarjoavat helppokäyttöisen käytönja toiminnallisuus, kuvaa nöyryyttä ja luonnetta ja tarjoa helppokäyttöisyyttä sekä mukavuutta ja tärkeitä palveluita, jotka ovat kaikki houkuttelevia keskimääräiselle Joelle, loppukäyttäjälle, joka haluaa tappaa aikaa tai saada jotain tekemistä Internetissä, yleensä kosketusnäytön älypuhelinlaitteessa. Useimmat ihmiset eivät edes tiedä mistä aloittaa, kun he haluavat rakentaa verkkosivuston tyhjästä, heillä on taipumus aloittaa toisen henkilön verkkosivustolla ja rakentaa jotain rajoitettua toiminnallisuutta, luotettavuutta, helppouttaJa etenkin luovuus, kun heillä olisi voinut olla kaikki viimeisimmät tehokkaat työkalut käytettävissään, jotta rakentaa jotain hyödyllistä tuhlaamatta aikaa painikkeita ja etenkin rahan tuhlaaminen kalliiden tilausten maksamiseksi ohjelmistoille, jotka harvat ihmiset halusivat käyttää joka tapauksessa, kun otetaan huomioon sen rajoitukset käytön ja joustavuuden helpottamiseksi. Jos sinulla on muutama minuutti lukea tämä kirja ja oppia, mitä haluan opettaa sinulle, tai edes puhua kanssani henkilökohtaisesti tavoitteistasi ja saada ohjeitaHän on oikeassa suunnassa ja on motivoitunut oppimaan koodaamaan ja kirjoittamaan omat ohjelmistosi, ottamaan tämän kirjan kotiin ja varataan jonkin aikaa oppia rakentamaan seuraavan vaikutusvaltaisen, tehokkaan, virtaviivaisen ja tärkeän verkkosovelluksen, verkkosivuston, joka on kaikki sinulle ja tekee juuri haluamasi ja vastaa tarpeitasi tarpeitasi

Minusta: Olen ohjelmistokehittäjä, jolla on laaja kokemus C/C ++, Java, Python, HTML, CSS ja JavaScript. Rakennan verkkosivustoja, joita ihmiset haluavat käyttää, haluan käydä ja jopa saada riippuvaisen käyttämään vain oppia, luoda uudelleen ja tappaa aikaa ja mikä tärkeintä, myyn ohjelmistoja. Jos sinulla olisi idea siitä, kuinka halusit verkkosivuston näyttävän ja toiminnan, olit valmis tukemaan minua, jotta voin vastata omat tarpeesi vastaamaani omasi ja olet valmis kattamaan verkkosivuston johtamisen kustannuksetAinoa rakentaa sinulle seuraavan YouTube, Tiktok, Twitter, Google tai jopa korkean teknologian tietoturvasovellus, vain voit käyttää. Sen sijaan, että yrittäisin myydä sinulle aikani, yritän ostaa omasi: Haluan puhua itsesi rakentamisesta (verkkosivusto) jo olemassa olevilla tiedoilla ja opettaa sinulle, mitä sinun on oltava riippumaton ohjelmistokehittäjä, yrittäjä, mikä johtaa menestyvää uraa millä tahansa haluamallasi alalla. Ja anna minun tehdä selvä, koulutus, jonka annan sinulle, on epävirallinen. SinäMene kouluun ja opi kaikki tämä muodollisella koulutuksella tai jopa lue tämä kirja koulussa, suorita tehtävät ja vie paljon koulutuksestasi, mutta en laita sinua muodollisesti kuumaan istuimeen ja pyydä sinua suorittamaan tehtävät. En ole professori, voit ajatella minua kuin ystävä, joka haluaa opastaa sinua kohti omaa henkilökohtaista menestystäsi ajavaa uraa. Ja en myöskään myy sinulle menestystä, sinun on ostettava se aikasi. Koodin oppiminen on jyrkkäOppimiskäyrä eikä ollut koskaan helppoa tai edes piti olla. Sinun on työskenneltävä niin kovasti kuin mahdollista ja jatkettava epäonnistumista ja yritettävä uudelleen, vaikka olet turhautunut oppiaksesi ja rakentaaksesi sovelluksia itse. Se on itse koodin luonteessa. Koodia johtaa kääntäjä, joka on suunniteltu antamaan ohjelmoijan virheilmoitukset, ja nämä opettavat sinulle, kuinka koodata, vaikka kopioisit vain virhettä hakukoneesi ja luet muiden ihmisten esimerkkejä. Ja minun on sanottava, sinä'Ei tarvitse olla erittäin rikas, älykäs, menestyvä tai jopa yksityiskohtainen tai järjestetty sovelluksen rakentamiseen. Tietokone huolehtii organisaatiosta puolestasi. Sinun on vain jatkettava kokeilun ja virheen kautta, ylläpitää keskittymistä ja työskentelemään kovasti tekemäsi suhteen, ja sinulla on erittäin menestyvä ura kokonaan mitä sinä

Kuka olen: Ymmärrän, että viimeinen osa koski enemmän oppimista ja otettavan tapoja tästä kirjasta. Kuka olen tarkalleen? Se on monimutkainen kysymys. Olen epäselvä siitä, että kärsin sairauksista, jotka voivat vaikeuttaa minua edes koodaamaan tai kirjoittamaan tätä kirjaa toisinaan esittäen samalla haasteita sosialisointi- ja identiteettikysymyksillä, jotka vaikeuttavat elämääni, kun kyse on esittelystä itseni. Lyhyesti sanottuna, jos luet tätä kirjaa, toit sen kotiin, koskaSeloit sen läpi ja ajattelit, että se oli hyödyllinen tai vaikka luit vain niin pitkälle, olen sinulle samanlainen henkilö, joka haluaa nähdä sinun menestyvän kaikessa mitä teet. Olen itse insinööri, ohjelmistokehittäjä ja opiskelija, ja kirjoitan tämän kirjan muille opiskelijoille, jotka haluavat tehdä heidän elämänsä helpommaksi pitämällä käsikirjan ohjelmistosta, jota he tarvitsevat elämänsä helpottamalla antamalla esimerkkejä kopioidakseen, joka sopii yhteen suureen palapeliin toimivaan, hyödylliseen, suureen, suureen, suureen,NCTIAL, yhtenäinen ja kiinnostava sovellus, joka voi ajaa menestystä liiketoimintalinjasta riippumatta. Suurelta osin tämän teen: Rakennan sovelluksia auttaakseni itseäni ja muita ihmisiä onnistumaan. Olen myös kirjailija, vaikka tämä on ensimmäinen julkaisuni, jonka aion suorittaa, jotta voitaisin salkuni yhteen hyödylliseksi asiakirjaksi, ja olen myös taiteilija. Myönnän tämän sinulle, olen eräänlainen outo ihminen. En ole täydellinen, olen ollut suorittanut lain mukaan jopa johtaen minut poistumaan korkeakouluista jaIties ja jätä valtiot yrittääkseen tehdä nimen itselleni enemmän menestyksellä. Olen syntymästään nainen, käytän meikkiä, otan valokuvia itsestäni, pukeudun mekkoihin ja muihin naisten vaatteisiin ja pysyn tietoisena itsestäni naisena luonteeltaan. Minulla on aiemmin ollut ongelmia muiden ihmisten kanssa, jotka johtavat taisteluihin WebAppien kirjoittamisen ja rakentamisen kanssa, ja pyydän anteeksi, että en ole pystynyt saamaan tätä kirjaa käsissäsi aikaisemmin: tarvitsit tätä. Haluat lukea ja kirjoittaa koodi, joka näyttää minunIke minun ja tekee saman asian, mutta vielä paremmin, koska jos sinulla on varaa ostaa tämä kirja sen sijaan, että sosettaisiin näppäimistösi kuten minä vain luodaksesi kirjan itse, joka kysyy sitä rahaa, sinulla on resurssit, jotka sinun on menestyä elämässäsi. Minulla oli kaikenlaisia kysymyksiä perheen kasvaessa, terveystiloissa, lääkäreissä, tiedotusvälineissä ja laissa, ja koodini heijastaa syvästi feminismiä ja naisluontoa jakautuneessa ja turhautuneessa maailmassa. Tämä kirja on kuitenkin jotain minäEply välittää vauvastani, portfoliostani ja toimeentulostani, joten arvostan harkintaa, kun otat tekstin kotiin ja huokoset huolellisesti sen yli oppiaksesi minulta. Muista, että en ole täydellinen, tässä kirjassa on virheitä, tarkistuksia ja uusia painikkeita, ja sinun on mietittävä loogisella aivoillasi parhaalla mahdollisella tavalla, jotta saat onnistuneen kokemuksen kirjoituksessani. Ymmärrä myös, että tarkoitan sinulle hyvin, vaikka kohtaat haasteita kirjoittaessasi. Miettiä sitäKE tämä: Kun voit vuokrata tietokonejärjestelmän tekemään kaiken, mitä voit kuvitella digitaalisessa tilassa, tallentaa kaikki kohtaamasi tiedot, analysoida ja järjestää sitä ja ymmärtää sitä, kohtaa väistämättä vaikeuksia nielemälläsi ja jopa julkaisemasi tiedoilla. Kerron teille tämän, koska kohdan samat vaikeudet. Käytä tätä kirjaa omalla vastuulla, työskentele yhteisösi ja yhteisöjen kanssa, jotta voit rakentaa ohjelmistoja turvallisessa ympäristössä,Älä ota asioita henkilökohtaisesti, kun epäonnistut tai edes onnistut väärällä tavalla: näin pääsin niin pitkälle, ja miksi voin tuoda sinulle tämän tekstin ja auttaa sinua menestymättä erottamatta hulluuden polulle, joka jättää minut pilaantuneeksi, revittyyn ja kuluneena, kun tapasin tavanomaisia ongelmia, joita kaikki tekevät globaalissa mittakaavassa verkoston paralellistisen globaalin mittakaavan ansiosta, Internet. Et ehkä ole kovin perehtynyt siihen, kuka olen vain muutamalla sanalla, mutta kannustan sinuaLue, joudut tuntemaan minut, kun jatkat lukemista ja ymmärrät minua samalla kun rakennat omia projektejasi työn suorittamiseksi. Tämän kirjan kanssa ei ole kotitehtäviä, kunhan professorit tai opettajat eivät anna sinulle mitään, mutta kehotan sinua rakentamaan itse salkun projektia, kun luet, samoin kuin Capstone -projekti, joka esittelee kuinka voit soveltaa oppimasi. Capstone -projektini on perusta suurimmalle osalle mitä luet tässä kirjassa, niin

Mikä tämä kirja on: Tämä kirja on esimerkki. You can find code here, instructions for how to learn to code, information on debugging code and fixing errors, troubleshooting steps, instructions on how to back up and save your code, re-deploy if anyone breaks your code, secure your code, deploy your code, build interactive websites that are entertaining, engaging, and addictive, and you will get a sense of who I am, why this is important, and how to portray yourself, your app andYrityskuva, samoin kuin ohjelmisto, jonka rakennat ehdottoman parhaan valon, olla mahdollisimman houkuttelevin loppukäyttäjille, verkkosivustosi kävijöille. Tässä kirjassa esittelen useita esimerkkejä ohjelmistosuunnittelusta keskittyen verkkoon sekä alustana että turvallisuutena. Aloitamme oppimiskokemuksen rakentamalla perusprojektin UNIX -kuoren avulla varmuuskopiointi- ja komentosarjojen ominaisuuksilla. Sitten tutkimme perusblogisi verkkosivustoa, päivittää blogimme valokuvalla ja videollaS samoin kuin käyttää näitä ominaisuuksia turvallisuusratkaisujen käyttämiseen ilmaisen ohjelmiston avulla ja turvata palvelimemme käyttämällä Ploggable -todennusmoduulia (PAM). Tarkastelemme sitten tiedostojen käsittelyä ja käsittelyä, tutkimalla videon muokkaamista, äänen lahjoitusta, viivakoodin skannausta ja optisen hahmon tunnistusta muun muassa. Matkan varrella tutkimme sovellusliittymiä, jotka auttavat meitä tekemään ohjelmistostamme hyödyllisempiä ja turvallisempia ilmaisia ja maksettuja vaihtoehtoja. Matkan varrella tutkimme fyysistä turvallisuutta jaMilitanttityökalut, kuten ampuma -aseet ja ammusten suunnittelu ja valmistus, mukaan lukien tynnyrin ja toistimien suunnittelu, torni- ja droonisuunnittelu sekä muut päämiehet, jotka integroitumme nykyisen verkon ohjelmistoihimme ohjelmistomme suojaamiseksi ja itsepuolustuksen ja resillin osoittamiseksi. Pidämme taukoja pelien, 2D- ja 3D -renderointimoottorien rakentamiseen ja työskentelemme sulautettujen laitteiden kanssa tapaustutkimusesimerkkejä perusulotteisten renderöintiohjelmistojen ja elektronisen värähtelyjen suhteenr valettu silikonikumiin. Matkan varrella käytämme myös jo saatavilla olevia koneoppimisratkaisuja ohjelmistomme parantamiseksi paremmin. Käytämme myös verkossa käytettävissä olevia osaketyökaluja prosessin virtaviivaistamiseksi ja kiinnittämiseksi. Tämä kirja on opas menestyksellesi verkkosovelluksen rakentamisessa ja sen integroinnissa tietokone- ja sulautettujen mekaanisten järjestelmien ammattimaiseen verkostoon ja kaiken kaikkiaan opas ohjelmistojen ja sulautettujen laitteiden rakentamiseen eipohjatiedot tai aikaisempi kokemus.

Mitä tämä kirja ei ole: Jos todella haluat verkkosivuston, voit vain perustaa yksinkertaisen myymälän ja myydä tarvitsemasi, postita blogi, lähettää valokuvia tai videoita tai muuten kirjoittamatta koskaan yhtä koodirinjaa. Tämä kirja ei ole se. Tämä kirja opettaa sinulle, kuinka rakentaa ohjelmistoja, jotka ovat hyödyllisempiä, täysin esillä olevia, toimivia ja turvallisia kuin mikään jo löytämäsi ohjelmisto, koska se ottaa käyttöön viimeisimmän prototyyppien ohjelmiston, voi olla kallista käyttää mittakaavassa vanhempia yrityksiäToimi ja ei vedota taaksepäin, mutkikkaat yritykset, jotka on perustettu ansaitsemaan rahaa ihmisille, jotka eivät oikeastaan tee mitään. Jos seuraat tätä kirjaa tarkkaan, sinun kannattaa kirjoittaa koodia, tutkimuskoodia, rakentaa omia sovelluksiasi ja ansaitset rahaa tekemästäsi. Annan rahaa tästä kirjasta, jopa varhaisessa vaiheessa, koska se sisältää tietoja, joita ihmiset tarvitsevat ja haluan lukea, ja ostavat jo, kun he ostavat tai käyttävät sovelluksiani. Tämä kirja ei rakenna sovellusta sinulle, mutta se osoittaau oikeaan suuntaan ja aseta sinut tarvitsemillasi työkaluilla sekä taitoja ja vinkkejä, jotka helpottavat omaa menestystäsi Web -ohjelmistojen rakentamisessa. Jokaisella koodirivillä, joka sinun on kirjoitettava esimerkkinä, valmis yhdistämään ohjelmistoihin, jotka sinä ja kannattajat, vieraat, asiakaskunta, ystävät, perheet, kävijöt, urakoitsijat ja Internetin ihmiset haluavat käyttää ja käyttää ja käyttää

Mitä opit: Tämä kirja opettaa sinulle, kuinka rakentaa ja myydä ohjelmistoja, todella toimivia, hyödyllisiä ohjelmistoja, mediatallennusta, tietoturvaominaisuuksia, kuten kasvojentunnistusta, koneiden luettavissa olevaa vyöhykkeen viivakoodin skannausta, Web -sovellusliittymiä videon ja valokuvien todentamiseksi, tallentamiseksi ja tekemään viestejä, kuten Bluetooth ja lähellä kenttä (NFC). Tämä kirja opettaa sinulle, kuinka käyttää verkkoa, keskittyen Debian Linuxiin, kuinka rakentaa bash -koodi asentaaksesi ja varmuuskopiointiaOhjelmisto saumattoman, automaattisen tuulen, kuinka rakentaa Python -koodi taustaohjelmaan, joka palvelee dynaamisia viestejä, tyyliä hienosti käyttämällä CSS -tyylejä bootstrapilla, ota käyttäjän kirjautumisen ja interaktiivisuuden avulla verkottujen laitteiden avulla, rakenna interaktiivista mediaa ja verkkoa muilla verkkosivustoilla, jotka tarjoavat tekstiviestejä varmennusta varten tai muihin tarkoituksiin, ID -skannaukseen, kuva- ja videotodistukseen.Hronous -tehtävät ja paljon muuta. Opit kuinka rakentaa omat Bluetooth -laitteet paristojen, laturien, mikrokontrollerien, piirien, moottorien ja anturien kanssa, käyttämällä juotos-, lanka- ja 3D -painettuja sekä valettuja materiaaleja. Esittelen 3D -suunnittelupäälliköitä, joita käytetään lisäaineiden valmistukseen ja työkaluihin ja suulakkeisiin, joten pystyt valmistamaan omat sulautetut laitteistot, joissa on integroituja akkuja, latureita, elektronisia piirejä ja toiminnallisia lähtöjä. ja verrata ne Bluetoothilla jae web. Erityisesti tutkimme kahta tapaustutkimusta, värähtelevää hierontalaitetta ja kotitekoista ampuma -aseita, jotka molemmat ovat ohjelmoituja OpenSCAD: ssä, joka on saatavana graafisena rajapinta- tai komentorivi -apuohjelmana ja joka voidaan integroida verkkoon nopeampien tulosten saavuttamiseksi. Opit kuinka rakentaa ja ottaa käyttöön verkkosivuston alusta alkaen ilman aikaisempaa kokemusta, tehdä siitä toimiva, turvallinen, kaunis, hyödyllinen ja mikä tärkeintä käytännöllinen. Opit kuinka käyttää koneoppimista ja tietokoneen visiotaSivusto suojattu ja käytännöllisempi, nauhoita videoita ja ääntä verkkosivustoltasi, lahjoita äänesi, tee musiikkia ja moduloi ääntä hyödyllisten näytteiden luomiseksi ja kuinka murtautua melu hyödyntämällä muita verkkosivustoja rakentamaan parhaan mahdollisen verkkosivustoverkoston, jonka voit linkittää suoraan omaan, jotta voit jakaa kaikki hyödylliset tiedot, jotka sinun on tarjottava, ja vielä tärkeämpää tuodaksesi ihmisiä ohjelmistoon ja yritykseen. Tämä kirja keskittyy eniten mediaan, turvallisuuteen ja koneeseenRning, jotka ovat kolme suurta komponenttia, jotka auttavat sinua rakentamaan hyödyllisiä ohjelmistoja verkkoon kiinnittämällä oikeat käyttäjät ja irtaamalla väärät tavalla, joka on realistinen, käytännöllinen, käsissä ja kiinnostava samalla automaattinen ja tukeva. Tämä kirja opettaa UNIX: ää, erityisesti Debian (Ubuntu), Bash Shell, Python, HTML, CSS, JavaScript ja useita hyödyllisiä ohjelmistopaketteja Pythonille, kuten pyyntöihin, sekä hyödyllisiä bash -ohjelmistoja, kuten Git ja FFMPEG. Opetan myös kuinkaSuorittaa kryptovaluutta automaattisesti ja suorittaa maksuja kryptovaluutossa tai tavallisista maksukorteista jopa maksamalla kävijöillesi osaa tuloistasi, jos päätät tehdä niin. Opetan sinulle, kuinka ansaita rahaa verkkosivustoltasi myös mainonnan avulla, kuinka valmistaa sovelluksesi hakukoneisiin ja tehdä siitä nopeasti, sijoittuu ensimmäiseen sijoitukseen siihen, mitä asiakkaasi etsii sinua, ja sijoittamalla mahdollisimman moniin yleisiin hakuihin. Opetan sinulle, kuinka myydäftware, mainosta se, vedota asiakkaille, jotka etsivät palveluitasi, ja tee itsellesi nimi Internetissä jo olemassa olevien keinojen kautta, ovat edullisia ja toimivat hyvin. Opetan sinulle, kuinka tallentaa tietosiParas mahdollinen tapa. Opit minulta myös muutamia vinkkejä ja temppuja, koodausvinkkejä, käytännöllistä turhamaisuutta, kuten meikkiä ja valokuvausta, mallintamista ja näyttelemistä sekä muuta, mikä on tärkeää kuvata itseäsi ja yrityksesi parhaan mahdollisen valon avulla käyttämällä kaikkia käytettävissä olevia työkaluja jakellessasi niin paljon sisältöä kuin tarvitset terveellisissä tasoissa, jotta ohjelmistosi saadaan hedelmällisyyteen ilman vaivaa, työtä tai rahaa kuin on välttämätöntä. Tätä kirjaa kutsutaanKäytännöllinen verkkopohjainen syvä oppiminen ja tietoturva esimerkillä "Syy: Se käsittelee koodin oppimista, erityisesti verkkoa varten, erityisesti keskittyen turvallisuuteen, käytännöllisestä näkökulmasta, esimerkkejä työkoodista, joka palvelee tekstissä hahmoteltuja käytännön tarkoituksia. Tämän tekstin oppimiskomponentti kattaa myös koneoppimisen, koodin ja videoiden muokkaamisen.T, resoluution parannus, kuvan kuvateksti ja muut tehtävät, kuten kuvista saatujen ennustemittarit, kuten kuvan luonne aitona, tietokoneen käännettynä kuvana tai optisena kopiona (kuva kuvan tai painettujen valokuvien). Koneoppiminen on erittäin tärkeää, kun kyse on verkkoturvallisuuden ja ohjelmistojen turvallisuudesta, koska se voi muokata tehtäviä, jotka olivat muuten mahdotonta. Tietokoneesi saattaa kirjautua sisään passkoodilla, mutta se voi olla turvallisempaa käyttää, jos se kirjataan sinut sisääno Rakentaa moitteettomasti turvallista ohjelmistoa on jonkin verran käsitystä siitä, mitä tämä tarkoittaa. Ohjelmisto on luonnostaan epävarma, koska sen käyttämämme laitteet ja tilit eivät ole aina käytettävissäsi, ne voivat olla kaikkien ohjelmistojen huonon aikomusten käsissä, ja siksi ne voivat aiheuttaa riskin itse ohjelmistolle. Tämä on jotain tämän kirjan painopiste. Verkottu tietokone on oletuksena kiinnitetty pitkällä avainmerkillä, soittamalla ja SSH: lla tai suojatulla kuoriavaimella, ja se on muuten parhaiten suojattuEvices ja pystyy lukemaan ja kirjoittamaan lähellä kenttätransponder -tunnisteita, edullisia avainkortteja, fobeja, tarroja, renkaita ja jopa siruimplantteja, joilla on ainutlaatuiset sarjanumerot, jotka voidaan lukea ja kirjoittaa verkkosivustoon sidotun web -palvelimen luomien ja validoimien tietojen kanssa. Kaikkien käytettävissäsi olevien työkalujen käyttäminen tällä kirjalla varustat itsesi tietoon turvallisen verkkosivuston rakentamiseksi, ja kaiken kaikkiaan suojattu verkkojärjestelmä, joka toimii sinulle, tekee tarjouksesi ja näyttää ja tuntuu

Mistä aloittaa: Olet tervetullut ohittamaan osion ohi aloitan tämän kirjan tai millä tahansa osiolla tarkalle tarvitsemillesi koodille, varsinkin jos sinulla on kokemusta koodauksesta ennen edellä mainituista työkaluista, kuvaan yksityiskohtaisesti tässä kirjassa sekä dokumentoimalla käyttötapauksia ja sen käytännön esimerkkejä. Jos sinulla ei ole kokemusta koodin kirjoittamisesta, suosittelen,oikea sinulle. Jos tämä kirja ei ole sinulle oikea, harkitse sen lahjoittamista ystävälle tai sukulaiselle, joka saattaa olla kiinnostunut oppimaan itse verkkosekinaisuutta, ja harkitse jopa sen lainaamista ja oppimista heiltä täyttämään aukot, joissa epäonnistuin sinua opettajana tai muut opettajat tekivät ennen minua. Aloita missä haluat, jokainen tämän kirjan osa on hyödyllinen, jos aiot rakentaa hyödyllisen sovelluksen, ja harkitse, että parhaat sovellukset on rakennettu loppukäyttäjän mielessä: Tunne asiakkaasi. NytTunne minut, tiedät tämän kirjan ja olet valmis aloittamaan. Aloita tartu tietokoneeseen (jopa halvin kannettava tietokone laatikkomyymälästä, Amazon tai vanha työpöytä toimii ja aseta se tavalla, joka toimii

Kuinka lukea tämä kirja: Teksti korostettu, tarkoittaa, että teksti kuuluu komentokehotteeseen, jossa kirjoitat suorittamasi koodin. Komentokehotus on voimakkaasti näppäimistön keskittynyt ja vaatii vain vähän napsauttamista, työnkulun nopeuttamista ja asioiden helpottamista.

Aloittaminen: Sukellamme sisään. Aloitamme rakennuskoodilla paikalliselle koneelle ja aloitamme rakentamatta Internetiin kytkettyä verkkosivustoa. Tämä on turvallisempaa aloittaa, ei maksa mitään, ja se on sinulle helppoa. Käyttöjärjestelmästäsi riippuen bash -kuoreen pääsy on hiukan erilainen. Mac OS: lle suosittelen virtuaalikoneen asentamista tässä vaiheessa, koska saat eniten yhteensopivuutta virtuaalikoneen kanssa. Eri palveluntarjoajat, kuten virtualbox ja paralells, voivat ajaa aVirtuaalikone sinulle, vaikka Ubuntu on myös mahdollista asentaa suoraan koneeseen, jos haluat käyttää alkuperäistä ympäristöä, jota suositellaan nopean, virtaviivaisen kokemuksen luomiseksi. Jos käytät Linuxia tai Windowsia, joita suosittelen, projektin luominen pitäisi olla melko helppoa. Avaa päätelaite, säädä mitoitus kun näet sopivuuden ja aloita seuraavan vaiheen 2. Jos käytät Windowsia, seuraa vaihetta

Vaihe 1: - Vain Windows -käyttäjät Windowsissa avaa komentokehote järjestelmänvalvojana ja kirjoita WSL –Astall

Vaihe 2: - Jatka täältä tai ohita vaihe 1 tähän, jos et käytä Windowsia Aloita luomalla projektin avoimessa päätelaitteessa (käyttöjärjestelmästäsi riippuen, nimeltään Ubuntu Windowsissa, päätelaite Macissa tai Linuxissa tai samanlainen nimi). Teemme tämän Mkdir -komennolla, joka luo hakemiston. Jos sinun on luotava hakemisto projektin tallentamiseksi, jota suositellaan, käytä CD -komentoa vaihtamaan hakemistoon ja ja ja ja

CD/POATE/TO/DIRECTORY - Polku on kansiot (tiedostot), jotka edeltävät kohdehakemistoasi, oletuspolusi on ~ tai/koti/käyttäjänimi (missä käyttäjänimi on käyttäjänimesi). Kirjoita CD tai CD ~ vaihtamaan oletushakemistoon Mkdir -esimerkki - korvaa "esimerkki" hakemiston nimellä

Nyt sinulla on toimiva hakemisto projektillesi. Koska on niin tärkeää, että tämä hakemisto on tallennettu, jos sinun on vaihdettava toiseen koneeseen tai asennettava kirjoittamasi koodi niin, että se on valmis verkkoon, rakennamme skriptin varmuuskopioidaksesi hakemistosi muutaman seuraavan vaiheen aikana. Mutta komentosarjan rakentaminen vie vähän koodia, ja koodi on automatisoitava mahdollisimman hyödyllinen. Joten rakennetaan käsikirjoitus ensin skriptien rakentamiseksi. Aloitetaan luomalla komentosarja ja tekemällä siitä suoritettava.Käytämme tätä sudoa, chmodia ja kosketusta ja soitamme käsikirjoitukseen

sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript

Nyt olemme luoneet komentosarjan, tehneet siitä suoritettavan ja olemme valmiita muokkaamaan sitä. Nano on tekstieditori, jonka avulla voit muokata tekstiä napsauttamatta, mikä on paljon helpompaa kuin graafisen käyttöliittymän käyttäminen. Voit muokata tiedostoa nanolla käyttämällä Nanoa ja sitten polkua tiedostoon. Komentosarjan tekemisen tekemiseksi se on melko samanlainen kuin käsikirjoituksen tekeminen. Käytämme samaa koodia kuin yllä, korvaamalla komentosarjan nimen "AScript" argumenttiparametrilla, 1 dollaria. Tämän avulla voimme soittaaKomentosarja kirjoittamalla yksinkertaisesti sudo -lehden sanomalehden, jolloin voimme luoda uuden komentosarjan korvaamalla "sanomalehti" käsikirjoituksesi nimellä. Nanon koodin pitäisi näyttää

sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1

Ja nanon sulkemiseksi voimme pitää ohjausnäppäintä painettuna ja paina X, sitten y tarkistaa, että tallennamme tiedostoa ja saavuttaaksesi palautuksen. Nyt sen sijaan, että kirjoitamme nämä kolme komentoa muokataksesi skriptiä, pystymme kirjoittamaan sudo -konferenssin muokkaamaan komentosarjaa uudelleen. Tämä toimii! Ja mikä tahansa uusi komentosarja voidaan suorittaa helposti kutsumalla sitä kuoreen. Tallennataan nyt työmme: Kirjoitamme varmuuskopiokomentosarja, jotta voit tallentaa uuden komentosarjan ja varmuuskopioida sen sitten projektihakemistoon, samalla kun varmuuskopioidaan varmuuskopiot.

sudo ascript backup

Nyt Nanossa:

sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/

Missä/polku/hakemisto/hakemisto on polku projektiin, jonka olet luonut MKDIR: llä. Myöhemmin opimme kuinka kopioida tällaiset toistuvat polut silmukka- ja luettelolla, joka on vähemmän koodi, mutta nyt pidetään se yksinkertaisena ja meillä on muutama rivi. Suorita tämä komentosarja ja varmuuskopioi koodisi tallentamalla tiedosto nanoon ohjauksella+x, y ja paluu ja kirjoita alla

backup

Jos sinua pyydetään lainkaan salasanaa luettaessa tätä kirjaa ja seuraavan kuoressa, kirjoita käyttäjän salasana oikein, sinulla on kolme yritystä, ennen kuin sinun on suoritettava komento uudelleen. Voit käyttää ylös ja alas nuolia komentojen uudelleenkäyttöön ja muokata niitä, jos sinun on suoritettava mitä tahansa kahdesti. Yksinkertainen painamalla ylös ja alas ajoittain valitaksesi komento, ennen kuin muokkaat komennon oikealla, vasemmalla nuolella ja poista avain sekä näppäimistö ja käyttämällä sitä palautuksella.

Onnittelut! Onnistuit luomaan mahtavan varmuuskopion komentosarjan, joka varmuuskopioi kaksi tärkeätä kuorikomentosarjaa työhakemistoon. Saatamme siirtää asioita myöhemmin, kun projekti kasvaa, mutta tämä toimii nyt. Siirrytään pilveen varmuuskopiointiin, käytämme GitHubia tähän (vaikka varmuuskopiointiin on olemassa lukuisia muita Git -ratkaisuja, ne ovat kaikki samoja.) Git on verision Control -ohjelmisto, jonka avulla voit varmuuskopioida ohjelmistosi, kun teet ne palvelimelle, samalla kun myösVoit ladata kokonaiset kopiot ohjelmistostasi salasanan tai avaimen takana. Se on tärkeä asia ohjelmiston tallentamisessa, varsinkin kun siirrymme suojattuihin Linux -ilmentymiin, jotka joskus rikkovat, kun yksi koodirivi epäonnistuu, jättäen sinut lukitsemaan, kun koodisi ei ehkä ole varmuuskopiota, jos et saa mahdollisuutta varmuuskopioida sitä automaattisesti, mitä me aiomme

Jos et vielä käytä Ubuntu -virtuaalikonetta tässä vaiheessa, suosittelen tässä vaiheessa Ubuntu -virtuaalikoneen käyttämistä, koska se tekee elämästäsi helpompaa asennettaessa kaikki tarvittavat paketit toimivasi verkkosivuston rakentamiseksi ja tietokoneellesi. Siirrämme koodin verkkopalvelimeen lähitulevaisuudessa, mutta haluamme varmistaa, että verkkopalvelimen takana on ainakin muutama tietoturvakerros, jotka vastustavat tietojenkalastelua ja käyttävät aLinux -pakettien lukumäärä tehdäkseen tämän. Jos haluat silti käyttää Mac -käyttöjärjestelmää, olet tervetullut etsimään ja asentamaan tarvittavat paketit verkossa, mutta jokaiselle paketille tai sarjalle ei ehkä ole vaihtoehtoja

Lisäämme muutaman komennon sitoutuaksesi työmme varmuuskopiointikirjoituksen kanssa suorittamalla komento Sudo -script -varmuuskopio.

# Niin

Säästä uudelleen hallitse X.

Nyt meidän on tehtävä yksi aika kokoonpano tähän projektiin. Koska se on pian GIT -projekti, meidän ei tarvitse kirjoittaa jokaista komentoa joka kerta, kun otat käyttöön git -arkistosta, mutta saamme tämän ripustaessamme, kun kirjoitamme käyttöönottokriptejämme. Aluksi varmistamme, että olemme oikeassa hakemistossa ja alustamme GIT -arkiston ja luodaan SSH -avaimet.

cd /path/to/directory
git init
git branch -m master
ssh-keygen

Kun kirjoitamme SSH-Keygen, uusi avain tulisi tallentaa kotikansioon nimeltä .SSH. Sitä kutsutaan id_rsa.pub. Löydämme tämä avain ja kopioidaan se. Nähdä se,

cd ~
cat .ssh/id_rsa.pub

Kopioi viimeisen komennon palauttama teksti ja luo tili GIT -palveluntarjoajallasi (ihannetapauksessa GitHub) ennen SSH -avaimen lisäämistä tiliisi. Kun sinulla on tili, napsauta oikeaa ylävalikkoa ja kirjoita asetukset, ennen kuin lisäät SSH -näppäimesi SSH- ja GPG -avaimiin valikkoon Access -alla. Valitse Lisää SSH -avain ja lisää omasi liittämällä se sisään ja antamalla sille otsikko, ennen kuin pelastat ja palautat GitHubiin uuden arkiston luomiseksi. Tämä on samanlainen muille GIT -palveluntarjoajille, tarvitsetlukea heidän dokumentaationsa. Anna arkistossa uudessa arkiston kokoonpanossa kuvaileva nimi ja päätä, haluatko julkaista sen, ja muista määrittää tiedostoja vielä sisällyttämistä varten. Kun arkisto on luotu, kopioi klooni SSH -URL -osoitteella ja liitä se seuraavaan

git remote add git://… (your remote URL)

Nyt voit siirtyä takaisin arkistoon CD -levyllä, tunnet tämän. Kokeile varmuuskopiot nyt varmuuskopiolla

Hienoa! Nyt voimme todella saada koodauksen. Asennetaan Django nyt, kun meillä on hyvä käsitys bashista ja gitistä. Django antaa meille automaattisesti varmuuskopioida ohjelmistomme, Bash voi tehdä tämän myös, mutta Djangolla tulisi olla yksinkertaisempi turvallisempi toteutus (se voidaan poistaa käytöstä ja määrittää helpommin).

Asentaaksesi ohjelmiston Ubuntuun, käytämme sudo apt-get-komentoa. Päivitetään ensin ja päivitetään jo jo ollut ohjelmisto. Tämä voidaan tehdä sudo apt-get -päivityksellä ja sudo apt-get päivitys -y. Asennamme seuraavaksi Python ja virtuaalinen ympäristömme, koodimme koti, seuraavalla komennolla: sudo apt-get asenna python-is-python3 python3-venv

Tämä on kaikki mitä tarvitset mennäksesi Djangon kanssa ohjelmistoasennuksiin Ubuntu -ilmentymään. Windows- ja Linux -ohjelmille tämän pitäisi olla melko suoraviivaista, mutta MAC: lle saatat haluta asentaa virtuaalikoneen ja Linuxin siihen ilmaisella tai maksettulla virtuaaliympäristöllä, kuten VirtualBox tai Paralells Desktop, ja luo yllä olevat vaiheet Ubuntu -ympäristön asettamiseksi. Ubuntu on tässä tapauksessa kriittinen, koska se on verkkosivustojen suorittama ohjelmisto ja se antaa heille mahdollisuuden isännöidä verkkosivustojakaikki edellä mainitut

Kaivataan Django.

Uudelleen hakemistossamme CD: llä:

python -m venv venv # Luo virtuaaliympäristön, johon koodi tallennetaan
source venv/bin/activate # Aktivoi virtuaaliympäristön
django-admin startproject mysite . # Missä mysite on projekti, jonka aloitan nykyisessä hakemistossa.

Django on juuri aloittamassa meidät, koska Django isännöi verkkopalvelinta ja tekee kaiken tarvitsemme paikallisen perusverkkosivuston saamiseksi. Nyt kun Django on asennettu, muokkaamme asetuksia hiukan saadaksemme toimimaan kuinka tarvitsemme. Ensinnäkin, luodaan uusi sovellus

python manage.py startapp feed

Huomaat, että ensimmäistä sovellusta kutsutaan syötteeksi. Sovellusta tulisi kutsua mitä haluat, ja luomme uusia sovelluksia, mutta kunkin sovelluksen nimen on oltava johdonmukainen joka kerta, kun sovellukseen viitataan koodissa. Lisätäksesi uuden sovelluksen, muokkaamme aina asetuksia.py toisessa hakemistossa, jonka sovellus on luotu, nimeltään StartProject, jäljempänä sovellus. Nanon avulla,

nano app/settings.py

Löydä asetuksissa asennettuja_appeja ja erota [] 3 riviin. Lisää 'syöte' tai sovelluksesi nimi käyttämällä neljää tyhjästä keskilinjasta. Tämän asetusten osion pitäisi näyttää:

INSTALLED_APPS = [
    'feed',
]

Ennen kuin unohdamme, testataan, että Django toimii. Käyttämällä komentoa python management.py RunServer 0.0.0.0:8000, voimme suorittaa palvelimen ja navigoida sitten tietokoneen selaimessa, joka käyttää koodia http: // localhost: 8000 ja katso esimerkki verkkosivustosta (se toimii!) Lopeta palvelin CONTROL C: llä, sama kuin mikä tahansa muu komento.

Nyt kaivataan Python -koodin kirjoittamiseen. Djangolla on kolme pääkomponenttia, jotka kaikki suoritetaan koodilla kokonaan. Komponentteja kutsutaan malliksi, näkymäksi ja malleiksi, ja kukin on korkeammalla ja alemmalla tasolla ennen kuin verkkosivusto toimitetaan käyttäjälle.

Malli on koodi, joka tallentaa tietokantaan tietoja hakua, lajittelua ja renderointia varten.

Näkymä päättää, kuinka malli tehdään, manipuloidaan ja muokataan, melkein jokainen näkymä käyttää mallia suoraan.

Malli on HTML -koodi, jossa on joitain ylimääräisiä kelloja ja pilliä, joita kutsutaan mallikieliksi. Näkymä, jossa se on täynnä python -koodia ja kontekstia, mallin, kuten malleja ja tietoja (Usuall -jouset ja kokonaisluvut).

Djangolla on myös muita komponentteja, mukaan lukien, mutta ei rajoittuen:

Asetukset, jotka määrittävät sovelluksen keskustellessamme.

URL -osoitteet, jotka ovat malleja, joita käyttäjä seuraa saadaksesi pääsyn verkkosovelluksen tiettyihin osiin.

Lomakkeet, jotka määrittelevät, kuinka palvelimelle lähetetään tiedot käsitellään ja tehdään tietokantaan sekä käyttäjälle. Nämä ovat perusta palvelimen puolella olevien tietojen käsittelemiselle, ja ne voivat hyväksyä minkä tahansa tyyppiset tiedot tietokonevarastoista, etenkin tekstijonoista, numeroista ja tosi/vääristä booleista (yleensä valintaruudut).

Mallit, jotka ovat HTML -koodi- ja malliskieliä, ja silta Pythonin ja HTML: n välisen kuilun, mikä tarkoittaa, että Python -tietoja voidaan toimittaa HTML -koodina, johon kuka tahansa voi käyttää ja pystyy suojaamaan verkkosivuston rajoitetulla pääsyllä, samalla kun Python -koodi on käytettävissä ja hyödyllinen erilaisiin etälaitteisiin tarkoitettuihin tarkoituksiin, joita ei tarvitse olla lähellä palvelinta.

Staattiset tiedostot, jotka ovat yleensä JavaScriptiä, ja sen kirjastot, joita palvelin palvelee ja jotka on linkitetty malliin.

Mediatiedostot, joita palvelin palvelee tai jotka ovat ulkoisesti isännöitään tai jotka on juuri kirjoitettu palvelimelle ennen käsittelyä ja lähetetään toiselle palvelimelle (ämpäri) isännöimään.

Väliohjelmisto, joka on koodikappaleita, jotka suoritetaan samanaikaisesti kuin jokainen näkymä ja jota pidetään näkymässä "mukana".

Kontekstiprosessorit, jotka käsittelevät kunkin näkymän kontekstin ja joita käytetään lisäyksen lisäämiseen.

Testit, jotka vahvistaavat, että käyttäjä tai pyyntö läpäisee tietyt vaatimukset ennen näkymän esittämistä.

Kuluttajat, jotka sanovat, kuinka WebSocketit käsittelevät viestintää ja reagoivat siihen.

Järjestelmänvalvoja, jota käytetään mallien rekisteröimiseen, jotta niitä voidaan manipuloida yksityiskohtaisesti Django -järjestelmänvalvojan sivulla, jossa tietokantaa voidaan hallita graafisen rajapinnan kautta.

Selleri, joka määrittelee asynkroniset tehtävät Django -koodin osat voivat aloittaa, ennen kuin siirryt heti seuraavaan tehtävään tai koodiriviin.

Djangolla voi olla monia muita komponentteja, joista keskustelemme yksityiskohtaisesti täällä. On olemassa paljon tapoja tehdä Djangosta toiminnallisempia, lisäämällä WebSocketit, jotka ovat nopeita, virtaviivaisia viestintäkanavia, selleriä, jotka suorittavat asynkronisia tehtäviä, ja monia muita ohjelmistopaloja Djangon laajentamiseksi, etenkin näkymätoiminnoissa, joissa suurin osa koodista suoritetaan. Näkymätoiminnot ovat avainasemassa, koska ne yleensä julistavat jokaisen koodin, joka on erityinen tietylle URL -mallille,tai osa

Tutkitaan ensin näkymätoiminnot. Näkymätoiminnot alkavat tuonnista, jotka kuvaavat koodia, jota käytetään näkymässä ja määritetään käyttämällä tavallisia toimintomääritelmiä tai luokkia. Yksinkertaisimmat näkemykset määritetään funktion määritelmän def: n avulla ja palauttavat HTTPRESPONS -mallin perusmallilla. Aloitetaan määrittelemällä perusnäkymä palauttaaksesi teksti "Hello World". MuistaEdelliset määritelmät, joita haluat soveltaa toimintoosi. Me pääsemme siihen, mitä kukin näistä tarkoittaa

Muokkaa sivustomme hakemistosta Feed/Views.Py -tiedostoa nanon avulla ja lisää seuraavat rivit tiedoston loppuun.

from django.http import HttpResponse

def hello(request):
    return HttpResponse('hello world')

Djangon HttPresponse reagoi tekstimerkkijonolla, joka on merkitty avaamisella ja sulkemisella ". Joka kerta kun siirrät tietoja toimintoon tai luokkaan, kuten pyyntö tai merkkijono, sinun on käytettävä suluista (, avaaminen ja sulkeminen).

Tämä ei ole kaikki, mitä meidän on vielä nähtävä näkemyksemme. Emme tietenkään ole kertoneet palvelimelle, jossa näkymä on tarkalleen, meidän on silti määritettävä polku, jolla näkymän tulisi tehdä. Aloitetaan määrittelemällä peruspolku sovelluksissa/urls.py -sovelluksessa, ja pääsemme myöhemmin polkuryhmiin.

Lisää app/url.py

from feed import views as feed_views

Määritetään nyt näkymäkuvio. Näkymäkuvioissa on kolme komponenttia, polkukomponentti, joka kertoo palvelimelle, jossa näkymä on palvelimen sisällä (URL -polku, jonka käyttäjä kirjoittaa navigointipalkkiin siirtyäksesi verkkosivustolle), näkymäkomponentti, jossa näkymä on määritetty, ja ystävällinen nimi näkymälle, jotta se on helppo hakea, kun se on tarpeen toiselle näkymälle, niin että se voiLooginen nimi. On järkevää tehdä asioita tällä tavalla ja olla joustava, koska koodipohjasi on jatkuvasti muuttuva ympäristö, joka tarvitsee joustavuutta ja improvisaatiota, jotta se olisi arvokasta ja helppo työskennellä. Tässä on miltä näkymäsi näyttää, voit lisätä tämän UrlPatterns = [App/urls.py -osaan. Näkymäkuvio määritetään edellä kuvattuilla kolmella komponentilla ja funktiolla, jota kutsutaan polulle. URL -osoitteesi ovat luettelo, joten varmista aina, että lopetat jokaisen kohteen niissä aOMMA, koska tämä erottaa jokaisen. Jokaisen kohteen tulisi myös mennä uudelle riville, jälleen kerran neljällä välilyönnillä, aivan kuten Settingy.py -sovellus. Määrittelemme näkymän ensimmäisen komponentin tyhjellä merkkijonotoiminnolla, jotta voimme luoda näkymän, joka toimii verkkopalvelimen juurihakemistossa. Urls.py pitäisi nyt näyttää

from feed import views as feed_views

urlpatterns = [
    path('', feed_views.hello, name='hello'),
]

Tämä on perusta Django -verkkosivuston luomiselle, joka on täysin staattinen. Jotta voimme tehdä dynaamisemman verkkosivuston, josta voimme aloittaa välimuistiin, kuten kuvat, videot, ääni ja paljon muuta, meidän on käytettävä malleja, joita tutkimme seuraavaksi. Tarkastellaan toistaiseksi koodimme ja suoritetaan palvelin. Jos haluat tarkistaa virheet virheiden varalta: Suorita:

python manage.py check

Jos virheilmoituksia on, sinun tulee tarkistaa huolellisesti sovellukseesi tekemäsi muutokset ja nähdä, onko jotain, joka on korjattava, kuten vieras tai puuttuva tila, ylimääräinen merkki, suljettu merkkijono, mikä tahansa kirjoitusvirhe, mikä tahansa vahingossa poistettu merkki tai jotain muuta. Virhesanoman lukeminen (jos sinulla on sellainen), sinun pitäisi pystyä näkemään polku luomasi tai muokkaamasi tiedostoon rivinumeron kanssa, joten katso tiedosto ja rivi ja katso, pystytkö korjaamaan jotainSe on siellä. Jos olet korjannut ongelman, suorita yllä oleva komento uudelleen. Kun ohjelmisto on valmis ajamaan ja toimii, näet tulosteen "Järjestelmätarkistus ei tunnista mitään ongelmia". Nyt olet valmis menemään. Suorita palvelin

python manage.py runserver 0.0.0.0:8000

Avaa nyt verkkoselain ja siirry osoitteeseen http: // localhost: 8000. Sinun pitäisi nähdä mielestäsi HttPresponse -funktion suluissa ja lainauksissa palautettu teksti. Tämä on vain perusesimerkki, mutta jos olet tehnyt sen niin pitkälle, ymmärrät perusteet siitä, kuinka Linux, Bash, Python ja Django toimivat. Kaivataan syvemmälle tietokannan mallinnukseen ja tutkitaan python -luokan voimaa tiedon tallentamisessa. Sitten alamme saada otteen HTML: lle ja CSS: lle ennen kuin teemme sivustomme kokonaanEsitelty, joustava ja turvallinen käyttämällä JavaScriptiä ja konetta

Luokat tallennetaan sovelluksesi malleihin. Käyttämällä nanoa, muokkaa sovellusta/malleja.py ja lisää uusi luokka. Luokka määritellään luokan määritelmällä ja se on läpäissyt superluokan, josta se perii tässä tapauksessa mallit.Model. Luokan nimi tulee luokan määritelmän jälkeen, ja luokan määritelmän A jälkeen: (paksusuolen) käytetään ennen luokkaan sidottua määritelmiä ja funktiomääritelmiä alla. Luokkamme tarvitsee tunnuksen, jonka voimme käyttää sen hakemiseen ja sen pitämiseen ainutlaatuisena, ja se myös

from django.db import models # Tuonti, jota käytetään luokan määrittelemiseen ja sen ominaisuuksiin
class Post(models.Model): # Itse luokan määritelmä
    id = models.AutoField(primary_key=True) #  The ID of our model, an automatically generated key that will let us query the model, keep it unique, and is useful when we need to interact with the model once it has been created.
    text = models.TextField(default='') # Luokkakaupat, tässä tapauksessa, jotkut tekstit, oletuksena tyhjään merkkijonoon.

Sulje ja tallenna tiedosto, kuten teimme ennen loppuun.

On olemassa monia muita kenttiä ja vaihtoehtoja, joita tutkimme päivittäessäsi tätä luokkaa sovelluksemme kehittyessä, mutta tämä on sovelluksen luomisen perustarpeet jonkin tekstin lähettämiseen. Tämä malli ei kuitenkaan toimi yksin. Kuten aiemmin on kuvattu, tarvitsemme mukautetun näkymän ja mukautetun URL -osoitteen, jotta tämä malli toimisi, ja tarvitsemme myös lomakkeen mallin kanssa. Tutkitaan ensin lomaketta.

Muokkaa App/Forms.Py -lomake nanolla ja lisää seuraavat rivit. Tarvitsemme kahta tuontia, lomakurssiamme sekä luomamme mallin (Feed.models.post), mallin kaltaisen luokan määritelmän ja kentän sekä META -nimisen alaluokan kanssa, joka määrittelee mallin, jonka muoto on vuorovaikutuksessa. Lomakkeella voi olla myös alustustoiminto, joka asettaa sen pyynnön, mallin tai muuten tietojen perusteella, tutkimme tätä myöhemmin.

Mallimuodot ovat niin hyödyllisiä, koska ne voivat luoda mallin tai myös muokata mallia, joten käytämme niitä molemmille. Määritetään yksi muotoisina.

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',)

Tämä on perusteet, miltä muoto ja malli näyttävät. Tätä mallimuotoa voidaan käyttää viestin välittämiseen tai muokkaamiseen, sen sisältämän tekstin muuttamiseen. Tarkastelemme tämän lomakkeen integroimista seuraavaksi näkymäksi. Ensinnäkin, siirrämme siirrot ja siirrämme tietokantaa, jotta koodimme voi olla vuorovaikutuksessa mallin kanssa, kun se toimii. Suorita seuraavat komennot:

python manage.py makemigrations
python manage.py migrate

Tämän suorittaminen kestää minuutin, mutta kun se tapahtuu, se antaa sinun käyttää mallia näkymiin, väliohjelmaan tai muualle ohjelmistoon. Jatkamme tekemällä näkymä, missä voimme nähdä mallisimme. Muokkaa syöttöä/näkymä.py ja lisää seuraava koodi, kuten todettiin. Sinun ei tarvitse lisätä mitään # allekirjoituksen jälkeen, että koodi on kommentteja, joita käytetään koodin tietojen osoittamiseen. Aloitamme tuomalla mallimme näkymiin ja lisäämällä sen kontekstiin, jossa voimme tehdä sen a

    posts = Post.objects.all() # Kysely kaikki tietokannan viestit toistaiseksi

Tämä kaikki näyttää melko yksinkertaiselta, kunnes pääsemme pohjaan. Render, funktion palauttama arvo HTTP -vastauksessa, kuten edellinen esimerkki, ottaa aina pyynnön ensimmäisenä syötteensä, hyväksyy kontekstin (tässä tapauksessa tietokannan viestejä), jotka voidaan nyt tehdä mallissa, ja palauttaa funktiossa määritetyn mallin. Malli tulee olemaan HTML -asiakirja, jossa on vähän kieltä nimeltä Jinja2, joka tekee Python -tiedot HTML: ään.

Aloita mallejen luominen tekemällä kaksi hakemistoa syötteeseen.

mkdir feed/templates
mkdir feed/templates/feed

Seuraavaksi muokkaa malli yllä olevassa hakemistossa, syöttö/malleja/syöte ja lisää koodi tähän esimerkkiin. Katsotaanpa tämän esimerkin mallia.

Tämä on hyvin yksinkertainen malli. Se määrittelee HTML -tunnisteiden avaamisen ja sulkemisen, asiakirjatyyppisen tunnisteen, runkotunnisteen, jossa on legenda -otsikko, taukotunniste, joka lisää pienen rivin näytön yli, ja A: lle, joka tekee jokaisen viestin viesteiden luettelossa mallin kappaleena. Tämä on kaikki mitä tarvitaan viestien tekemiseen, mutta tietokannassa ei vielä ole ketään. Luotaan joitain kuoren kanssa. Voimme ajaa kuoren hallinnassa.py

python manage.py shell

Now, let's import our post model

from feed.models import Post

Seuraavaksi luomme yksinkertaisen viestin merkkijonolla ja poistumme kuoresta. Merkkijono voi olla mikä tahansa, niin kauan se on kelvollinen teksti.

Post.objects.create(text='hello world')
exit()

from django.urls import path
from . import views

urlpatterns = [
    path('', views.feed, name='feed'),
]

from django.urls import include # ylhäällä
    # ... Edellinen koodi täällä

Nyt kun suoritamme palvelinta python management.py RunServer -sovelluksella, näemme luomamme sivun, koska meillä on malli, näkymä ja malli sekä URL -URL -malli sekä tietokannan kohteet. Seuraavaksi otetaan käyttöön luomamme lomake ja aloitetaan omien viestien luominen. Mutta ennen kuin kirjoitamme liikaa koodia, tehdään varmuuskopio käyttämällä aiemmin kirjoittamaamme käsikirjoituksella. Suorita tämä skripti kuoressa, odota hetki, ja kaikki koodi varmuuskopioidaan Git -arkistoomme.

backup

Implementing the form is relatively simple. We will import our form, add a post request handler to the view, and save the post in the database before redirecting to the same view. We can use the redirect function we already imported, and another function called reverse to get the URL for the view pattern. We will query this with the string 'feed:feed' because the namespace of the included pattern is feed, and the view is also called feed.

    posts = Post.objects.all() #  Query all the posts in the database so far
    if request.method == 'POST': # Käsittele postipyyntö
        form = PostForm(request.POST) # Luo lomakkeen ilmentymä ja tallenna tiedot siihen

            form.save() # Tallenna uusi objekti
        return redirect(reverse('feed:feed')) # Ohjaa samaan URL -osoitteeseen get -pyynnön kanssa
        'form': PostForm(), # Varmista, että siirrät lomake kontekstiin, jotta voimme tehdä sen.

Nyt meidän on päivitettävä malli uuden lomakkeen huomioon ottamiseksi. Voimme tehdä tämän käyttämällä

Tunniste HTML: ssä ja muodostaa lomakkeen HTML -mallissa lähetyspainikkeella. Tarvitsemme myös CSRF -tunnuksen, tunnuksen, joka estää ulkoisia sivustoja lähettämästä lomakkeeseen lataamatta ensin sivua.

Hajotellaan tämä. Siellä on uusi lomakeluokka, merkki, itse lomake ja lähetyspainike. Melko yksinkertainen, mutta kun tarkastelemme sitä, ehkä haluamme saada sen näyttämään paremmalta. Se toimii, voimme lähettää uusia viestejä lomakkeen kanssa ja ne tallennetaan nyt tietokantaan. Täällä tapahtuu muutamia asioita. Käytämme HTML -tunnisteita ilmoittamaan, että asiakirja on HTML -asiakirja, käytämme mallitunnistetta ({ %… %}), jotta lomakkeelle ja toiselle, {{…}} antaa lomakkeen. Meillä on myös silmukkaTekstin tekeminen lohkotunnisteilla ja mallitunnisteella. Lohkotunnisteet ovat todella tärkeitä, koska voimme määritellä, kuinka mallin osiot tehdään niiden kanssa, ja mallitunnisteet ovat perusta siihen, kuinka laitamme muuttujat meidän

Nyt meidän on saatava sovelluksemme näyttämään paremmalta, koska toistaiseksi se näyttää todella perusteelliselta. Voimme tehdä tämän käyttämällä CSS: ää, joko sisäiseen tai luokkiin, jotka on sidottu jokaiseen asiakirjan objektiin. CSS on todella mukava, koska se kertoo kaiken sivulla, miltä sen pitäisi näyttää, ja voi tehdä siitä todella hyvältä. On olemassa muutamia kirjastoja, jotka voivat tehdä tämän, mutta henkilökohtainen menoni on bootstrap.

Bootstrap voidaan ladata heidän verkkosivustolta,getbootStrap.com/. Kun olet painamalla painiketta, lue asennusasiakirjat ja kopioidaksesi koodin sisällyttämällä CDN -osioon. Tarvitset tämän koodin HTML -asiakirjan yläosassa, nimeltä Head. Mennään myös eteenpäin ja luodaan perusmalli, jotta meidän ei tarvitse luoda näitä linkkejä uudelleen jokaisessa mallissa.

Tee uusi hakemisto nimeltään malleja mkdir -malleilla ja muokkaa sitten malleja/base.html.

Sen pitäisi näyttää tältä:

Muista kopioida CSS ja JavaScript, .CSS- ja .JS -tiedostot, koska tarvitsemme JavaScriptin, jotta sivustostamme tulee tulevaisuudessa toiminnallisempi.

Palataan nyt bash -kuoreen ja suoritetaan nopea komento. Muista, että jos joudut koskaan pääsemään virtuaaliympäristöön, kirjoita lähde Venv/bin/aktivoi. Tämän avulla voit asentaa Python -paketit paikallisesti tavalla, joka antaa Djangolle käyttää niitä. Jotta Django BootStrap -luokkien luomat lomakkeet saavat, käytämme Python -pakettia, nimeltään Crispy Forms. Voimme ladata tämän seuraavalla komennolla

pip install django-crispy-forms

Kun tämä on asennettu, lisää se asetukset.py

    # … Edellinen koodi täällä

Nyt takaisin syöttömalliin voimme poistaa joitain asioita. Poistamme asiakirjan alku ja loppu ja korvataan se perinnöllä perusmallistamme, laajennukset ja lohkon määritelmä. Lisäksi lisäämme mallisuodattimen tuonnin kuormalla ja mallisuodattimen lomakkeeseen. Lopuksi lisätään bootstrap -luokka lomakkeen painikkeeseen, jotta se näyttää enemmän painikkeelta. Sen pitäisi näyttää tältä:

Kaunis! Se on jo vähän koodia. Seuraavaksi meidän pitäisi testata se ja varmistaa, että voimme nähdä, että kaikki näyttää hyvältä, ja varmista myös, että kaikki toimii kunnolla. Suorita palvelin aikaisempien ohjeiden mukaisesti ja varmista, että sivusto näyttää ja toimii kunnossa. Hienoa työtä! Olet valmis siirtymään seuraavaan vaiheeseen, johon lisäämme käyttäjän kirjautumistoiminnot käyttämällä samanlaisia URL -osoitteita, muotoja, näkymiä ja malleja. Perusmalli on tärkeä, ja jatkamme sen muokkaamista ja muutoksiatarpeen mukaan, mutta keskitytään toistaiseksi sivustostamme turvallisemmaksi, antamalla käyttäjille mahdollisuuden kirjautua sisään käyttäjätunnuksella ja salasankokoodilla ja lopulta vieläkin tärkeämpiä tietoja, jotka auttavat pitämään sovelluksesi turvassa ja oman tilisi saatavana vain vain

Tätä varten meidän on käytettävä Djangoon rakennettua käyttäjamallia. Käyttäjämalli on tietokantamalli, kuten viestimme, joka voidaan tehdä käyttäjän kirjauttamiseksi verkkosivustoon. Jatkossa, ennen kuin siirrämme sivuston Internetiin, laajennamme tätä mallia muilla sille omistetuilla malleilla ja rakennamme kirjautumiselle vastustuskykyisiä kirjautumistoimenpiteitä. Aloitamme käyttämällä joitain sisäänrakennettuja kirjautumismuotoja, jotka Django tarjoaa. Ensinnäkin, luodaan uusi sovellus, jota käytämme

Puhuimme jo sovelluksen perustamisesta. Hakemistostamme, virtuaaliympäristön sisällä, ohita hallinta. Nämä väitteet

python manage.py startapp users

Nyt meillä pitäisi olla hakemisto uudelle sovellukselle. Aloitetaan luomalla näkymä siihen hakemistoon, joka vastaa käyttäjän kirjautumista. Django on rakentanut näkymät käyttäjän kirjautumisiin, mutta nämä eivät sovellu meille, koska tarvitsemme mukautetun näkymän, joka on mieluiten määritelmän avulla.

Tässä näkemyksessä aloitamme tarkistamalla postipyyntö, siirrä pyynnön.Post Djangosta tuodaan kirjautumismuotoon, todentaa käyttäjätilin ja kirjaudu käyttäjälle ennen niiden ohjaamista syöttösovellukseemme.

Lisää käyttäjät/Views.py seuraa seuraava koodi

        username = request.POST['username'] # Hanki käyttäjänimi ja salasana postipyyntöstä
        password = request.POST['password'] # Todenta käyttäjä

Tämä on kaikki mitä tarvitset peruskirjautumisnäkymään. Luotaan nyt näkymälle lomake laajentamalla perusmallia. Aloitamme luomalla uuden hakemiston malleille käyttäjien kansioon.

mkdir users/templates
mkdir users/templates/users

Nyt meidän pitäisi pystyä muokkaamaan käyttäjiä/malleja/käyttäjät/login.html. Kun olemme siinä, luomme mallin, jonka avulla käyttäjä voi kirjautua.

nano users/templates/users/login.html

Nyt mallissa,

Tämä on kirjautumismallin perusteet. Se on todella kuin muut rakenteen malli, mutta se näyttää hiukan erilaiselta, kun se tehdään. Voimme kopioida tämän koodin rakentaaksemme toisen hyvin samanlaisen mallin nimeltä Register.html, jossa muutamme sanamuotoa ja käytämme uutta rakentamamme lomaketta. Tehdään malli ensin. Muokkaa käyttäjiä/malleja/käyttäjät/rekisteröinti.html ja lisää seuraava koodi:

Rakennetaan nyt lomake käyttäjän rekisteröintiä varten ja ympyrömme takaisin näkymiin ennen kuin päivitämme käyttäjän kirjautumisen mallilla. Teemme tämän lomakkeen aloittamisen, mutta lisäämme tulevaisuudessa lisätietoja ja turvallisuusominaisuuksia, kuten sopimuksia ja Captchaa. Muokkaa lomakkeita nano -käyttäjien/forms.py kanssa ja lisää seuraava koodi.

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']

Joten meillä on täällä toinen muoto, joka toimii melko yksinkertaisesti. Se on käyttäjärekisterin lomake, jossa on käyttäjänimi, sähköposti ja salasana sekä vahvistanut salasanakenttä. Huomaa, että tämä lomake ei laajenna tavallisia muotoja Yksi kenttä on määritelty samalla tavalla, ja luokan meta määrittelee mallin. Lomake vastaa loput lomakkeeseen kirjoitetut tiedot. Suurin osa tästä on jo olemassa Djangon sisäänrakennetussa UserCreationFormissa, joten mekäyttää sitä luokan perustana (ohitetaan

Seuraavaksi tutkimme näkymää käyttäjän rekisteröimiseksi nyt, kun meillä on lomake ja malli. Tämä on modelmorm, aivan kuten uudessa postinäkymässä. Muokkaa käyttäjiä/View.py ja lisää seuraava koodi:

# … Tuonti

Tämä on kaikki mitä tarvitsemme käyttäjän rekisteröimiseksi, mutta meillä pitäisi olla lisätietoja. Haluamme tietää ajan, jonka käyttäjä rekisteröitiin, mihin aikaan he olivat viimeksi sivustolla, joitain tietoja heistä, kuten elämäkerta, aikavyöhyke jne. Myös meidän on päivitettävä syöttömallimme, postitse, jotta voimme ottaa käyttäjämallin ja määriteviestit jokaiselle käyttäjälle. Jotta voimme tehdä niin, päivitämme mallit.py molemmissa sovelluksissa. Aloitetaan muokkaamalla syöttömalli. Sen pitäisi näyttää tästä nyt:

from django.db import models # … Tuonti
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Lisää tähän riviin

Kiinnitä huomiota toiseen riviin, joka lisättiin tiedostoon. Tämä on ulkomainen avain, joka määrittelee jokaisen viestin yhdelle käyttäjälle viestiä kohti, joten voimme varmistaa, että tallennamme viestejä käyttäjän käyttäjän perusteella, eikä viestiä voida tehdä käyttäjälle määrittämättä sitä. Määritämme tämän ulkomaisen avaimen, jonka se edustaa, poisto argumentti varmistaa, että viestit poistetaan käyttäjien, tyhjien ja tyhjien argumenttien kanssa varmistaaksemme, että voimme tarvittaessa poistaa käyttäjän ja mukautua käyttäjän puuttumiseenJo luomallamme viesteissä ja siihen liittyvä nimi, jota voimme käyttää viittaamaan käyttäjän luomiin viestiobjekteihin. Tämä liittyvä nimi, toisin kuin Post.Author, viestin kirjoittaja, antaa meille käyttäjän, joka lähetti itse viestin. Voimme nyt saada käyttäjän tekemän käyttäjän käyttäjän suorittamalla käyttäjän.poss.all () tai

Tehdään nyt kirjautumisistamme joustavampia. Voimme jo tehdä sivustostamme paljon vähemmän alttiita tietojenkalastelulle yksinkertaisesti rajoittamalla lukumäärää, kuinka monta kertaa sallimme kirjautumisen sivustoon, tämä on melko helppoa. Aloitetaan myös joitain tietoja jokaisesta käyttäjästä aiemmin, kun jatkamme sovelluksemme kehittämistä. Käyttäjien/malleja.py, lisää seuraava koodi.

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='')

Huomaa, että tämä malli on melko samanlainen kuin postimalli. Meillä on ylimääräinen tuonti, aikavyöhyke, jonka avulla voimme asettaa oletusarvot DateTime -kenttiin, ja meillä on myös merkki- ja tekstikenttä, kuten viesti. Kaikkien näiden aikaleimojen käyttäminen auttaa meitä turvaamaan sivuston ja ymmärtämään sen käytön, ja tekstikentät antavat meille tietoa jokaisesta käyttäjästä tai kirjoittajasta verkkosivustolla. OneToonefieldin tulisi olla ainoa pieni huomio, se käyttäytyy täsmälleen samalla tavalla kuin Foreginkey, muttavain yksi seuraavaa mallia kohti. Tällä tavalla käyttäjällä on vain yksi profiili, kun taas heillä voi olla paljon

Parannetaan nyt kirjautumis- ja rekisteröintinäkymämme profiilin huomioon ottamiseksi. Ensinnäkin muokkaa käyttäjiä/Views.py ja keskity rekisteröintiäkymään:

# … Tuonti
            Profile.objects.create(user=user) # Muista lisätä tämä rivi käyttäjälle profiilin luomiseksi

Tämä yksinkertaisesti luo käyttäjälle profiilin täyttämättä mitään tietoa. Nyt haluamme varmistaa, että käyttäjätiliä ei voida kirjautua liian usein tai ainakin salasanoja ei voida kokeilla liian usein, joten päivitetään kirjautumisnäkymä.

# … Tuonti
        if user and user.profile.can_login < timezone.now(): # Huomaa, että tarkistamme nyt, voiko käyttäjä kirjautua sisään
        else: # Jos kirjautuminen ei onnistunut,
            user = User.objects.filter(username=username).first() # Tämä on osa, jossa päivitämme käyttäjien profiilin
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Joten he eivät voi kirjautua uudelleen muutaman sekunnin ajan

Tämä on turvallisuuden perusta. Varmista, että sivusto ei ole alttiita jollekin vain kokeilemaan kaikkia mahdollisia salasanan yhdistelmiä tai edes muutamia heistä samanaikaisesti. Tämä ei ole turhauttavaa tavalliselle käyttäjälle, joka tuntee heidän passikoodinsa ja vain kirjautuu sisään muutamaan laitteeseen, mutta se pitää lukuisat tietojenkalastelurobotit poissa sovelluksesta. Huomaa, että lisäsimme if -lauseen muuttujan, can_loginin kanssa, sen pitäisi olla aika aikaisemmin, ja päivittää se jokaisella epäonnistuneella kirjautumisella käyttämälläSama käyttäjätunnus. Tällä tavoin haitallinen käyttäjä ei voi arvata salasanaa missään lähellä niin nopeasti. Myös sekuntien lukumäärä DateTime.TimeDelta () voidaan päivittää, ja verkkosivusto on joustavampi, mutta hieman vähemmän käytettävissä useamman sekunnin kuluttua. Suosittelen 15 aloittaa

Muista, että rakensimme varmuuskopioskriptin tallentaaksemme työmme, joten siirrytään eteenpäin ja varmuuskopioimme sitä, mitä meillä on toistaiseksi varmistaaksemme, että kaikki on tallennettu. Suorita komento:

sudo backup

Jälleen kerran tämä säästää työsi toistaiseksi. Suosittelen käyttämään usein varmuuskopioita työn tallentamiseksi, ja saatat jopa haluta suorittaa varmuuskopiointi automaattisesti. Voit tehdä tämän käyttämällä Cron -nimistä UNIX -apuohjelmaa. Aktivoidaksesi tämän apuohjelman suorittamalla seuraava komento ja kirjoita salasana:

sudo crontab -e

Jos et ole jo valinnut vaihtoehtoa 1 Nanolle, tekstieditori, jonka sinun tulee jo tuntea, ja vieritä tiedoston alaosaan nuolinäppäimillä. Lisää seuraava rivi:

0 * * * * sudo backup

Cron käyttää muotoilua minuuttia, tuntia, kuukauden päivä, kuukausi, viikonpäivä, missä * tai numero edustaa komennon suorittamista. Käyttämällä 0 minuutin ajan ja * loput vaihtoehdot, voimme suorittaa komennon jokaisen tunnin ensimmäisen minuutin ajan minuutin alussa. Tämä antaa meille varmuuskoodin varmuuskoodin automaattisesti. Kaikki Cronin työpaikat, jotka suoritetaan sudo -juonella juurina, joten meidän ei tarvitse kirjoittaa salasanaa tunnissa.

Poista varmuuskoodikomennomme salasana käytöstä käyttämättä salasanaa käyttämättä salasanaa käyttämättä. Teemme tämän suorittamalla seuraavan komennon ja syöttämällä salasanan:

sudo visudo

Vieritään nyt tiedoston pohjaan ja lisätään toinen rivi:

ALL ALL=NOPASSWD: /bin/backup

Tämän avulla voimme suorittaa komennon "varmuuskopio" kuin kuka tahansa käyttäjä, ilman salasanaa. Tämän muoto on helppoa, vain etuliite rivillä "All All = Nopasswd:/bin/" ja päättyy komentoon, esimerkiksi/bin/varmuuskopiointiin, joka on olemassa/usr/bin/.

Aloitetaan nyt sähköpostin kanssa. Sähköposti on todella tärkeä verkkosivustoille, koska se on tapa pitää verkkosivusto turvallisempana, tarkista, että käyttäjät ovat oikeita ihmisiä ja jopa markkinoida tuotteita tai palveluita asiakkaille. Monet ihmiset, jotka ovat usein Internetissä, tarkistavat sähköpostinsa päivittäin ja saavat kaikenlaisia markkinointipostiviestiä tuotteista ja palveluista, joista he ovat kiinnostuneita. On olemassa muutamia vaihtoehtoja, kun kyse on sähköpostin sallimisesta Django -verkkosivustolla, ja olet tervetullut valitsemaan kumpi sopii sinulle parhaiten.

Ensinnäkin voit maksaa sähköpostipalvelusta, jonka avulla voit lähettää sähköpostia verkkotunnuksestasi ja vaatii minimaalisen koodin. On monia palveluita, jotka tarjoavat tätä, kuten Google Workspace, Sendinblue, MailGun ja muut.

Otherwise, you are well off building your own email service within your server from scratch. I recommend this option, even though it's more code and may require special hosting. You won't be able to start a mail server from your home computer most likely, so let's go ahead and examine the configuration and code to send email before we start a server in the cloud and create our own mail server within.

Ensinnäkin, muokkaa asetuksia.py seuraavalla komennolla:

nano app/settings.py

Missä sovellus on StartApp -sovelluksen luomasi sovelluksen nimi.

Lisää seuraavat rivit:

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)

Muista muuttaa näitä, kun olet valmis ottamaan käyttöön sovelluksesi, käymme uudelleen myöhemmin. Sähköposti_address -asetuksen tulisi olla sähköposti, jonka haluat lähettää, ja salasanan (sähköposti_host_password) tulisi asettaa palvelimelle luomasi salasanalle. Ladataan salasanan konfigurointitiedostosta pitääksesi sen koodista seuraavan logiikan avulla, näiden rivien yläpuolella asetukset.py:

import os
import json
with open('/etc/config.json') as config_file:
    config = json.load(config_file)

Sitten olen perustanut JSON -tiedoston config /etc/config.json -sovelluksella nanon avulla seuraavasti.

Tiedoston muokkaaminen:

sudo nano /etc/config.json

Lisää seuraavat rivit:

{
	"EMAIL_HOST_PASSWORD": "<some password here>"
}

Jatkamme Config -tiedoston muokkaamista ja lisäämme kaikki sovelluksessa käytetyt salasanat ja avaimet. Tarkastellaan toistaiseksi nopeasti, kuinka lähettää sähköpostia Pythonin avulla. Luotaan ensin malli tarkistusviestille, jonka voimme lähettää käyttäjille ja laittaa se käyttäjän mallien hakemistoon. Tämä malli kirjoitetaan HTML: ssä.

nano users/templates/users/verification_email.html

Tämä sähköposti on melko yksinkertainen. Se vie käyttäjän kontekstin, sivuston perus -URL -osoitteen sekä käyttäjätunnuksen ja tunnuksen, joita käytetään käyttäjän sähköpostin tarkistamiseen. Muista määritellä perus -URL -osoite asetuksissa.py ennen kuin kirjoitamme jonkin python -koodin mallin tekemiseksi. Mene eteenpäin ja lisää seuraavat rivit APP/Asetukset.py, lähellä alkua.

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

BASE_URL = PROTOCOL + '://' + DOMAIN

Lopulta, kun sivustosi on valmis Internetiin ja otat sen käyttöön, sinun kannattaa määritellä verkkotunnuksesi verkkotunnukseksi, jonka ostat sivuston edustamiseksi. Tämä on nimi, jonka kirjoitat Navbariin, jotta pääset sivustoosi. Toistaiseksi voit jättää verkkotunnuksen tyhjäksi tai käyttää paikkamerkkiä. Haluat myös muuttaa sivuston nimen nimeksi, jonka haluat antaa sivustollesi, valitsemastasi.

Before we send email, let's create a token generator so we can have an account activation token that never expires. We can do this by building and importing an account activation token that looks like the following. Edit the file:

nano users/tokens.py

Lisää seuraava koodi:

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()

Tämä perustunnusgeneraattori luo tunnuksen, jonka voimme lähettää käyttäjän URL -osoitteeseen ja käyttäjä voi käyttää tarkistaakseen sähköpostinsa ja aktivoida heidän tilinsä.

Next, let's see how to send an email. Using nano, edit users/email.py.

nano users/email.py

Vahvistuksen HTML -sähköpostin lähettäminen näyttää tältä:

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)

Tämä on melko yksinkertaista. Tuotamme toiminnot, jotka meidän on lähetettävä sähköposti, lähetetään sähköposti malleilla ja asetuksillamme, ja määrittelemme sitten sähköpostin mallin nimellä ja lähetämme sen käyttäjälle toiminnon avulla. Huomaat, että emme ole vielä määrittäneet toimintoa lähettääksesi postin, Send_html_email, joten kirjoitetaan tämä jo käyttäjille/sähköpostiosoitteisiin.

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()

Tämä on hiukan monimutkaisempi, emmekä ole vielä valmiita suorittamaan kaiken tämän koodin. Huomaa, että määrittelemme UNSUB_LINK, linkki, jota käyttäjä voi käyttää sähköpostien tilaamiseen. Tämä on tärkeää, koska käyttäjien on kyettävä poistamaan sähköpostimme, elleivät he halua nähdä niitä milloin tahansa. Lisäämme myös tekstiviestimme tekstin vaihtoehdon, joka on HTML -viesti, joka on poistettu HTML -tunnisteista. Viimeiseksi tarkistamme, onko lähetetty sähköposti, ja jos se ei ollut, merkitsemme käyttäjän profiilissa, että heidän sähköpostinsa ei ole

Siirrytään takaisin käyttäjämalleihin, jotta voimme tehdä tämän kaiken toimimaan. Meidän on määritettävä toiminto linkin luomiseksi tilauksen peruuttamiseen ja määritettävä Boolen -kenttä merkitsemään, että käyttäjän sähköposti ei ole kelvollinen.

Lisää ensin seuraavat tuonnit käyttäjien/mallien yläosaan

nano users/models.py
# Niin

Lisätään seuraavaksi käyttäjämalliin toiminnot, jotta saadaan tunnus ja tarkistat sähköpostin aktivointiin käytetyn tunnuksen, samoin kuin kentän säästääksesi, vastaanottaako käyttäjä onnistuneesti postinsa. Lisää käyttäjät/mallit.py uudelleen seuraava koodi mallin loppuun (sisennetty koodi)

# Niin
            TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Voimassa 30 päivää

Tämä on melko yksinkertaista, käytämme TimestampSigneria, joka on perussalaustyökalu, luodaksemme tunnuksen, joka vanhenee tietyn ajan kuluttua, ja käytämme myös toista toimintoa tarkistaaksemme, onko se kelvollinen. Käytämme näitä merkkejä kahdesti, kerran sähköpostin tarkistamiseksi ja kerran tilauksen peruuttamisen linkin saamiseksi.

Now that we have these, the last of the work we will need to do is in the views. Within users/views.py, let's add views to verify the email address, and to unsubscribe.

nano users/views.py

Lisää ensin seuraava tuonti. Heitin muutaman ylimääräisen, joten meidän ei tarvitse tuoda lisää tuotteita myöhemmin uudelleen.

from .email import send_verification_email # Varmista, että tuodaan vahvistussähköpostin lähetystoiminto

Sinulla voi olla jo joitain näistä tuonnista, mutta niiden toistaminen ei haittaa. Sinun on tuotava varmennussähköpostin lähetystoiminto sekä ACCORT_ACTIVATION_TOKOKOKOKSION.TOKENS, muun muassa.

Lisää nyt tiedoston alaosaan seuraava koodi:

        # Peruuta ne
    # Muuten ohjata sisäänkirjautumissivulle
# SendWelcomeMail (pyyntö, käyttäjä)

Tämä on paljon koodia. Hajotetaan se. Ensimmäinen toiminto, puhdas ja yksinkertainen, peruuttaa käyttäjän postituslistasta. Toinen toiminto aktivoi heidän sähköpostinsa, ja huomaat, että lisäsin kommentoidun toiminnon, SendWelcomeMail. Olet tervetullut käyttämään sähköpostiosoitteita ja toimintojen määritelmää lähettääksesi tervetuliais sähköpostiviestin, en vain ole vielä. Viimeinen toiminto, jonka heitin, on tärkeä, koska aktivointiviestit päättyvät. Siksi meidän on palautettava aktivointiviesti uudelleen jonkin aikaa. Me

nano users/views.py
# … (After) def Register (pyyntö):
#  … (before) redirect(

Sinun ei tarvitse lisätä ensimmäisiä ja viimeisiä rivejä kyseiseen koodinpäähän. Varmista vain, että rekisterin näkymä lähettää varmennuspostiviestin käyttäjälle. Sen pitäisi näyttää tältä:

#  … imports
            send_verification_email(user) # Lisää tämä rivi!

Now, we'll need to add a form to resend the activation email. In users/forms.py, add the following form:

#  … (imports)

Tarvitsemme myös tätä uudelleenlähetystä sähköpostin aktivointimuotoa vastaavan mallin. Lisätään tämä malli sisään. Muokkaa tiedostoa:

nano users/templates/users/resend_activation.html

Next, add the following code to the file.

Whew, that's a lot! Now, when we deploy the code to our server, we will be able to send HTML email and activate user accounts with a click in the email. We also might want to send a simple welcome email, so let's see how to do that. Back in users/email.py, add the following code:

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)

Tarvitsemme myös mallin kaikkien näiden tietojen antamiseksi. Verkkosivustollani malli näyttää alla, mutta olet tervetullut muotoilemaan sitä haluamallasi tavalla.

Huomaa, että meillä ei ole sulkemista runko- tai HTML -tunnisteita, koska lisäämme ne sisään, kun lisäämme HTML -peruuttamislinkin. Nämä ovat tärkeitä, mutta emme halua määritellä niitä kahdesti.

Joten mitä seuraavaksi? Olemme edenneet pitkälle. Oikeasti, meidän pitäisi olla valmiita ottamaan sivuston käyttöön palvelimelle. Voimme lisätä @login_Required -sisustusarkin ja tehdä näkemyksistämme turvallisuuden, ottaa käyttäjän kirjautumiseen, lähettää yhteensopivia sähköposteja ja välimuistitiedot, mikä on perusta sille, mitä verkkosivusto tarvitsee pysyäkseen asiaankuuluvaksi. Lisäämme vielä muutaman hyödyllisen ominaisuuden ja rakennamme sitten perustan koodimme käyttöönottamiselle etäpalvelimelle, postin palvelimen asettamiselle, verkkotunnuksen kokoonpanolle ja suodattimille, jotta sivustostamme olisi turvallinen ja

Tarvitsemme myös salasanan palautusnäkymän, joten lisätään se todella nopeasti. Djangon sisäänrakennettu salasanan palautusnäkymä on rikki joissakin toiminnoissa, mutta tarkastelemme kuinka kirjoittaa oma näkymämme, sähköposti -malli, lomakkeet ja URL -mallit. Tässä on näkymä, käyttäjät/View.py

# ... tuonti

Tämä lomake on rakennettu Djangoon, mutta tarvitsemme mallin vahvistaaksesi salasanan palautuksen, käyttäjät/malli/käyttäjät/salasana_reset_confirm.html

Meillä on myös malli lähettää salasanan palautusviesti yksinkertaisella lomakkeella käyttäjillä/malleissa/käyttäjillä/salasana_reset.html

Itse sähköpostin malli on yksinkertainen, se on HTML -tiedoston perustiedosto, joka antaa linkin salasanan nollaamiseksi, käyttäjillä/malleissa/käyttäjillä/salasana_reset_email.html. Django tulkitsee tämän tiedoston automaattisesti.

Tarvitsemme myös kaksi muuta mallia. Ensimmäinen on vahvistaa, että sähköposti on lähetetty. Näkemykset näille ovat jo Djangossa, joten meidän on vain puututtava niihin URLS.PY: ssä. Tämä malli sijaitsee käyttäjiä/malleja/käyttäjiä/salasana_reset_done.html

Ja viimeiseksi, vahvistaaksesi, että salasanan nollaus on valmis, käyttäjät/mallit/käyttäjät/salasana_reset_complete.html

Nyt tarvitsemme URL -mallia näihin näkymiin. Lisää käyttäjät/urls.py seuraavat URL -osoitteet:

    # ... Previous URLs here

Four templates, that's a lot! But now we can be sure to be able to reset the user's password any time we need to, all from the web browser.

Valmiina jatkamaan, lukemme seuraavaksi koodin käyttöönoton etäpalvelimelle ja postipalvelimen määrittämisen sekä käyttöönoton automatisoinnin bashilla, jotta voit aina asettaa uuden projektin muutamalla yksinkertaisella

Lisää myös ainutlaatuinen, pyörivä tunniste käyttäjämalliin, jota käytetään lisäämään lisäturvakirjautumiseen kirjautumiseen. Käyttäjämallien, käyttäjien/mallien.py, muokkaaminen lisää seuraavat

#  Make sure to import the uuid, timestamp signer and URL generator (reverse)
    #  Add this code here
    #  And add this function
            TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) #  Valid for 3 mins

Varmista, että käyttäjät/mallit.py näyttää tältä kommenttien lisäksi (koodi riviltä #). Hajottaen tämän, se on yksinkertaista. Meillä on muutama tuonti, aikaleikkauskirje, joka on salausapuohjelma, joka voi luoda suojatun koodin ja varmistaa sen varmistaaksemme, että se on kelvollinen, käytetty vain kerran, eikä ole vanhempi kuin tietty määrä sekuntia. Käytämme myös UUID: tä, joka on yksilöivä tunniste, joka tunnistaa käyttäjän tunnuksen allekirjoittamisessa, ja URL -osoitteessa, johon merkki lähetetäänkäyttäjä. Käytämme tätä perussalausta rakentaaksesi kahden tekijän todennusnäkymän. Ennen kuin teemme jotain muuta, suoritetaan siirrot, jotta käyttäjämallimme päivitetään. Suorita seuraavat komennot Management.py: n kanssa

source venv/bin/activate
python manage.py makemigrations && python manage.py migrate

This is important because every time we make changes to the models, we will need to create the tables and update the database with defaults before we can actually use the models.

Seuraavaksi improvisoidaan kirjautumisnäkymme ohjataksesi toissijaisen todennuksen näkymään. Poista Users/View.py -sovelluksessa kirjautumistoiminto ja ohjata uudelleen käyttäjämalleissa juuri luomamme URL -osoitteeseen.

# … Tuonti
        if user and user.profile.can_login < timezone.now(): # Huomaa, että tarkistamme nyt, voiko käyttäjä kirjautua sisään
            # Poista auth_login -toiminto, joka oli täällä
                return redirect(user.profile.create_auth_url()) # Huomaa, että ohjaamme uuteen URL -osoitteeseen täällä
            else: # Jos käyttäjä ei käytä monitektorista todennusta, kirjaudu vain sisään.
        else: # Jos kirjautuminen ei onnistunut,
            user = User.objects.filter(username=username).first() # Tämä on osa, jossa päivitämme käyttäjien profiilin
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Joten he eivät voi kirjautua uudelleen muutaman sekunnin ajan

Joten tämä on melko yksinkertaista, meillä on nyt tapa ohjata kahteen tekijän todennusnäkymään, kun luomme sen. Meillä on myös varaus, jos käyttäjä ei ole lisännyt puhelinnumeroa. Lisäämme perusnäkymän lisätäksesi puhelinnumeron pian ja kirjaudumme pian tekstiviestiin.

Ensinnäkin tarvitsemme helpon tavan lähettää tekstiviesti koodistamme. Tätä varten voimme valita useista sovellusliittymistä, mutta mielestäni helpoin on Twilio. Ne tarjoavat myös hyvän hinnoittelun pienemmille projekteille sekä irtotavarana alennuksille. Luo tili Twilio.com -sivustolle, täytä joitain yksityiskohtia projektistasi, osta puhelinnumero ja kopioi sovellusliittymäsi avaimet asetukset.py. Lisää sitten tämä koodi uuteen tiedostoon, käyttäjät/sms.py.

nano users/sms.py
# Tuo kaikki tarvittavat paketit
# Tämä koodi lähettää tekstin Twiliolla
# Helper -toiminto saadaksesi numeron niin monella numerolla
# Lähetä teksti tarkistaaksesi käyttäjän
# Lähetä käyttäjälle minkä tahansa tekstin tällä toiminnolla
# Vahvista koodi tällä toiminnolla
# Vahvistaa aika

Muista muuttaa asetukset asianmukaisesti, lisäämällä nämä rivit näppäimisiisi:

# Muista kopioida nämä Twilio -kojetaulusta
AUTH_VALID_MINUTES = 3 # Minuutin lukumäärä TFA -sivu on aktiivinen kerran

Ensinnäkin tarvitsemme lomakkeita kahdelle tekijän todennusnäkymälle. Käyttäjien/forms.py: n muokkaaminen lisää seuraava koodi.

# … Tuonti
# Lomake puhelinnumeromme syöttämiseksi
# Lomake todentamiseksi

Seuraavaksi luodaan näkymät käyttäjille/Views.py

# … Tuonti

Tarvitsemme myös malleja molemmille näille näkemyksille. Lisätään ensin MFA -malli.

nano users/templates/users/mfa.html

Lisää tämä HTML -koodi malliin

Tämä on melko itsestään selvää. Lomake lähettää joko koodin tai tyhjän koodin, ja huomaat, että lähetämme koodin, jos saamme tyhjän koodin. Sitten meillä on vain kaksi lähetyspainiketta, ja tällä tavalla voimme lähettää koodin jommallakummalla painikkeella. Seuraavaksi lisäämme yksinkertaisen lomakkeen lisätäksesi puhelinnumeron.

nano users/templates/users/mfa_onboarding.html

Lisää seuraava HTML:

Tämä lomake on paljon yksinkertaisempi, se vain tekee luomamme puhelinnumeron ja antaa käyttäjän lisätä puhelinnumeron.

Tämä näyttää todella hyvältä! Niin kauan kuin kaikki on asennettu oikein, meidän pitäisi pystyä lähettämään viestejä ja kirjaamaan käyttäjä heidän puhelinnumeronsa kanssa heti, kun lisäämme URL -mallit. Viimeinen asia, joka meidän on asetettava, on profiilinäkymä, jotta voimme varmistaa, että käyttäjä voi muuttaa puhelinnumeronsa ilman kirjautumista sisään. Lopulta myös haluamme lisätä "Stop to Quit" -vaihtoehdon, jotta käyttäjä voi "lopettaa" lopettaaksesi tulevat tekstiviestit.

Lisätään profiilinäkymä käyttäjille/View.py. Tämä näkymä päivittää käyttäjän bio-, sähköposti-, käyttäjänimi- ja puhelinnumeron ja antaa meille mahdollisuuden ottaa käyttöön monitekijän todennus. Ensinnäkin tarvitsemme vielä kaksi muotoa käyttäjiä/forms.py

# ... tuonti

Seuraavaksi voimme luoda näkymän, jota voidaan käyttää molemmat nämä muodot. Muokkaa käyttäjiä/View.py ja lisää näkymä.

# Lisää nämä tuonti

Tarvitsemme myös mallin tähän näkemykseen.

nano users/templates/users/profile.html

Huomaat, että tämä on melko yksinkertainen muoto, mutta siinä on jonkin verran JavaScriptiä, joka lähettää lomakkeen sisällön automaattisesti, kun ne päivitetään. Tätä on hyödyllistä, joten pystyt tekemään muokkauksia joutumatta painamaan lähettämistä joka kerta.

Seuraavaksi tarvitsemme URL -osoitteita, jotka edustavat kaikkia näitä näkymiä käyttäjien URL -osoitteessa. Muokkaa käyttäjiä/urls.py ja lisää tämä koodi:

# … Edellinen koodi, tuonti
# … Lisää seuraavat kolme riviä URL -URL -mallit, jotka olemme aiemmin syöneet

Nyt on hyvä aika testata projektimme. Mutta ensin suoritetaan uusi varmuuskopio.

backup

Ja suorita palvelinta. Ennen kuin siirrymme Linux -palvelimeen, on hyvä idea ottaa käyttöön kaksi tekijätodennusta tilillä. Teemme tämän menemällä profiilin URL -osoitteeseen,/käyttäjät/profiili/, ja valitamme ruudun sallia todennuksen puhelinnumeromme kirjoittamisen jälkeen ja sitten lomakkeen lähettämisen jälkeen.

python manage.py runserver localhost:8000

Vieraile verkkosivustolla siirtymällä verkkoselaimeen, käytän tässä esimerkissä Google Chromea ja kirjoitan URL -osoitteeseen https: // localhost: 8000/tilit/profiili/

Voit tarvittaessa kirjautua sisään ja ottaa käyttöön kaksi tekijän todennusta.

Tämä projekti tarvitsee palvelimen toimimaan, jotta se voi todella lähettää postia. Mutta ensin tarvitsemme tavan nähdä virheitä. Huomaat, että jos suoritat palvelimen virheenkorjaustilassa, kun asetukset.debug on yhtä suuri kuin totta, palvelin näyttää virheet automaattisesti. Virheiden näyttämiseksi käyttämättä virheenkorjaustilaa, joka on vaarallinen tuotantopalvelimella, meidän pitäisi lisätä näkymä siihen. Tärkeimmät virheet, jotka meidän on kyettävä käsittelemään, ovat:

Virhe 500 - ongelma koodissamme Virhe 404 - sivu, jota ei löytynyt (rikki URL) VIRHE 403 - Lupa kielsi virheen

Lisätään uusi sovellus näiden virheiden käsittelemiseksi, nimeltään virheet.

python manage.py startapp errors

Lisää tämä asetukset.py, kuten aiemmin teimme, asennettuun_apps -asetukseen ja aloita lisäämällä viitteitä joihinkin näkymiin App/URLS.PY: ssä, missä sovellus on Django -projektisi nimi.

handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'

Tämä on kaikki mitä tarvitsemme virheiden, mallien ja vähän väliohjelman lisäksi. Määritetään ne niin:

# Luo näkemyksesi täältä.

Määritämme seuraavaksi väliohjelman näiden virheiden käsittelemiseksi. Teemme tämän lisäämällä ensin Middleware_Classes -sovellukseen asetusten.py, väliohjelmamme nimellä.

    # ... Edellinen väliohjelmisto

Lisätään seuraavaksi väliohjelmisto.

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.')

Lisäämme toiminnon saadaksesi nykyisen poikkeuksen käyttämällä kierteitä paikallista, mikä auttaa meitä jäljittämään koodimme kaikki virheet. Mallien suhteen tarvitsemme vain sellaisen, koska määrittelemme otsikon dynaamisesti. Malli on vain tehtävä otsikko ja "jäljitys", virheitämme asiayhteydestä.

nano errors/templates/errors/error.html

Tämä on vielä yksinkertaisin malli, mutta se on kuinka helppoa on nähdä projektimme virheet. Seuraavaksi poistetaan virheenkorjaus käytöstä asetuksissa.

nano app/settings.py

Löydä tämä rivi, jossa se on asetettu totta, ja muuta se vääriksi

DEBUG = False

Mene eteenpäin ja varmuuskopioi sovellus nyt. Olemme valmiita ottamaan käyttöön Etä Linux -palvelimelle ja lisäämällä ominaisuuksia sieltä.

sudo backup

Ennen kuin lähetämme tämän koodin palvelimelle, meidän on otettava huomioon, että koodissa voi olla joitain ongelmia. Tapauksesta riippuen sivustoilla, jotka hyväksyvät heille lähetetyt tiedot, on ongelmia roskapostin lähettämiseen ja roskapostin poistamisvaikeudet. Tämän ei pitäisi tapahtua heti, mutta jos se tapahtuu, tutkimme myöhemmin, miten sivustolla olevat roskapostia voidaan ohjata automaattisesti ja teemme robottien kovempaa pääsyä sivustoon sekä käyttäjätilien deaktivointi ja käyttäjän identiteetin tarkistaminen ja käyttäjän henkilöllisyystodistusSkannaa heidän tunnuksensa tai biometrinen skannaus, kuten sormenjälki tai kasvot

Tarkasteltaessa monitekijöiden todennusesimerkkiä, jota tutkimme tuotannossa, asiat voivat olla erilaisia. Huomaa, kuinka korkoa rajoittavat kirjautumiset ja vanhentuvat rahakkeet. Jos robotit käyttävät sivustoa, kaksi tekijän todennusta voi olla vaikeampaa, koska ne voivat syöttää koodeja samanaikaisesti käyttäjän. Tämän torjumiseksi käytämme mallimallia käyttäjämallissa, ilmoittamalla, kuinka olemme vuorovaikutuksessa sivuston kanssa, kun todennamme monitekijän todennusta puhelinnumerolla. Lisäämme myösmahdollisuus todentaa sähköpostilla. Aloita muokkaamalla käyttäjämalleja

nano users/models.py

Tämän lisäämämme mallin pitäisi näyttää. Emme tarvitse mitään menetelmiä, vain muuttujia tunnuksen, käyttäjän, aikaleiman, vanhentumisen, pituuden ja yrityksien tallentamiseksi minkä tahansa monitekijän todennusta vastaan (koodi, kuten 123456, lähetetty puhelimeen tai sähköpostille).

# Perustunnus kirjautui sisään verkkosivustoon

Lisätään myös käyttöoikeus käyttäjällemme, ja asetamme sen nyt manuaalisesti, ennen kuin lopulta siirrymme etuoikeutettuihin käyttäjiin automaattisesti. Lisää tämä rivi profiiliin käyttäjämalleihin:

    vendor = models.BooleanField(default=False)

Kuten kaikki tietokannan muutokset, meidän on tehtävä siirrot ja siirrettävä tietokanta aina, kun muokkaamme malleja.py -tiedostoa Djangossa. Muista, että tämän tekemiseksi käytämme ensin lähdettä (jos sitä ei ole jo käytetty päätelaitteen avoimesta) ja sitten python manag.py siirtymien ja siirtymisen tekemiseksi.

cd project-directory-you-named # (tarvittaessa)

Toistaiseksi voit ottaa kaikki myyjiksi luomasi tilit kuoren avulla.

python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()

Kehitämme nyt monitekijän todennusnäkymämme tämän tunnuksen käyttämiseen. Ensinnäkin meidän on muokattava MFA -auttaja -apuohjelmiamme. Nanon avulla,

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
# Todenta käyttäjä heidän sähköpostinsa tai puhelinnumeronsa avulla
    token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Suodata merkki URL -osoitteessa läpäisemällä arvolla (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)) # Jos tätä istuntoa ei ole luotu, luo se
    user = User.objects.filter(id=token.user.id).first() # Hanki käyttäjä tokenista
    if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Jos ne ovat jo todennettuja, kirjaudu sisään
    if not user: raise PermissionDenied() # Kielletä, jos käyttäjää ei löydy
    if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Tarkista Auth -tunnus
        auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Kirjaudu sisään käyttäjälle, jos niitä ei ole jo kirjautunut sisään
        user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Aseta vanheneminen heidän monitekijän todennukseen
        return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Ohjaa käyttäjä seuraavalle sivulle
    if not user.profile.mfa_enabled: # Tarkista, onko MFA käytössä
        if not check_verification_time(user, token): # Tarkista aika
            user.profile.mfa_enabled = False # Tyhjennä puhelinnumero
            user.profile.enable_two_factor_authentication = True # Ottaa käyttöön MFA
            user.profile.phone_number = '+1' # Poista puhelinnumero käytöstä
            user.profile.save() # Tallenna profiili
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Kirjaudu käyttäjälle, jos heidän MFA: ta ei ole käytössä
    if request.method == 'POST' and not fraud_detect(request, True): # Jos pyyntö on postipyyntö
        form = TfaForm(request.POST) # Välittömä muoto
        code = str(form.data.get('code', None)) # Saada koodi
        if code and code != '' and code != None: #  Make sure it's not empty
            token_validated = user.profile.check_auth_token(usertoken) # Tarkista Auth -tunnus
            is_verified = check_verification_code(user, token, code) # Tarkista koodi
            if token_validated: # Jos kaikki
                if is_verified: # On kunnossa
                    user.profile.mfa_enabled = True #  Enable MFA (if not already enabled)
                    auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Kirjaudu sisään käyttäjälle
                    for key, value in request.GET.items(): # Rakenna querystring seuraavalle parametrille (jos sellainen on)
                        return HttpResponseRedirect(next) #  Redirect
            elif not token_validated: # Jos merkki oli virheellinen
            if p.mfa_attempts > 3: # Jos yrityksiä olisi liian paljon
            if form.data.get('send_email', False): # Lähetä sähköposti (tai teksti)
    #  Render the form (for get requests)

Kun lisäämme tähän koodiin, muista tuoda toiminto sähköpostin lähettämiseksi. Lisää tiedoston yläosaan (muiden tuontien kanssa)

from .mfa import send_verification_email as send_mfa_verification_email

Nyt meidän on kirjoitettava tämä toiminto ennen kuin jokin näistä toimii. Sen tulisi laajentaa Lähetä sähköpostitoimintoamme ja lähettää vain sähköposti käyttäjälle varmennuskoodilla.

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))

Joten tämä kaikki toimii hienosti, nyt meillä on monitekijän todennusjärjestelmä, joka riippuu puhelinnumerosta tai sähköpostista kirjautumiseen. Mutta tarvitsemme myös tavan poistaa tai ainakin piilottaa käyttäjiä, jotka eivät ole yhteistyössä ehtojen kanssa. Nämä voivat olla roskapostittajia, robotteja tai ketään, joka ei tarkoita hyvin työhömme. Katso näkymää, joka minulla on käyttäjien seurannasta verkkosivustollani:

# tuonti
from .tests import is_superuser_or_vendor #  We will need to create this test
    # Hanki luettelo käyttäjistä
    return render(request, 'users/users.html', { #  Return users in a template

Huomaa, että tämä koodi käyttää testiä, meidän on ilmoitettava tämä testi test.Py -tiedostossa ja tuodaan se. Käyttäjien/testien muokkaaminen, luodaan testi.

def is_superuser_or_vendor(user):
    return user.profile.vendor or user.is_superuser

This is in conjunction with the users/users.html template, which looks something like this:

Note that the template includes another template, users/user.html. When using a template that has a subtemplate and not using extends, its a good idea to add an underscore () before the name of the file to extend, in order to distinguish templates.

Note that this is a lot of jinja, you may not have all of these variables defined. But this is what my code looks like.

      <small># {{ user.id }}</small>

We also need another subtemplate, toggle_active.html. This template should be a form that allows us to toggle whether a user is active.

Meidän on myös lisättävä näkymä käyttäjän toiminnan vaihtamiseen ja sopiviin URL -osoitteisiin. Kun olemme siinä, lisätään näkymä käyttäjän poistamiseksi, jos tarvitsemme sitä.

# Tuonti
    success_url = '/' #  The redirect on success URL
    def test_func(self): #  Test if user is superuser and has permission to delete

While this is practical when necessary, deleting a user shouldn't be necessary most of the time, we can just toggle the visibility of users who visit the site if we need to dismiss them.

The URL patterns we added look like this. With nano, edit users/urls.py and add these lines:

nano users/urls.py

Rivien tulisi mennä käyttäjän näkemysten polkujen luetteloon ennen päättymistä "]", mutta alun jälkeen "[".

# Niin
# Niin

Varmista nyt, että varmuuskopioida sivusto, jotta voit ladata sen verkkopalvelimelta, jonka parissa jatkamme. Komentoriviltä,

sudo backup

Pääsemme kaiken tämän. Tärkein asia on vain saada tämä koodi verkossa, mitä voimme tehdä vain muutamalla rivillä bash -palvelimella Ubuntu -palvelimella. Sinun on kuitenkin vuokrattava palvelin tähän, ellei sinulla ole kotona olevaa palvelinta ja yrityksen Internet -tilaus, jonka avulla voit avata portit. Suoritan henkilökohtaisesti verkkosivustoni HP Z440: llä, joka on asennettu huoneistooni, mutta se on yleensä paljon halvempaa Virtuaalisen yksityisen palvelimen (VPS) vuokraamiseen.

Muista, että nyt käyttämämme koodi on suhteellisen ohut, se on ylläpidettävä ja parannettava ennen kuin olemme valmiita käyttämään tuotteen rakentamista. Varmista, että olet varovainen, mitä teet Internetin kanssa, varmista, että otat tämän sivuston julkisesti Linux -palvelimen verkkoon, sinulla on suunnitelma estää ei -toivotut vuorovaikutukset verkkosivustosi kanssa. Tämä todennäköisesti ei ole aluksi ongelma, mutta tutkimme erilaisia ratkaisuja tämän torjumiseksi, mukaan lukien koneoppiminen,Keinotekoinen äly ja tietokoneen visio. Kun siitä tulee ongelma, katso tarkemmin tässä tekstissä a

VPP: n vuokraamisessa on paljon paikkoja, joihin voit mennä. Google Cloudissa on VPS -palvelimia, Ionos, Kamatera, Amazon AWS ja muut palveluntarjoajat tarjoavat Cloud Server -ratkaisuja, jotka vastaavat tarpeitamme.

ssh-keygen

Tallenna tiedosto ja korvaa se tarvittaessa, on hyvä kääntää SSH -näppäimiä, jos et vielä ole. Nyt voit käyttää seuraavaa komentoa nähdäksesi SSH -avaimen. Haluat kopioida sen etäpalvelimelle, jotta voit käyttää sitä todentamiseen.

cat ~/.ssh/id_rsa.pub

Jos et pystynyt näkemään SSH-avainta kirjoittaessasi tätä komentoa (pitkä numero- ja kirjainjono "SSH-RSA AAA"), kokeile luoda RSA-avain (ne ovat turvallisempia, joten suosittelen niiden käyttämistä.) Seuraava koodi tuottaa 4096 bittin RSA SSH -näppäimen.

ssh-keygen -t rsa -b 4096

Luo VPS, joka käyttää Ubuntua, kuitenkin aiot tehdä tämän. Kun olet luonut VPS: n napsauttamalla Providers -verkkosivuston lomakkeita (kamera.com, ionos.com tai vastaavat), sinun kannattaa kirjautua sisään. Jos haluat tehdä tämän, käytä SSH -komentoa IP -osoitteesi kanssa (osoite, joka näyttää xx.xx.xx.xx). Sinun on myös oltava herkkä oletuskäyttäjätunnukselle luomillemme palvelimella, esimerkiksi Ubuntu.

ssh ubuntu@XX.XX.XX.XX

Sinua voidaan pyytää salasana, jos sinulta pyydetään salasana, kirjoita se sisään. Emme käytä oletuskäyttäjänimeä, joten aloitetaan luomalla uusi käyttäjä ja lisäämällä SSH -avain heidän tililleen.

Aloitetaan lisäämällä uusi SSHD_Config -tiedosto, joka kertoo palvelimelle, kuinka SSH: ta käytetään.

nano sshd_config
# Tämä on SSHD-palvelinjärjestelmän koko määritystiedosto.  Nähdä
# shd_config (5) saadaksesi lisätietoja.
# Tämä SSHD on koottu polulla =/USR/Local/Sbin:/USR/Local/Bin:/USR/SBIN:/USR/BIN:/SBIN:/BIN:/USR/Games
# Strategia, jota käytetään asetettujen SSHD_Config -asetusten kanssa
# OpenSSH: n on määritettävä vaihtoehdot oletusarvollaan missä
# mahdollista, mutta jätä heidät kommentoi.  Kommentoitumattomat vaihtoehdot ohittavat
# Oletusarvo.
# Satama 22
# Osoiteperhe kaikki
# Kuuntele 0,0,0,0
# Kuuntele
# Hoskey/etc/ssh/ssh_host_rsa_key
# Hoskey/etc/ssh/ssh_host_ecdsa_key
# Hoskey/etc/ssh/ssh_host_ed25519_key
# Salaukset ja avain
# RekeyLIlMit -oletus ei ole mitään
# Puunkorjuu
# Syslogfacity Auth
# Loglevel -tiedot
# Todennus:
# LogingRaceTime 2m
# Sallirrootlogin kieltää password
# Tiukkamodit kyllä
# Maxauthtries 6
# MaxSessions 10
# Odottaa .SSH/valtuutetun_keys2 jätetään huomiotta tulevaisuudessa.
# ValtuutettuPrincipalsFile Ei mitään
# ValtuutetutKeysCommand Ei mitään
# ValtuutetutKeyscommanduser kukaan ei
# Jotta tämä toimisi, tarvitset myös isäntänäppäimiä/etc/ssh/ssh_chold_hosts
# HostbasedAuthentication No
# Vaihda kyllä, jos et luota ~/.ssh/tunnetuksi_hostiksi
# Isäntä
# Ohjaajatieto
# Älä lue käyttäjän ~/.rhosts ja ~/.shosts -tiedostoja
# Tietäjät
# Tunneloitujen selkeiden tekstisalasanojen poistaminen käytöstä vaihda ei täällä!
# Sallia
# Vaihda kyllä, jotta haastevaste-salasanat mahdollistaisivat (varoon ongelmia
# Jotkut PAM -moduulit ja langat)
# Kerberos -vaihtoehdot
# Kerberosauthentication ei
# Kerberosorlocalpasswd kyllä
# Kerriticketcleanup kyllä
# KerberosgetAfSTOKOKO EI
# GSSAPI -vaihtoehdot
# GSSAPIAUTHENCINTION NO
# GSSAPICLEANUPCREDENTICS KYLLÄ
# GSSAPIStrictAcceptorCheck yes
# Gssapikeyexchange no
# Aseta tämä 'kyllä', jotta PAM -todennus, tilinkäsittely
# ja istunnon käsittely. Jos tämä on käytössä, PAM -todennus tulee
# sallitaan kbdinteractiveauthentication ja
# Salasanaa.  PAM -määrityksestäsi riippuen,
#  PAM authentication via KbdInteractiveAuthentication may bypass
# "sallirrootloginin ilman password" -asetusta.
# Jos haluat vain PAM -tilin ja istuntotarkastusten suorittamisen ilman
#  PAM authentication, then enable this but set PasswordAuthentication
# ja kbdinteractiveauthentication 'ei'.
# Sallia
# SalliTCPForwarding Kyllä
# Gatewayports Ei
# X11DisplayOffset 10
# X11uselocalhost Kyllä
# PermitTTY yes
# PrintLastLog yes
# TCPKeepAlive yes
# PermitUserEnvironment no
# Compression delayed
# ClientAliveInterval 0
# ClientAliveCountMax 3
# Käytetyt nro
# PidFile /run/sshd.pid
# MaxStartups 10: 30: 100
# PermitTunnel no
# Chrootdirectory Ei mitään
# Versioddendum Ei mitään
#  no default banner path
# Anna asiakkaan välittää paikallisympäristömuuttujia
# Ohita Ei alajärjestelmät oletusarvo
# Esimerkki käyttäjän periaatteessa olevista asetuksista
# Vastaa käyttäjän anoncvs
# X11forwarding ei
# 	AllowTcpForwarding no
# Sallittu ei
# 	ForceCommand cvs server

Muista, että Ctrl+x ja y tallentaa tiedosto. Seuraavaksi kirjoitetaan peruskomentosarja nimeltä Alusta (kaikki käyttäjän oletushakemistossa).

nano initialize

Lisää nämä rivit tiedostoon korvaamallaSSH -avaimella, jonka löysit kissalla. (.SSH/ID_RSA.PUB)

# !/bin/bash

Tulosta heidän avainsa. Tämä uusi käyttäjä on miten kirjaudumme sisään

Mene uudessa päätelaitteessa ja avaa palvelin uudelleen.

ssh team@XX.XX.XX.XX

Sinun ei pitäisi tarvita salasanaa tällä kertaa, koska sinulla on SSH -avain. Olemme myös poistettu käytöstä salasanalla, jotta sivusto on turvallisempi.

Nyt tämä palvelin käynnistyy täysin tyhjänä ilman tietoja. Aloitetaan kloonaamalla projekti Gitistä, jotta voimme ladata ja ajaa sen etäkoneelle. Tulosta SSH -avain ensin SSH: n kautta kytkettynä etäpalvelimella:

cat ~/.ssh/id_rsa.pub

Liitä seuraavaksi tämä avain GIT -asetuksiin, kuten teimme ennen Git -arkistomme perustamista. Voimme nyt kloonata projektimme suoraan palvelimelle. Varmista, että olet varmuuskopioinut projektia ensin paikallisesti, jotta se on GIT -palvelimella ladattava.

git clone git://github.com/you/yourproject.git

Täydellinen. Nyt kaikki tiedostot ovat täällä. Voimme nähdä ne LS: llä

ls

Aloitetaan nyt palvelimen perustaminen. Kopioi ensin projektihakemisto yksinkertaiseen, ikimuistoiseen nimeen, jota käytämme projektiin.

cp -r yourproject whatyoucalledit

Missä "Whatyoucalledit" on projektisi uusi nimi. Seuraavaksi meidän on rakennettava perusapuohjelma palvelimen asettamiseksi. Säästämme tämän apuohjelman ja käytämme sitä tulevaisuudessa. Luodaan tämä apuohjelma, luodaan käyttäjäbinaari määritelläksesi kuinka muokkaamme komentosarjaa. Käyttämällä bashia, muokkaa/usr/bin/ascripti

sudo nano /usr/bin/ascript

Varmista, että käytät sudoa siellä, jotta sinulla on käyttöoikeuksia tiedoston muokkaamiseen. Lisää tiedostoon nämä rivit:

# !/Bin/bash
    echo "# !/Bin/bash ">>/usr/bin/$ 1

Muista, että tämä käsikirjoitus ottaa argumentin, komentosarjan nimen 1 dollarilla. Ensin se tarkistaa, onko tiedosto olemassa, vai luo muuten sen, lisää ensimmäisen rivin, jonka mukaan skripti on bash, muuttaa sen käyttöoikeuksiaan, muokata sitä ja lisää nimensä /etc /nimellä Cripts, jonka avulla voimme tallentaa luomamme skriptien nimet. Jos tiedosto on jo olemassa, muuta vain käyttöoikeuksia ja muokkaa sitä. Tallenna tiedosto, ja seuraavaksi muutamme sen käyttöoikeuksia. Niin kauan kuin käytämme tätä käsikirjoitusta, meidän ei tarvitse tehdä sitä uudestaan.

sudo chmod a+x /usr/bin/ascript

Täydellinen. Luotaan nyt skripti nimeltä SETUP. Ensinnäkin, et hukkua sinua, vaan katso, miltä asennuskomentosarjani näyttää. Käymme läpi sen, miltä tämän käsikirjoituksen pitäisi näyttää projektissasi, et tarvitse kaikkea käsikirjoituksessani aloittaaksesi.

# !/Bin/bash
# sudo chmod a+x skriptit/käyttäjättup
# ./scripts/usersetup
# ssh-avaingen
# Projektihakemisto
# Lokikomennot
# Nano -kokoonpano
# Git -kokoonpano
# Päivitä ja asenna
# Ota Clamav -virustorjunta
# Aseta isäntänimi
# Asennus Postgres
# Asetustietokannan varmuuskopiointi
# Poista Iptables käytöstä
# Asenna bitdefender
# Asennus postfix
# Luo dirs
# Asennus virtualenv
# Hanki ja rakenna riippuvuuksia
# Aseta palomuurisäännöt
# Asenna PYPI -riippuvuudet
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# Pip asenna OpenCV-Python == 4.5.5.64
# Pip asenna OpenCV-Contrib-Python == 4.5.5.64
# Asenna CertBot
# Suorita certbot
# Lataa postipalvelin uudelleen
# Kopiosertifikat
# sudo cp /etc/letSencrypt/live/femmebabe.com/privkey.pem frivkey.pem
# sudo cp /etc/letSencrypt/live/femmebabe.com/cert.pem cert.pem
# Patch Venv
# Aseta käyttäjän asetukset
# Aseta käyttöoikeudet
# sudo chown -r -tiimi: käyttäjät/var/juoksu/
# sudo chown -juuri: Juuri/juoksu/sudo/ts -r
# sudo chmod 664 db.sqlite3
# sudo chown www-data: käyttäjät db.sqlite3
# Kopioi kokoonpano ja aseta käyttöoikeudet
# Asetustietokanta
# Injektio PAM -konfigurointi ja poista viallinen SSH -kokoonpano
# sudo sed -i '' -e '$ d' /etc/pam.d/sshd
# sudo sed -i '' -e '$ d' /etc /profiili
# Kopioi roskakorit ja aseta käyttöoikeudet
# Lataa ja ota palvelut käyttöön
# Ota Apache -moduulit käyttöön
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# Poista oletussivusto käytöstä
# Ota sivustomme käyttöön
# Lataa daemoni ja käynnistä uudelleen Apache, Postfix ja OpenKim
# Aseta käyttöoikeudet
# Vaihda kokoonpano
# Aloitusmoottori
# Asennus
# Näytä IPv6 ja OpenKim verkkotunnuksen kokoonpanolle
# Asennus valmis

Se on paljon asennusta! Lyhyesti sanottuna, tämä koodi loki komennot, määrittää Nanon ja Git, kopioi tiedostojen kautta, lataa ja asentaa Ubuntu APT -paketit, Python -riippuvuudet, määrittää postFix: n, määrittää PostGresQL: n (tietokantapalvelin) ja lataa tietokannan, määrittää UFW: n. Palvelin ylöspäin, asentaa kokoonpanot, käynnistyy ja mahdollistaa seuraamisen, allokotit vaihtavat,Asettaa käyttöoikeudet ja tulostaa IP, IPv6 -osoite ja OpenKim -avain. Melko yksinkertainen, mutta se näyttää paljon koodilta. Emme tarvitse paljon tästä, koska meillä ei ole riippuvuuksia, emme käytä selleriä, selleriä tai Daphnea, mutta asennamme joitain niistä joka tapauksessa aloittamiseksi. Huomaa, että tässä koodissa on verkkotunnus julistettu useita

Meidän on myös ostettava verkkotunnus (joka on pieni vuosipalkkio). Suosittelen Squarespace -verkkotunnuksen ostamista varten, niiden asettelu on intuitiivinen ja helppokäyttöinen. Voit ostaa minkä tahansa valitsemasi verkkotunnuksen, mutta käytän tässä esimerkissä verkkotunnusta femmebabe.com. Kun olet ostanut verkkotunnuksen, siirry Squarespace DNS -määrityspaneeliin ja lisää A -tietue, joka osoittaa verkkotunnuksen palvelimelle IP -osoitteen avulla. Sen pitäisi näyttää tältä:

@ A xx.xx.xx.xx

Kun @ operaattori isäntänä, tarkoittaen kaikki tämän alueen ja juurten verkkotunnuksen aliverkkotunnukset ohjaavat kaikki palvelimelle. Ilmoittamista on enemmän tietueita, mutta voimme siirtyä näihin, kun olemme valmiita lähettämään postia. Muista, että voi kestää useita päiviä, ennen kuin pystyt lähettämään postin onnistuneesti palvelimelta. Asettamamme DNS -tietueiden levittäminen vie aikaa.

Joka tapauksessa ainoa aloitustietue on levy. Joten nyt voimme täyttää alla olevan skriptin projektimme mukaan ja suorittaa sen.

Aloitetaan pienemmällä asennuskomentosarjalla vain asentaaksesi sen, mitä tarvitsemme perusedellytykseen. Emme vielä käytä niin paljon riippuvuuksia tai PostgreSQL: ää, aloitamme vain HTTP -palvelimen ja olemme huolissamme sen varmentamisesta, kun se on tehty. Muista, että saadaksesi HTTPS -sertifikaatin ja suorittaa palvelin turvallisesti, meidän on ostettava verkkotunnus yhdessä vuokra -palvelimen kanssa. Korvaa nyt "tiimi" tässä tiedostossa käyttäjän nimellä "DIR" projektisi hakemistolla ja toimittamalla sähköpostiosoitteesi ja verkkotunnuksesi<>

Lisäksi ennen tämän koodin suorittamista meidän on vaihdettava asetukset palomuuriin, jota isännöintipalveluntarjoaja tukee, jos sellaista on. Yleensä tämä on isäntäpalveluntarjoajan 'verkkojen' -välilehdessä tai jos olet itse isännöinti, se on reitittimen Portin edelleenlähetysosassa. Haluat myös asettaa staattisen IP: n reitittimen kautta palvelinkoneen osoitteella, jos käytät itsetuntoa. Sinun on avattava seuraavat portit luku-/kirjoituskäyttöön.

22 (SSH) 25 (posti) 587 (posti) 110 (posti -asiakas) 80 (http) 443 (https)

# !/Bin/bash
# Lokikomennot
# Nano -kokoonpano
# Git -kokoonpano
# Päivitä ja asenna
# Ota Clamav -virustorjunta
# Aseta isäntänimi
# Asetustietokannan varmuuskopiointi
# Poista Iptables käytöstä
# Asennus virtualenv
# Asenna CertBot
# Suorita certbot
# Aseta käyttäjän asetukset
# Aseta käyttöoikeudet
# sudo chown -r -tiimi: käyttäjät/var/juoksu/
# sudo chown -juuri: Juuri/juoksu/sudo/ts -r
# Lataa ja ota palvelut käyttöön
# Ota Apache -moduulit käyttöön
# Lataa daemoni ja käynnistä uudelleen Apache, Postfix ja OpenKim
# Näytä IPv6 ja OpenKim verkkotunnuksen kokoonpanolle

Varmista ennen tämän koodin suorittamista, että ostamasi verkkotunnus on kytketty palvelimeen. Jos haluat tehdä tämän, avaa pääte paikalliselle koneellesi ja suorita tämä komento verkkotunnuksellasi:

ping femmebabe.com # Aseta verkkotunnuksesi tähän pingin jälkeen

Jos kaikki näyttää hyvältä ja palvelin lähettää vastauksia, olemme valmiita suorittamaan komentosarjan ja asentamaan paketit sekä käynnistämään, ottamaan käyttöön ja varmentamaan Apache -palvelimemme.

Tämä ei ole kaikki asennus, jota tarvitaan postfixin määrittämiseen, tarkastelemme tätä asennusta enemmän myöhemmin. Suorita nyt tämä asennuskoodi, ja palvelimen asentaminen ja sertifiointi kestää muutaman minuutin. Muista jälleen kerran korvata nimi, sähköposti ja verkkotunnus komentosarjassa ostamasi nimen mukaisesti.

Nyt kun palvelin on varustettu, voit siirtyä URL -osoitteeseen missä tahansa verkkoselaimessa ja tarkistaa, että palvelin käyttää HTTPS: tä. Jos ei ole, yritä odottaa vähän aikaa, ennen kuin DNS -tietueet tarttuvat ja suorita sitten seuraava komento uudelleenrrytoidaksesi CertBot -sertifikaattia:

sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com

Niin kauan kuin olet määrittänyt kaiken oikein, sinun pitäisi pystyä pääsemään Apachen oletussivulle vain tietääksesi, että koodisi toimii ja näyttää live -verkkosivut. Seuraavaksi muokkataan asetuksia.py muuttaaksesi oletusvikatilamme tuotantoon. Määritämme myös verkkotunnuksen asetuksissa sekä sisäisissä IP -laitteissa.

nano yourproject/settings.py

Asetuksissa muuta/lisää nämä viivat.

# Sivuston kokoonpano

Nyt meidän on määritettävä Apache2. Muokkaa konfigurointitiedostoa, jonka otat käyttöön tällä rivillä:

sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf

This config file should have our domain name in it, and the name of the user and project. I'm using the domain name femmebabe.com, the username team, and the project name femmebabe.

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

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

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

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

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

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

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

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

	TimeOut 60000
	LimitRequestBody 0

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

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

	RewriteEngine on
	RewriteCond %{SERVER_NAME} =femmebabe.com
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
</IfModule>

Varmista, että korvaa projektin, hakemistojen ja verkkotunnuksen nimen tässä esimerkkikoodissa, kun määrität palvelinta. Nyt meidän on poistettava oletussivusto käytöstä. Tämä voidaan tehdä bashilla.

sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl

Seuraavaksi voimme ottaa käyttöön oletussivuston ja ladata Apache2, käyttämällä myös bashia. Muista korvata Femmebabe sen tiedoston nimellä, jonka olet ilmoittanut muokkaamalla IN/etc/apache2/sivustoja, saatavilla/.

sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2

Go back to your domain in the navbar. You should see the site you configured in your web browser. Congratulations! If you don't see it, you may need to make some changes. Carefully review the settings in your project, apache configuration, and make sure you don't have any errors, and run the following commands to check the project for errors.

cd projectname
source venv/bin/activate
python manage.py check

Jos sinulla on virheitä Python -projektissasi, jäljitä ne missä ne ovat ja korjaa ne. Et ehkä pysty näkemään kaikkia virheitäsi riippuen siitä, missä ne ovat, joten jos sinulla on virhe, joka sanoo yksinkertaisesti "Appulaation ei ole reentrant", muokkaa seuraavaa tiedostoa virtuaaliympäristössä, Registry.py, paljastaaksesi virheen.

nano venv/lib/python3.12/site-packages/django/apps/registry.py

Vieritä riviin 83, jossa tämä ajonaikainen virhe nostetaan (nosta apertimeError ("populate () ei ole reentrant")) ja lisää kommentti ennen tätä riviä ja lisäämällä sitten samalla sisennyksellä Self.app_configs = {}. Tämä näyttää tältä:

                # Estä reentrant -puhelut välttääksesi appConfig.Ready ()
                # Menetelmät kahdesti.
# nosta RuntimeError ("Populate () ei ole reentrant")

You can then check the project again and expose the error.

python manage.py check

Sitten voit nähdä virheen ja korjata sen. Kun sinulla on se korjattu ja koodi kääntyy ilman virheitä, muista muuttaa tiedosto takaisin niin, että näyttää siltä:

                # Estä reentrant -puhelut välttääksesi appConfig.Ready ()
                # Menetelmät kahdesti.
# self.app_configs = {}

Edellyttäen, että palvelin on verkossa, kun teemme siihen muita muutoksia, meidän on käytettävä seuraavaa komentoa palvelimen uudelleen ladataksesi:

sudo systemctl reload apache2

Mahtava! Mutta entä postin lähettäminen? Sähköpostin lähettämisen aloittamiseksi meidän on ensin päivitettävä verkkotunnuksen kokoonpano. Tämän pitäisi olla DNS -paneelissasi Squarespacessa tai missä tahansa valitsemasi verkkotunnuksen rekisterinpitäjällä. Meidän on myös asennettava ja lisättävä kokoonpano ja suoritettava muutama komento.

Ensinnäkin, saadaan palvelimen IPv6 -osoite. Sitten avaamme DNS ja lisäämme tietueet.

Jos haluat saada palvelimen IPv6 -osoitteen, käytä tätä komentoa:

ip -6 addr

Nyt voimme lisätä seuraavat tietueet DNS -asetuksiin. Tietueeni näyttävät tältä. Tietueillesi sinun on kuitenkin korvata IP -osoite IP -osoitteella (ei 75.147.182.214, se on minun). Lisää myös verkkotunnuksesi femmebabe.com -sivuston tilalle, samoin kuin edellisestä komennosta löytynyt IPv6 -osoitteesi (et voi käyttää kaivoksen, Fe80 :: 725a: FFF: FE49: 3E02). Älä ole huolissasi DomainKeysta toistaiseksi, tämä luodaan, kun asetamme postfixin, postilaitoksen, OpenKimin kanssa ja tulostamme avaimen. Memääritä tämä

@ @ Eräs N/a 75.147.182.214

@ @ MX 10 femmebabe.com

@ @ Ptr N/a femmebabe.com

@ @ Txt N/a Txt @ V = SPF1 MX IP75.147.182.214IP6: FE80 :: 725a: FFF: Fe49: 3E02 ~ Kaikki

Oletus._bimi Txt N/a v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg

_Dmarc Txt N/a v = dmarc1; p = ei mitään

Lähdonly._Domainkey Txt N/a

Nyt meidän on lisättävä PostFix -tiedostoon jatkuvaa kokoonpanoa. Ainoa mitä meidän on tehtävä, on varmistaa, että korvaamme verkkotunnuksen, femmebabe.com, verkkotunnuksella, jota käytät. Tarkastellaan kaikkia konfigurointitiedostoja yksi kerrallaan ja asennetaan ne hakemistoon, nimeltään Config -projektimme, asentaaksesi käyttöjärjestelmään.

nano config/etc_postfix_main.cf

Lisää tämä teksti tiedostoon

# See /usr/share/postfix/main.cf.dist kommentoitu, täydellisempi versio
# Debian -spesifinen: Tiedostonimen määrittäminen aiheuttaa ensimmäisen
# Tiedoston rivi, jota käytetään nimellä.  Debian -oletus
# on /etc /mailName.
# myorigin = /etc /mailName
# Liittyminen .domain on MUA: n työ.
# Uncomment Seuraava rivi "viivästyneiden postin" varoituksen tuottamiseksi
# viiveen_warning_time = 4h
# Katso http://www.postfix.org/compatibility_readme.html - oletusarvo 3.6
# tuoreet asennukset.
# TLS -parametrit
# Milter -kokoonpano

Seuraava kokoonpano!

nano config/etc_postfix_master.cf

Lisää nämä rivit:

# 
# Postfix -pääprosessin määritystiedosto.  Lisätietoja muodossa
# Tiedostosta, katso Master (5) Manuaalinen sivu (komento: "Man 5 Master" tai
# Online: http://www.postfix.org/master.5.html).
# 
# Älä unohda suorittaa "PostFix Reload" tämän tiedoston muokkaamisen jälkeen.
# 
# ===============================================================================================
# Palvelutyyppi yksityinen Uriv Chroot Wakeup MaxProc Command + Args
# (Kyllä) (kyllä) (ei) (ei koskaan) (100)
# ===============================================================================================
# SMTP INET N - Y - 1 PostScreen
# SMTPD PASS - - Y - - SMTPD
# dnsblog unix - - y - 0 dnsblog
# tlsproxy unix - - y - 0 tlsproxy
# Valitse yksi: Ota käyttöön lähetys vain silmukka -asiakkaille tai mille tahansa asiakkaalle.
# 127.0.0.1:Submission inet n - y - - SMTPD
# -o syslog_name = postfix/lähetys


# -o smtpd_tls_auth_only = kyllä


# -o smtpd_helo_restrictions = $ mua_helo_restrictions
# -o smtpd_sender_restrictions = $ mua_sender_restrictions

# -o smtpd_relay_restrictions = lupa_sasl_authenticated, hylkääminen
# -o milter_macro_daemon_name = lähtö
# Valitse yksi: Ota SMTPS käyttöön vain silmukka -asiakkaille tai jokaiselle asiakkaalle.
# 127.0.0.1:SMTPS INET N - Y - - SMTPD
# SMTPS INET N - Y - - SMTPD
# -o syslog_name = postfix/smtps
# -o smtpd_tls_wrapperMode = kyllä
# -o smtpd_sasl_auth_enable = kyllä
# -o smtpd_reject_unlisted_reciPient = ei
# -o smtpd_client_restrictions = $ MUA_CLIENT_RESTICTICESS
# -o smtpd_helo_restrictions = $ mua_helo_restrictions
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
# -o smtpd_recipient_restrictions =
# -o smtpd_relay_restrictions = lupa_sasl_authenticated, hylkääminen
# -o milter_macro_daemon_name = lähtö
# 628 INET N - Y - - QMQPD
# QMGR UNIX N - N 300 1 OQMGR
# -o smtp_helo_timeout = 5 -o smtp_connect_timeout = 5
# 
# ==============================================================================
# Rajapinnat ei-postfix-ohjelmistoon. Muista tutkia käsikirja
# Ei-PostFix-ohjelmiston sivut selvittääksesi mitä vaihtoehtoja se haluaa.
# 
# Monet seuraavista palveluista käyttävät Postfix -putkea (8) toimitus
# agentti.  Katso putken (8) Man -sivu tietoa $ {vastaanottajasta}
# ja muut viestin kirjekuoren vaihtoehdot.
# ==============================================================================
# 
# MailDrop. Katso lisätietoja PostFix MailDrop_Readme -tiedostosta.
# Määritä myös main.cf: maildrop_destination_recipient_limit = 1
# 
# 
# ==============================================================================
# 
# Viimeaikaiset Cyrus -versiot voivat käyttää olemassa olevaa "LMTP" Master.CF -merkintää.
# 
# Määritä cyrus.conf:
# lmtp cmd = "lmtpd -a" kuuntele = "localhost: lmtp" proto = tcp4
# 
# Määritä Main.cf: ssä yksi tai useampi seuraavista:
# postilaatikko_transport = lmtp: inet: localhost
# Virtual_transport = lmtp: inet: localhost
# 
# ==============================================================================
# 
# Cyrus 2.1.5 (Amos Gouaux)
# Määritä myös main.cf: cyrus_destination_recipient_limit = 1
# 
# Cyrus unix - n n - - putki
# liput = drx käyttäjä = cyrus argv =/cyrus/bin/toimitus -e -r $ {lähettäjä} -m $ {Extension} $ {käyttäjä}
# 
# ==============================================================================
# Vanha esimerkki toimituksesta Cyruksen kautta.
# 
# Old -Cyrus Unix - n n - - putki
# liput = r käyttäjä = cyrus argv =/cyrus/bin/toimitus -e -m $ {laajennus} $ {käyttäjä}
# 
# ==============================================================================
# 
# Katso PostFix UUCP_ReadMe -tiedosto määritystiedot.
# 
# 
# Muut ulkoiset toimitusmenetelmät.
# 

Ja OpenKim -kokoonpano. OpenKim tunnistaa sähköpostipalvelimet verkkotunnusnäppäimillä, jotta ne olisivat turvallisempia. Ilman sitä postia ei allekirjoitettu eikä ehkä pääse postilaatikkoon.

nano config/etc_default_opendkim

Lisää nämä rivit:

# Huomaa: Tämä on vanha kokoonpanotiedosto. OpenKim ei käytä sitä
# Järjestelmäpalvelu. Käytä vastaavia määritysparametreja
# /etc/opendKim.conf sen sijaan.
# 
# Aikaisemmin on muokata oletusasetuksia täällä ja suorita sitten
# /lib/opendkim/opendkim.service.generse systemD -ohitustiedostojen luomiseksi osoitteessa
# /etc/systemd/system/opendkim.service.d/override.conf ja
# /etc/tmpfiles.d/opendKim.conf. Vaikka tämä on edelleen mahdollista, se on nyt
# Suositellaan asetusten säätämiseen suoraan /etc/opendkim.conf.
# 
# Demon_opts = ""
# Vaihda/Var/Spool/Postfix/Run/OpenKim käyttämään UNIX -pistorasiaa
# Postfix chrootissa:
# Rundir =/var/spool/postfix/run/opendkim
# 
# Uncommentti vaihtoehtoisen pistorasian määrittämiseksi
# Huomaa, että tämän asettaminen ohittaa kaikki pistorasian arvot OpenKim.confissa
# Oletus:
# Kuuntele kaikki portin 54321 rajapinnat:
# Pistorasia = INET: 54321
# Kuuntele Loopbackilla portissa 12345:
# Pistorasia = INET: 12345@localhost
# Kuuntele 192.0.2.1 satamassa 12345:
# Socket = INET: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf

Lisää nämä rivit:

# oletus_process_limit = 100
# Default_client_limit = 1000
# Oletusarvo VSZ (virtuaalimuistin koko) -raja palveluprosesseille. Tämä on pääasiassa
# tarkoitettu saamaan ja tappamaan prosessit, jotka vuotavat muistia ennen kuin he syövät
# kaikki.
# Default_vsz_limit = 256m
# Kirjautumisprosessit käyttävät sisäänkirjautumiskäyttäjää sisäisesti. Tämä on epäluotettavin
# käyttäjä DoveCot -järjestelmässä. Sillä ei pitäisi olla pääsyä mihinkään.
# Default_login_user = Dovenull
# Sisäistä käyttäjää käyttävät epäilyttämättömät prosessit. Sen pitäisi olla erillinen
# Kirjaudu sisään käyttäjä, jotta kirjautumisprosessit eivät voi häiritä muita prosesseja.
# Default_internal_user = dovecot
    # Portti = 143
    # portti = 993
    # ssl = kyllä
  # Käsitettävissä olevien yhteyksien lukumäärä ennen uuden prosessin aloittamista. Tyypillisesti
  # Ainoat hyödylliset arvot ovat 0 (rajoittamaton) tai 1. 1 on turvallisempi, mutta 0
  # on nopeampi. <doc/wiki/loginprocess.txt>
  # Service_count = 1
  # Prosessien lukumäärä, jotka aina odottavat lisää yhteyksiä.
  # Process_min_avail = 0
  # Jos asetat Service_count = 0, sinun on todennäköisesti kasvatettava tämä.
  # vsz_limit = $ oletus_vsz_limit
    # Portti = 110
    # portti = 995
    # ssl = kyllä
    # portti = 587
  # Luo INET -kuuntelija vain, jos et voi käyttää yllä olevaa UNIX -pistorasiaa
  # inet_listener lmtp {
    # Vältä LMTP: n näkyvää koko Internetissä
    # osoite =
    # portti =
  # }
  # Suurin osa muistista menee mmap () -tiedostoihin. Saatat joutua lisäämään tätä
  # Rajoita, jos sinulla on valtavia postilaatikoita.
  # vsz_limit = $ oletus_vsz_limit
  # Enintään IMAP -prosessien lukumäärä (yhteydet)
  # Process_limit = 1024
  # Enintään POP3 -prosessien lukumäärä (yhteydet)
  # Process_limit = 1024
  # Enintään SMTP -lähetysprosessien lukumäärä (yhteydet)
  # Process_limit = 1024
  # Auth_Socket_Path osoittaa tähän käyttäjänDB -pistorasiaan oletuksena. Se on tyypillisesti
  # käyttävät dovecot-lda, doveadm, mahdollisesti IMAP-prosessi jne.
  # Täydelliset käyttöoikeudet tähän pistorasiaan voivat saada luettelon kaikista käyttäjänimistä ja
  # Hanki kaikkien käyttäjät -hakujen tulokset.
  # 
  # Oletusarvo 0666 -tila antaa kenelle tahansa muodostaa yhteyden pistorasiaan, mutta
  # UserDB -hakut onnistuvat vain, jos UserDB palauttaa "UID" -kentän, joka
  # vastaa soittajan prosessin UID: tä. Myös jos soittajan UID- tai GID vastaa
  # pistorasian uid tai gid haku onnistuu. Kaikki muu aiheuttaa epäonnistumisen.
  # 
  # Aseta moodi
  # jotain muuta kuin 0666 ja Dovecot antaa ytimen valvoa
  # käyttöoikeudet (esim. 0777 sallii kaikkien täyden käyttöoikeuden).
  # Auth -työntekijän prosessi suoritetaan oletuksena juurina, jotta se voi käyttää
  # /etc/varjo. Jos tätä ei tarvita, käyttäjää tulisi muuttaa
  # $ Default_internal_user.
  # Käyttäjä = juuri
  # Jos DICT -välityspalvelinta käytetään, postiprosesseilla tulisi olla pääsy pistorasiaan.
  # Esimerkiksi: mode = 0660, ryhmä = vmail ja globaali mail_access_groups = vmail
    # tila = 0600
    # käyttäjä =

nano config/etc_dovecot_dovecot






































# login_access_sockets =




































nano config/etc_dovecot_passwd

team:{plain}yourpassword

nano config/etc_opendkim.conf


# Mukautettu sopimaan perusasennukseen. Katso OpenKim.conf (5) ja


# Loki, ei
# Yleiset allekirjoitus- ja todentamisparametrit. Debianissa "From" -otsikko on
# Ylimiehet, koska se on usein mainejärjestelmien käyttämä henkilöllisyys avain

# Verkkotunnuksen, valitsin ja avaimen allekirjoittaminen (vaaditaan). Suorita esimerkiksi allekirjoittaminen

# käyttämällä yksityistä avainta tallennettuna /etc/dkimkeys/example.private. Rakeinen

# Verkkotunnus esimerkki.com



# Käyttämällä paikallista pistorasiaa MTA: lla, joka käyttää pistorasiaa ei-etuna olevina
# käyttäjä (esimerkiksi PostFix). Saatat joutua lisäämään käyttäjän "postfix" ryhmään

# MTA -yhteyden pistorasia (vaaditaan). Jos MTA on Chroot -vankilassa,
# On varmistettava, että pistorasia on saatavilla. Debianissa Postfix juoksee sisään
# siksi chroot in/var/spool/postfix, siksi unix -pistorasian olisi oltava
# Konfiguroitu alla olevalla rivillä näkyy.


# Pistorasia INET: 8891
# Isännät, joille on allekirjoitettava tarkistamisen sijaan, oletus on 127,0.0.1. Nähdä
# OpenKimin (8) toiminta -osa saadaksesi lisätietoja.
# Internalhosts 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12

# paketin mukaan dns-root-data.
# Nimikevers 127.0.0.1
# Kartta -verkkotunnukset osoitteista näppäimiin, joita käytetään viestien allekirjoittamiseen
# Joukko sisäisiä isäntiä, joiden posti tulisi allekirjoittaa
nano config/etc_default_opendkim

Ja lisää nämä viivat

# Huomaa: Tämä on vanha kokoonpanotiedosto. OpenKim ei käytä sitä
# Järjestelmäpalvelu. Käytä vastaavia määritysparametreja
# /etc/opendKim.conf sen sijaan.

# Aikaisemmin on muokata oletusasetuksia täällä ja suorita sitten
# /lib/opendkim/opendkim.service.generse systemD -ohitustiedostojen luomiseksi osoitteessa
# /etc/systemd/system/opendkim.service.d/override.conf ja
# /etc/tmpfiles.d/opendKim.conf. Vaikka tämä on edelleen mahdollista, se on nyt
# Suositellaan asetusten säätämiseen suoraan /etc/opendkim.conf.
# 
# Demon_opts = ""
# Vaihda/Var/Spool/Postfix/Run/OpenKim käyttämään UNIX -pistorasiaa
# Postfix chrootissa:
# Rundir =/var/spool/postfix/run/opendkim
# 
# Uncommentti vaihtoehtoisen pistorasian määrittämiseksi
# Huomaa, että tämän asettaminen ohittaa kaikki pistorasian arvot OpenKim.confissa
# Oletus:
# Kuuntele kaikki portin 54321 rajapinnat:
# Pistorasia = INET: 54321
# Kuuntele Loopbackilla portissa 12345:
# Pistorasia = INET: 12345@localhost
# Kuuntele 192.0.2.1 satamassa 12345:
# Socket = INET: 12345@192.0.2.1

When we are ready to set up our Postfix server, we will run the below code, with the appropriate domain name embedded. Start by creating a script

touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup

Nyt Nanossa, tekstieditori, muokkaa tätä tiedostoa, joten se sisältää verkkotunnuksesi femmebabe.com -sivuston sijasta.

# !/Bin/bash
# Asennus postfix

Suorita nyt valmis skripti määrittääksesi Postfix, OpenKim ja DoveCot.

./scripts/postfixsetup

Once this script has run, copy the last line it prints and paste it into your DNS configuration as the value for sendonly._domainkey. This is the OpenDKIM key used to identify your domain when sending secure mail.

Mahtava! Muutamassa päivässä sinun pitäisi pystyä lähettämään postia palvelimelta, jos kaikki on määritetty oikein.

Jos olet juuri määrittänyt postipalvelimen DNS, tietueiden päivittäminen kestää alle 72 tuntia. Se on yleensä paljon nopeampaa. Voit tarkistaa, toimiiko palvelimesi käyttämällä tätä komentoa, toimittamalla sähköpostiosoitteesi:

echo "test" | mail -s "Test Email" youremail@gmail.com

If everything appears to be working correctly, you should be able to send email with your server. If it's not working, try looking at the logs to see what the error might be.

tail –lines 150 /var/log/mail.log

Tämä tarjoaa verbose -tietoja palvelimen lähettämistä postista ja toimiiko se oikein. Sinun pitäisi pystyä näkemään sähköpostia myös postilaatikossa, jos sitä ei ole siellä, tarkista roskapostikansio.

You will also need to configure your settings in your settings.py so your email server can talk to your Django app, the project. Add or replace these lines in your settings

EMAIL_HOST_USER = 'team' # 'Love@MamaSheen.com'

Notice that we are using a config file to get the password. Let's load this file in the settings like so, at the very beginning of the file.:

#  Open and load config

Luodaan tämä tiedosto ja lisätään siihen salainen avain sekä post -salasana. Voit luoda salaisen avaimen käyttämällä tätä komentoa millä tahansa pituudella, jonka haluat lopussa:

openssl rand -base64 64

Kopioi nyt tekstin, jonka OpenSSL luodaan ja edit /etc/config.json

sudo nano /etc/config.json

Add the following lines to your file, with the key that openssl generated as the secret key.

{
	"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
	"EMAIL_HOST_PASSWORD": "yourpassword"
}

Json format is simple and easy to use, we can declare other keys we want to use in our project this way too, and keep them separate from our project directory so other users can't write to them and so they can't be read from our project directory alone. This is recommended practice for API keys, of which we will use more than a few here.

You'll also want to back up your project to make sure everything is saved and you'll be able to recover your work later even if you no longer wish to rent a server.

sudo backup

Kokeile nyt lähettää HTML -sähköpostia verkkopalvelimelta, mikäli lähettäminen komentoriviltä toimii. Kysyt käyttäjä -ilmentymään kuoressa ja lähetä HTML -sähköposti kyseiselle käyttäjälle Djangon kautta. Vaihda nimeni koodissa, Charlotte, käyttäjätunnuksesi.

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()

Jos ensimmäinen komento ei toimi, muista käyttää

source venv/bin/activate

Edellyttäen, että kaikki on asetettu oikein, saat nyt Web -sovelluksesi lähettämän postilaatikon tervetuliais -sähköpostin. Hyvä työ! Olet edennyt pitkälle.

Auta tai ota yhteyttä tähän kirjaan uudelleen tai muita resursseja löytääksesi ratkaisuja kokemasi ongelmiin. Ymmärrän, että tämä ei ole helppoa, mutta vaikka olet lukenut tästä pitkälle etkä kirjoita koodia, opit paljon verkkosovelluksen rakentamisesta tyhjästä. Patt itsesi takaosaan, teet hienoa

Kiitos, että käytit aikaa tämän kolmannen painos web -kehitysoppaan lukemiseen. Tuleviin painoksiin sisällytän enemmän tärkeitä esimerkkejä, joita käsitellään asiakirjan alussa ja sukeltamme paljon syvemmälle ohjelmistojen ja laitteistojen kehityksen maailmaan. Pysy ajan tasalla siitä, mitä on tulossa, ja odotan innolla opettavan sinulle uskomattoman ohjelmiston rakentamista. Nähdään seuraavassa painoksessa!






Lähellä
Sivu 1
Hypätä
Katso koko artikkeli
Jatkaa lukemista

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Kuinka lähetän sähköpostin yhteensopivalla sähköpostiluettelolla ja peruuttamalla linkit?


Jos haluat lähettää sähköpostin, jossa on yhteensopiva luettelo ja tiukempi tilauslinkki, sinun tulee noudattaa näitä vaiheita:


1. Varmista, että sähköpostiluettelosi on kaikkien asiaankuuluvien määräysten, kuten Can-Spam Act ja GDPR, mukainen. Tämä tarkoittaa, että kaikkien vastaanottajien on oltava valinnut vastaanottaaksesi sähköpostisi ja että sinulla on heidän nimenomainen suostumus ottaa yhteyttä heihin.


2. Sisällytä selkeä ja näkyvä tilauslinkki sähköpostiisi. Varmista, että on helppo löytää ja napsauttaa, ja että se vie vastaanottajat suoraan sivulle, jolla he voivat helposti peruuttaa tilauksen postituslistastasi.


3. Jotta voit tehdä tilauksen linkin "Tiukempi", voit käyttää yhtä napsautuksen peruuttamisvaihtoehtoa. Tämä tarkoittaa, että vastaanottajat voivat peruuttaa sähköpostiviestistäsi vain yhdellä napsautuksella ilman, että heidän on täytettävä lisälomakkeita tai toimittamaan henkilökohtaisia ​​tietoja.


4. Lähettäessäsi sähköpostia, muista mukauttaa viesti ja osoita vastaanottaja nimellä, jos mahdollista. Tämä voi auttaa lisäämään sitoutumista ja saada sähköpostin tuntemaan olonsa merkityksellisemmäksi vastaanottajalle.


5. Ennen sähköpostin lähettämistä, testaa se varmistaaksesi, että tilauksen peruuttamislinkki toimii oikein ja että sähköposti näyttää hyvältä kaikilla laitteilla ja sähköpostitse asiakkailla.


Näitä vaiheita noudattamalla voit lähettää sähköpostin, jossa on yhteensopiva luettelo ja tiukempi peruuttamislinkki varmistaaksesi, että vastaanottajillasi on positiivinen kokemus ja että he voivat helposti poistua uusien sähköpostien vastaanottamisesta sinulta.

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Kuinka voin käyttää umpikujaa?


1. Aloita kasvattamalla hiukset haluttuun pituuteen. Hiusten tulisi olla vähintään 2-3 tuumaa pitkiä parhaita tuloksia.


2. Jaka hiuksesi pieniksi, jopa osille kammalla. Osastojen koko määrittää rastasi koon, joten muista valita mukava koko.


3. Aloita kukin hiusosan kääntäminen kiertämällä ja vetämällä sitä tiukasti juuria kohti. Tämä luo solmuja hiuksiin, jotka lopulta muodostuvat rastat.


4. Levitä vaha tai geeli jokaiseen hiusosaan auttamaan pitämään solmuja paikoillaan ja rohkaise hiuksia matolle yhteen.


5. Jatka takaisinottamista ja kiertämistä jokaisesta hiusosasta, kunnes olet suorittanut koko pään. Tämä prosessi voi olla aikaa vievää, joten ole kärsivällinen ja pidä taukoja tarpeen mukaan.


6. Kun kaikki hiuksesi on kierretty ja selkänoja, anna sen istua muutaman päivän, jotta solmut voivat kiristää ja muodostua rastatuksiin.


7. Muutaman päivän kuluttua voit alkaa tyyliä ja ylläpitää rastat pesemällä niitä jäännösvapaalla shampoolla ja käyttämällä virkkauskoukkua irtotaisten solmujen kiristämiseksi.


8. Pidä rastat, jotka näyttävät siististä ja siistinä, harkitse huivin tai bandaanin käyttöä peittämään ne nukkuessa tai likaisessa ympäristössä. Säännöllinen ylläpito ja ylläpito auttaa rastat pysymään terveinä ja elinvoimaisina.

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Miksi minun pitäisi käyttää omenaa L: n sanassa?


Omenan L: n käyttäminen L -sanassa voi parantaa katselukokemustasi monin tavoin. Apple L on suosittu suoratoistolaite, jonka avulla voit helposti käyttää ja katsella suosikkiohjelmiasi korkealaatuisella videolla ja äänellä. Käyttämällä omenaa l L -sanalla voit nauttia terävistä, selkeistä visioista ja kiehtovasta äänestä, joka saa sinut tuntemaan olosi oikeassa toiminnan keskellä.


Lisäksi Apple L tarjoaa käyttäjäystävällisen käyttöliittymän, jonka avulla on helppo selata jaksoja, keskeyttää ja kelata kohtauksia ja muokata katselukokemustasi. Voit myös hyödyntää ominaisuuksia, kuten äänihaku ja henkilökohtaiset suositukset, jotta voit löytää uutta sisältöä nauttimaan.


Kaiken kaikkiaan omenan käyttäminen L -sanassa voi tarjota sinulle premium -suoratoistokokemuksen, jonka avulla voit upottaa täysin näyttelyn kiehtovaan maailmaan.

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Miksi naamion käyttäminen julkisesti on turvallisempaa?


Naamion käyttäminen julkisesti on turvallisempaa, koska se auttaa estämään viruksia sisältävien hengityspisaroiden, kuten COVID-19, leviämisen. Kun joku, jolla on virus Lisäksi naamion käyttäminen voi myös suojata käyttäjää hengittämään hengityspisaroita muilta, jotka saattavat olla tartunnan saaneet. Tämä on erityisen tärkeää tilanteissa, joissa sosiaalista etäisyyttä on vaikeaaYlläpitää, kuten tungosta sisätiloissa tai julkisessa liikenteessä. Kaiken kaikkiaan naamion käyttäminen on yksinkertainen ja tehokas tapa vähentää virusten leviämistä ja suojata sekä itseäsi että ympärillä olevia


ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Mikä aiheuttaa migreeniä ja miten niitä hoidetaan?


Migreenit ovat vakavia päänsärkyjä, joihin liittyy usein muita oireita, kuten pahoinvointi, herkkyys valolle ja äänelle sekä näköhäiriöt. Migreenin tarkkaa syytä ei ymmärretä täysin, mutta sen uskotaan liittyvän aivojen verenvirtauksen ja kemikaalien muutoksiin.


Migreenihoito sisältää tyypillisesti elämäntapojen muutosten, lääkkeiden ja vaihtoehtoisten hoitomuotojen yhdistelmän. Joitakin yleisiä hoitovaihtoehtoja ovat:


1. Ottaen käsimyymälän kivun lievittäjiä, kuten ibuprofeenia tai asetaminofeenia

2. Reseptilääkkeet, jotka on erityisesti suunniteltu migreenin, kuten triptaanien ja ergotamiinien hoitamiseen

3. Vältä liipaisimia, kuten tiettyjä ruokia, stressiä, unen puutetta tai hormonaalisia muutoksia

4. Rentoutumistekniikoiden, kuten syvä hengityksen tai meditaation, harjoittaminen

5. Kuumien tai kylmien pakkausten levittäminen päähän tai kaulaan

6. Säännöllisen liikunnan ja terveellisen ruokavalion ylläpitäminen


Migreenistä kärsiville henkilöille on tärkeää työskennellä terveydenhuollon tarjoajansa kanssa kehittääkseen heidän erityistarpeisiinsa ja laukaisuun räätälöityjen hoitosuunnitelman. Joissakin tapauksissa voidaan tarvita hoitomenetelmiä migreenin tehokkaaseen hallintaan ja elämänlaadun parantamiseen.

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa



Kuinka voin rakentaa Full Stack Web -sovelluksen Djangon kanssa?


Täydellisen pino -verkkosovelluksen rakentaminen Djangon kanssa sisältää useita vaiheita. Tässä on prosessin yleinen kuvaus:


1. Aseta Django: Asenna ensin Django suorittamalla "Pip asenna django" komentorivilläsi. Luo sitten uusi Django-projekti suorittamalla `django-admin startproject myproject`.


2. Luo Django -sovellukset: Django -sovellukset ovat projektisi modulaarisia komponentteja, jotka palvelevat tiettyjä tarkoituksia. Voit luoda useita sovelluksia projektisi käsittelemään erilaisia ​​toimintoja.


3. Määritä mallit: Djangon malleja käytetään tietokantataulukoiden rakenteen määrittelemiseen. Luo mallit määrittelemällä luokat kunkin sovelluksen mallit.py -tiedostoon.


4. Luo näkymät: Näkymät Djangossa ovat Python -toimintoja, jotka käsittelevät käyttäjän pyyntöjä ja palauttavat vastaukset. Määritä sovelluksesi näkymät luomalla funktiot kunkin sovelluksen View.py -tiedostoon.


5. Aseta URL -osoitteet: Djangon URL -osoitteet käytetään käyttäjän pyyntöjen kartoittamiseen tiettyihin näkymiin. Määritä sovelluksesi URL -osoitteet luomalla URLS.Py -tiedosto jokaisessa sovelluksessa ja sisällyttämällä ne projektisi URLS.Py -tiedostoon.


6. Luo malleja: Djangon malleja käytetään HTML -sivujen luomiseen, jotka lähetetään käyttäjän selaimelle. Luo sovelluksellesi HTML -malleja luomalla jokaisessa sovelluksessa malli -kansio ja kirjoittamalla HTML -koodi erillisissä mallitiedostoissa.


7. Palvele staattisia tiedostoja: staattiset tiedostot, kuten CSS, JavaScript ja kuvat, palvelevat erikseen dynaamisesta sisällöstä Djangossa. Määritä staattiset tiedostoasetukset projektin asetusten.py -tiedostossa palvelemaan staattisia tiedostoja kunkin sovelluksen staattisesta kansiosta.


8. Määritä tietokanta: Määritä tietokanta -asetukset projektin asetusten.py -tiedostoon, mukaan lukien tietokantamoottori, nimi, käyttäjä, salasana ja isäntä.


9. Siirrä tietokanta: Suorita `python Management.py Makemthingations`, jota seuraa" python manager.py -siirto "komentorivilläsi luodaksesi ja soveltaa tietokannan siirtymiä mallejesi perusteella.


10. Suorita palvelin: Käynnistä Django -kehityspalvelin suorittamalla komentorivilläsi `python manager.py RunServer`. Sinun pitäisi nyt päästä verkkosovelluksesi osoitteessa `http: //127.0.0.1: 8000/` selaimessasi.


Nämä ovat perusvaiheet täydellisen pino -verkkosovelluksen rakentamiseksi Djangon kanssa. Täältä voit mukauttaa ja laajentaa sovellustasi lisäämällä todennusta, valtuutusta, sovellusliittymän päätepisteitä, testausta ja paljon muuta.


ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Mitkä ovat turvakameran hyödyt?


1. Rikollisen toiminnan estäminen - Turvakamerat voivat toimia pelotteena potentiaalisille rikollisille, koska he todennäköisemmin tekevät rikoksen, jos he tietävät, että heitä tarkkaillaan.


2. Valvonta ja seuranta - turvakamerat antavat sinun seurata omaisuuttasi ja pitää silmällä epäilyttävää toimintaa reaaliajassa, mikä auttaa estämään varkauksia, ilkivaltaa tai muita rikoksia.


3. Todisteet rikoksen tapauksessa - valitettavassa tapahtumassa, että kiinteistölläsi tapahtuu rikos, turvakameran kuvamateriaali voi tarjota tärkeitä todisteita lainvalvonta- ja vakuutusvaatimuksista.


4


5. mielenrauha - asennettu turvakamerat voivat tarjota mielenrauhan tietäen, että omaisuuttasi tarkkailee ja mahdollisia uhkia havaitaan ja kirjataan.


ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Aloin juuri ottaa ehkäisyvalvontaa. Mitkä ovat yleisimmät sivuvaikutukset?


Ehkäisypillereiden yleisimpiä sivuvaikutuksia ovat:


Kello 1.

2. rintojen arkuus

3. Päänsärky

4. painonnousu

5. mielialan muutokset

6. Spoting tai läpimurtoverenvuoto

7. Muutokset libidossa 

8. Akne 

9. turvotus 


On tärkeää huomata, että jokaisella henkilöllä voi olla erilaisia ​​sivuvaikutuksia, ja joillakin henkilöillä ei ehkä ole mitään. Jos sinulla on huolta ehkäisyvalvontasi sivuvaikutuksista, on parasta puhua terveydenhuollon tarjoajan kanssa.

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Kuinka isännöin verkkopalvelinta kodistani?


Verkkopalvelimen isännöinti kodistasi voidaan tehdä seuraamalla näitä vaiheita:


1. Valitse palvelinohjelmisto: Voit valita erilaisista palvelinohjelmistovaihtoehdoista, kuten Apache, Nginx, Microsoft Internet Information Services (IIS) jne. Valitse vaatimuksesi vastaava.


2. Aseta staattinen IP -osoite: Ota yhteyttä Internet -palveluntarjoajaan (ISP) ja pyydä staattista IP -osoitetta Internet -yhteydelle. Tämä varmistaa, että verkkosivustosi pysyy saatavana, vaikka IP -osoitteesi muuttuisi.


3. Määritä reititin: Kirjaudu sisään reitittimen hallintapaneeliin ja eteenpäin porttiin 80 (HTTP -liikenteen oletusportti) palvelimen sisäiseen IP -osoitteeseen. Tämä antaa ulkoisen liikenteen päästä verkkopalvelimeen.


4


5. Testaa verkkosivustosi: Tarkista, onko verkkosivustosi saavutettavissa syöttämällä staattinen IP -osoitteesi verkkoselaimeen. Voit myös testata sen online -työkaluilla, kuten Pingdom tai GTMetrix.


6. Verkkotunnuksen nimi ja DNS -asetus: Rekisteröi verkkotunnus verkkosivustollesi ja aseta DNS -tietueet osoittaaksesi staattisen IP -osoitteesi.


7. Suojaustoimenpiteet: Suorita turvatoimenpiteet, kuten palomuurit, salaus, säännölliset varmuuskopiot jne., Suojataksesi verkkopalvelinta tietoverkkouhkilta.


8. Seuraa ja ylläpitä: Seuraa säännöllisesti palvelinta suorituskykyongelmien, tietoturvauhkien ja ohjelmistopäivitysten varalta. Pidä palvelinohjelmisto ja sovellukset ajan tasalla varmistaaksesi sujuvan toiminnan.


Huomaa, että verkkopalvelimen isännöinti kodistasi ei välttämättä sovellu suuren liikenteen verkkosivustoille tai arkaluontoisille tiedoille mahdollisten tietoturvariskien ja rajoitetun kaistanleveyden vuoksi. Harkitse ammattimaisen web -hosting -palvelun käyttöä tällaisiin vaatimuksiin.


ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Kuinka salausmarkkinat kasvavat niin nopeasti?


Kryptovaluuttamarkkinoiden nopeaan kasvuun vaikuttavat useita tekijöitä. 


1. Lisääntynyt tietoisuus ja adoptio: Kun useammat ihmiset tietävät kryptovaluutista ja niiden mahdollisista eduista, kryptovaluutta -investointien kysyntä on kasvanut merkittävästi. Tämä lisääntynyt kiinnostus on johtanut markkinoille osallistuvien käyttäjien ja sijoittajien määrän lisääntymiseen.


2. Institutionaalinen osallistuminen: Viime vuosina olemme nähneet yhä enemmän institutionaalisia sijoittajia, kuten hedge -rahastoja, pankkeja ja muita finanssilaitoksia, osallistuminen kryptovaluuttamarkkinoille. Tämä on lisännyt uskottavuutta markkinoille ja houkutellut vielä enemmän sijoittajia.


3. Teknologian kehitys: Blockchain -tilan teknologinen kehitys on helpottanut uusien salausvaluuttojen luomista ja kauppaa. Lisäksi turvallisuustoimenpiteiden ja sääntelykehyksien edistysaskeleet ovat tehneet markkinat houkuttelevampia sijoittajille.


4. Markkinoiden volatiliteetti: Kryptovaluuttamarkkinoiden erittäin epävakaa luonne on houkutellut kauppiaita ja sijoittajia, jotka haluavat hyödyntää hintavaihteluita ja ansaitsemaan merkittäviä voittoja suhteellisen lyhyessä ajassa.


5. Globaali hyväksyntä: Kryptovaluutat hyväksytään nyt yhä useamman kauppiaiden ja yrityksien maksamuotona ympäri maailmaa. Tämä on auttanut laillistamaan kryptovaluutat toteuttamiskelpoisena vaihtoehtona perinteisille fiat -valuuttoille.


Kaiken kaikkiaan nämä tekijät ovat vaikuttaneet kryptovaluuttamarkkinoiden nopeaan kasvuun ja todennäköisesti jatkevat sen laajentumista tulevaisuudessa.


ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Kuinka saan verkkosivustolle julkisuutta ja orgaanista liikennettä?


1. Hakukoneoptimointi (SEO): Optimoi verkkosivustosi hakukoneille näkyvyyden ja sijoituksen parantamiseksi hakukoneiden tulossivuilla.


2. Sisämarkkinointi: Luo arvokasta ja osuvaa sisältöä, joka houkuttelee ja kiinnostaa kohdeyleisöäsi. Tähän voi kuulua blogiviestit, artikkelit, videot, infografiat ja muut sisältömuodot.


3. Sosiaalisen median markkinointi: Mainosta verkkosivustosi sosiaalisen median alustoilla, kuten Facebook, Twitter, Instagram ja LinkedIn, jotta pääset laajempaan yleisöön ja ohjaamaan liikennettä verkkosivustoosi.


4. Maksettu mainonta: Harkitse maksettuja mainoskampanjoita hakukoneissa (Google AdWords), sosiaalisen median alustoissa ja muissa asiaankuuluvissa verkkosivustoissa kohdistetun liikenteen ohjaamiseksi verkkosivustollesi.


5. Influenssarimarkkinointi: kumppani niche -sivustosi vaikuttajien kanssa auttamaan verkkosivustosi mainostamaan ja suuremman yleisön tavoittamiseen.


6. Sähköpostimarkkinointi: Luo tilaajien sähköpostiluettelo ja lähetä säännöllisiä päivityksiä, tarjouksia ja sisältöä liikenteen ohjaamiseksi verkkosivustollesi.


7. Verkottuminen: Yhdistä muihin verkkosivustojen omistajiin, bloggaajiin ja teollisuutesi vaikuttajiin yhteistyö-, vierasviestien tai vaihto -linkkien kanssa verkkosivustosi näkyvyyden lisäämiseksi.


8. Suhdetoiminta: Ota yhteyttä toimittajiin, bloggaajiin ja tiedotusvälineisiin, jotta ne saadaan uutisarvoisia tarinoita tai verkkosivustoosi liittyviä ilmoituksia julkisuuden ja liikenteen luomiseksi.


9. Vierasbloggaaminen: Kirjoita korkealaatuiset vierasviestit muille verkkosivustoille ja lisää linkki takaisin verkkosivustollesi tekijän bio-ohjelmaan tai sisältöön liikenteen ohjaamiseksi.


10. Verkkoyhteisöt ja -foorumit: Osallistu verkkoyhteisöihin ja foorumeihin, jotka liittyvät kapeaan ja osallistuvat jäseniin jakamalla arvokkaita oivalluksia, vastaamalla kysymyksiin ja mainostamalla verkkosivustoasi kannalta.

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Miksi ihmiset implantoivat NFC -implantteja käsiinsä?


On olemassa useita syitä, miksi ihmiset päättävät implantin NFC: n (lähellä kenttäviestintää) implantteja käsiinsä:


1. Mukavuus: NFC -implanttien avulla yksilöt pääsevät helposti tietoihin, avata ovia, suorittaa maksuja ja suorittaa muita tehtäviä yksinkertaisella kätensä aaltolla. Tämä voi olla helpompaa kuin avaimet, henkilökorttit tai älypuhelimet.


2. Turvallisuus: NFC -implantit voivat tarjota lisätyn kerroksen turvallisuuskerroksen, koska ne vaativat fyysisen pääsyn yksilön kehon aktivoitumiseen. Tämä voi auttaa estämään luvattoman pääsyn laitteisiin tai arkaluontoisiin tietoihin.


3. Teknologinen kokeilu: Jotkut ihmiset päättävät implantoida NFC -sirut keinona kokeilla nousevia tekniikoita ja integroida ne päivittäiseen elämäänsä.


4. Henkilökohtainen tunnistaminen: NFC -implantteja voidaan käyttää henkilökohtaiseen tunnistamiseen, kuten lääketieteellisten tietojen tallentamiseen tai yhteystietoihin, joihin pääsee helposti hätätilanteissa.


5.


Kaiken kaikkiaan päätös implantoida NFC -sirut heidän käsiinsä on henkilökohtainen valinta, joka vaihtelee henkilöiden mukaan heidän henkilökohtaisten mieltymystensä ja uskomustensa perusteella.


OstaA

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Onko sokeri todella epäterveellistä?


Sokerin liiallinen kulutus voi johtaa erilaisiin terveysongelmiin, kuten painonnousuun, liikalihavuuteen, diabetekseen, sydänsairauksiin ja hammasongelmiin. Ruokavaliossa on suositeltavaa rajoittaa lisättyjen sokerien saantia hyvän terveyden ylläpitämiseksi. Hedelmistä ja vihanneksista löytyviä luonnollisia sokereita ei kuitenkaan pidetä haitallisina kohtalaisissa määrissä, ja ne voivat olla osa terveellistä ruokavaliota. Merkitys on avain sokerin kulutuksen suhteen.


ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa



Kuinka kirjoitan ammattimaisen blogiviestin?


1. Valitse asiaankuuluva ja kiinnostava aihe: Aloita tunnistamalla yleisöllesi merkityksellinen aihe ja olet asiantunteva ja intohimoinen. Varmista, että aihe on jotain, joka kiinnostaa ja resonoi lukijoidesi kanssa.

2. Suorita perusteellinen tutkimus: Ennen kuin aloitat kirjoittamisen, muista suorittaa perusteellinen tutkimus valitsemastasi aiheesta. Tämä auttaa sinua keräämään asiaankuuluvat tiedot, tilastot ja tosiasiat pisteidesi tukemiseksi ja blogikirjoituksestasi uskottavamman.

3. Luo ääriviivat: Järjestä ideasi ja avainkohdat luomalla ääriviivat blogiisi. Tämä auttaa sinua rakentamaan sisältösi loogisella ja johdonmukaisella tavalla, mikä helpottaa lukijoiden seuraamista.

4. Kirjoita pakottava johdanto: Käynnistä blogin viesti vahvalla ja kiinnostavalla johdannolla, joka kiinnittää lukijan huomion. Piirrä lukijat sisään ja saadaksesi heidät haluamaan jatkaa lukemista.

5. Käytä selkeää ja tiivistä kieltä: Vältä žargonin tai liian teknisen kielen käyttöä blogikirjoituksessasi. Kirjoita selkeästi ja tiiviisti, jotta sisältösi on helppo ymmärtää kaikille lukijoille.

6. Sisällytä visuaalit: Visuaaliset elementit, kuten kuvat, infografiat ja videot, voivat auttaa hajottamaan tekstin ja tekemään blogin viestistä visuaalisesti houkuttelevan. Ne voivat myös auttaa tukemaan avainkohtiasi ja tehdä sisältöstäsi kiinnostavamman.

7. Oikoluku ja muokkaa: Varmista ennen blogiviestisi julkaisemista perusteellisesti ja muokkaa sitä kieliopin, oikeinkirjoituksen ja muotoilun virheiden suhteen. Harkitse kollegan tai ystävän pyytämistä tarkistamaan viestisi palautetta ennen sen julkaisemista.

8. Lisää toimintakehotus: Lopeta blogiviestisi vahvalla toimintakehotuksella, joka rohkaisee lukijoita osallistumaan sisältöösi, kuten blogin tilaaminen, kommentoida tai jakamaan viestiäsi sosiaalisessa mediassa

Seuraamalla näitä vinkkejä voit luoda ammattimaisen ja kiinnostavan blogiviestin, joka resonoi yleisösi kanssa ja vahvistaa sinut auktoriteettiksi kentälläsi.

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Kuinka löydän asiakkaita verkkokehityksen pienyritykselle?


Tässä on joitain strategioita, joita voit houkutella asiakkaita verkkokehitysyritykseesi:


1. Rakenna vahva online -läsnäolo: Luo ammattimainen verkkosivusto, joka esittelee palveluitasi, portfolioasi ja asiakasosoitteita. Käytä sosiaalisen median kanavia mainostaaksesi yritystäsi ja olla yhteydessä potentiaalisiin asiakkaisiin.


2. Verkko: Osallistu teollisuustapahtumiin, konferensseihin ja tapaamisiin yhteydenpitoon muiden alan ammattilaisten ja potentiaalisten asiakkaiden kanssa. Liity verkkoyhteisöihin ja foorumeihin, jotka liittyvät verkkokehitykseen verkon laajentamiseksi.


3. Tarjoa viittauskannustimia: Kannusta tyytyväisiä asiakkaita lähettämään palvelut muille tarjoamalla alennuksia tai muita kannustimia onnistuneisiin lähetyksiin.


4. Yhteistyö muiden yritysten kanssa: kumppani digitaalisten markkinointitoimistojen, graafisten suunnittelijoiden tai muiden ammattilaisten kanssa, jotka saattavat tarvita verkkokehityspalveluita asiakkailleen.


5. Mainosta: Sijoita verkkomainontaan Google AdWordsin, sosiaalisen median mainosten tai näyttömainojen kautta laajemman yleisön tavoittamiseksi.


6. Kylmä tiedotus: Ota yhteyttä potentiaalisiin asiakkaisiin suoraan sähköpostitse tai puhelimitse, esittelemällä palveluitasi ja aiempaa työtä.


7. Sisämarkkinointi: Luo arvokasta sisältöä, kuten blogin viestejä, valkoisia viestejä tai verkkoseminaareja, jotka osoittavat asiantuntemuksesi web -kehityksessä ja houkuttelevat potentiaalisia asiakkaita hakukoneiden ja sosiaalisen median kautta.


8. Osallistu messuihin ja tapahtumiin: Osallistu alan messuihin ja tapahtumiin yhteydenpitoon potentiaalisten asiakkaiden kanssa ja esittelemään palveluitasi.


9. Tarjoa ilmaisia ​​neuvotteluja: Tarjoa ilmaisia ​​neuvotteluja potentiaalisille asiakkaille keskustelemaan heidän tarpeistaan ​​ja siitä, kuinka palvelusi voivat auttaa heitä saavuttamaan tavoitteensa.


10. Kysy arvosteluja ja suosituksia: Kannusta tyytyväisiä asiakkaita jättämään arvosteluja ja suosituksia verkkosivustollasi tai muilla arvostelualustoilla uskottavuuden lisäämiseksi ja uusien asiakkaiden houkuttelemiseksi.


ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa



Voit rakentaa postipalvelimen PostFix: llä seuraa näitä vaiheita:


1. Asenna PostFix: Asenna postFix -paketinhallinta palvelimellesi. Esimerkiksi Debian/Ubuntussa voit suorittaa "sudo apt-get asentaa postfix`.


2 Tärkein kokoonpanotiedosto on `main.cf`. Voit muokata tätä tiedostoa asettaaksesi postipalvelimen vaatimusten mukaisesti. Joitakin yleisiä kokoonpanoja, jotka sinun on ehkä asetettava


3. Aseta DNS -tietueet: Verkkotunnuksellesi on asetettava postin toimitus, sinun on määritettävä tarvittavat DNS -tietueet (MX ja SPF -tietueet). Ota tarvittaessa yhteyttä verkkotunnuksen rekisterinpitäjällesi tai DNS -palveluntarjoajalle.




6. Testaa postipalvelin: Kun kaikki on määritetty, sinun tulee testata postipalvelin lähettämällä ja vastaanottamalla testiviestit. Käytä työkaluja, kuten Telnet tai Mailx, lähettääksesi sähköposteja manuaalisesti ja tarkista, ovatko ne vastaanotettavasti.


Muista päivittää ja ylläpitää ajoittain postipalvelinta varmistaaksesi, että se toimii sujuvasti ja turvallisesti. On myös hyvä idea seurata postilaitteiden lokeja kaikissa ongelmissa tai epäilyttävässä toiminnassa.

ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Mikä on paras tapa keittää munia?


Tässä on yksinkertainen menetelmä munien keittämiseen:


1. Aseta munat kattilaan ja peitä ne kylmällä vedellä.

2. Kuumenna vesi kiehuvaksi korkealla lämmöllä.

3. Kun vesi on kiehunut, vähennä lämpöä matalaan ja anna munien hautua 9–12 minuuttia riippuen siitä, kuinka hyvin tehdään.

4

5. Jäähdytettynä voit kuoriutua ja nauttia täydellisesti keitetyistä munista.


ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa


Kuinka kirjoitan hyvän kirjan?


1. Kehitä selkeä idea tai konsepti: Ennen kuin aloitat kirjoittamisen, varmista, että sinulla on vankka idea kirjallesi. Tämä voi olla juoni, hahmo, teema tai asetus, jota haluat tutkia kirjoittaessasi.


2. Luo ääriviivat: Hyödyntä kirjaasi pääteloihin, hahmoihin ja teemoihin ennen kirjoittamisen aloittamista. Tämä auttaa sinua pysymään järjestäytyneenä ja keskittyneenä kirjoittaessasi.


3. Varaa erityinen kirjoitusaika: Luo rutiini kirjoittamiseen ja varaa joka päivä omaa aikaa työskennellä kirjan parissa. Tämä auttaa sinua pysymään motivoituneena ja edistymään kirjoituksessasi.


4. Aloita vain kirjoittaminen: Joskus vaikein osa kirjan kirjoittamisesta on aloittaminen. Älä ole huolissasi täydellisyydestä tässä vaiheessa, aloita vain kirjoittaminen ja ideoitasi paperille.


5. Liity kirjoitusryhmään tai yhteisöön: Harkitse kirjoitusryhmään tai yhteisöön liittymistä tuen, palautteen ja motivaation saamiseksi. Kirjoittaminen voi olla yksinäinen harjoittelu, joten muille kirjoittajien yhteisö voi olla korvaamaton.


6. Muokkaa ja tarkista: Kun olet suorittanut kirjan luonnoksen, palaa takaisin ja tarkista ja muokkaa sitä kirjoittamisen selkeyden, rakenteen ja virtauksen parantamiseksi. Tähän voi liittyä useita luonnoksia ja tarkistuksia, ennen kuin kirja on valmis julkaistavaksi.


7. Pyydä palautetta: Jaa työsi muiden kanssa, kuten beetalukijat, kirjoitusryhmät tai ammattitoimittajat, saadaksesi palautetta kirjoittamisestasi. Tämä voi auttaa sinua tunnistamaan parannusalueet ja tekemään kirjastasi vahvempaa.


8. Jatka kirjoittamista: Kirjan kirjoittaminen on maraton, ei sprintti. Jatka eteenpäin, pysy omistettuna ja jatka kirjasi työskentelyä, kunnes se on valmis.


ohella Daisy / Näkymä | Ostaa | Osta kryptovaluutan kanssa




https://glamgirlx.com -


(Napsauta tai napauta Lataa kuva)
Ammattimainen viihde, valokuvat, videot, ääni, suoratoisto- ja rento pelattavuus sekä henkilöllisyystodistus, web -kehitys- ja korvikepalvelut.

Jätä minulle vinkki Bitcoinissa tällä osoitteella: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE

© Glam Girl X 2025

Palvelusehdot