Praktično duboko učenje i sigurnost na mreži

Od Daisy
Praktično duboko učenje i sigurnost na mreži Treće izdanje Charlotte Harper 3. jula 2024. godine Ažurirano / pretvoreno 3. juna 2025. godine
Predgovor:
Sigurnosna razmatranja u građevinskom softveru za Web važan su dio bilo kojeg plana i izvršenja web programera, dok je inženjering prototip koji je pouzdan, stabilan i koristan u praktične svrhe. Dom (Oznaka dokumenta), s primjenom HTML, JavaScript-a i CSS-a, kao i izvedbeni softver, java i bash, daju besplatnu upotrebu i funkcionalnost, pružaju mogućnost korištenja i praktičnost i praktičnost i važne usluge koje su sve atraktivne i važne usluge koje su sve atraktivne u prosjeku Joeu Korisnik koji želi ubiti vrijeme ili dobiti nešto učinjeno na internetu, obično na uređaju za pametni telefon osjetljiv na dodir. Većina ljudi ne bi ni znala da počne kada žele izgraditi veb stranicu od nule, ukinuti nešto ograničeno u funkcionalnosti, a posebno u korištenju, a posebno trošenje novca za skupe pretplate za softvere, a svejedno je bilo da se koristi za upotrebu u korištenju i fleksibilnosti. Ako imate nekoliko minuta da pročitate ovu knjigu i naučite šta želim da vas naučim ili čak i sa mnom razgovaramo o vašim ciljevima i popisujemo svoj vlastiti softver, a popisujemo svoj sopstveni softver i da izdvojite svoju sopstvenu, veb lokaciju koja je sve na vama i da li tačno čini što želite i ispunjava ono što želite i ispunjava potrebe vaše publike.
O meni: Ja sam programer softvera sa širokim spektrom iskustva u C / C ++, Java, Pythonu, HTML, CSS i JavaScript-u. Izgradim web stranice koje žele koristiti, žele posjetiti, pa čak i ovisiti o korištenju samo za učenje, rekreiranje i ubijanje vremena, a najvažnije, prodajem softver. Da ste imali ideju tačno kako ste željeli da pogledate i funkciju, vi ste bili voljni da mi podržite svoje potrebe, a vi ste sami da pokrijemo troškove tekućine, tiktok, Twitter, Google, ili čak i visokotehnološka sigurnosna aplikacija samo što možete pristupiti. Umjesto da vam pokušajem prodati svoje vrijeme, pokušavam da vam kupim: sami da razgovaram u izgradnji aplikacije (veb lokacija) sa informacijama koje već postoje i podučavaju ono što trebate biti nezavisni programer softvera, koji vodi uspješnu karijeru u bilo kojem polju željenu. I dopustite mi da budem jasan, obrazovanje koje dajem bit ćete neformalni. Mogli biste otići u školu i naučiti sve to sa formalnim obrazovanjem ili čak pročitati ovu knjigu u školi, ispunite svoje zadatke i oduzmite puno iz svog obrazovanja, ali neću vas formalno stavljati na vruće mjesto i zamoliti vas da dovršite zadatke. Nisam vaš profesor, možete misliti na mene kao prijatelja koji vas želi voditi ka karijeri koji je vođen vaš vlastitim ličnim uspjehom. I ne prodajem vam uspjeh, trebat ćete ga kupiti svojim vremenom. Učenje za kodiranje ima strmo krivulju učenja i nikad nije bilo jednostavno ili čak treba biti. Morate raditi koliko god želite i nastavite pokušavati i propasti i pokušajte ponovo čak i kad ste frustrirani kako biste sami naučili i izgradili aplikacije. To je u prirodi samog koda. Kod upravlja prevodilac koji je dizajniran da daje poruke o pogrešci programera, a oni će vas naučiti kako da kodirate, čak i ako jednostavno kopirate grešku u svoj pretraživač i čitajući primere drugih ljudi. I moram reći, ne morate biti izuzetno bogati, pametni, uspješni ili čak detaljni orijentirani ili organizirani za izgradnju aplikacije. Računar se brine za tu organizaciju za vas. Samo trebate istrajati kroz suđenje i grešku, održavati fokus i naporno raditi na onome što radite, a vi ćete imati vrlo uspješnu karijeru u cjelini onoga što radite.
Ko sam: Shvaćam da je posljednji dio više o učenjem i vašem načinu iz ove knjige. Ko sam tačno? To je komplicirano pitanje. Ja sam nejasan da sam, kao što patim od medicinskih uvjeta koji mi mogu otežati čak i kod toga da ukazuju ili pišem ovu knjigu, dok predstavljajući izazove sa socijalizacijom i pitanjima identiteta zbog kojih mi je život teži kada je u pitanju uvođenje. Ukratko, ako čitate ovu knjigu, donijeli ste ga kući, jer ste se prošli kroz njega i mislili da je korisno ili čak ako ste upravo pročitali tako daleko na vama kao da ste istomišljenici koji vas želi vidjeti. Ja sam inženjer, programer softvera i student i pišem ovu knjigu za ostale studente koji žele da olakšaju priručnik za kopiranje kao velike zagonetke u radno, korisno, veliko, funkcionalno, kohezivno i angažovanje aplikacije koje mogu pokrenuti uspjeh bez obzira na posao. Uglavnom, ovo je ono što radim: Izgradim aplikacije kako bih pomogao sebi i drugim ljudima uspjeti. Ja sam i autor, iako je ovo moja prva publikacija koju namjeravam završiti kako bih zajedno stavio svoj portfelj u koristan dokument, a ja sam i umjetnik. Priznat ću vam ovo, nekako sam čudna osoba. Nisam savršen, prebacio sam se sa zakonom čak i vodio da napustim fakultete i univerzitete i ostavljaju države kako bih pokušao da pokušam da napravim ime za sebe s više uspjeha. Ja sam žena po rođenju, nosim šminku, fotografiram sebe, nose haljine i drugu želju odjeću, a ja sam svjestan sebe kao ženka po prirodi. Imao sam problema sa drugim ljudima u prošlosti koji vode borbu sa pisanjem i izgradnjom WebAppsa, a izvinjavam se da već nisam uspio dobiti ovu knjigu u vašim rukama ranije: Trebalo vam je ovo. Željet ćete čitati i pisati kod koji izgleda kao moj i djeluje kao moj i radi isto, ali još bolje, jer ako možete priuštiti da kupite ovu knjigu, umjesto da napravim knjigu sami za to, imate resurse koje morate biti uspješni u svom životu. Imao sam svakakve probleme sa odrastanjem porodice, zdravstvenim uvjetima, ljekarima, medijima i zakonu, a moj kôd duboko odražava borbu koja je feminizam i ženska priroda u podijeljenom i frustriranom svijetu. Međutim, ova knjiga je nešto o čemu duboko brinem, beba, mog portfelja i mog sredstva za život, pa cijenim vaše razmatranje kada preuzmete tekst dom i pažljivo porezivate kako biste ga učinili da biste ga učinili. Imajte na umu da nisam savršena, ova knjiga će imati greške, revizije i nova izdanja, a trebat ćete razmišljati sa svojim logičnim mozgom najbolje što možete imati uspješno iskustvo sa mojim pisanjem. Takođe, shvatite da vam dobro mislim i kad se suočite sa izazovima prilikom pisanja. Razmislite o tome: Kada možete samo unajmiti računarski sistem da biste učinili sve što možete zamisliti u digitalnom prostoru, pohranite sve informacije koje ćete naići na njega analizirati i organizirati, a vit ćete se u razumijevanje, vit ćete se, neizbježno ćete se naići na poteškoće s informacijama koje gutate i čak objavljujete. To vam kažem jer nailazim na iste poteškoće. Koristite ovu knjigu na vlastiti rizik, radite sa svojom zajednicom i zajednice na raspolaganju da biste napravili softver u sigurnoj postavci i zašto mi ne uspijete na putu, a da mi se ne razine, raziđene, rastrgane, a ne nailazim na obične probleme na globalnoj razini zahvaljujući paralellističkoj globalnoj razini mreže koji ćemo raditi, internet. Možda niste baš poznati s kim sam sa samo nekoliko riječi, ali ohrabrujem vas da čitate dalje, upoznat ćete me dok i dalje čitate i razumijete me dok izgradite vlastite projekte kako biste izgradili vlastite projekte. Neće biti domaćih zadaća sa ovom knjigom, sve dok vas ne dodeljuju vaši profesori, ali vrlo vas ohrabrujem da sami izgradite portfelj projekata dok čitate zajedno, kao i kapnetni projekt koji možete primijeniti kako možete primijeniti ono što možete primijeniti. Moj CAPstonet projekt je osnova za većinu onoga što ćete čitati u ovoj knjizi, kao što je uvršteno sa mojim prethodnim projektima, a saznao sam da napišem jednostavnu aplikaciju koja je u potpunosti nastupila i ponaša se kao popularna aplikacija koju možete vidjeti na Internetu, na Internetu, ili u vijestima.
Kakva je ova knjiga: Ova knjiga je udžbenik po primjeru. CODE ovdje možete pronaći, upute za učenje za kodiranje, informacije o pogreškama za uklanjanje pogrešaka, upute za izradu koda, učvrstite svoj kôd, a na vaš kôds, i sačuvajte osećaj ko sam, zašto je to važno, i kako se prikazati, i kako se prikazati, i kako se prikazati, i kako se prikazati, i kako se prikazati, i kako se prikazati, a kako se prikazuje, i kako se prikazati, i kako se prikazati, a kako se prikazuje, i kako se prikazuju, a kako se prikazuje, i kako se prikazuje, i kako se prikazuju, i kako se prikazuje, a kako se prikazuje, a. Softver koji izgradite u apsolutnoj najboljem svjetlu da budete najatraktivniji svojim krajnjim korisnicima, posjetiteljima vaše web stranice. U ovoj knjizi ću pokazati niz primjera dizajna softvera sa fokusom na webu kao platformu kao i sigurnost. Iskoristićemo iskustvo učenja izgradnjom osnovnog projekta pomoću UNIX školjke, sa sigurnosnim kopijama i skripti. Zatim ćemo ispitati osnovnu web stranicu bloga, nadograditi našu blog sa fotografijama i video značajkama kao i pomoću ovih funkcija za korištenje sigurnosnih rješenja pomoću besplatnog softvera (PAM) pričvrstite na naš poslužitelj (PAM). Zatim ćemo pregledati rukovanje i obradu datoteka, istraživanje video zapisa, donaciju glasa, skeniranja barkoda i optičkog prepoznavanja znakova, između ostalih koncepata. Uz put ćemo ispitati API-e koji će nam pomoći da naš softver učinimo korisnijim i sigurnijim, besplatnim i platnim opcijama. Uz put ćemo istražiti fizičku sigurnost i militantne alate kao što su dizajn vatrenog oružja i municije, uključujući dizajn cijevi i repetitora, dizajn kupole i drona, a ostale ravnatelje, integrirat ćemo se s našim softverom na postojećoj mreži kako bismo zaštitili naš softver i demonstrirali samoodbranu i rezilifikaciju. Slomit ćemo se na putu za izgradnju igara, 2D i 3D motora za renderiranje i rad ugrađenim hardverom u studijskom ispitivanju u studiju u slučaju osnovnog dimenzionalnog prikazivanja softvera i elektronskog vibriranog masažera, respektivno u silikonskoj gumi. Uz put ćemo koristiti i mašinska rješenja za učenje koja su već dostupna kako bismo bolje osigurali naš softver. Također ćemo koristiti alati za berze dostupne za Web kako bismo pojednostavili i osigurali postupak. Ova knjiga je vodič za vaš uspjeh u izgradnji web aplikacije i integrirajući ga profesionalnom mrežom računarskih i ugrađenih mehaničkih sustava i ukupni vodič za izgradnju softvera i ugrađenog hardvera bez pozadinskog znanja ili prethodnog iskustva.
Kakva ova knjiga nije: Ako zaista želite imati web stranicu, jednostavno biste mogli postaviti jednostavnu trgovinu i prodati ono što vam je potrebno, objavite blog, objavite fotografije ili video zapise ili na neki drugi način bez ikad ne pišite jednu liniju koda. Ova knjiga nije to. Ova knjiga će vas naučiti kako izgraditi softver koji je korisniji, funkcionalan i siguran od bilo kojeg softvera koji već možete pronaći, jer se na raspolaganju pokreću starije kompanije, a ne žali se natrag, a ne žali se natrag, zavojite za novac za ljude koji ne rade ništa. Ako ovu knjigu slijedite pažljivo, hteli ćete pisati kod, istraživački kod, izgraditi svoje aplikacije i zaraditi ćete novac od onoga što radite. Ja ću zaraditi od ove knjige, čak i u ranim fazama, jer sadrži informacije koje ljudi trebaju i žele čitati i već kupuju kada kupuju ili koriste moje aplikacije. Ova knjiga neće izgraditi aplikaciju za vas, ali usmjerit će vas u pravom smjeru i naoružati se pomoću kojih će vam se priključiti u programu, gostima, klijentele, prijatelje, goste, klijentele, i ljude Interneta koji žele koristiti i podržati.
Šta ćete naučiti: Ova knjiga će vas naučiti kako izgraditi i prodavati softver, doista funkcionalan softver, medijsko snimanje, sigurnosne karakteristike poput lica, Web API-je za autentičnost, snimanje i prikazivanje video i razmjene poruka poput Bluetooth-a i u blizini komunikacije. Ova knjiga će vas naučiti kako koristiti umreženo računalo, fokusirajući se na Debian Linux, kako izgraditi bash kôd za izradu softvera, kako bi se moglo izgraditi kôd za Pyts, kako bi se moglo izgraditi dizajne korisničke funkcije, izgraditi interaktivne medije i mrežu s drugim web lokacijama za pružanje tekstualnih poruka za provjeru ili Ostale svrhe, ID skeniranje, slika i video umjerenost, podaci mikrotransonice za održavanje vašeg softvera siguran, obradu plaćanja, trgovanje kriptorurenjem, asinhronim zadacima i još mnogo toga. Naučit ćete kako izgraditi vlastite Bluetooth uređaje, s baterijama, punjačima, mikrokontrolerima, sklopovima, motorima i senzorima, koristeći lemljenje, žicu i 3D ispisane kao i livene materijale. Pokazat ću 3D direktore dizajna koji se primjenjuju na aditivi proizvodnju i alat i izradu alata, tako da možete proizvesti vlastiti ugrađeni, hardverski uređaji s integriranim baterijama, punjačima, elektronskim krugovima i funkcionalnim izlazima. i mrežu ih Bluetooth i webom. Konkretno, ispitut ćemo dvije studije slučaja, vibracijski masažer i domaće vatreno oružje, programirani u OpenScadu, koji je dostupan kao program grafičkog sučelja ili komandni linij i može se integrirati u web-e. Naučit ćete kako izgraditi i rasporediti web stranicu sa temelja bez prethodnog iskustva, čine ga funkcionalnom, sigurnom, lijepom, korisnom i najvažnijem praktičnom. Naučit ćete kako koristiti mašinsku učenje i računarsku viziju da biste napravili sigurnosnu i praktičniju, snimite video i audio s vaše glazbe kako biste izgradili korisne uzorke kako biste izradili korisne uzorke kako biste podijelili sve korisne informacije koje morate ponuditi, a još važnije dovesti ljude na vaš softver i posao. Ova će knjiga najvažnije biti fokusirana na medij, sigurnost i mašinsko učenje, koje su glavne tri komponente koje će vam pomoći u izgradnji korisnog softvera za Web angažiranje pravih korisnika i odvajanje pogrešnih na način koji je realan, praktičan, ruke i uključiv. Ova knjiga predaje UNIX, posebno debian (ubuntu), bash školjka, python, html, css, javascript i brojnim korisnim softverskim paketima za Python poput zahtjeva, kao i koristan bash softver poput git i ffmpeg. Naučit ću vas i kako automatski trgovati kriptoturenjem i preduzmati plaćanja u kriptoturcy ili iz redovnih debitnih kartica dok čak i plaćate vaše posjetitelje udjela vašeg prihoda ako to odlučite. Naučit ću vas kako da zaradite sa svoje web stranice putem oglašavanja, kako da pripremite svoju aplikaciju za pretraživače i učinimo brzo, rangirajući se u prvom rangu za ono što će vam kupci naći da vas pronađu i rangiraju u što više uobičajenih pretraživanja. Naučit ću vas kako prodati svoj softver, reklamirajte ga, apelirate klijentima koji traže vaše usluge i napravite ime za sebe na internetu putem avenija koji već postoje, jeftini i dobro rade. Naučit ću vas kako da sačuvate svoje podatke na Cloud Computers koji rade za vas i sačuvaju vaše podatke, kako da planirate i izgradite svoje korisnike koji vaši korisnici i šta želite da vam se bave telefonskim pozivima, telefonskim pozivima i više puta kako bi vaše korisnike vratile na vašu web stranicu samo za vaš klik samo za vas. Ova će se knjiga fokusirati na praktičnost objavljivanja i distribucije medija u velikim količinama, od teksta na fotografije u videozapise u audio, kako biste se na bilo koji način učinili kako biste stvorili web stranicu, a time je zastupnik i vi, vaš softver i vaša kompanija izgledaju dobro na najbolji mogući mogući. Također ćete naučiti nekoliko savjeta i trikova, od kodiranih savjeta, praktične ispraznosti poput šminke i fotografije, modeliranja i djeluje, a to će biti važno za prikazivanje savju, kao što vam se pružaju na raspolaganju kao što su vam potrebni za vaš sadržaj koji vam trebaju na zdravu balansu platformi da bi se vaš softver pobudio bez više napora, rada ili novca nego što je potrebno. Ova knjiga se zove "praktičanInternetsko duboko učenje i sigurnost "Iz razloga: bavi se učenjem za kodiranje, posebno sa fokusom na sigurnost, sa primerima koji se prikazuje u tekstu. Pokazuje da će se prikazivati za internet, prepoznavanje računara, za prepoznavanje lica, rezolucije o računaru, za prepoznavanje lica i video zapisa Poboljšanje, opis slike i ostali zadaci poput mjernihri za predviđanje iz slika, poput prirode slike kao autentične, usluge stroja ili tiskana fotografija, jer bi se inače moglo upisati s lozinkom, ali može biti sigurnije da ga koristite ako vas koristi tvoje lice. Možete napraviti ovaj sef računar, računar koji bi obično tražio korisničko ime i lozinku, ali da li je to u redu, a ako se ne može koristiti, a time se može koristiti, kao što se može koristiti, kao što se tiče softvera, poput usluge e-pošte ili servis za e-poštu, kao što je e-mail usluga, kao što se ne može učiniti sigurnim softverom ili bilo kojom (bilo kojim web lokacijama). Svako ko gradi softver koji besprijekorno osigurava ima smisla za šta ovo podrazumijeva. Softver je svojstveno nesiguran jer uređaji i računi koje koristimo za pristup nisu nam uvijek na raspolaganju, mogli bi biti u rukama bilo koga s zloglasnom namjerom za softver i zato može predstavljati rizik samim softverom. Ovo je nešto u fokusu ove knjige. Umreženo računalo je podrazumevano pričvršćeno dugim ključnim tokenom, nazvanim i ssh ili sigurnim ključem školjke, a druga je najbolje osigurana web poslužiteljem, jer web poslužitelj pruža otvoreni pristup kao i stanje alati za umjetnike koji rade na samom serveru. Web server ima pristup korisničkom pretraživaču, koji je vjerojatno najmoćniji dio korisničkog uređaja, jer je to mjesto na kojem korisnik može pristupiti umreženom softveru. Ovaj alat može prikazati tekst, web stranice koje vidite, a možete snimati i slike, audio i video zapis ili pisati u Bluetooth TAGE, a ne čitati se i naljepnice u polju i čak i čip-implantate s jedinstvenim serijskim brojevima koji se mogu čitati i pisati s podacima koji se generira i potvrđuje web poslužitelj koji je web poslužitelj vezan za web mjesto. Koristeći sve alate na raspolaganju, sa ovom knjigom ćete se obratite znanjem za izgradnju sigurne web stranice, a sveukupni sigurni umreženi računalni sistem koji radi za vas, čini li ponuda i izgleda
Gdje započeti: Nema na čemu da preskočite pokraj odjeljka koji započinjem ovu knjigu, ili bilo kojim odjeljkom, na tačan kôd koji vam je potreban, posebno ako imate iskustva s kodiranjem prije ili bilo kojim spomenutim alatima koje ću detaljno opisujući u ovoj knjizi, kao i dokumentiranje slučajeva upotrebe i praktičnih primjera. Ako nemate iskustva u pisanju koda, toplo mi preporučujem da pročitate cijelu ovu knjigu, a posebno preporučujete da pročitate prethodne odjeljenja kako biste bili sigurni da je ova knjiga prava za vas. Ako ta knjiga nije ispravna, razmislite o daljinu prijatelja ili rođaku koji bi mogli biti zainteresirani za sami učenje o web razvoju, pa čak i razmotriti da ga posuđuju i učini da bi ih ispunili praznine gdje su mi učiteljivali kao učitelja, ili drugi učitelji. Započnite tamo gdje ćete, svaki dio ove knjige biti koristan ako namjeravate izgraditi korisnu aplikaciju i smatrati da su najbolje aplikacije izgrađene s krajnjim korisnikom na umu: znajte svog kupca. Sada me poznajete, znate ovu knjigu i spremni ste za početak. Da biste započeli, zgrabite računar (čak i najjeftiniji laptop iz kutije za trgovinu, Amazon ili stare radne površine i postavite na način koji radi za vas.
Kako pročitati ovu knjigu: Tekst označen, označava da tekst pripada naredbenom retku, gdje ćete napisati kôd koji pokrećete. Komandni redak je fokusiran na tastaturu i zahtijeva malo da kliknete, ubrzavajući vaš tijeku rada i olakšavajući vas na sebi.
Prvi koraci: Zaronimo. Počećemo graditeljskim kodom na lokalnoj mašini i započet ćemo bez izgradnje web stranice povezane na Internet. Ovo je sigurnije za početak, ne košta ništa, a lako vam je. Ovisno o vašem operativnom sistemu, ulazak u bash školjku bit će malo drugačiji. Za Mac OS preporučujem u ovom trenutku instaliranje virtualne mašine, jer ćete dobiti najviše kompatibilnosti sa virtualnom mašinom. Različiti provajderi poput VirtualBox-a i Paralela mogu pokrenuti virtualnu mašinu za vas, iako je moguće i instalirati Ubuntu direktno na uređaj, ako želite koristiti rodno okruženje koje se preporučuje kako bi se stvorilo brzo, pojednostavljeno iskustvo. Ako koristite Linux ili Windows, koji preporučujem, trebalo bi biti prilično jednostavno kreirati projekt. Otvorite svoj terminal, podesite veličinu dok vidite prikladnim i počnite slijediti korak 2. Ako koristite Windows, slijedite korak 1.
Korak 1: - Samo korisnici Windows-a U operativnom sistemu Windows-a otvorite naredbeni redak kao administrator i tip WSL -Install
Korak 2: - Nastavite ovdje ili preskočite korak 1 do ovdje ako ne koristite Windows Na otvorenom terminalu (ovisno o vašem OS-u naziva se ubuntu u Windows-u, terminalu u Mac ili Linuxu ili sličnoj nazivu), počnite kreiranjem projekta. To radimo sa naredbom MKDIR-a, što stvara direktorij. Ako trebate stvoriti direktorij za pohranu vašeg projekta, koji se preporučuje, koristite CD naredbu za promjenu u direktorij i i
CD / staza / TO / direktorij - Put su mape (datoteke) koje prethode vašem odredišnom direktoriju, zadani put je ~ ili / Početna / Korisničko ime (gdje je korisničko ime (gdje je korisničko ime (gdje je korisničko ime (gdje je korisničko ime (gdje je korisničko ime). Da biste se promijenili u zadani direktorij, upišite CD ili CD ~ MKDIR Primer - Zamijenite "Primjer" sa imenom direktorija
Sada imate radni direktorij za svoj projekt. Biti kao što je toliko važno da se ovaj direktorij spremi u slučaju da se morate prebaciti na drugu mašinu ili implementirati kôd koji napišete, tako da je spreman za web, napravit ćemo skriptu da napravimo skriptu u sljedećih nekoliko koraka. Ali izgradnja skripte potrebno je malo koda, a kod treba biti automatiziran da bi bio što korisniji. Dakle, napravimo scenarij da prvo izgradimo skripte. Započnimo kreiranjem skripte i čineći ga izvršnim. Koristit ćemo Sudo, Chmod i dodirnite ovo i nazovite skriptu "Ascript".
sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Sada smo stvorili scenarij, napravili je izvršnim, i spremni su ga uređivati. Nano je uređivač teksta koji će vam omogućiti uređivanje teksta bez klika, što je mnogo lakše nego koristiti grafičko korisničko sučelje. Da biste uredili datoteku s nano, koristite nano, a zatim put do datoteke. Da biste napravili scenarij koji daje scenarij, prilično je sličan da se naša skripta izvrši u prvom redu. Koristit ćemo isti kod kao gore, zamijenići naziv skripte, "Ascript" s parametrom argumenata, 1 USD. Ovo nam omogućava da nazovemo scenariju tako što ćete jednostavno Sudo Ascript Newscript, u kojem trenutku možemo stvoriti bilo koju novu skriptu zamjenom "Neintipta" sa imenom vaše skripte. Kod u Nano-u trebao bi izgledati:
sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
A za zatvaranje Nano-a, možemo zadržati kontrolnu tipku i pritisnite x, a zatim y da označite da spremamo datoteku i udaramo povratak. Sada umesto da kucate ove tri naredbe da biste uredili skriptu, moći ćemo upisati Sudo Asction Ascript da biste ponovo uredili skriptu. Ovo radi! I bilo koja nova skripta može se lako pokrenuti tako što ćete je nazvati u školjku. Sačuvajmo naš posao sada: Napišimo rezervnu skriptu da biste sačuvali našu novu skriptu, a zatim ga sigurno vratite u našem direktoriju projekta, a istovremeno podržavate sigurnosnu kopiju sigurnosne kopije.
sudo ascript backup
Sada, u Nano:
sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Gdje je put / put / to / direktorij je put do projekta koji ste kreirali s MKDIR-om. Kasnije ćemo naučiti kako kopirati ovakve ponavljajuće staze sa petljom i popisom, što je manje koda, ali za sada je da budemo jednostavno i imamo nekoliko redaka. Da biste pokrenuli ovu skriptu i sigurnosnu kopiju koda, sačuvajte datoteku u nano sa kontrolom + x, y i vratite i unesite dolje u svoju školjku
backup
Ako vam se uopće zatraži za lozinku dok čitate ovu knjigu i slijedemo u ljusci, molimo unesite svoju korisničku lozinku pravilno, imat ćete tri pokušaja prije nego što trebate ponovo pokrenuti naredbu. Možete koristiti strelice gore i dolje u Rerun naredbe i uređivati ih, treba li trebati dva puta raditi bilo šta. Jednostavno pritisnite gore i dolje povremeno da biste odabrali naredbu, prije nego što uređujete naredbu s desne strane, lijeve strelice i izbriši tipku, kao i tipkovnicu i pokrenute ga s povratkom.
Čestitamo! Uspjeli ste stvoriti fenomenalnu sigurnosnu skriptu koja podržava dvije važne skripte školjka u vašem radnom direktorijumu. Mogli bismo kasnije premjestiti stvari jer projekt postane veći, ali to radi za sada. Preći ćemo na sigurnosnu kopiju u oblaku, za to ćemo koristiti Githeub (iako su brojne druge git rješenja za izradu sigurnosne kopije.) Git je verzija za kontrolu. Istinuta je u spremanju vašeg softvera, posebno dok migriramo na osigurane Linux instance koje se ponekad prekinute kada se jedna linija koda ne uspije, ostavljajući vas zaključan dok se vaš kôd možda neće podržati ako ne dobijete priliku automatski da se napravite automatski, što ćemo se prekriti automatski.
Ako u ovom trenutku već ne koristite Ubuntu virtualnu mašinu, u ovom trenutku preporučujem korištenje Ubuntu virtualnog stroja jer će vam olakšati život prilikom instaliranja svih potrebnih paketa kako biste izgradili radnu web stranicu i preformira o radnoj web stranici i preformira o radnom mjestu na vašem računaru. Kôd ćemo premjestiti na web poslužitelj u bliskoj budućnosti, ali želimo biti sigurni da postoji najmanje nekoliko slojeva sigurnosti iza našeg web poslužitelja koji su otporni na krađe i zaposlite brojne Linux pakete kako biste to učinili. Ako i dalje želite koristiti Mac OS, dobrodošli ste potražiti i instalirati potrebne pakete na mreži, ali možda neće postojati alternative za svaki paket Ova knjiga ili serija će pokriti.
Dodajmo nekoliko naredbi da bismo izvršili svoj rad sa sigurnosnim skriptom pokretanjem naredbe Sudo Ascript sigurnosne kopije.
# ...
Još jednom kontrolirajte x da biste sačuvali.
Sada moramo napraviti neko vrijeme konfiguracije za ovaj projekt. Budući da će uskoro biti git projekt, ne trebamo upisati svaku naredbu svaki put kada raspoređujemo iz git spremišta, ali dobit ćemo objesiti o tome kada napisamo svoje skripte za implementaciju. Za početak, pobrinite se da smo u pravom direktoriju i inicijalizirajte git spremište i generirajte SSH tipke.
cd /path/to/directory
git init
git branch -m master
ssh-keygen
Nakon što upišemo SSH-Keygen, novi ključ treba spremiti u kućnu mapu ispod mape koja se zove .ssh. Naziva se id_rsa.pub. Naći ćemo ovaj ključ i kopirati ga. Da vidim,
cd ~
cat .ssh/id_rsa.pub
Kopirajte tekst koji vam je zadnja naredba vratila i otvorite račun kod svog GIT-a (idealno GITHUB), prije dodavanja SSH tastera na svoj račun. Nakon što imate račun, kliknite gornji desni meni i unesite postavke, prije dodavanja SSH tastera u SSH i GPG tipke pod Pristup u meniju. Odaberite Dodavanje SSH tipke i dodajte svoje lijepljenjem i dajući mu naslov prije uštede i vraćanja u GitHub da biste stvorili novo spremište. To je slično za ostale git davatelje, morat ćete pročitati njihovu dokumentaciju. U novoj konfiguraciji spremišta, dajte svoje repozitorij opisno ime i odlučite želite li ga objaviti i obavezati da ne konfigurirate datoteke za uključivanje. Nakon što se napravi spremište, kopirajte klon ssh url i zalijepite ga u sljedeću naredbu.
git remote add git://… (your remote URL)
Sada se možete vratiti u svoje spremište sa CD-om, vi ćete biti upoznati sa ovim. Pokušajte sa sigurnosnim kopijama sada sa sigurnosnim kopijama
Sjajno! Sada zaista možemo dobiti kodiranje. Da ugradimo Django sad kad imamo dobro shvatanje na bashu i git. Django će nam automatski izraditi sigurnosnu kopiju softvera, bash to može učiniti i to, ali Django bi trebao imati jednostavniju sigurniju implementaciju (može se lakše onemogućiti i konfigurirati).
Da biste instalirali softver u Ubuntu, koristićemo naredbu sudo apt-get. Prvo, hajde da ažuriramo i nadograđujemo softver koji smo već imali. To se može učiniti sa sudo apt-get ažuriranje i sudo apt-get nadograditi -y. Zatim instalirajmo Python i naše virtualno okruženje, dom našeg koda, sa sljedećom naredbom: sudo apt-get install python-is-python3 python3-venv
Ovo je sve što trebate da krenete sa Django u smislu softvera instalira u Ubuntu instancu. Za Windows i Linux ovo bi trebalo biti prilično jednostavno, ali za MAC možda želite instalirati virtualnu mašinu i Linux pomoću besplatnog ili plaćenog virtualnog okruženja poput VirtualBox ili Paralells Desktop i rekreirajte gore navedene korake kako biste postavili Ubuntu okruženje. Ubuntu je kritičan u ovom slučaju, jer je softver The Web stranice pokreću i omogućava im da ugostiju web stranice sa svim gore spomenutim softverom.
Kutomimo u Đango.
U našem direktoriju ponovo, sa CD-om:
python -m venv venv # Stvara virtualno okruženje u kojem se kod pohranjuje kod
source venv/bin/activate # Aktivira virtualno okruženje
django-admin startproject mysite . # Gde je mysite projekt koji počinjem u svom trenutnom imeniku.
Django nas samo pokreće, jer Django hostira web server i radi sve što trebamo dobiti osnovnu lokalnu web stranicu. Sad kad smo instalirali Django, napravimo malo postavke da bismo radili kako treba. Prvo, napravimo novu aplikaciju
python manage.py startapp feed
Primjetit ćete da se prva aplikacija naziva feed. Aplikacija treba nazvati sve što želite, a mi ćemo stvoriti nove aplikacije, ali naziv svake aplikacije mora biti dosljedna svaki put kada se aplikacija navodi u kodu. Da biste dodali novu aplikaciju, uvijek ćemo uređivati postavke.Py u drugom direktoriju, aplikacija je stvorena, nazvana u startproject, ahirter aplikacija. Koristeći nano,
nano app/settings.py
U postavkama pronađite instalirane_apps i odvojite [] u 3 retka. Koristeći četiri prostora na praznoj sredini, dodajte "feed" ili naziv svoje aplikacije. Ovaj dio postavki.Py bi trebao izgledati:
INSTALLED_APPS = [
'feed',
]
Prije nego što zaboravimo, testiramo da Django radi. Upotreba naredbe Python Manage.py Runserver 0.0.0.0:8000, možemo pokrenuti web pretraživač na računaru pokrenuti kôd na http: // Localhost: 8000 i pogledajte na primjer web stranica (ona radi!) Isključite server sa kontrolom C, isto kao i bilo koja druga naredba.
Sada, da kopamo u pisanju nekih python koda. Django ima tri glavne komponente, a sve ih radi u cijelosti. Komponente se nazivaju modelom, pogledom i predloškom, a svaka je na višem i nižoj razini prije nego što se web stranica isporuči korisniku.
Model je kod koji pohranjuje informacije u bazu podataka za pronalaženje, sortiranje i prikazivanje.
Pogled odlučuje kako se model donosi, manipulira i modificirani, gotovo svaki prikaz će direktno koristiti model.
Predložak je HTML kôd s nekim dodatnim zvonama i zvižducima koji se nazivaju jezikom predloška. Predložak se prikazuje po mišljenju gdje je ispunjen python kodom i kontekstom kao što su modeli i informacije (usualne žice i cijeli brojevi) iz stava.
Django ima i druge komponente, uključujući, ali ne ograničavajući se na:
Podešavanja koja konfiguriraju aplikaciju kao što smo razgovarali.
URL-ovi, koji su obrasci koje korisnik slijedi kako bi stekao pristup određenim dijelovima web aplikacije.
Obrasci, koji definiraju kako se informacije koje se šalju na poslužitelju ruši i donesu u bazu podataka kao i korisniku. Ovo su temelj informacija o obradi na strani poslužitelja i mogu prihvatiti bilo koju vrstu informacija Trgovine računara, najpopularnije tekstualne žice, brojeve i istinite / lažne booleans (obično potvrdni okviri).
Predlošci koji su HTML kod i jezik predloška i most GAP između Python-a i HTML-a, što znači da se informacije o Pythonu mogu poslužiti kao HTML kod koji može pristupiti web mjestu s ograničenim pristupom, dok se Python Code dostupan na mreži i korisni za razne svrhe na udaljenom uređaju koji ne treba biti u blizini poslužitelja.
Statičke datoteke, koje su obično JavaScript i biblioteke koje poslužitelj služi i povezani su sa predloškom.
Medijske datoteke, koje poslužitelj služi ili se eksterno nalazi ili samo napisano na server prije nego što se obrađuje i objavi na drugi poslužitelj (kantu) za hosting.
Srednjeg softvera, koji su dijelovi koda koji se izvode u isto vrijeme kao i svaki pogled i smatraju se "uključenim" u pogledu.
Kontekst procesori, koji obrađuju kontekst svakog pregleda i koriste se za dodavanje dodatnog konteksta.
Testovi koji potvrđuju da korisnik ili zahtjev prenosi određene zahtjeve prije nego što se prikaže prikaz.
Potrošači koji diktiraju kako websockets rješavaju i odgovaraju na komunikaciju.
Admin, koji se koristi za registraciju modela, tako da se mogu detaljno manipulirati u stranici Admin Django, gdje se baza podataka može upravljati grafičkim sučeljem.
Celer, koji definira asinhrone zadatke Dijelovi Django koda mogu početi trčati prije nego što odmah nastavite na sljedeći zadatak ili liniju koda.
Django može imati mnogo drugih komponenti, koje ćemo ovdje detaljno razgovarati. Puno je načina da Django funkcionalnije, dodajući websockets, koji su brzini, pojednostavljeni komunikacijski kanali, celer, koji izvršava asinhrone zadatke, a mnoštvo drugih softvera za proširenje Django, posebno na funkcijama prikaza, gdje se vrši većina koda. Pregled funkcija su ključne jer obično izjavljuju svaki dio koda koji je specifičan za određeni uzor url ili dio poslužitelja.
Prvo, hajde da istražimo funkcije pregleda. Pregled funkcija Počnite s uvozom koji označava kod koji će se koristiti u prikazu i definirani su korištenjem redovnih definicija ili klase funkcija. Najjednostavniji prikazi definirani su deflict Function Def Def i vratite httpresponse sa osnovnim predloškama. Započnimo definiranjem osnovnog prikazivanja da biste vratili tekst "Hello World". Zapamtite da svaki put kada dodate kod nakon izjave poput DEF, ako, dok, za itd., Morat ćete dodati 4 mjesta za svaku od prethodnih definicija koje biste željeli primijeniti na svoju funkciju. Ući ćemo u ono što svaki od ovih sredstava uskoro.
Iz direktorija naše web stranice uredite datoteku Feed / wands.py pomoću Nano-a i dodajte sljedeće redove na kraj datoteke.
from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
Djangov httpresponse odgovara s tekstualnim nizom, označavajući se otvaranjem i zatvaranjem '. Svaki put kada prenesete informacije na funkciju ili klasu, poput zahtjeva ili nizu, trebat ćete koristiti zagrade (, otvaranje i zatvaranje).
Ovo još nije potrebno da vidimo naš pogled. Naravno, nismo rekli poslužitelju gdje je pogled tačno, još uvijek moramo definirati put po kojem bi pogled trebao prikazati. Započnimo definiranjem osnovnog puta u aplikaciji / URLS.Py, a mi ćemo kasnije ući u grupe puta.
U aplikaciji / URLS.PY, dodajte liniju nakon izjava uvoza nakon početka uvoza stajališta koje smo upravo stvorili.
from feed import views as feed_views
Sada, da definiramo obrazac pogleda. Ozorci pogledajte tri komponente, komponenta puta, koja govori na poslužitelju (URL-ova staza u kojoj se prikazuje na navigacijsku traku), pa je lako preuzeto, tako da je u uzoru, tako da se može izmijeniti i ažurirati kako bi se napravilo i ažuriralo da napravi prostor za drugi pogled ili preuzme logičnije ime. Ima smisla raditi stvari na ovaj način i biti fleksibilni, jer će vaša šiftana biti ikad promjena okruženja koja je potrebna fleksibilnost i improvizacija kako bi se bilo dragocjeno i lako raditi. Evo što će izgledati vaš pogled, možete to dodati u URLPatterns = [odjeljak aplikacije / URLS.PY. Obrazac pogleda definiran je s gore opisanim tri komponente, a funkcija koja se zove Put. Vaši uzorci URL-a su popis, pa obavezno oduvijek završavate svaku stavku u njima, jer ovo razdvaja svaku. Svaki predmet također treba ići na novu liniju, još jednom sa četiri razmaka prije njega, baš kao i aplikacija u Settings.py. Za izradu prikaza ćemo definirati prvu komponentu s pogledom na praznu funkciju niza, kako bismo stvorili prikaz koji radi na korijenskom direktoriju web poslužitelja. Vaša URLS.Py bi sada trebala izgledati ovako:
from feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
Ovo je osnova za kreiranje web stranice s Đangom koji je potpuno statičan. Da bismo napravili dinamičnija web stranica na kojoj možemo započeti s podacima o predmemoriranju, poput slika, video zapisa, zvuka i još mnogo toga, morat ćemo koristiti modele, koje ćemo sljedeće istražiti. Za sada provjerimo naš kod i pokreće se poslužitelj. Da biste provjerili kôd za greške, pokrenite:
python manage.py check
Ako postoje poruke o pogrešci, trebali biste pažljivo pregledati promjene koje ste napravili na aplikaciji i vidite da li postoji nešto što treba popraviti, poput vanjskog ili nedostajenog prostora, neobičnog niza, bilo koji slučajno izbrisan karakter ili bilo što drugo. Čitanje putem poruke o pogrešci (ako imate jedan), trebali biste moći vidjeti put do datoteke koju ste stvorili ili uredili zajedno s brojem linije, pa pogledajte tu datoteku i liniju i pogledajte možete li riješiti bilo šta što postoji. Ako ste popravili problem, ponovo pokrenite gornju naredbu. Kada je vaš softver spreman za pokretanje i radi, vidjet ćete izlaz "Provjera sistema nije identificirana." Sad si spreman za odlazak. Pokrenite server sa:
python manage.py runserver 0.0.0.0:8000
Sada otvorite web pretraživač i pomaknite se na http: // Localhost: 8000. Trebali biste vidjeti da se tekst vrati u zagradama i citatima HTTpresPesponse funkcije u vašem mišljenju. Ovo je samo osnovni primer, ali ako ste to učinili tako daleko, razumete osnove kako rade Linux, Bash, Python i Django. Da kopamo dublje u neku modeliranje baze podataka i istražite snagu klase Python u pohranjivanju podataka. Zatim ćemo početi primiti na HTML i CSS prije nego što našu web stranicu učinimo potpuno istaknuto, fleksibilno i sigurno koristeći JavaScript i mašinsko učenje.
Časovi se pohranjuju u modele.py vaše aplikacije. Upotreba Nano-a, uredi aplikacije / modela.py i dodajte novu klasu. Klasa je definirana s definicijom klase i prosljeđuje je superklas koji nasljeđuje u ovom modelu. Model. Naziv klase dolazi nakon razrede klase, a nakon definicije klase koristi se: (definiciranje atributa i definicije funkcija vezane za klasu su označene u nastavku. Naš razred potreban ID koji možemo koristiti za preuzimanje i zadržati ga jedinstvenim, a također joj je potrebno tekstualno polje za pohranu nekih informacija. Kasnije možemo dodati vremenski okvir, datoteke, booleans (istinske ili lažne definicije koje mogu pomoći na našem kodu donijeti odluke o tome što učiniti s modelom, a može se koristiti za sortiranje), a instanca za povezivanje korisniku se prijaviti na poslužitelj i još mnogo toga. Raspakirajmo kod ispod:
from django.db import models # Uvoz koji se koristi za definiranje naše klase i njegove atribute
class Post(models.Model): # Definicija samo naše klase
id = models.AutoField(primary_key=True) # ID našeg modela, automatski generirani ključ koji će nam pustiti upisati model, zadržati ga jedinstvenim i korisnim je kada trebamo komunicirati s modelom nakon što je stvoren.
text = models.TextField(default='') # Atribut naših predavača, u ovom slučaju, nekom tekstu, neplaćuje se na prazan niz.
Zatvorite i sačuvajte datoteku kao što smo radili prije nego što završimo.
Postoji mnogo drugih polja i opcija koje ćemo istražiti kada ažuriramo ovu klasu kao što se naša aplikacija razvija, ali to su osnovne potrepštine stvaranja aplikacije za objavljivanje nekih teksta. Međutim, ovaj model neće raditi sam. Kao što je prethodno opisano, trebat će nam prilagođeni prikaz i prilagođeni URL obrazac da bi ovaj model radio, a mi ćemo nam također trebati oblik uz predložak. Istražimo prvo obrazac.
Da biste definirali obrazac, uredi aplikaciju / forms.py s nano i dodajte sljedeće redove. Trebat će nam dva uvozna, naša klasa obrasca, kao i model koji smo stvorili (Feed.Models.Post), klasa klase slična modelu i polje zajedno s podrazrednim sukladom koji će definirati model s kojim će definirati model koji će definirati u interakciji. Obrazac također može imati funkciju inicijalizacije koja ga postavlja na temelju informacija u zahtjevu, modelu ili na neki drugi način, mi ćemo to istražiti kasnije.
Obrasci modela su toliko korisni jer mogu kreirati model ili također uređivati model, pa ćemo ih koristiti za oboje. Odredimo jedan u obliku.py u nastavku.
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',)
Ovo su osnovi kakav izgleda oblik i model. Ovaj obrazac modela može se koristiti za instantiaciju ili uređivanje posta, promjenu teksta koji sadrži. Pogledat ćemo integriranje ovog obrasca u prikaz sljedećeg. Prvo, napravimo migracije i migriramo bazu podataka tako da naš kod može komunicirati s modelom kada radi. Da biste to učinili, pokrenite sljedeće naredbe:
python manage.py makemigrations
python manage.py migrate
Ovo će trebati minutu da se izvrši, ali nakon što to učini, omogućit će vam pristup modelu u pogledu, srednjim softveru ili bilo gdje drugo u softveru. Nastavimo se tako što ćemo gledati gdje možemo vidjeti naš model. Uredite feed / views.py i dodajte sljedeći kôd, kao što je napomenuto. Nećete morati dodavati bilo šta nakon # znaka, taj je kod komentara koji se koriste za označavanje informacija o kodu. Počećemo uvozom našeg modela u poglede i dodajući ga u kontekst u kojem ga možemo prikazati u predlošku kao popis za prikaz. Zatim ćemo dodati predložak u kojem možemo donijeti obrazac i model pomoću gumba za kreiranje novog objekta na osnovu modela i objaviti ga na poslužitelju. Ovo zvuči komplicirano, pa samo da ga napravimo korak po korak. Prije nego što završimo s prikazom, napravimo predložak koji samo čini model i osigurati da ga vidimo stvarajući novi post u školjci. Evo kako bi taj pogled trebao pogledati:
posts = Post.objects.all() # Upitajte sve postove u bazi podataka do sada
Sve ovo izgleda prilično jednostavno dok ne dođemo do dna. Render, vrijednost vraćena funkcijama, umjesto u HTTP odgovoru kao i prethodni primjer, uvijek uzima zahtjev kao svoj prvi unos, prihvaća kontekst (u ovom slučaju u bazi podataka), koji sada mogu biti prikazan u predlošku i vraća se predložak definiran u funkciji. Predložak će biti HTML dokument s malo jezika koji se zove Jinja2, koji donosi informacije o Pythonu u HTML.
Da biste započeli stvaranje predložaka, napravite dva direktorija u hrani.
mkdir feed/templates
mkdir feed/templates/feed
Zatim uredite predložak u gore navedenom direktoriju, uhranite / predloške / feed i dodajte kôd za ovaj primjer. Pogledajmo predložak za ovaj primjer.
Ovo je vrlo jednostavan predložak. Definiše otvaranje i zatvaranje HTML oznaka, oznaku tipa dokumenta, oznaku karoserije sa naslovom legende, oznakom pauze koja dodaje malu liniju preko ekrana, a za petlju koja svako post čini na popisu postova kao odlomak u predlošku. Ovo je sve što je potrebno za renderiranje postova, ali u bazi podataka još nema. Kreirajmo neke s ljuskom. Možemo pokrenuti školjku sa Manage.py
python manage.py shell
Sada, uvozimo naš post model
from feed.models import Post
Zatim ćemo stvoriti jednostavan post sa nizom i izlaziti iz školjke. String može biti bilo šta, koliko dugo je važeći tekst.
Post.objects.create(text='hello world')
exit()
I na kraju, morat ćemo dodati uzor u URL-u na naš feed. Budući da će naša aplikacija za dovode koristiti više URL-ova i želimo zadržati veličine datoteke male, napravimo lokalnu URLss.py u našoj aplikaciji za hranu koja izgleda ovako:
from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
Također ćemo morati urediti URLS.PY u baznoj aplikaciji, što god smo odlučili nazvati, ovo je bio prvi direktorij koji smo stvorili. Uredi aplikaciju / app.py i dodajte sljedeće u URL uzorke
from django.urls import include # na vrhu
# ... Prethodni kod ovdje
Sada, kada pokrenemo server sa Python Manage.py Runserver, videćemo stranicu koju smo stvorili jer imamo model, prikaz i predložak kao i uzorke URL-a, zajedno sa predmetima u bazi podataka. Dalje, provedimo obrazac koji smo stvorili i počnete kreirati vlastite postove. Ali prije nego što napišemo previše koda, napravimo sigurnosnu kopiju koristeći skriptu koju smo napisali ranije, sigurnosnu kopiju. Pokrenite ovu scenariju u školjku, pričekajte nekoliko trenutaka, a svi će kodeks podržati na naše git spremište.
backup
Implementacija obrasca je relativno jednostavna. Uvozit ćemo naš obrazac, dodavanje postavke zahtjeva za zahtjev za prikaz i spremite post u bazu podataka prije preusmjeravanja na isti prikaz. Možemo upotrijebiti funkciju preusmjeravanja koju smo već uvezeli, a druga funkcija nazvana obrnuto da biste dobili URL za obrazac prikaza. Mi ćemo to upiti s nizom 'Feed: Feed' jer je prostorija sa uključenim uzorka hranjen, a pogled se naziva i feed.
posts = Post.objects.all() # Upitajte sve postove u bazi podataka do sada
if request.method == 'POST': # Rukovati post zahtjevom
form = PostForm(request.POST) # Stvorite instancu obrasca i spremite podatke na njega
if form.is_valid(): # Potvrdi obrazac
form.save() # Spremite novi objekt
return redirect(reverse('feed:feed')) # Preusmjerite na isti URL sa genutom zahtjevom
'form': PostForm(), # Obavezno prođite obrazac u kontekst tako da ga možemo prikazati.
Sada ćemo morati ažurirati obrazac na račun novog oblika. To možemo učiniti pomoću
Razbijmo ovo. Postoji nova klasa obrasca, token, sam obrazac i dugme za slanje. Prilično jednostavno, ali kad ga pogledamo, možda bismo htjeli da izgledamo bolje. Djeluje, možemo objaviti nove postove sa obrascem i oni su sada spremljeni u bazi podataka. Ovdje se događa nekoliko stvari. Koristimo HTML oznake da se izjavljujemo da je dokument HTML dokument, koristimo oznaku predloška ({% ...%}) kako bi se token donijeli za obrazac, a drugi, {{...}} da bi se postigao obrazac. Također imamo petlju za prikazivanje teksta pomoću blok oznaka i oznake predloška. Blokirane oznake su zaista važne jer možemo definirati kako se dijelovi predloška čine s njima, a predloške oznake su osnova kako smo varijabli stavljali u naš kod.
Sada moramo natjerati da naša aplikacija izgleda bolje, jer za sada izgleda baš osnovno. To možemo učiniti pomoću CSS-a, bilo u obliku ili u nastavi vezanim za svaki objekt u dokumentu. CSS je zaista lijep jer sve kaže na stranici kako bi to trebalo pogledati i može izgledati zaista dobro. Postoji nekoliko biblioteka koje to mogu učiniti, ali moj lični idu je bootstrap.
Bootstrap se može preuzeti sa svoje web stranice,getbootstrap.com/. Jednom tamo pritisnite tipku za čitanje ugradbenih dokumenata i kopirajte kôd iz odjeljka Uključi preko CDN-a. Trebat će vam ovaj kod na vrhu svog HTML dokumenta, u oznaci koja se zove glava. Takođe, idemo naprijed i stvorimo osnovni predložak, tako da ne trebamo ponovo stvoriti ove veze u svakom predlošku.
Napravite novi direktorij pod nazivom Predlošci sa MKDIR predlošcima, a zatim uredite predloške / base.html.
To bi trebalo izgledati ovako:
Obavezno kopirajte CSS i JavaScript, datoteke .css i .js, jer će nam trebati JavaScript da našu web stranicu učini funkcionalnijom u budućnosti.
Sada se vratimo u bash školjku i pokrenite brzu naredbu. Zapamtite, ako ikad trebate pristupiti virtualnom okruženju, unesite izvor VENV / bin / Activation. Ovo će vam omogućiti lokalno instaliranje Python paketa na način koji omogućava da Django pristupi im. Da bi naši oblici stvorili klase Django Bootstrap, koristit ćemo Python paket pod nazivom Hrypy formi. To možemo preuzeti sa narednom naredbom
pip install django-crispy-forms
Jednom kada se to instalira, dodajte ga na postavke.Py
# ... Prethodni kod ovdje
Sada, natrag u našem predlošku feeda možemo ukloniti neke stvari. Uklonimo početak i kraj dokumenta i zamijenimo ga nasljeđivanju iz našeg osnovnog predloška, koristeći se i definicija bloka. Takođe, dodat ćemo uvoz filtera za predložak sa opterećenjem i filtrom predloška u obrazac. I na kraju, dodajmo klasu Bootstrap-a na gumb na obrascu kako bi izgledalo više kao dugme. To bi trebalo izgledati ovako:
Prekrasno! To je već prilično malo koda. Dalje bismo ga trebali testirati i uvjeriti se da vidimo da sve izgleda lijepo, a također biti siguran da sve radi kako pravilno radi. Pokrenite server prema prethodnim uputama i provjerite da li web mjesto izgleda i radi u redu. Odličan posao! Spremni ste preći na sljedeći korak, u kojem ćemo dodati funkcionalnost prijave korisnika koristeći slične URL-ove, obrasce, poglede i predloške. Osnovni predložak je važan i nastavit ćemo ga mijenjati i izmijeniti promjene po potrebi, ali za sada ćemo se fokusirati na sigurnije naše web lokacije, i na kraju još važniji podaci koji će vam pomoći da vaš račun bude siguran i svoj vlastiti račun dostupnim samo vama.
Da biste to učinili, morat ćemo koristiti korisnički model ugrađen u Django. Korisnički model je model baze podataka, poput našeg posta, koji se može prikazati za prijavu korisnika na web mjesto. Ubuduće, prije nego što mi prestanu web mjesto na Internetu, proširit ćemo ovaj model s drugim modelima koji su mu pripisani njoj i izgradili dodatne mjere sigurnosti za prijavu koja su otporne na phishing. Počet ćemo korištenjem nekih ugrađenih u obrasca za prijavu koji Đango pruža. Prvo, napravimo novu aplikaciju koju ćemo koristiti za prikazivanje predložaka i pregleda za osnovnu stranicu za prijavu. Također ćemo stvoriti druge aplikacije za predstavljanje kontinuiranih izazova za prijavu kako bi se osigurala aplikacija, uključujući pincode, prepoznavanje lica, u blizini terenskih komunikacija, vanjskih uređaja, više faktorske provjere i prepoznavanje otiska prsta.
Već smo razgovarali o pokretanju aplikacije. Iz našeg imenika, unutar virtualnog okruženja, prođite manage.py ti argumenti
python manage.py startapp users
Sada bismo trebali imati imenik za novu aplikaciju. Započnimo kreiranjem pogleda u toj direktoriju koji odgovara korisniku Prijava. Django je ugradio u pogledu na korisničke prijave, ali oni neće biti prikladni za nas jer nam treba prilagođeni pogled, koji je poželjno učinjen s definicijom.
U ovom ćemo mišljenju započeti provjerom zahtjeva za postavku, proslijedi zahtev.Post na prijavu u koju se uvozi iz Đangoa, autentificira korisnički račun i prijavi se korisnik prije preusmjeravanja na našu aplikaciju za hranu.
U korisnicima / views.py, dodajte sljedeći kod
username = request.POST['username'] # Nabavite korisničko ime i lozinku sa zahtjeva za postajem
password = request.POST['password'] # Autentificirajte korisnika
Ovo je sve što vam je potrebno za osnovni prikaz za prijavu. Sada, napravimo obrazac za prikaz proširivanjem osnovnog predloška. Počećemo kreiranjem novog imenika za predloške u mapi korisnika.
mkdir users/templates
mkdir users/templates/users
Sada bismo trebali moći uređivati korisnike / predloške / korisnike / login.html. Dok smo u tome, stvorit ćemo predložak kako bismo korisniku omogućili da se prijavi.
nano users/templates/users/login.html
Sada, u predlošku,
Ovo su osnove predloška za prijavu. Stvarno je kao i drugi predložak u strukturi, ali izgleda pomalo drugačije kada se to učini. Možemo kopirati ovaj kôd za izgradnju još jednog vrlo sličnog predloška pod nazivom Register.html, gdje ćemo promijeniti formulaciju i korištenje novog oblika koji gradimo. Prvo napravimo predložak. Uređivanje korisnika / predlošci / korisnici / registar.html i dodajte sljedeći kod:
Sada izgradimo obrazac za našu registraciju korisnika i kružimo natrag u pogledu prije nego što nadogradimo naše prijave korisnika sa modelom. Ovim ćemo se formirati osnovno za početak, ali uključiti više detalja i sigurnosnih karakteristika kao što su sporazumi i CAPTCHA u budućnosti. Uredite obrasce sa nano korisnicima / formi.py i dodajte sljedeći kôd.
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
Dakle, ovdje imamo još jedan oblik, koji radi prilično jednostavno. To je obrazac korisnika u korisničkom registru s korisničkim imenom, e-pošti i lozinkom, kao i polje za potvrdu lozinke. Imajte na umu da ovaj obrazac ne proširuje redovne forme.form Class, to je modelni oblik koji znači da ima meta. Jedno polje je definirano isto, a klasa meta definira model koji obrazac odgovara ostalim informacijama koje će biti zapisane na obrazac. Većina toga već postoji u Djangovoj izgrađenoj ugledništvu za prijam, tako da ćemo to iskoristiti kao osnova za klasu (prenesena u zagradama).
Zatim ćemo ispitati mišljenje da registriramo korisnika, sada kad imamo oblik i predložak. Ovo je modelperm, baš kao i onaj u novom post-view. Uredite korisnike / views.py i dodajte sljedeći kod:
# ... uvoz
Ovo je sve što trebamo da se korisniku registrira, ali trebali bismo imati više informacija. Želimo znati da je korisnik registrirao, u koje vrijeme su bile zadnji na licu mjesta, poput biografije, vremenske zone itd. Također ćemo morati ažurirati svoj model feed, post, na račun korisničkog modela i atributima. Da bismo to učinili, ažurirat ćemo modele.py u obje aplikacije. Započnimo uređivanjem modela feeda. To bi trebalo izgledati ovako:
from django.db import models # ... uvoz
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Dodajte u ovu liniju
Obratite pažnju na drugu liniju koja je dodana u datoteku. Ovo je strani ključ, koji će svaki post pripisati jednom korisniku po postu, tako da možemo osigurati da sačuvamo postove na korisniku po korisniku i ne može se izvršiti nikakav post bez da ga ne može izvršiti bez korisniku. Definiramo ovaj strani ključ sa klasom koji predstavlja argument izbrisanja kako bi se osiguralo da se objavljuju s korisnicima, null i prazne argumente kako bismo mogli smjestiti za korisniku na postovima koje smo već stvorili i za koje se možemo uputiti na postavljanje objekata koje korisniku kreira. Ovo povezano ime, za razliku od post.author, autor pošte, daje nam korisniku koji je objavio post. Sada možemo dobiti postove korisnika napravljenu od strane pokretanja korisnika.posts.all () ili autor.posts.all ().
Sada, napravimo naše prijave otpornije. Već možemo učiniti da naša stranica mnogo manje ranjiva na krađenju jednostavnom brzinom ograničavajući broj puta mi ćemo dozvoliti prijavu na web mjesto, ovo je sasvim jednostavno. Počnimo i počaramo neke podatke o svakom korisniku prije nego što nastavimo razvijati našu aplikaciju. Uređivanje korisnika / modela.py, dodajte sljedeći kôd.
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True, related_name='profile')
account_created = models.DateTimeField(default=timezone.now)
last_seen = models.DateTimeField(default=timezone.now)
can_login = models.DateTimeField(default=timezone.now)
preferred_name = models.CharField(max_length=20,default='', null=True, blank=True)
bio = models.TextField(blank=True, default='')
Imajte na umu da je ovaj model prilično sličan post modelu. Imamo dodatni uvoz, vremensku zonu, koji će nam omogućiti da postavimo zadane postavke na DateTime poljima, a imamo i karakter i tekstne polje poput pondera. Koristeći sve ove vremenske oznake pomaže nam osigurati web mjesto i razumjeti njenu upotrebu, a tekstualna polja omogućuju nam da podatke o svakom korisniku ili autoru na web mjestu prikazuje informacije o svakom korisniku ili autoru. Onetoonefield bi trebao biti jedini manji razmatranje, ponaša se potpuno isto kao i predviđač, ali sa samo jednim po naknadnim modelom. Na ovaj način korisnik ima samo jedan profil, dok oni mogu imati mnogo postova.
Sada, da poboljšamo našu prijavu i registruju se prikazi na račun za profil. Prvo uredite korisnike / views.py i fokus na prikaz registra:
# ... uvoz
Profile.objects.create(user=user) # Obavezno dodajte ovu liniju da biste stvorili profil za korisnika
Ovo jednostavno stvara profil za korisnika, bez popunjavanja bilo koje od informacija. Sada želimo osigurati da se korisnički račun ne može prečesto prijaviti, ili se barem lozinke ne mogu prečesto isprobati, pa hajde da ažuriramo prikaz za prijavu.
# ... uvoz
if user and user.profile.can_login < timezone.now(): # Imajte na umu da sada provjeravamo da li se korisnik može prijaviti
else: # Ako prijava nije bila uspješna,
user = User.objects.filter(username=username).first() # Ovo je dio u kojem ažuriramo profil korisnika
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Pa se ne mogu ponovo prijaviti nekoliko sekundi
Ovo je osnovna osnovna za sigurnost. Provjerite je li web mjesto ne ranjivo na nekoga jednostavno pokušava svaku moguću kombinaciju lozinke ili čak nekoliko njih istovremeno. Ovo neće biti frustrirajuće običnom korisniku koji zna njihov pristupni kôd i jednostavno se zapisuje na nekoliko uređaja, ali zadržat će brojne robote koji se sadrže iz aplikacije. Imajte na umu da smo dodali AF izjavu s varijablom, can_login, to bi trebalo biti vrijeme u prošlosti i ažurirati je svakom neuspješnom prijavom koristeći isto korisničko ime. Na ovaj način zlonamjerni korisnik neće moći pogoditi lozinku bilo gdje u blizini što brzo. Broj sekundi u DateTime.Timedelta () se može ažurirati i web stranica će biti otporniji, a opet malo manje upotrebljivi s više sekundi. Preporučujem 15 za početak sa.
Zapamtite, izgradili smo rezervnu skriptu da bismo spasili svoj rad, pa idemo naprijed i sigurnosno kopirati ono što imamo do sada da bismo bili sigurni da imamo sve spremljene. Pokrenite naredbu:
sudo backup
Još jednom, ovo će vam uštedjeti posao do sada. Preporučujem da trčate česte sigurnosne kopije kako biste sačuvali svoj rad, a možda ćete čak i morati automatski pokrenuti sigurnosnu kopiju. To možete učiniti pomoću UNIX uslužnog programa pod nazivom CRON. Da biste aktivirali ovaj uslužni program, pokrenite sljedeću naredbu i unesite lozinku:
sudo crontab -e
Ako već niste odabrali opciju 1 za Nano, uređivač teksta s kojima biste već trebali biti upoznati i dođite do dna datoteke pomoću tipki sa strelicama. Dodajte sljedeću liniju:
0 * * * * sudo backup
Cron koristi minutu formata, sat, dan u mjesecu, mjesec, dan u sedmici, gdje * ili broj predstavlja kada za pokretanje naredbe. Koristeći 0 za minutu i * Za ostale opcije možemo pokrenuti naredbu u prvoj minuti svakog sata na početku minute. Ovo nam omogućuje sigurnosnu kopiju koda. Svi Cronovi poslovi kada se pogubi sa sudom trče kao korijen, tako da nećemo trebati upisati lozinku svaki sat.
Da biste olakšali sigurnosnu kopiju našeg koda bez korištenja lozinke, onemogućimo lozinku za našu naredbu sigurnosne kopije. To ćemo učiniti tako da izvršavamo sljedeću naredbu i unose u lozinku:
sudo visudo
Idemo do dna datoteke i dodaj drugu liniju:
ALL ALL=NOPASSWD: /bin/backup
To nam omogućava da pokrenemo naredbu "sigurnosna kopija" kao bilo koji korisnik, bez lozinke. Format za ovo je jednostavan, samo prefiks liniju sa "Sve sve = nopasswd: / bin /" i završava naredbom, na primjer / bin / sigurnosnu kopiju, koja postoji u / usr / bin /.
Sada, počnemo sa radom sa e-poštom. E-pošta je zaista važna za web stranice, jer je to način da se web stranica bude sigurnija, provjerite korisnici su stvarni ljudi, pa čak i proizvodi na tržištu ili usluge kupcima. Mnogi ljudi koji učestvuju na Internetu svakodnevno provjeravaju svoju e-poštu i primaju svakakve marketinške e-pošte o proizvodima i uslugama koje su zainteresirane. Postoji nekoliko opcija kada je u pitanju omogućeno e-poštu na web lokaciji Django, a vi odaberete ono što vi odaberete.
Prvo, možete platiti za uslugu e-pošte koja će vam omogućiti slanje e-pošte iz svoje domene i potreban minimalan kod. Postoji mnogo usluga koje nude ovo, kao što su Google Workspace, SendInblue, Mailgun i još mnogo toga.
U suprotnom, dobro ste izgradnja vlastite službe e-pošte unutar svog servera od nule. Preporučujem ovu opciju, iako je više koda i može zahtijevati posebne hosting. Nećete moći pokrenuti poslužitelj pošte iz vašeg kućnog računara najvjerovatnije, pa idemo naprijed i ispitati konfiguraciju i kôd za slanje e-pošte prije nego što pokrenemo server u oblaku i kreiramo vlastiti poslužitelj pošte unutar.
Prvo uređivanje postavki.Py sa sledećom naredbom:
nano app/settings.py
Gdje je aplikacija naziv aplikacije koju ste kreirali sa startappp-om.
Dodajte sljedeće redove:
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)
Obavezno promijenite ih kada budete spremni za implementaciju aplikacije, mi ćemo to ponovo pregledati. Postavka e-pošte_Address bi trebala biti e-pošta koju želite poslati, a lozinka (e-mail_host_password treba biti postavljena na lozinku koju generirate za poslužitelj. Učitavam lozinku iz konfiguracijske datoteke da bih ga izvukla iz koda pomoću sljedeće logike, iznad ovih linija u Settings.py:
import os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
Zatim sam postavio JSON datoteku sa Config u /etc/config.json koristeći Nano na sljedeći način.
Da biste uredili datoteku:
sudo nano /etc/config.json
Dodajte sljedeće redove:
{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
Nastavit ćemo uređivati datoteku config i dodati sve lozinke i tipke koje ćemo koristiti u aplikaciji. Za sada, brzo ispitujemo kako pošalji e-poštu pomoću Pythona. Prvo, napravimo predložak za provjeru e-pošte za provjeru Možemo poslati našim korisnicima i staviti je u direktorij korisničkih predložaka. Ovaj predložak će biti napisan u HTML-u.
nano users/templates/users/verification_email.html
Ova e-pošta je prilično jednostavna. Potrebno je kontekst korisnika, baznog URL-a za web mjesto i korisnički ID i token koji se koriste za provjeru korisničke e-pošte. Obavezno definirajte bazni URL u Settings.py prije nego što napišemo neki python kôd za prikaz predloška. Samo napred i dodajte sljedeće redove za aplikaciju / postavke.py, u blizini početka.
SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
Na kraju, kada je vaša web lokacija spremna za Internet i rasporedite ga, želite definirati svoju domenu kao ime domene koje kupujete za predstavljanje stranice. Ovo je naziv koji ćete upisati navbar kako biste pristupili svojoj web lokaciji. Za sada možete ostaviti domen praznu ili koristiti rezervirača. Također ćete željeti promijeniti ime web stranice na ime koje želite dati svojoj web lokaciji, po vašem izboru.
Prije nego što pošaljemo e-poštu, napravimo token generator tako da možemo imati token aktivacije računa koji nikada ne istekne. To možemo učiniti izgradnjom i uvozom tokena aktiviranja računa koji izgleda kao sljedeće. Uredite datoteku:
nano users/tokens.py
Dodajte sljedeći kod:
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()
Ovaj osnovni token generator generira token koji korisniku možemo poslati u URL-u i korisnik može koristiti za provjeru njihove e-pošte i aktiviranje računa.
Dalje, da vidimo kako pošalji e-poštu. Upotreba Nano-a, uredi korisnike / e-mail.py.
nano users/email.py
Slanje provjere HTML e-pošte izgledat će ovako:
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)
Ovo je prilično jednostavno. Uvozimo funkcije koje trebamo poslati e-poštu, e-poštu s predlošcima i našim postavkama, a zatim definiramo e-poštu po imenu predloška i pošaljite ga korisniku pomoću funkcije. Primijetit ćete da nismo definirali funkciju da pošaljemo poštu, send_html_email, pa, zato napišemo ovo ispod koda koji smo već dodali u korisnike / e-mail.Py
def send_html_email(user, mail_subject, html_message):
to_email = user.email
username = user.username
if to_email == '':
return None
unsub_link = settings.BASE_URL + user.profile.create_unsubscribe_link()
html_message = html_message + "<p><a href=\"" + unsub_link + "\" + title=\"Unsubscribe from " + settings.SITE_NAME + " emails\">Unsubscribe</a></p></body></html>"
msg = EmailMultiAlternatives(mail_subject, strip_tags(html_message), settings.DEFAULT_FROM_EMAIL, [to_email], headers={'List-Unsubscribe' : '<' + unsub_link + '>'},)
msg.attach_alternative(html_message, "text/html")
profile = user.profile
try:
msg.send(fail_silently=False)
if not profile.email_valid:
profile.email_valid=True
profile.save()
except:
profile.email_valid=False
profile.save()
Ovo je malo složenije, a mi još nismo spremni da vodimo sve ovaj kod još. Primjetite da definiramo UNSUB_Link, link koji korisnik može koristiti za odjavu iz naših e-mailova. Ovo je važno, jer će korisnici morati da se mogu isključiti iz naših e-maila osim ako ih ne žele vidjeti u bilo kojem trenutku. Također dodajemo tekstualnu alternativu našoj poruci, što je HTML poruka ličena HTML oznaka. I na kraju provjeravamo je li e-poštu poslana i ako nije, označavamo u profilu korisnika da njihov e-mail ne važi.
Vratimo se u korisničke modele kako bismo to mogli učiniti svim radom. Moramo definirati funkciju za generiranje veze za odjavu i definirati boolejsko polje za označavanje da e-adresa korisnika nije valjana.
Prvo dodajte sljedeća uvoza na vrh korisnika / modela.py
nano users/models.py
# ...
Zatim dodamo funkcije korisničkom modelu da napravimo token i provjeri token koji se koristi za aktiviranje e-pošte, kao i polje za spremanje da li korisnik uspješno prima svoju poštu. U korisnicima / modelima.Py ponovo dodajte sljedeći kôd na kraj modela (razveden kod)
# ...
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Vrijedi 30 dana
Ovo je prilično jednostavno, koristimo TimestampSigner koji je osnovni kriptografski alat za stvaranje tokena koji će isteći nakon određenog vremena, a mi također koristimo drugu funkciju za provjeru je li valjana. Ove tokene koristimo dva puta, jednom, jednom da potvrdimo e-poštu, a jednom za odjavu.
Sad kad ih imamo, posljednjeg rada koje ćemo morati učiniti je u pogledima. Unutar korisnika / views.py, dodajmo poglede da provjerimo adresu e-pošte i za odjavu.
nano users/views.py
Prvo dodajte sljedeća uvoza. Bacio sam se u nekoliko dodatnih, tako da ne moramo kasnije više uvesti više predmeta.
from .email import send_verification_email # Obavezno uvozite funkciju slanja e-pošte za potvrdu
Možda ćete već imati neki od ovih uvoza, ali ne boli da ih ponovi. Trebat ćete uvesti funkciju slanja e-pošte za potvrdu, kao i računu_activation_token iz korisnika.tokens, između ostalih uvoza.
Sada, na dnu datoteke, dodajte sljedeći kod:
# odjavite ih
# Inače preusmjeravanje na stranicu za prijavu
# SendWelcomeEmail (zahtjev, korisnik)
Ovo je puno koda. Razbijmo ga. Prva funkcija, čista i jednostavna, odjavljuje korisnika sa popisa za slanje pošte. Druga funkcija aktivira njihovu e-poštu i primijetit ćete da sam dodao komentirani funkciju, SendWelcomeEmail. Dobrodošli ste koristiti e-mail predložak i definiciju funkcije za slanje e-pošte dobrodošlice, još uvijek nisam. Posljednja funkcija koju sam bacio je važno je jer istječu e-pošte za aktivaciju. Stoga ćemo morati ponovo poslati e-poštu za aktivaciju. Za to možemo koristiti osnovni obrazac i nazvati funkciju da pošaljete potvrdni email. Prije nego što to učinimo, pobrinejmo se da se uputi na prvo mjesto, dodavanjem funkcije poziva na prikaz registra. Dodajte ovu liniju neposredno prije preusmjeravanja u prikaz registra, DEF Registrujte se u korisnicima / views.py.
nano users/views.py
# ... (nakon) DEF Registracija (zahtjev):
# ... (prije) preusmjeravanje (
Ne morate dodati prve i poslednje retke u tom isječci, samo provjerite da li pregled registra šalje korisniku. To bi trebalo izgledati ovako:
# ... uvoz
send_verification_email(user) # Obavezno dodajte ovu liniju!
Sada ćemo morati dodati obrazac za ponovno postavljanje e-pošte za aktiviranje. U korisnicima / formi.py, dodajte sljedeći obrazac:
# ... (uvoz)
Trebat će nam i predložak koji odgovara ovom obrascu za aktiviranje e-pošte. Dodajmo ovaj predložak. Uredite datoteku:
nano users/templates/users/resend_activation.html
Zatim dodajte sljedeći kôd u datoteku.
Whew, to je puno! Sada, kada mi se raspisujemo kod našeg poslužitelja, moći ćemo poslati HTML e-poštu i aktivirati korisničke račune klikom na e-poštu. Takođe možda želemo poslati jednostavnu e-poštu za dobrodošlicu, pa da vidimo kako to učiniti. Povratak u korisnike / e-mail.py, dodajte sljedeći kod:
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)
Također, trebat će nam predložak za prikazivanje svih tih informacija. Na mojoj web stranici predložak izgleda kao dolje, ali možete ga formatirati, koliko god želite.
Imajte na umu da nemamo zatvaranje tela ili HTML oznake, jer dodajemo ih kada dodamo vezu HTML odjava. Ovo su važne, ali ne želimo ih dva puta definirati.
Pa šta je sledeće? Došli smo dug put. Zaista, trebali bismo biti spremni za rasporediti web mjesto na server. Možemo dodati @Login_Required Decocorator i našim pogledima omogućite servisima korisnika, pošaljite u skladu sa e-poštom i podacima o predmemoriji, što je osnova onoga što web stranica treba učiniti da bi ostala relevantna. Dodaćemo nekoliko korisnih karakteristika, a zatim izgradite osnovu za raspoređivanje našeg koda na udaljeni poslužitelj, postavljanjem poslužitelja pošte, konfiguracije domene i filtera kako bi se naša stranica sigurna i prikladna.
Trebat ćemo i prikaz resetiranja lozinke, pa dodamo to stvarno brzo. Django je ugrađen prikaz resetiranja lozinke u nekim funkcijama, ali pogledat ćemo kako napisati svoj vlastiti prikaz, šablona e-pošte, obrasce i url url. Evo kako izgleda prikaz u korisnicima / views.py
# ... uvoz
Ovaj obrazac ugrađen je u Đango, ali trebat će nam predložak za potvrdu resetiranja lozinke, korisnici / predlošci / korisnici / lozinku_reset_confirm.html
Imamo i predložak za slanje e-pošte za resetiranje lozinke, jednostavnim obrascem, u korisnicima / predlošcima / korisnicima / lozinka_reset.html
Predložak za sam e-pošte je jednostavan, osnovna je HTML datoteka prikazuje vezu za resetiranje lozinke, u korisnicima / predlošcima / korisnicima / lozinka_reset_email.html. Django će automatski tumačiti ovu datoteku.
Trebaće nam i još dva predloška. Prvo je potvrditi da je e-pošta poslana. Pogledi za ovo su već u Django, pa se samo moramo riješiti u URLS.Py. Ovaj predložak nalazi se na korisnicima / predlošcima / korisnicima / lozinka_reset_done.html
I na kraju, da potvrdim da je resetiranje lozinke kompletno, korisnici / predlošci / korisnici / lozinka_reset_complete.html
Sada su nam potrebni uzorci URL-a za ove poglede. U korisnicima / urls.py dodajte sljedeće URL obrasce:
# ... Prethodne URL-ove ovde
Četiri šablona, to je puno! Ali sada možemo sigurno biti u mogućnosti resetirati korisničku lozinku u bilo kojem trenutku koji trebamo, svi iz web pretraživača.
Razumijem da je ovo puno koda. Ako se čini malo preko glave, to je u redu. Poboljšaćete se, vaše razumijevanje će se poboljšati, a vi ćete postati mnogo kompetentniji sa šifrom vrlo brzo. Ako ste potpuno izgubljeni, preporučujem se kasnije vraćajući na ovaj softver nakon što radim na samostalnom naučinju za šifrirajte tečaj na mreži. Obično su slobodni za početak, a voditi će vas kroz sve što trebate biti uspješni kada se vratite na ovaj projekt. Ako se osjećate kao da ste spremni za nastavak, pročitajte dalje, mi ćemo pokriti raspoređivanje vašeg koda na udaljeni poslužitelj i postavljanje poslužitelja pošte, kao i automatiziranje vašeg implementacije pomoću bash-a, tako da uvijek možete postaviti novi projekt s nekoliko jednostavnih naredbi.
Posljednje što trebamo učiniti prije raspoređivanja na udaljeni poslužitelj čini našu stranicu malo sigurnije. Primijetit ćete da prikaz za prijavu uzima samo korisničko ime i lozinku, a nema više faktorske provjere autentičnosti ili jednokratnog koda. Ovo je jednostavno popravljanje, a s istim kodom možemo napraviti našu web lokaciju poslati tekstualne poruke, pa čak i biti odgovoriti na tekstualne poruke koje su poslane na poslužitelju. Za početak, vratit ćemo se u korisničke modele i dodati potpisniku Timestampa koji će predstavljati svaku prijavu. Također ćemo dodati jedinstven, rotirajuće identifikator korisničkom modelu koji će se koristiti za dodavanje dodatne sigurnosti na našu prijavu. Uređivanje korisničkih modela, korisnika / modela.py, dodajte sljedeći kod:
# Obavezno uvozite UUID, TIMESTAMP potpisnika i URL generator (obrnuto)
# Ovdje dodajte ovaj kod
# I dodajte ovu funkciju
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Vrijedi za 3 minute
Provjerite da li vaši korisnici / modeli.py izgleda ovako, osim komentara (kod na linijama sa #). Razbijanje ovoga, jednostavno je. Imamo nekoliko uvoza, vremenski okvir koji je kriptografski uslužni program koji može generirati siguran kod i provjeriti je kako bi se osiguralo da je valjano, samo jednom, a ne starije od određenog broja sekundi. Koristimo i UUID, koji je jedinstveni identifikator koji identificira našeg korisnika u potpisivanju tokena, a u URL-u gdje se token šalje korisniku. Koristit ćemo ovu osnovnu kriptografiju za izgradnju dva faktor provjera autentičnosti. Prije nego što učinimo bilo šta drugo, pokrenimo migracije, tako da se naši korisnički modeli ažuriraju. U direktoriju sa upravljanjem.py, pokrenite sljedeće naredbe za izradu i dovršetak migracija.
source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
Ovo je važno jer svaki put kad napravimo promjene modela, morat ćemo stvoriti tablice i ažurirati bazu podataka s zadanim postavkama prije nego što zapravo možemo koristiti modele.
Dalje, procijenimo naši prikaz prijave za preusmjeravanje na sekundarni prikaz provjere autentičnosti. U korisnicima / views.py uklonite funkciju za prijavu i preusmjerite se u URL koji smo upravo generirali u modelima korisnika.
# ... uvoz
if user and user.profile.can_login < timezone.now(): # Imajte na umu da sada provjeravamo da li se korisnik može prijaviti
# Uklonite funkciju Auth_login koja je bila ovdje
return redirect(user.profile.create_auth_url()) # Napomena Ovdje se preusmjeravamo na novi URL
else: # Ako korisnik ne koristi više faktorske provjere autentičnosti, samo ih prijavite.
else: # Ako prijava nije bila uspješna,
user = User.objects.filter(username=username).first() # Ovo je dio u kojem ažuriramo profil korisnika
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Pa se ne mogu ponovo prijaviti nekoliko sekundi
Dakle, ovo je prilično jednostavno, sada imamo način da se preusmjeravamo na dva faktor provjera autentičnosti kada ga stvorimo. Također imamo opadanje u slučaju da korisnik nije dodao telefonski broj. Dodat ćemo osnovni prikaz da uskoro dodamo telefonski broj i uskoro se prijavite s tekstualnom porukom.
Prvo nam je potreban jednostavan način za slanje tekstualne poruke iz našeg koda. Da bismo to učinili, možemo birati između niza API-ja, ali najlakši po mom mišljenju je Twilio. Oni takođe nude dobre cijene za manje projekte, kao i rasuti popust. Kreirajte račun na Twilio.com, popunite neke detalje o svom projektu, kupite telefonski broj i kopirajte API tipke na svoje postavke.Py. Zatim dodajte ovaj kod pod novom datotekom, korisnicima / sms.py.
nano users/sms.py
# Uvezite sve potrebne pakete
# Ovaj kod šalje tekst Twilio
# Pomoćna funkcija za dobivanje broja sa toliko cifara
# Pošaljite tekst da biste potvrdili korisnika
# Pošaljite korisniku bilo koji tekst ovom funkcijom
# Provjerite kod ove funkcije
# Provjerite vrijeme
Obavezno promijenite svoje postavke na odgovarajući način, dodajući ove redove sa svojim tipkama:
# Obavezno kopirajte ih iz svoje dvokrevetne komande
AUTH_VALID_MINUTES = 3 # Broj minuta TFA stranica je aktivna jednom inkantirala
Prvo, trebat će nam oblici za naša dva prikaza autentifikacije faktora. Uređivanje korisnika / formi.py, dodajte sljedeći kôd.
# ... uvoz
# Obrazac za ulazak na naš telefonski broj
# Obrazac za autentifikaciju
Dalje, stvorimo stavove u korisnicima / views.py
# ... uvoz
Trebat će nam i predloške za oba ova stajalašta. Prvo dodamo predložak MFA.
nano users/templates/users/mfa.html
Dodajte ovaj HTML kôd na predložak
Ovo je prilično jasno objašnjenje. Obrazac šalje ili kod ili prazan kod, a u prikazu ćete primijetiti da šaljemo kod ako primimo prazan kod. Zatim jednostavno imamo dva tastera za slanje, a na ovaj način možemo poslati kôd bilo tipkom. Zatim ćemo dodati jednostavan obrazac za dodavanje telefonskog broja.
nano users/templates/users/mfa_onboarding.html
Dodajte sljedeći HTML:
Ovaj obrazac je puno jednostavniji, jednostavno čini formul broj telefona koji smo stvorili i omogućuje korisniku da doda telefonski broj.
Ovo izgleda zaista dobro! Sve dok je sve pravilno postavljeno, trebali bismo moći slati poruke i prijaviti korisnika u njihov telefonski broj čim dodamo ulazne uzorke. Posljednje što trebamo postaviti je profil pregled tako da možemo osigurati da korisnik može promijeniti svoj telefonski broj bez prijave. Takođe, na kraju ćemo htjeti dodati opciju "Stop za odustati od", tako da korisnik može isključiti tekst "prestati" da se isključi iz budućih tekstualnih poruka.
Dodajmo profil profila korisnicima / views.py. Ovaj će prikaz ažurirati korisnikov bio, e-poštu, korisničko ime i telefonski broj, kao i omogućiti nam da omogućimo više faktorske provjere autentičnosti. Prvo će nam trebati još dva oblika u korisnicima / formas.py
# ... uvoz
Zatim možemo stvoriti prikaz za korištenje oba ova obrazaca. Uređivanje korisnika / views.py i dodajte u prikaz.
# Dodajte ovaj uvoz
Trebaće mi predložak za ovaj pogled.
nano users/templates/users/profile.html
Primijetit ćete da je ovo prilično jednostavan oblik, ali ima neki JavaScript u njemu koji automatski objavljuje sadržaj obrasca koji se ažuriraju. Ovo je korisno imati, tako da možete napraviti izmjene bez da se svakog puta ne morate pritisnuti.
Zatim su nam potrebni URL-ovi koji predstavljaju sve ove poglede u korisnicima URL-a. Uređivanje korisnika / urls.py i dodajte ovaj kod:
# ... Prethodni kod, uvoz
# ... URL obrasci koje smo prethodno unijeli, dodajte sljedeće tri retke
Sada je dobro vrijeme za testiranje našeg projekta. Ali prvo, hajde da vodimo još jednu sigurnosnu kopiju.
backup
I pokrenite server. Prije nego što se rasporedimo na Linux server, dobra je ideja omogućiti dvije faktorske provjere na računu. Mi ćemo to učiniti u URL našeg profila, / korisnici / profil / i provjeravanje okvira da omogući provjeru autentičnosti nakon ulaska na naš telefonski broj, a zatim podnošenje obrasca.
python manage.py runserver localhost:8000
Posjetite web stranicu tako što ćete u ovom primjeru odlaskom na vaš web pretraživač, koristim Google Chrome u ovom primjeru i unošenjem URL https: // Localhost: 8000 / Računi / profil /
Moći ćete se prijaviti ako je potrebno i omogućite dvije faktorske provjere autentičnosti.
Ovaj projekat treba poslužitelj koji će se pokrenuti tako da zaista može poslati poštu. Ali prvo, treba nam način da vidimo greške. Primijetit ćete da ako pokrenete server u režimu uklanjanja pogrešaka, sa Settings.debug jednaka istini, server automatski prikazuje greške. Da biste prikazali pogreške bez upotrebe režima za uklanjanje pogrešaka, što je nesigurno na proizvodnom poslužitelju, trebali bismo dodati pogled za to. Najvažnije greške koje smo moći da se obranemo su:
Greška 500 - problem sa našim kodom GREŠKA 404 - stranica koja nije pronađena (slomljena URL) Greška 403 - Dozvola odbijena greška
Dodajmo novu aplikaciju za obradu ovih grešaka, nazvanih grešaka.
python manage.py startapp errors
Dodajte ovo na postavke.py kao što smo već radili, u postavci instalacije_apps i započeli smo dodavanjem referenci na neke prikaze u aplikaciji / URLS.PY, gdje je aplikacija naziv vašeg projekta Django.
handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
Ovo je sve što nam je potrebno osim prikaza grešaka, predložaka i malo srednjeg softvera. Odredimo ih kao:
# Kreirajte svoje stavove ovdje.
Dalje, da definiramo srednji softver da se obradi tim greškama. To ćemo učiniti tako što ćete prvo dodavati u srednji softver_klase u Settings.py, uz naziv našeg srednjeg softvera.
# ... Prethodni srednji softver
Dalje, dodamo srednji softver.
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.')
Dodajemo funkciju da bismo dobili trenutni izuzetak pomoću lokalnog navoja, što nam pomaže u praksu bilo kakvih grešaka u našem kodu. U pogledu predloška, treba nam samo jedan, jer dinamički definiramo naslov u pogledu. Predložak samo treba da donese naslov i "Trace", naš grešku tragove iz konteksta.
nano errors/templates/errors/error.html
Ovo je naš najjednostavniji predložak, ali tako je lako vidjeti pogreške u našem projektu. Zatim, onemogućimo pogrešku u postavkama.
nano app/settings.py
Pronađite ovu liniju u kojoj je postavljeno na TRUE i promijenite ga na FALSE
DEBUG = False
Samo napred i sigurnosno kopirajte aplikaciju. Spremni smo za implementaciju na udaljeni Linux server i nastavite sa dodavanjem funkcija odatle.
sudo backup
Prije nego što objavimo ovaj kôd na poslužitelj, trebali bismo razmotriti da može postojati neka pitanja sa kodom. Ovisno o slučaju, web lokacijama koje prihvaćaju informacije koje su im objavljene imat će problemi sa neželjenom posteljicom i poteškoće u uklanjanju neželjene pošte. To se ne bi trebalo dogoditi odmah, ali ako se to dogodi, kasnije ćemo ispitati kako automatski umjeriti neželjenu poštu na web mjestu i učiniti ga teže za pristup web mjestu i provjeriti korisnički identitet s skeniranjem njihovog ID-a ili biometrijskog skeniranja, poput otisaka prstiju ili prepoznavanje lica.
Gledajući primjer multi faktorske autentifikacije koji smo pregledali, u proizvodnji, stvari mogu biti različite. Primjetite kako smo ograničavajući od ograničavanja i ističemo tokene. Ako roboti pristupaju mjestu, dva faktorska provjera autentičnosti mogu biti teže ući u istovremeno ući u kodove Korisnik je. Da biste se borili, koristimo model u korisničkim modelima, proglašavajući kako komuniciramo s web stranicom kada ovjeravamo pomoću multi faktorske provjere autentičnosti s telefonskim brojem. Takođe ćemo dodati opciju za autentifikaciju e-poštom. Započnite uređivanjem korisničkih modela sa nano.
nano users/models.py
Ovo je ono što bi model na kojem dodavanju trebalo izgledati. Ne trebaju nam nikakve metode, samo varijable za pohranu lične karte, korisnika, vremenske oznake, isteka, dužinu i pokušaje bilo koje više faktorske provjere (kôd poput 123456 poslane na telefon ili e-poštu).
# Osnovni token koji se koristi za prijavu na web stranicu
Dodati ćemo i privilegiju našem korisniku, a mi ćemo ga ručno postaviti, prije nego što se na kraju premjestimo na ingistraciju privilegovanih korisnika. U modelima korisnika dodajte ovu liniju na profilu:
vendor = models.BooleanField(default=False)
Kao i kod bilo kakvih promjena u bazi podataka, moramo napraviti migracije i migrirati bazu podataka bilo koje vrijeme u kojima uređujemo modele.py datoteku u Djangou. Zapamtite, da biste to učinili, prvo koristimo izvor (ako se već ne koristi jer je terminal otvoren), a zatim python manage.py da napravi migracije i migrira.
cd project-directory-you-named # (ako je potrebno)
Za sada možete upisati bilo kakve račune koje ste stvorili kao dobavljači pomoću ljuske.
python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Sada, razvijamo naš multi faktorski pregled provjere za korištenje ovog tokena. Prvo, moramo izmijeniti svoje MFA pomoćne komunalije. Koristeći nano,
nano users/mfa.py
from django.utils import timezone
import random
import datetime
from django.conf import settings
from feed.middleware import get_current_request
from django.contrib import messages
from .email import send_html_email
import traceback
from .models import MFAToken
account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
source_phone = settings.PHONE_NUMBER
def send_text(target_phone, text):
from twilio.rest import Client
try:
client = Client(account_sid, auth_token)
if len(target_phone) >= 11:
message = client.messages.create(
to=target_phone,
from_=source_phone,
body=text + ' Text STOP to cancel.')
except:
messages.warning(get_current_request(), 'There was an error sending the message.')
print(traceback.format_exc())
def get_num_length(num, length):
n = ''
for x in range(length):
n = n + str(num)
return int(n)
def send_verification_text(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_user_text(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)))
def send_verification_email(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))
def send_user_text(user, text):
send_text(user.profile.phone_number, text)
def check_verification_code(user, token, code):
token.attempts = token.attempts + 1
profile = user.profile
result = (token != None and code != '' and token.token == code and (token.expires > timezone.now()) and token.attempts <= settings.MFA_TOKEN_ATTEMPTS)
if token.attempts < 3 and result:
profile.verification_code_length = 6
elif token.attempts > 1 and not result:
profile.verification_code_length = profile.verification_code_length + 2
if profile.verification_code_length > settings.MFA_TOKEN_LENGTH: profile.verification_code_length = settings.MFA_TOKEN_LENGTH
token.save()
profile.save()
return result
# Autentificirajte korisnika koristeći njihov e-mail ili telefonski broj
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Filtrirajte token po vrijednosti prenesenom u URL (UUID)
if not token: token = MFAToken.objects.create(user=User.objects.filter(profile__uuid=username).first(), uid=username, expires=timezone.now() + datetime.timedelta(seconds=115)) # Ako ova sesija nije stvorena, stvorite ga
user = User.objects.filter(id=token.user.id).first() # Dobiti korisnika iz tokena
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Ako su već ovjereni, prijavite ih unutra
if not user: raise PermissionDenied() # Negirati ako nije pronađen nijedan korisnik
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Provjerite auth token
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Prijavite se korisniku ako nisu već prijavljeni
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Postavite isticanje na njihovu više faktorske provjere autentičnosti
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Preusmjerite korisnika na sljedeću stranicu
if not user.profile.mfa_enabled: # Provjerite je li MFA omogućena
if not check_verification_time(user, token): # Pogledajte vrijeme
user.profile.mfa_enabled = False # Očistite telefonski broj
user.profile.enable_two_factor_authentication = True # Omogući MFA
user.profile.phone_number = '+1' # Onemogućite telefonski broj
user.profile.save() # Spremite profil
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Prijavite korisnika ako njihov MVP nije omogućen
if request.method == 'POST' and not fraud_detect(request, True): # Ako je zahtjev postavki zahtjev
form = TfaForm(request.POST) # Instantirajte obrazac
code = str(form.data.get('code', None)) # Nabavite kod
if code and code != '' and code != None: # Pazite da nije prazan
token_validated = user.profile.check_auth_token(usertoken) # Provjerite auth token
is_verified = check_verification_code(user, token, code) # Provjerite kod
if token_validated: # Ako sve
if is_verified: # Je u redu
user.profile.mfa_enabled = True # Omogući MFA (ako nije već omogućeno)
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Prijavite se korisniku
for key, value in request.GET.items(): # Izgradite upit za sljedeći parametar (ako postoji)
return HttpResponseRedirect(next) # Preusmjeriti
elif not token_validated: # Ako je token bio nevažeći
if p.mfa_attempts > 3: # Da je bilo previše pokušaja
if form.data.get('send_email', False): # Pošaljite e-poštu (ili tekst)
# Prikazuju obrazac (za dobivanje zahtjeva)
Kada dodamo ovaj kod, obavezno uvozite funkciju za slanje e-pošte. Na vrhu datoteke, korisnički prikazi (s drugim uvozom), dodaj
from .mfa import send_verification_email as send_mfa_verification_email
Sada moramo napisati tu funkciju prije nego što bilo ko od ovoga će raditi. Trebao bi proširiti našu funkciju slanja e-pošte i jednostavno pošaljite e-poštu korisniku s potvrdnim kodom.
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))
Dakle, ovo sve funkcionira, sada imamo više faktorskih provjera autentičnosti koji ovisi telefonski broj ili e-poštu za prijavu. Ali treba nam i način uklanjanja ili barem sakriti korisnike koji sa svojim uvjetima ne surađuju. To bi mogli biti neželjeni, roboti ili svako ko ne mi tako ne znače za naš rad. Pogledajte prikaz koji imam za nadgledanje korisnika na mojoj web stranici:
# uvoz
from .tests import is_superuser_or_vendor # Trebat ćemo stvoriti ovaj test
# Nabavite listu korisnika
return render(request, 'users/users.html', { # Vratite korisnike u predlošku
Imajte na umu da ovaj kôd koristi test, morat ćemo proglasiti ovaj test u tests.py datoteci i uvesti je. Uređivanje korisnika / tests.py, kreirajmo test.
def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
Ovo je u kombinaciji sa korisnicima / korisnicima .HTML predloška, koji izgleda ovako nešto:
Imajte na umu da predložak uključuje još jedan predložak, korisnike /user.html. Kada koristite predložak koji ima podnesspLempLet i ne koristi se, njegova je dobra ideja dodati podvlaku () Prije naziva datoteke za proširenje, kako bi se razlikovali predloške.
Imajte na umu da je ovo puno Jinje, možda nećete imati definirane sve ove varijable. Ali tako izgleda moj kôd.
<small># {{USER.ID}} </ mali>
Potrebna nam je i još jedna podnaslovna ploča, toggle_active.html. Ovaj predložak trebao bi biti oblik koji nam omogućava prebacivanje da li je korisnik aktivan.
Također ćemo morati dodati prikaz za prebacivanje korisničkih aktivnosti i odgovarajuće uzorke URL-a. Dok smo na tome, dodajmo pogled na brisanje korisnika u slučaju da nam to treba.
# Uvoz
success_url = '/' # Preusmjeravanje na URL uspjeha
def test_func(self): # Test ako je korisnik superuser i ima dozvolu za brisanje
Iako je to praktično kada je potrebno, brisanje korisnika ne bi trebalo biti potrebno većinu vremena, možemo samo prebaciti vidljivost korisnika koji posjećuju stranicu ako ih trebamo otpustiti.
URL uzorci koje smo dodali izgledaju ovako. Sa Nano, uredite korisnike / urls.py i dodajte ove linije:
nano users/urls.py
Linije bi trebale ići na popis staza u korisničkim pogledima, prije završetka "]", ali nakon početka "[".
# ...
# ...
Sada, obavezno napravite sigurnosnu kopiju web lokacije tako da ga možete preuzeti na web poslužitelju, nastavit ćemo raditi na tome. Iz komandne linije,
sudo backup
Sada je naša web stranica sigurnosna.
Dakle, sada imamo nekoliko korisnih karakteristika. Ali šta je sa velikom slikom ovdje? Ovaj kôd još uvijek nije dostupan s Interneta, još uvijek nemamo poslužitelj pošte i moramo proširiti svoju aplikaciju da bismo uključili sveobuhvatni postupak provjere, kao i glatkim rasporedima kako bismo nam pomogli da istražemo web mjesto, zajedno sa sigurnim protokolima za provjeru autentičnih korisnika.
Doći ćemo do svega toga. Najvažnije za sada će samo dobiti ovaj kod na mreži, što možemo učiniti sa samo nekoliko redaka Bash na Ubuntu serveru. Trebat ćete unajmiti server za to, ako nemate server kod kuće i pretplate na poslovnu internet koja vam omogućava da otvorite portove. Lično vodim svoju web stranicu na HP Z440 koji je ugrađen u moj stan, ali obično je mnogo jeftiniji za osnovne potrebe za iznajmljivanje virtualnog privatnog servera (VPS).
Imajte na umu da je kôd koji radimo sada relativno tanki, morat će se održavati i poboljšati prije nego što budemo spremni koristiti ono što moramo izgraditi proizvod. Obavezno pazite šta radite s Internetom, provjerite da li ovu stranicu miruma javno razmeštavate na Web na Linux poslužitelju, imate plan za blokiranje neželjenih interakcija s vašom web stranicom. To vjerovatno neće biti problem u početku, ali pogledat ćemo različite rješenja za borbu protiv toga, uključujući mašinsko učenje, umjetnu inteligenciju i računarsku viziju. Kada postane problem, pogledajte dalje u ovom tekstu za rješenje.
U pogledu iznajmljivanja VPS-a, ima puno mjesta na kojima možete ići. Google Cloud ima VPS servere, Ionos, Kamatera, Amazon Awit Awi, a više pružatelja usluga nude rješenja za oblak servera koja će odgovarati našim potrebama.
Morat ćete kliknuti kroz njihove obrasce i odaberite plan za početak. Možete ići sa osnovnim planom sa bilo kojim davateljem, ali provjerite da li vam pružatelj usluga otvorite port priključnice Port Mail Server za slanje e-pošte (ovo bi trebalo biti port 587 i port 25), neki provajderi blokiraju ove portove. Do sada sam imao najbolje iskustvo sa Ionos i Kamaterom, obojica će mi omogućiti da pošaljem neograničenu e-poštu i njihove cijene su prilično jeftine.
Povezaćete se sa svojim novim serverom preko protokola nazvan SSH ili sigurna školjka, što vam omogućava daljinsko sučelje sa serverom tačno poput vašeg ličnog računara, sa vašeg ličnog računara. Kada postavite poslužitelj, pružatelj hostinga će vam vjerovatno tražiti da dodate SSH ključ ili će vam dati korisničko ime i lozinku. Ključ SSH je kako ćete se prijaviti na server iz naredbenog retka da biste uredili kod. Koristite opcije ispod SSH-Keygen za generiranje SSH tastera.
ssh-keygen
Spremite datoteku i prepišite ga ako trebate, dobro je zakretati svoje SSH tipke ako već niste. Sada možete koristiti sljedeću naredbu da biste vidjeli SSH tipku. Želite ga kopirati na vaš udaljeni poslužitelj, tako da ga možete koristiti za autentifikaciju.
cat ~/.ssh/id_rsa.pub
Ako niste mogli vidjeti SSH tipku prilikom kucanja tog naredbe (dugačak niz cifara i slova koji počinju sa "SSH-RSA AAA"), pokušajte generirati RSA ključ (oni su sigurniji, pa ih savjetujem da ih koristim.) Sljedeći kôd će generirati 4096 bitni RSA SSH tipku.
ssh-keygen -t rsa -b 4096
Napravite VPS pokrenute Ubuntu, ali planirate to učiniti. Jednom kada kreirate VPS klikom na web stranicu obrazaca na web mjestu pružatelja usluga (Kamatera.com, ionos.com ili slično), želite se prijaviti. Da biste to učinili, koristite SSH naredbu sa IP adresom (adresa koja izgleda kao xx.xx.xx.xx). Također ćete morati biti osjetljivi na zadano korisničko ime na poslužitelju koji smo stvorili, na primjer, ubuntu.
ssh ubuntu@XX.XX.XX.XX
Možda će vam se tražiti lozinku, ako se od vas traži lozinka, unesite ga unutra. Nećemo koristiti zadano korisničko ime, pa krenimo tako da kreiramo novi korisnik i dodajemo SSH ključ na njihov račun.
Započnimo dodavanjem nove datoteke SSHD_Config, što govori poslužitelj kako koristiti SSH.
nano sshd_config
# Ovo je konfiguracijska datoteka sa sistemom SSSHD servera. Vidjeti
# sshd_config (5) za više informacija.
# Ovaj SSSHD sastavljen je sa stazom = / USR / Local / SBin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / igre
# Strategija koja se koristi za opcije u zadanom SSHD_Config isporučuje se sa
# Openssh je odrediti opcije s njihovom zadanom vrijednosti gdje
# moguće, ali ostavite ih komentirani. Neopterećene opcije poništavaju
# zadana vrijednost.
# Port 22
# Adresa nijedna
# SlušajteDress 0.0.0.0
# SlušajDress ::
# Hostek / etc / ssh / ssh_host_rsa_key
# Hostey / etc / ssh / ssh_host_ecdsa_key
# Hostek / etc / ssh / ssh_host_ed25519_key
# Šifre i ključ
# Rekeylimit neplaće nijedan
# Sječa
# SyslogFacility Auth
# Loglevel Info
# Autentifikacija:
# Logingacetime 2m
# Permitrootlogin Zabrana-lozinka
# Strojmode Da
# MAXAUTHTRIES 6
# Maxsessions 10
# Očekujte .Sh / ovlašteni_keys2 da se ubuduće ne zanemaruju.
# OvlašteniPrincipalsfile Nema
# OvlaštenikeyScommand Ništa
# OvlaštenikeyScommanduser niko
# Za ovo za rad trebate i tipke za host u / etc / ssh / ssh_known_hosts
# Hostbasedauthentication br
# Promijenite na da ako ne vjerujete ~ / .ssh / poznatim_hosti za
# Hostbasedauthentication
# IgNoreUserknownHosts br
# Ne čitajte datoteke korisnika ~ / .rhosts i ~ / .shosts
# Ignorerhosts Da
# Da biste onemogućili tunelirane jasne tekstualne lozinke, prebacite se na Ne ovdje!
# PermitEmptyPasswords br
# Promijenite na Da da biste omogućili lozinke za odgovor izazova (pazite na probleme sa
# Neki PAM moduli i niti)
# Opcije Kerberos
# Kerberosauthentication br
# Kerberosorlocalpasswd Da
# KerberosticketCleanup Da
# Kerberosgetafstoken br
# GSSAPI opcije
# GSsapiauthentication br
# Gssapicleanupcedenti Da
# Gssapistrictacceptorcheck Da
# Gssapikeyexchange br
# Podesite ovo na "da" da biste omogućili PAM provjeru autentičnosti, obradu računa,
# i obrada sesije. Ako je ovo omogućeno, Pam Autentifikacija će
# biti dozvoljen kroz KBDinteractiVeauthentication i
# Pad lozinka. Ovisno o vašoj konfiguraciji PAM-a,
# Provjera identiteta PAM-a putem KBDinteractiVeauthentication može zaobići
# Postavljanje "dozvoleOTLOGIN bez lozinke".
# Ako samo želite Pam račun i sesijski čekovi da se pokrene bez
# Pam Autentifikacija, a zatim omogući ovo, ali postavite lozinku
# i kbdintractiveauthentication za "ne".
# Ostavite da
# DopuštanjeCPVerding Da
# Gatewayports Ne
# X11displayffset 10
# X11uselocalhost Da
# Dozvoljava da
# Printlastlog Da
# Tcpkeepalive Da
# PermituseRenVironment br
# Kompresija odložena
# ClientIveInterval 0
# ClientIVecountMax 3
# Usedns ne
# Pidfile /run/ssshd.pid
# MaxStartups 10: 30: 100
# Permittunnel br
# ChrootDirector nijedan
# Versaaddendum nijedan
# Nema zadane staze banera
# Dopustite klijentu da prođe varijable lokalnog okruženja
# prevladati neplaćanje podsustava
# Primjer prevladavanja postavki na osnovu korisnika po korisniku
# Uskladite korisnički anoncvs
# X11forward ne
# DopuštanjeCPFording br
# Dozvoliti br
# ForceCommand CVS server
Zapamtite, Ctrl + X i Y da biste sačuvali datoteku. Dalje, napišemo osnovni skript koji se zove inicijalizirati (sve u zadanom kućnom imeniku našeg korisnika).
nano initialize
Dodajte ove redove u datoteku, zamjenjujući
# ! / bin / bash
Da vas prošeta kroz ovu datoteku, krenimo linijom po retku. Prva retka govori prevodiocu da je ovo bash skripta. Zatim instaliramo ovisnosti, kopiraju SSHD_Config na ispravan direktorij, a pružanje SSH-a, generira SSH tipke za korijen, dodajući korisnički tim '(za sada možete odabrati ime, koristite naredbu Aduder sa njihovim imenom i onemogućite lozinku za sada). Također dodajemo tim u sudo grupu, generiramo njihov SSH tipku, dodajte naš ključ ovlaštenim ključevima i njihovim ključem i ispisati njihov ključ. Ovaj novi korisnik će biti kako se prijavljujemo na web mjesto.
Na novom terminalu, nastavite i ponovo otvorite server.
ssh team@XX.XX.XX.XX
Ovog puta ne bi trebalo da vam treba lozinka, kao što imate SSH ključ. Također smo snosili prijavu sa lozinkom da bi web mjesto sigurno zadržali sigurnije.
Sada se ovaj server započinje potpuno prazan bez podataka o njemu. Započnimo kloniranjem našeg projekta iz Git-a kako bismo ga mogli preuzeti i pokrenuti na udaljenom stroju. Na udaljenom poslužitelju spojen preko SSH-a, prvo ispisati SSH tipku:
cat ~/.ssh/id_rsa.pub
Dalje, zalijepite ovaj ključ u GIT postavke kao što smo radili prije da bismo postavili našu git spremište. Sada možemo preklinjati naš projekt direktno na server. Provjerite jeste li napravili sigurnosnu kopiju projekta lokalno, tako da je na Git poslužitelju za preuzimanje.
git clone git://github.com/you/yourproject.git
Savršeno. Sada su sve datoteke ovdje. Možemo ih vidjeti s LS-om
ls
Sada, počnemo da postavljamo server. Prvo kopirajte svoj direktorij projekta u jednostavno, nezaboravno ime koje ćemo koristiti za projekt.
cp -r yourproject whatyoucalledit
Gde je "Whatyoucalledit" novo ime vašeg projekta. Zatim ćemo morati izgraditi osnovni uslužni program za postavljanje poslužitelja. Spremit ćemo ovaj uslužni program i koristiti ga u budućnosti. Da biste izgradili ovaj uslužni program, napravimo korisnički binarni da definišemo kako uređujemo scenarij. Korištenje bash-a, uredi / usr / bin / ascript
sudo nano /usr/bin/ascript
Obavezno koristite sudo tamo tako da imate dozvole za uređivanje datoteke. U datoteci dodajte ove linije:
# ! / bin / bash
echo "# ! / bin / bash ">> / usr / bin / $ 1
Zapamtite da je ova skripta uzima argument, naziv skripte, kao 1 USD. Prvo provjerava da li datoteka postoji, ili na neki drugi način stvara, dodaje prvu liniju za proglašavanje skripte je bash, mijenja njegove dozvole, uređuje ga i dodaje imenom / asiklama koje nam omogućuju pohranjivanje imena skripti koje stvaramo. Ako datoteka već postoji, jednostavno promijenite dozvole i uredite ga. Spremite datoteku i zatim ćemo promijeniti dozvole. Sve dok koristimo ovu skriptu, to ne bismo morati više.
sudo chmod a+x /usr/bin/ascript
Savršeno. Sada stvorimo skriptu koja se zove Setup. Prvo, ne preplavi vas, ali pogledajte kako izgleda moja skripta za postavljanje. Prošetat ćemo kroz ono što bi ovaj skript trebao izgledati u vašem projektu, neće vam trebati sve u mom scenariju.
# ! / bin / bash
# sudo chmod a + x skripte / korisniciETUP
# ./scripts/usersetup
# ssh-keygen
# Direktor projekta
# Komande dnevnika
# Nano Config
# Git config
# Ažurirajte i instalirajte
# Omogući clamv antivirus
# Podesite ime hosta
# Postgres Setup
# Postavljanje sigurnosne kopije baze podataka
# Onemogući Iptables
# Instalirajte BitDefender
# Setup Postfix
# Kreirajte dirsa
# Postavljanje virtualeNV
# Nabavite i izgradite zavisnosti
# Postavite pravila vatrozida
# Instalirajte PYPI zavisnosti
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# PIP instalacija opencv-python == 4.5.5.64
# PIP instaliraj Opencv-doprinos-python == 4.5.5.64
# Instalirajte certbot
# Pokrenuti certbot
# Ponovo učitati poštu poslužitelju
# Kopiranje certira
# sudo cp /etc/letsencrypt/live/femmebabe.com/privkey.pem privy.pem
# sudo cp /etc/letsencrypt/live/femmebabe.com/cert.pem cert.pem
# Patch Venv
# Podesite korisničke postavke
# Podesite dozvole
# Sudo Chown -R tim: korisnici / var / pokretanje /
# Sudo chown korijen: root / pokretanje / sudo / ts -r
# sudo chmod 664 db.sqlite3
# Sudo Chown www-podaci: korisnici db.sqlite3
# Kopirajte konfiguraciju i podesite dozvole
# Postavljanje baze podataka
# Ubrizgavanje Pam Config i uklonite neispravnu ssh config
# sudo sed -i '' -e '$ d' /etc/pam.d/ssshd
# sudo sed -i '' -e '$ d' / etc / profil
# Kopirajte bin skripte i postavite dozvole
# Učitaj se i omogućivanje usluga
# Omogući Apache module
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# Onemogućite zadanu stranicu
# Omogući našu stranicu
# Ponovo učitajte demon i ponovno pokrenite Apache, postfix ipendkim
# Podesite dozvole
# Zamjena konfiguracije
# Init Caption motor
# Podešavanje git
# Prikaži IPv6 i Opendkim za konfiguraciju domene
# Podešavanje završeno
To je puno postavljanja! Ukratko, naredbe za evidenciju koda konfigurira nano i git, kopije preko datoteka, preuzimanja i instalira ubuntu APT pakete, konfigurira PostgreSQL (nekomplicirani vatrozid), onemogućuje antivirus, izrađuje imerije, instalacije certifikata i postavlja se Poslužitelj, instalira konfiguracija, pokreće i omogućava prekid, raspoređuje swap, postavlja dozvole i ispisuje IP, IPv6 adresu i Opendkim ključ. Prilično jednostavno, ali izgleda kao puno koda. Neće nam trebati mnogo toga jer nemamo zavisnosti, ne koristimo celer, celerybeat ili daphne, ali mi ćemo instalirati neke od njih da bismo započeli. Primjetite da ovaj kod ima domen proglašen nekoliko puta.
Također ćemo morati kupiti ime domene (što je mala godišnja naknada). Preporučujem Sredstva za kupovinu domene, njihov raspored je intuitivan i jednostavan za upotrebu. Možete kupiti bilo koju domenu po vašem izboru, ali u ovom primjeru koristim domenu femmebabe.com. Jednom kada kupite domenu, krenite do konfiguracijske ploče squarspace DNS-om i dodajte zapis koji pokazuje vašu domenu na poslužitelju po IP adresi. To bi trebalo izgledati ovako:
@ A xx.xx.xx.xx
Sa operatorom @ kao domaćinom, što znači da će sve poddomene pod ovom domenom, a korijenska domena će se svi preusmjeriti na poslužitelj. Postoji više evidencija za prijavljivanje, ali možemo preći na njih nakon što smo spremni poslati poštu. Imajte na umu, može proći nekoliko dana prije nego što budete u mogućnosti uspješno poslati poštu sa servera. DNS zapisi koje postavljamo trebat će vremena da se razmnožavaju.
U svakom slučaju, jedini zapis koji trebamo započeti je zapisnik. Dakle, sada možemo ispuniti donji skript prema našem projektu i pokrenuti je.
Započnimo s manjim skriptom za postavljanje da bismo samo instalirali ono što nam je potrebno za osnovni napredak. Još nećemo koristiti toliko zavisnosti ili postgreSQL-a, samo ćemo pokrenuti osnovni HTTP server i brinuti se o tome da se to potvrdi. Zapamtite, da biste dobili HTTPS certifikat i sigurno pokrenete server, morat ćemo kupiti domenu zajedno sa najamnim serverom. Za sada, zamijenite "tim" u ovoj datoteci s imenom vašeg korisnika, "dir" s direktorijom vašeg projekta, te opskrbljujem e-poštu i domenu u oznakama <>.
Uz to, prije nego što pokrenemo ovaj kod, moramo promijeniti postavke u vatrozid koji pruža pružatelj usluga hostinga, ako ih ima. Obično se to nalazi u kartici "mreža mreža vašeg hostinga, ili ako ste samostalni", u odjeljku 'Prosljeđivanje porta' vašeg rutera. Također ćete htjeti postaviti statički IP putem vašeg usmjerivača uz adresu vašeg poslužiteljskog stroja, ako koristite samo hosting. Trebat ćete otvoriti sljedeće portove za pristup čitanja / pisanju.
22 (SSH) 25 (pošta) 587 (pošta) 110 (poštarnica) 80 (http) 443 (https)
# ! / bin / bash
# Komande dnevnika
# Nano Config
# Git config
# Ažurirajte i instalirajte
# Omogući clamv antivirus
# Podesite ime hosta
# Postavljanje sigurnosne kopije baze podataka
# Onemogući Iptables
# Postavljanje virtualeNV
# Instalirajte certbot
# Pokrenuti certbot
# Podesite korisničke postavke
# Podesite dozvole
# Sudo Chown -R tim: korisnici / var / pokretanje /
# Sudo chown korijen: root / pokretanje / sudo / ts -r
# Učitaj se i omogućivanje usluga
# Omogući Apache module
# Ponovo učitajte demon i ponovno pokrenite Apache, postfix ipendkim
# Prikaži IPv6 i Opendkim za konfiguraciju domene
Prije pokretanja ovog koda provjerite je li domena koju ste kupili priključen na poslužitelj. Da biste to učinili, otvorite terminal na lokalnoj mašini i pokrenite ovu naredbu sa svojom domenom:
ping femmebabe.com # Umetnite svoj domen ovdje, nakon pinga
Ako sve izgleda dobro, a poslužitelj šalje odgovore, spremni smo pokrenuti scenarij i instalirati pakete kao i pokretanje, omogućiti i potvrditi naš Apache server.
Ovo nije sve postavljanje potrebne za konfiguriranje postfiksa, pogledaćemo to postavljanje kasnije kasnije. Za sada pokrenite ovaj kod za podešavanje i trebate potrajati nekoliko minuta za instaliranje i potvrđivanje vašeg servera. Još jednom obavezno zamijenite ime, e-poštu i ime domene u skriptu prema nazivu koje ste kupili.
Sada kada je poslužitelj predviđen, možete ići na URL u bilo kojem web pretraživaču i provjerite da li se poslužitelj pokreće HTTPS. Ako nije, pokušajte čekati malo dok za DNS zapise da biste nadoknadili i zatim pokrenuli sljedeću naredbu za pokušaj certifikata Certbot:
sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Sve dok ste pravilno konfigurirali, trebali biste moći pristupiti Apacheovoj zadanoj stranici samo da biste znali vaš kôd radi i prikazuje web stranicu uživo. Zatim uredite postavke.Py da biste promijenili zadani način uklanjanja pogrešaka na proizvodnju. Takođe ćemo konfigurirati domenu u postavkama, kao i unutrašnji IPS.
nano yourproject/settings.py
U postavkama, promijenite / dodajte ove linije.
# Konfiguracija web lokacije
Sada ćemo morati konfigurirati Apache2. Uredimo datoteku config Mi ćemo implementirati s ovom linijom:
sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Ova konfiguracija datoteka treba imati našu imenu domene u njemu i ime korisnika i projekta. Koristim ime domene femmebabe.com, korisničko ime i naziv projekta 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>
Obavezno zamijenite naziv projekta, direktorija i domene u ovom primjeru kod konfiguriranja vašeg servera. Sada ćemo morati onemogućiti zadanu stranicu. To se može učiniti pomoću bash-a.
sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Dalje, možemo omogućiti zadanu web lokaciju i ponovno učitati Apache2, također pomoću bash-a. Ne zaboravite da zamijenite FemmeBabe s imenom datoteke koju ste proglasili prilikom uređivanja u / etc / apache2 / web lokacijama - dostupnim /.
sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Vratite se svom domenu u navbar. Trebali biste vidjeti web mjesto koje ste konfigurirali u svom web pretraživaču. Čestitamo! Ako ga ne vidite, možda ćete trebati napraviti neke promjene. Pažljivo pregledajte postavke u svom projektu, Apache Konfiguraciji i obavezno nemate pogreške i pokrenite sljedeće naredbe za provjeru projekta za greške.
cd projectname
source venv/bin/activate
python manage.py check
Ako imate pogreške u svom Python projektu, pronađite ih tamo gdje su i popravljaju ih. Možda nećete moći vidjeti sve svoje pogreške ovisno o tome gdje su, pa ako imate grešku koja jednostavno kaže "populacija nije povratno", uredite sljedeću datoteku u virtualnom okruženju, registru.
nano venv/lib/python3.12/site-packages/django/apps/registry.py
Pomaknite se na liniju 83, gdje se podiže ovaj izvornik (Podignite RuntectimeError ("populacija () nije reentrant")) i dodajte komentar prije ove linije, a zatim dodavanje, s istom udubljenjem, samo.app_configs = {}. Ovo izgleda ovako:
# Sprečite povratne pozive da biste izbjegli pokretanje appconfig.ready ()
# metode dva puta.
# Podignite RuntectimeError ("populacija () nije reentrant")
Zatim možete ponovo provjeriti projekat i izložiti grešku.
python manage.py check
Tada možete vidjeti grešku i popraviti je. Kad ste ga fiksni i kôd sastavlja bez grešaka, obavezno promijenite datoteku natrag tako da izgleda ovako:
# Sprečite povratne pozive da biste izbjegli pokretanje appconfig.ready ()
# metode dva puta.
# Self.App_configs = {}
Pod uslovom da je server Online, kada na njemu napravimo dodatne promjene, moramo koristiti sljedeću naredbu za ponovno učitavanje poslužitelja:
sudo systemctl reload apache2
Awesome! Ali šta je sa slanjem pošte? Za početak slanja e-pošte prvo ćemo trebati ažurirati konfiguraciju domene. Ovo bi trebalo biti na vašem DNS panelu u Squarrepaceu, ili bilo kojim registrarom domene koje ste odabrali. Također ćemo morati instalirati i dodati konfiguraciju i pokrenuti nekoliko naredbi.
Prvo, uzmimo IPv6 adresu poslužitelja. Zatim ćemo otvoriti vaš DNS i dodati zapise.
Da biste dobili IPv6 adresu poslužitelja, koristite ovu naredbu:
ip -6 addr
Sada možemo dodati sljedeće zapise u DNS postavke. Moje zapise izgledaju ovako. Međutim, za vaše zapise trebali biste zamijeniti IP adresu sa svojim IP-om (ne 75.147.182.214, to je moje). Takođe dodajte svoju domenu na mesto femmebabe.com, kao i vaša IPv6 adresa pronađena sa prethodnom naredbom (ne možete koristiti moju, FE80 :: 725A: FFF: FE49: 3e02). Ne brinite za Domainkeyja za sada, ovo se kreira kada postavimo postfix, poslužitelj pošte, sa Opendkinom i ispišivši ključ. Mi ćemo to konfigurirati zadnjeg.
@ A N / a 75.147.182.214
@ MX 10 femmebabe.com
@ Ptr N / a femmebabe.com
@ Txt N / a Txt @ v = spf1 mx ip75.147.182.214ip6: fe80 :: 725a: fff: fe49: 3e02 ~ sve
Default._bimi Txt N / a v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg
_dmarc Txt N / a v = DMARC1; p = nijedan
Sendony._Domaankey
Txt
N / a
Sada ćemo morati dodati neka postojana konfiguracija za postfix. Sve što trebamo učiniti je osigurati da zamijenimo ime domene, femmebabe.com, sa imenom domene koje koristite. Pogledajmo sve konfiguracijske datoteke jednu po jednu i instalirati ih u direktorij zvan Config u našem projektu, za instaliranje na OS.
nano config/etc_postfix_main.cf
Dodajte ovaj tekst u datoteku
# Pogledajte /USR/Share/Postfix/main.cf.dist Za komentar, potpunija verzija
# Debian specifičan: navođenje imena datoteke uzrokovat će prvu
# linija te datoteke koja se koristi kao ime. Debian Default
# je / etc / mailname.
# miorigin = / etc / mailname
# Dodavanje. Tomain je posao MUA-e.
# Uključivanje sljedećeg retka za generiranje upozorenja "odložene pošte"
# kašnjenje_warning_time = 4h
# Pogledajte http://www.postfix.org/compatibility_readme.html - Zadano na 3.6 na
# Svježe instalacije.
# TLS parametri
# Milter Konfiguracija
Sljedeća CONFIG!
nano config/etc_postfix_master.cf
Dodajte ove redove:
#
# Datoteka za konfiguraciju postfix master procesa. Za detalje o formatu
# datoteke, pogledajte master (5) ručnu stranicu (naredba: "Master 5 Master" ili
# On-line: http://www.postfix.org/Master.5.html).
#
# Ne zaboravite izvršiti "Postfix Reload" nakon uređivanja ove datoteke.
#
# ======================================================================
# Vrsta usluge Privatni Nepriv Chroot Wakeup MaxProc Command + Args
# (da) (da) (ne) (nikad) (100)
# ======================================================================
# SMTP INET N - Y - 1 Postscreen
# SMTPD Pass - - Y - - SMTPD
# DNSblog UNIX - - Y - 0 DNSBlog
# Tlsproxy Unix - - Y - 0 Tlsproxy
# Odaberite jednu: Omogući podnošenje samo za petlje klijenta ili za bilo koji klijent.
# 127.0.0.1 :Submision INET N - Y - - SMTPD
# -o syslog_name = postfix / predaje
# -o smtpd_tls_security_level = šifrirati
# -o smtpd_sasl_auth_enable = da
# -o smtpd_tls_auth_only = da
# -o smtpd_reject_unlisted_recipient = ne
# -o smtpd_client_restrictictions = $ mua_client_restricci
# -o smtpd_helo_rentrictioncions = $ mua_helo_rentricicije
# -o smtpd_sender_rentricions = $ mua_sender_rentricicije
# -o smtpd_recipient_restrictions =
# -o smtpd_relay_restricticions = dozvola_sasl_authenten, odbaci
# -O milter_macro_daemon_name = porijeklom
# Odaberite jedan: Omogućite SMTP-u samo za klijente petlje ili za bilo koji klijent.
# 127.0.0.1:smtps Inet N - Y - - SMTPD
# SMTPS INET N - Y - - SMTPD
# -o syslog_name = postfix / smtps
# -o smtpd_tls_wrappermode = da
# -o smtpd_sasl_auth_enable = da
# -o smtpd_reject_unlisted_recipient = ne
# -o smtpd_client_restrictictions = $ mua_client_restricci
# -o smtpd_helo_rentrictioncions = $ mua_helo_rentricicije
# -o smtpd_sender_rentricions = $ mua_sender_rentricicije
# -o smtpd_recipient_restrictions =
# -o smtpd_relay_restricticions = dozvola_sasl_authenten, odbaci
# -O milter_macro_daemon_name = porijeklom
# 628 INET N - Y - - QMQPD
# QMGR UNIX N - N 300 1 OQMGR
# -o smtp_helo_timeout = 5 -o smtp_connect_timeout = 5
#
# =======================================================================
# Sučelja za softver koji nije postfix. Obavezno ispitajte priručnik
# Stranice ne-postfix softvera da biste saznali koje opcije želi.
#
# Mnoge od sljedećih usluga koriste postfix cijev (8) dostava
# Agent. Pogledajte cijev (8) MAN stranicu za informacije o $ {primatelju}
# i druge opcije omotnice poruka.
# =======================================================================
#
# Maildrop. Pogledajte datoteku postfix maildrop_readme za detalje.
# Takođe navedite u main.cf: maildrop_destiction_recipient_limit = 1
#
#
# =======================================================================
#
# Nedavne verzije Cyrus-a mogu koristiti postojeći "LMTP" master.cf unos.
#
# Navedite u cyrus.conf:
# LMTP CMD = "LMTPD -A" Slušajte = "Localhost: LMTP" Proto = TCP4
#
# Navedite u main.cf jednom ili više od sledećeg:
# poštansko sanduče_transport = lmptp: inet: localhost
# Virtual_transport = LMTP: Inet: Localhost
#
# =======================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Također odredite u main.cf: cyrus_destination_recipient_limit = 1
#
# Cyrus Unix - N N - - cijev
# Flags = DRX korisnik = Cyrus argv = / cyrus / bin / isporučuje -e -r $ {policajci} -m $ {Extension} {US $ {USER}
#
# =======================================================================
# Stari primjer isporuke putem Cyrusa.
#
# Old-Cyrus Unix - N N - - cijev
# Zastava = R Korisnik = Cyrus argv = / cyrus / bin / isporučuje -e -M -M $ {Extension} {USER}
#
# =======================================================================
#
# Pogledajte postfix uucp_readme datoteku za detalje o konfiguraciji.
#
#
# Ostale metode vanjske isporuke.
#
I Opendkim konfiguraciju. Opendkim identificira poslužitelje e-pošte sa tipkama domena kako bi ih učinili sigurnijim. Bez njega, pošta nije potpisana i možda neće biti u primljenoj pošti.
nano config/etc_default_opendkim
Dodajte ove redove:
# Napomena: Ovo je zaostavština konfiguracijske datoteke. Ne koristi ga Opendkim
# Systemd usluga. Molimo koristite odgovarajuće konfiguracijske parametre u
# /etc/opendkim.conf umjesto toga.
#
# Prethodno bi se ovdje uređivao zadane postavke, a zatim izvršite
# /lib/opendkim/opendkim.service.generate za generiranje datoteka za nadjačavanje SystemD-a na
# /etc/systemd/system/opendkim.service.d/override.conf i
# /etc/tmpfiles.d/opendkim.conf. Iako je ovo još uvijek moguće, sada je
# Preporučuje se podešavanje postavki direktno u /etc/opendkim.conf.
#
# Daemon_opst = ""
# Promjena u / var / spool / postfix / pokretanje /pendkim za korištenje UNIX utičnice sa
# Postfix u chroot-u:
# Rundir = / Var / Spool / Postfix / Run / Opendkim
#
# Otpornost na određivanje alternativne utičnice
# Imajte na umu da će postavke ovo nadjačati bilo koju vrijednost utičnice u Opendkim.conf
# Zadano:
# Slušajte na svim sučeljima na port 54321:
# Socket = Inet: 54321
# Slušajte na petlje na luci 12345:
# Socket = Inet: 12345 @ localhost
# Slušajte 192.02.1 na portu 12345:
# Socket = Inet: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf
Dodajte ove redove:
# Default_Process_limit = 100
# Default_client_limit = 1000
# Zadani VSZ (virtualna veličina memorije) granica za procese usluga. Ovo je uglavnom
# namjeravao uhvatiti i ubiti procese koji curi memoriju prije nego što pojedu
# Sve.
# zadani_vsz_limit = 256m
# Prijavi se korisnik interno koristi postupci za prijavu. Ovo je najouznijevije
# Korisnik u sistemu Dovecot. To uopšte ne bi trebalo imati pristup.
# default_login_user = dovenull
# Interni korisnik koriste neprekilegirani procesi. Treba biti odvojeno od
# Prijava korisnika, tako da procesi prijave ne mogu poremetiti druge procese.
# default_internal_user = dovecot
# Port = 143
# Port = 993
# ssl = da
# Broj priključaka za rukovanje prije pokretanja novog procesa. Obično
# Jedine korisne vrijednosti su 0 (neograničeno) ili 1. 1 je sigurniji, ali 0
# je brže. <doc / wiki / loginprocess.txt>
# service_count = 1
# Broj procesa za uvijek stalno čekajući više veza.
# proces_min_avail = 0
# Ako se postavite Service_count = 0, vjerovatno trebate rasti ovo.
# vsz_limit = $ zadano_vsz_limit
# Port = 110
# Port = 995
# ssl = da
# Port = 587
# Kreirajte Inet slušaoca samo ako ne možete koristiti gornju utičnicu UNIX
# inet_listener lmtp {
# Izbjegavajte izradu LMTP-a vidljivo za cijeli internet
# Adresa =
# port =
# }
# Većina memorije odlazi na mmap () ing datoteke. Možda ćete morati da povećate ovo
# Ograničite ako imate ogromne poštanske sandučiće.
# vsz_limit = $ zadano_vsz_limit
# Maks. Broj programa IMAP (veze)
# proces_limit = 1024
# Maks. Broj POP3 procesa (priključci)
# proces_limit = 1024
# Maks. Broj SMTP procesa prijave (priključci)
# proces_limit = 1024
# auth_socket_path ukazuje na ovu UserDB utičnicu prema zadanim postavkama. To je obično
# koristi dovecot-lda, doveadm, eventualno IMAP proces itd. Korisnici koji imaju
# Potpuna dozvola za ovu utičnicu mogu dobiti popis svih korisničkih imena i
# Dobijte rezultate svih usluga userDBDB.
#
# Zadani način rada 0666 omogućava svima da se poveže sa utičnicom, ali
# Lookes UserDB uspjet će uspjeti samo ako UserDB vrati "UID" polje koje
# odgovara uID procesu pozivatelja. Takođe ako se UID ili GID pozivaoca odgovara
# utičnica UID ili GID Pogled uspijeva. Sve drugo uzrokuje neuspjeh.
#
# Da biste pozdravili pune dozvole za pretraživanje svih korisnika, postavite režim na
# nešto drugo od 0666 i DoveCot omogućava da jezgro izvrši
# Dozvole (npr. 0777 omogućava svima punim dozvolama).
# Proces auto-ratnika pokreće se kao root podrazumevano, tako da može pristupiti
# / itd. / senka. Ako to nije potrebno, korisnik treba promijeniti u
# $ Neupostavi_internal_user.
# Korisnik = root
# Ako se koristi DICT proxy, procesi pošte trebaju imati pristup svojoj utičnici.
# Na primjer: mod = 0660, grupa = VMAIL i globalni mail_access_groups = vmail
# mod = 0600
# Korisnik =
# Grupa =
Još jednom obavezno zamijenite domenu u svim tim datotekama, femmebabe.com, s domenom koju ste odabrali. Uredite sljedeću datoteku, dovecot config,
nano config/etc_dovecot_dovecot
I dodajte ove linije
## Dovecot konfiguracijska datoteka
# Ako se žuri, pogledajte http://wiki2.dovecot.org/quickconfiguration
# Naredba "Doveconf -N" daje čistu izlazu izmijenjenih postavki. Koristite ga
# Umjesto kopiranja i lijepljenja datoteka prilikom postavljanja na listu slanja dovecot.
# '# "Lik i sve nakon što se tretira kao komentari. Dodatni prostori
# a kartice se zanemaruju. Ako želite koristiti bilo koji od ovih izričito, stavite
# value inside quotes, eg.: key = "# Char i trajni bijeli prostora "
# Većina (ali ne svih) postavki mogu se nadjačati različitim protokolima i / ili
# Izvor / Destination IPS postavljanjem postavki unutar odjeljaka, na primjer:
# Protokol IMAP {}, lokalni 127.0.0.1 {}, daljinski 10.0.0.0/8 {}
# Za svaku postavku prikazane su zadane vrijednosti, nije potrebno iznos
# Oni. To su izuzeci od toga: nema odjeljaka (npr. Imena {})
# Ili se postavke dodataka dodaju podrazumevano, navedene su samo kao primjeri.
# Staze su takođe samo primjeri s pravim zadanim postavkama koji se temelje na konfiguriranju
# Opcije. Ovdje navedeni staze su za konfiguriranje --Prefix = / usr
# --SysconfDir = / etc --localstatedir = / var
# Omogući instalirane protokole
# Popis IPS-a odvojenog zarezom ili domaćina gdje slušati za veze.
# "*" sluša u svim IPv4 sučeljima "::" Sluša se u svim IPv6 sučeljima.
# Ako želite odrediti ne-zadane portove ili bilo šta složenije,
# uredi conf.d / master.conf.
# Slušajte = * ::
# Bazni direktorij gdje pohraniti podatke o izvođenju.
# base_dir = / var / pokretanje / dovecot /
# Naziv ovog instanca. U višestepenim podešavanjem Doveadm i drugim naredbama
# može koristiti -i <inestepe_name> za odabir korištenja instancije (alternativa
# do -c <config_path>). Ime instance se takođe dodaje u procese Dovecot
# u PS izlazu.
# instance_name = dovecot
# Pozdravna poruka za klijente.
# Prijava_Greeting = Dovecot spreman.
# Space odvojen popis pouzdanih mrežnih raspona. Priključci iz ovih
# IPS je dozvoljeno da nadjačaju svoje IP adrese i portove (za evidentiranje i
# za provjere autentičnosti). onesposobljavanje_plaintext_auth se takođe zanemaruje za
# Ove mreže. Obično biste ovdje odredili svoje IMAP proxy poslužitelje.
# Prijava_Trusted_netWorks =
# Space odvojena lista pristupa za prijavu Provjerite utičnice (npr. Tcpwrap)
# Prijava_Access_sockets =
# Sa proxy_maybe = da ako se proxy odredište odgovara bilo kojem od ovih IP-ova, nemojte raditi
# Proxing. Ovo normalno nije potrebno, ali može biti korisno ako odredište
# IP je npr. IP balancer u opterećenju.
# auth_proxy_self =
# Pokažite više različitih naslova procesa (u PS). Trenutno prikazuje korisničko ime i
# IP adresa. Korisno za gledanje ko zapravo koriste IMAP procese
# (npr. Zajednički poštanski sandučići ili ako se koristi isti UID za više računa).
# Verbose_proctitle = ne
# Treba li svi procesi biti ubijeni kada se glavni proces Dovecot isključi.
# Postavljanje ovo na "ne" znači da se dovecot može nadograditi bez
# Prisiljavanje postojećih klijentskih veza na zatvaranje (iako bi to moglo biti i
# Problem ako je nadogradnja e.g. zbog sigurnosne ispravke).
# Shutdown_Clients = Da
# Ako nije nula, pokrenite naredbe pošte putem ovog mnogo veza na Doveadm server,
# Umjesto da ih pokrenete direktno u istom procesu.
# doveadm_worker_count = 0
# UNIX utičnica ili domaćin: port Koristi se za povezivanje na Doveadm server
# doveadm_socket_path = doveadm-server
# Space odvojen popis varijabli okoliša koji su sačuvani na Dovecot-u
# Pokretanje i preneseno na sve svoje djetetove procese. Možete i dati
# Ključno = Vrijednosne parove da biste uvijek postavili određene postavke.
# uvoz_environment = tz
##
## Postavke servera rječnika
##
# Rječnik se može koristiti za pohranu tipki = vrijednosti vrijednosti. Ovo koristi nekoliko
# Dodaci. Rječnik se može pristupiti bilo direktno ili iako a
# Servers servera. Sledeće dict blok karte naziva imena u Urisu
# kada se poslužitelj koristi. Tada se mogu uputiti pomoću URI-a u formatu
# "Proxy :: <ime>".
# Kvota = MySQL: /etc/dovecot/Dovecot-dict-sql.conf.ext
# Većina stvarne konfiguracije uključuje se u nastavku. Nazivi datoteka su
# prvo sortirano po njihovoj ASCII vrijednosti i raščlanjenim u tom nalogu. 00-prefiksi
# u nazivima datoteka namijenjeno je olakšavanju razumijevanja naručivanja.
# Konfiguracija se također može pokušati uključiti bez pogreške ako
# Nije pronađeno:
# Omogućuje da Dovecot sluša sve ulazne veze (IPv4 / IPv6)
Dodajte lozinku za korisnika Dovecot:
nano config/etc_dovecot_passwd
Prvi dio datoteke, prije debelog crijeva, je korisničko ime. Posljednji dio, "yourpassword", označava lozinku koju želite dati svoj poslužitelj pošte.
team:{plain}yourpassword
Sledeće, Opendkim config
nano config/etc_opendkim.conf
I dodajte ove redove:
# Ovo je osnovna konfiguracija za potpisivanje i provjeru. Lako može biti
# prilagođen da odgovara osnovnoj instalaciji. Pogledajte Opendkim.conf (5) i
# /usr/share/doc/opendkim/examples/opendkim.conf.sample za kompletan
# Dokumentacija dostupnih konfiguracijskih parametara.
# Logwwy ne
# Uobičajeni parametri za potpisivanje i provjeru. U Debianu je zaglavlje "iz"
# odvojen, jer je često identitet ključ koji koristi reputacijski sustavi
# I time pomalo sigurnosno osjetljivo.
# Potpisivanje domene, selektora i ključa (obavezno). Na primjer, izvršite potpisivanje
# za domenu "Primjer.com" sa selektorom "2020" (2020._domainkey.example.com),
# Koristeći privatni ključ pohranjeni u /etc/dkimkeys/example.Private. Granularnije
# Opcije podešavanja možete pronaći u /USR/Share/doc/opendkim/readme.opendkim.
# Domena primer.com
# Selektor 2020
# Keyfile /etc/dkimkeys/example.private
# U Debian, Opendkim radi kao korisnik "Opendkim". Kada je potreban Umask 007 kada je potreban
# Korištenje lokalne utičnice sa MTasom koji pristupa utičnici kao nepriligilan
# korisnik (na primjer, postfix). Možda ćete trebati dodati korisnika "Postfix" u grupu
# "Opendkim" u tom slučaju.
# Utičnica za MTA vezu (obavezno). Ako je MTA unutar zatvora Chroot,
# Mora se osigurati da je utičnica dostupna. U Debian, postfix radi
# Chroot in / var / spool / postfix, stoga bi morala biti UNIX utičnica
# konfigurirano kao što je prikazano na posljednjem retku ispod.
# Socket Local: /run/opendkim/opendkim.sock
# Socket Inet: 8891 @ localhost
# Socket Inet: 8891
# Domaćini za koji se mogu potpisati, a ne provjeriti, zadano je 127.0.0.1. Vidjeti
# Radni odjeljak Opendkim (8) za više informacija.
# Internehosti 192.168.0.0 / //16, 10.0.0.0/8, 172.16.0.0/12
# Sidro povjerenja omogućava DNSSEC. U Debian-u je predviđena datoteka za sigurnu sidru
# po paketu DNS-korijen podataka.
# Navedeni brojevi 127.0.0.1
# Napravite domene na adresi na tipkama koje se koriste za potpisivanje poruka
# Skup internih domaćina čija pošta treba potpisati
nano config/etc_default_opendkim
I dodajte ove linije
# Napomena: Ovo je zaostavština konfiguracijske datoteke. Ne koristi ga Opendkim
# Systemd usluga. Molimo koristite odgovarajuće konfiguracijske parametre u
# /etc/opendkim.conf umjesto toga.
#
# Prethodno bi se ovdje uređivao zadane postavke, a zatim izvršite
# /lib/opendkim/opendkim.service.generate za generiranje datoteka za nadjačavanje SystemD-a na
# /etc/systemd/system/opendkim.service.d/override.conf i
# /etc/tmpfiles.d/opendkim.conf. Iako je ovo još uvijek moguće, sada je
# Preporučuje se podešavanje postavki direktno u /etc/opendkim.conf.
#
# Daemon_opst = ""
# Promjena u / var / spool / postfix / pokretanje /pendkim za korištenje UNIX utičnice sa
# Postfix u chroot-u:
# Rundir = / Var / Spool / Postfix / Run / Opendkim
#
# Otpornost na određivanje alternativne utičnice
# Imajte na umu da će postavke ovo nadjačati bilo koju vrijednost utičnice u Opendkim.conf
# Zadano:
# Slušajte na svim sučeljima na port 54321:
# Socket = Inet: 54321
# Slušajte na petlje na luci 12345:
# Socket = Inet: 12345 @ localhost
# Slušajte 192.02.1 na portu 12345:
# Socket = Inet: 12345@192.0.2.1
Kada smo spremni za postavljanje našeg Postfix servera, pokrenut ćemo donji kod, uz odgovarajuće ugrađene ime domene. Započnite kreiranjem skripte
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Sada, u Nano-u, uređivač teksta, uredite ovu datoteku tako da uključuje vaše ime domene umjesto femmebabe.com.
# ! / bin / bash
# Setup Postfix
Sada, pokrenite ispunjenu skriptu za konfiguriranje postfiksa, Opendkim i Dovecot.
./scripts/postfixsetup
Nakon što ova skripta pokrene, kopirajte zadnji redak, ispisuje i zalijepite ga u svoju DNS konfiguraciju kao vrijednost za Sendony._domainkey. Ovo je Opendkim tipka koji se koristi za identifikaciju vaše domene prilikom slanja sigurne pošte.
Awesome! U roku od nekoliko dana trebali biste moći slati poštu sa poslužitelja pod uvjetom da je sve ispravno konfigurirano.
Ako ste upravo konfigurirali DNS za svoj poslužitelj pošte, potrebno je trajati manje od 72 sata za zapise za ažuriranje. Obično je mnogo brže. Možete provjeriti je li vaš poslužitelj radio pomoću ove naredbe, isporučuje vaš email:
echo "test" | mail -s "Test Email" youremail@gmail.com
Ako se čini da sve ispravno radi, trebali biste moći slati e-poštu sa svojim serverom. Ako ne radi, pokušajte pogledati trupce da biste vidjeli koja bi mogla biti greška.
tail –lines 150 /var/log/mail.log
Ovo će ponuditi verbose informacija o pošti koje poslužitelj šalje i radi li ispravno radi. Trebali biste moći vidjeti i e-poštu u svom inboxu, ako nije tamo, provjerite svoju neželjenu mapu.
Također ćete morati konfigurirati svoje postavke u svojim postavkama.Py tako da vaš poslužitelj e-pošte može razgovarati sa vašom aplikacijom Django, projektu. Dodajte ili zamijenite ove linije u svojim postavkama
EMAIL_HOST_USER = 'team' # 'Love@mamasheen.com'
Primjetite da koristimo konfiguraciju datoteku za dobivanje lozinke. Učitajmo ovu datoteku u postavkama tako, na samom početku datoteke:
# Otvorite i učitajte konfiguraciju
Kreirajmo ovu datoteku i dodajemo tajni ključ, kao i lozinku za poštu. Da biste generirali tajni ključ, koristite ovu naredbu, s bilo kojom dužinom na kraju:
openssl rand -base64 64
Sada kopirajte tekst koji se generira i uredi /etc/config.json
sudo nano /etc/config.json
Dodajte sljedeće redove u vašu datoteku, s ključem koji se generira kao tajni ključ.
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
JSON format je jednostavan i jednostavan za korištenje, možemo proglasiti i drugi tasteri koje želimo koristiti i na našem projektu tako i držati ih odvojeno od našeg direktorija projekta, tako da drugi korisnici ne mogu pisati samo na njih i tako ih ne mogu pisati samim putem. Ovo je preporučena praksa za API ključeve, od kojih ćemo koristiti više od nekoliko ovdje.
Također ćete htjeti napraviti sigurnosnu kopiju projekta kako biste bili sigurni da će sve sačuvati i moći ćete vratiti svoj rad kasnije čak i ako više ne želite iznajmiti server.
sudo backup
Sada, pokušajte poslati HTML e-poštu sa web servera, pod uslovom da šaljete jednu iz naredbenog retka radi. Upitajte svoju korisničku instancu u školjci i pošaljite HTML e-poštu na taj korisnik putem Đango-a. Promijenite moje ime u kodu, Charlotte, na vaše korisničko ime.
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()
Ako prva naredba ne radi, obavezno se koristi
source venv/bin/activate
Pod uvjetom da je sve ispravno postavljeno, sada ćete dobiti e-poštu dobrodošlice u vašem poštanskom sandučiću koju je poslao vaša web aplikacija. Dobar posao! Došli ste dug put.
Želeo sam da dodam, ako se ikad borite sa bilo kakvim greškama tokom rada na ovakvom projektu, ne ustručavajte se potražiti odgovore i zatražiti pomoć. Google, između ostalih pretraživača, su veliki resursi za traženje programiranja pomoći. Jednostavno potražite grešku koju dobijate, a moći ćete vidjeti kako drugi ljudi rješavaju problem. Također, dobrodošli ste me kontaktirati edukatore (nastavnike, profesore, nastavnike), bilo koji vršnjaci na Internetu koji su dostupni za programiranje pomoći ili se ponovo savjetujte sa ovom knjigom ili drugim resursima za pronalaženje rješenja za pronalaženje problema s kojima se doživljavate. Razumijem da ovo nije lako, ali čak i ako ste u ovom trenutku čitali i ne pišete nikakav kodeks, učite puno o izgradnji web aplikacije ispočetka. Pazite na leđa, radite sjajan posao.
Hvala vam što ste odvojili vrijeme da pročitate ovaj treći vodič za razvoj web razvoja. U budućim izdanjima, uključit ću više važnih primjera o kojima se razgovaralo na početku dokumenta i ronit ćemo mnogo dublje u svijet softvera i razvoja hardvera. Ostanite podešeni za ono što dolazi, a radujem se što ću vas podučiti kako izgraditi nevjerovatan softver. Vidimo se u sljedećem izdanju!
https://glamgirlx.com/bs/practical-web-based-deep-learning-and
https://glamgirlx.com/bs/practical-web-based-deep-learning-and -
Ostavite mi savjet u Bitcoinu koristeći ovu adresu: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE