Web pratichi in profonda apprendimentu è sicurità per esempiu Terza edizione Charlotte Harper 3 di lugliu, 2024 Actualizatu / Cunvertitu u 3 di ghjugnu, 2025
Foreword:
Cunsiderazioni di sicurezza in software di custruzzione sò una parte impurtante di u pianu impurtante è l'esecuzione di u sviluppatore nantu à l'ingegneria chì hè prevista, stabile per scopi pratichi. U marcu dom (DOCUMENT BOCHUP), cù l'implementazione di HTML, Javascre, dà a Creatività è Bash, Potorazioni è cunvenimentu è l'impurtanti di e media Joe, l'utilizatore finale chì cerca di tumbà u tempu o uttene qualcosa fattu in Internet, generalmente nantu à un dispositivu di smartphone touchscreen. A maiò parte di e persone ùn sapenu induve esse partutu da un situ web da u situ web di sceltu potenti è in particulare cù una referità è in modu di travagliu facilità d'usu è a flessibilità. Se avete qualchì minutu di leghjite stu stu libru è amparà ciò chì mi vogliu cun l'applicazioni web in a prossima per onecà è face esattamente è risponde à i bisogni di a vostra votazione.
Per mè: Sò un sviluppatore di software cù una larga gamma di sperienza in C / C ++, java, Python, HTML, CSS è javaScript. I custruite siti siti siti webs persone volenu chì, vulete visità, è ancu attentate à aduprà solu per amparà, ricreà è uccisione u tempu, è più impurtante, Se avete avutu una idea di esattamente cumu vulia chì un situ web è farisce, sì stanu à cuntà i costi, è site cunversatu u prossimu per un app di corsicu, goktok, Twitter, Tiktok, Twitter, Tiktok, Twitter, Tiktok, Twitter, Tiktok, Twitter, Tiktok, Twitter, Tiktok, Invece di pruvà à vende u mo tempu, cercandu di cumprà u vostru: Vogliu parlà di una app (situ web (situ web, es esiste di un sviluppamentu di prugrammu indipendente, guidendu una carriera indipendente in ogni campu indipendente in ogni campu chì vole. È lasciami chjaru, l'educazione chì ti dugnu sarà informale. Pudiedi andà in a scola è amparà tutte cun una educazione formale, o ancu leghje stu libru, completu i vostri compiti, è caccià un altru educativu, ma ti caccià formalmente in i sedi caldi. Ùn sò micca u vostru prufessore, pudete pensà à mè cum'è un amicu chì vole guidà versu una carriera guidata da u vostru propiu successu persunale. È ùn vende micca u successu sia, avete bisognu à cumprà cù u vostru tempu. L'amparera à u codice hà una curva di l'apprendimentu ripida è ùn era mai faciule, o ancu supposte esse. Avete bisognu à travaglià quantunque pussibuli è seguite à pruvà è à fiascà è pruvà ancu quandu site frustratu per amparà è custruisce l'applicazioni. Hè in a natura di u codice stessu. U Codice hè currettu da un cumpilatore chì hè pensatu da i primi i missaghji di errore, è qui ti insegna cumu codice, ancu simu un errore in u vostru servituru di ricerca è leghjite l'esempie di l'altri persone. È aghju bisognu, ùn hè micca bisognu di esse assai riccu, intelligente, o ancu dettaglio orientale o organizatu à custruisce una app. L'urdinatore piglia a cura di quella urganizazione per voi. Basta à perseverà attraversu u prucessu è l'errore, mantene un focus è travaglià duramente à ciò chì fate, è avete una carriera assai riescita in tuttu ciò chì fate.
Quale sò: Aghju capitu chì l'ultima sezione era più nantu à l'aprenu è a vostra piglià una manere di stu libru. Quale sò esattamente? Eccu una dumanda cumplicata. Ùn sò micca vicinu chì mè, mentre soffre di cundizioni medichi chì ponu avè un codice o di scrittu stu libru à i tempi cun sucializazione è i so identità chì facenu di prisentà. In cortu, se leghjite stu libru, avete purtatu in casa perchè si sparò chì era chjucu era utile, o ancu s'è appena lettu questu in persona chì vole vede di riesce à ciò chì avete. Sò un ingeniere, è un studiente, è un studiente, è mi scrimendu stu studenti chì anu bisognu di a so vita misgià à dà un software chì mancavanu successu esempi, per culà chì ùn pò micca cunghjuntà successu ùn importa micca u clima di l'impresa. Largamente, hè ciò chì facciu: Aghju custruitu app per aiutà mi è à l'altri persone riescenu. Sò un autore, ancu perchè hè stata a mo prima publicazione chì intende micca cumplettamente per mette u mio portfolio inseme in un documentu utile, è sò un artista dinò. Ti ammetteraghju questu, sò sorte di una persona strana. Ùn sò micca perfettu, aghju avutu ins cù a lege ancu mi porta di lascià i culleghi è l'università è di lascià i stati per pruvà à fà un pocu successu. Sò una donna chì u usu di nascenu, pigliate e vestiti, portate vesti e altre donne donna donna, è stanu cusciente di mè cum'è femina per natura. Aghju avutu prublemi cù altre persone in u passatu chì guidanu à e cinghje cù a scrittura è e custruzzione è scusa chì ùn sò micca stati capaci di uttene stu libru: Avete bisognu di questu. Vulete salvà è per scrive u codice chì si vedesce e mio è travagli cum'è me mio è ancu megliu ma ancu à fà solu un libru, cosa da masturbarà un libru chì mi facenu solu di creà soldi per ella, avete e risorse chì avete bisognu I had all sorts of issues with family growing up, health conditions, doctors, the media, and the law, and my code deeply reflects the struggle that is feminism and female nature in a divided and frustrated world. Tuttavia, stu libru hè qualcosa di profondamente per prufundità, u mo figliolu, u mo salvaghju, è a mo saluteva, dunque aghju apprezzatu a vostra scorsa quandu pigliate a casa di u testu è per appriccà da mè. Per piacè, tenere in mente chì ùn sò micca perfettu, stu libru avarà errore, rivista, e spedizioni, è vi sarà bisognu à u vostru cereeru logicu cum'è megliu a so scritta. Ancu, capiscenu chì vogliu dì bè per voi ancu quandu vi face sfide quandu scrive. Pensate à questu cum'è questu: Quandu averete da renta un sistema di urdinatore per fà qualcosa chì pò Imaginà, è torna à u scontru, è si finiscinu, è u vostru incardizu è scontre à e persone chì vi ingruvianu è ancu publicà. A vi dicu questu perchè mi scontru e stesse difficultà. Usate stu libru à u vostru risicu, travaglià cù a vostra cumunità è cumunità dispunibuli per custruisce u software in una strada salata è perchè possu purtà u testu ordinariu à tutti di scala mundiale di A reta nantu à quale travaglieremu, Internet. Puderete micca esse assai familiare cun quale sò cù solu qualchi parolle, ma eiu inquillu à leghje annantu, voi vi cunnosci micca cum'è voi cuntinuà leghje è capisce mi stessu mentre esecuti u vostru travagliu. Ùn ci sarà micca travagliu in tempu cù questu libru, sempre chì ùn assignessi micca alcuna, ma aghju incuraghjitu per custruisce, cum'è un prugettu di capricciuta chì si pò applicà? U mo prugettu di caponione hè a basa per a maiò parte di ciò chì vi leghjite in questu libru, cum'è cumportazione u codice di i mio app identi di l'idee, è una larga impone è si vede cum'è una famiglia, cù l'internet, annunziatu à voi, o in e nutizie.
Chì libru hè: Stu libru hè un tutoriale per esempiu. Pudete truvà codice Quì, Instruzzioni per l'incruciate à u Codice è l'incuricazioni per u vostru codice, riempite u vostru codice, è vi farmente esse sensu di quale sò eventu è chì hè intenta chì, u vostru app è di impresa maghjina, è ancu u software chì custruisce in a più luminosa assoluta per esse u più attrattivu pussibule à i vostri utilizatori finali, u vostru situ web di i visitori di u vostru situ web. In questu libru, mi dimustrarete un numeru di esempi di cuncepimentu di software cù un focus in u web cum'è una piattaforma cum'è a sicurità. Inteneremu l'esperienza di apprendimentu custruerendu un prughjettu di basa utilizendu a cunchiglia unix, cù e caratteristiche di salvezza è di scripte. Dopu, eserrete un situ web di blog di Base di Base, Upgrade U nostru Blog cù foto è video, aduprà sti caratteristiche, è assicuratevi di u mo servitore d'autentificazione gratuitu (PAM). Duveremu dopu riunzi di a manipulazione di u schassittu, esplorendu l'edizione di video, donazzione, a donazione di u caratteru è l'otticu, trà altri cuncetti. Nostra noi esaminemu apis chì ci aiuterà à fà u nostru software più utile è sicuru, cù opzioni gratuiti è pagati. Nantu à a strada, scureremu l'amichi fichi è à arabe di u focu Pigliamu rimezaring love the Work to custruite games, 2D and hanware di durezza 3D, in casu A strada, impegnemu ancu e soluzioni di apprendimentu di a macchina digià dispunibili per esse megliu assicurati u nostru software. Avemu ancu impiegà strumenti di stock dispunibili per u web in ordine per simplificà è assicurà u prucessu. Stu libru hè una guida à u vostru successu in custruisce una applicazione web è integrate cù una rete prufessiunale di computoni meccanichi è ingressu à custruisce cunniscenza sia una sperienza di fondu o sperienza fondo.
Chì libru ùn hè micca: Se vulete veramente avè un situ web, puderebbe ghjustu stabilisce una magazinu simplice è vende, publicate, publicate un blog, e video, o altrimenti senza scrive una sola linea di codice. Stu libru ùn hè micca cusì. Stu libru vi amparà a custruisce u software chì hè fattu più utile, funziunale è assicurata è assicurata chì pudete digià truvà u Partitu, perchè ùn hè micca appatu ancu di voi, perchè ùn hanu micca micca esse assai di produzzioni per una scale di scala. Se seguite stu libru strettu, vulete scrive codice, codice di ricerca, custruite i vostri propri app, è vi farà soldi da ciò chì fate. Faraghju soldi da stu libru, ancu à e pagi duminTI, perchè cuntene infurmazioni e persone chì necessità è volenu leghje è sò dighjà cumprate o aduprà e mo app. Stu libru ùn custruì una app per voi, ma ti farterà in a direzione ghjustu è u vostru scopu, in l'invitati, è cunsiglianu, è u populu di l'Interrattori ùn anu vulerà usà è sustene.
Chì amparà: Stu libru vi amparà cumu custruisce prugrammu è vende software, software modicu, ricunniscenza di a sezzioni cum'è bluetooth è vicinu à campu (NFC) Stu libru vi insegna à l'urdinatore networked, focenti nantu à devianu Linux, Fate chì e cose affettati, permettenu à i media dannosi Caratteristiche cum'è i missaghji di testu per verificazione, scopi d'altru, mocu mo modera, michodu, di video, di video, di u vostru software, cumunicazione asincronor, è più. Amparate a custruzzione di i vostri dispusiti Bluetooth, con batterie, carricatre, microctolanti, microcontrolli, circuiti, uss uss fore usate Demincterete i principali di Disigni è per aghjunghje fabbricazione è in morse, cusì sò sensibili, i dispusitivi ammanditi cù e batterie di hardware, di i circuitizioni elettroniche, è usali di circuiti, e rete elli cù Bluetooth è u Web. Specificamente, esaminemu Dui studii, un massi è un focu di focu casciucu, tramindui praturificatu per openze è pò esse integrati in un situ web di calmante. Amparate à custruisce è implementà un situ web da a giaghju cù netta una sperienza precedente, face u funziunariu, sicura, bella, utile è più impurtante. Amparate à aduprà a visione di a macchina per fà un situ sicura è più pratica, raccolta di u siti di partenza, è cumu fà modumità per offre a ghjente chì sia à u vostru software Stu libru sarà focu u più forte nant'à a media, sicurità è l'apprendimentu, chì sò i maiò tre cumpunenti chì vi aiutanu à custruisce l'utilizatori impurtanti è disording, è impegnà. Stu libru insegna unx, specificamente debica (Ubuntu), Bashone, CSS, Javascrie, è parechje ghjoculi similosi software cum'è git è ffmpeg. Aghju ancu insignà cumu cummerciale CryptoCrenrenza, è pigliate i pagamenti in CryptoCrenncy o da carte di debitu regulari mentre paganu ancu i vostri visitatori se sceglite di fà. Ti insegtu cumu fà soldi da u vostru situ web chì attraversu l'a publicità, finalmente di ricerca in u primu ranking per me finiscinchi, è raccolendu in parechje ricerche cumuni pussibule. Ti insegraleghju cumu si vende u vostru software, publicità di voi, appelluccià i clienti à circà per i vostri servizii per sè stessu sia esperita, è travaglia bè. Ti amparherà cumu salvà i vostri dati nantu à a nuvola urdinatori chì travaglianu per voi è salvate i vostri dati è ùn vulete manghjà micca i vostri utilizatori per avè u vostru usu di uttenimentu di un buttone di un buttone di caratteriu Stu libru vi pruducaletta in a praticità di Edingà e distribuzioni di i media, da u testu à u vostru situ web (a vostra cullezzione per creà un modu chì vede bè. Averete ancu amparà uni pochi cunsiglii è tribici da i cunsiglii di codificazione, vanitaria pratica like momentichi è a vostra impresa per purtà à fruzione senza più sforzu, travaglià, o soldi ch'è nisu. Stu libru hè chjamatu "praticuWeb base appro apprentidente è sicurità per esempiu "per una ragione: si offre ancu un scopu di macchina, da esempie di visione di a funzione, da esempie di a visione faciale, ricunniscenza, moderazione di stampa, imagina, immaginamentu, image, A respirazione di risoluzione, l'immagine di Capitura, è un'anto funzioni cum'è metriche sourti, cume a natura di a maghjina hè assai impegnu.. Una foto hè stata più impossificata. A foto hè più impurtante). Una foto Cù a to faccia. Pudete fà un urdinatore di u servitore, un urdinatore chì ti pregunta per un urdinatore è u passcellu è u novu indirizzu fundamente, ma se un servitore di ripresa, o micca abbastanza per fà u vostru software, o di qualsiasi situ (qualsiasi situ) Aduprà). Qualchese chì custruisce u software chì hè impersabbilmente sicura hà qualchì sensu di ciò chì implica. U prugrammu hè inerentemente inseguri perchè i dispositi usemu per accede chì ùn sò micca sempre a nostra disposta, puderanu stà in manu di qualcunu cun malatu per u prugrammu per u software stessu. Questu hè qualcosa di u focus di stu libru. Un urdinatore networked hè assicuratu assicuratu cù una longa token di chjave, chjamata è SSH o sigurigu di una cuntabilità, perchè hè megliu assicuratu cun un servitore web è u statu di i servizii di sicurezza in furmazione di ellu stessu. U servitore Web hà accessu à u navigatore Web di l'Usuariu, quale hè a più putente di u dispusitivu di l'utilizatore, perchè hè u locu induve l'utilizatore pò accede à u software networked. Sta strunokit pò rende u testu, e cariche vedenu, è pò ancu registrà l'imàgine, è leghje è scrive à i dati è sò state accumentati da un servitore web generatu à u web situ. Upre tutte e strumenti à a vostra disposizione, cù stu libru, custruite un situ web sicuru, è generale un sistema di computerista chì hè sicuru per voi, basta è vede è sente
Induve cumincià: Sapiiti sàviatu passatu a sezione chì cominciu stu libru cun u tippu chì ci sarà, in particulare, se u documentu hè di ricercatu casi è esempi pratici per casu. Se ùn avete micca sperienza in scrittura, ti cunsigliatu assai di leghje tuttu u 30 di cunseguenza, è soprattuttu cunsigliatu di leghje e sezzioni precedenti, per assicurà chì stu libru hè ghjustu per voi. Sì stu libru ùn hè micca drittu, chì u cunsidereghja u rigalu à un amicu Prisentatu per amparàri si, è d'amparà da esse maestru cum'è un maestru, o altri madiali anu fattu now à me nanzu. Partite induve sarete, ogni parte di stu libru serà di utile se intende una app per custruisce una app utile è cunsiderendu chì l'app nantu di l'applicazioni in mente: cunnosce u vostru cliente. Avà mi cunnosci, sapete stu libru, è site pronta per cumincià. Per inizià, catturà un urdinatore (ancu u laptop più economicu da un magazinu di scatula, o un vechju desktop travaglia, è l'offre in una manera chì travaglia per voi.
Cumu leghje stu libru: U testu hè evidenziatu, denota chì u testu appartene à un prompt di cumanda, induve scrivite u codice chì corre. U prompt di cumandamentu hè assai tumbatu è richiede pocu à pocu per cliccà, accelerà u vostru flussu di travagliu è di fà e cose più faciule.
Cumincià: Andemu à immergerà in un codice di costruzione nantu à una macchina lucale è cumincià senza un situ web cunnessu à Internet. Questu hè più sicuru di inizià, ùn costa nunda, è hè faciule per voi. Sicondu u vostru sistema operatore, entra in una casca bash serà un pocu sfarente. Per Mac OS, mi cunsigliatu di a stallazione di una macchina virtuale in questu puntu, cum'è ricevete a più compatibilità cù una macchina virtuale. Di varii primi di fornitori cum'è virtualbox è parellellici ponu eseguisce una macchina Virtual per voi, ancu chì sia preferitu aduprà un ambientu nativu chì hè cunsigliatu. Sè utilizate Linux o Windox, chì recomanda, deve esse abbastanza faciule da creà un prughjettu. Apertura u vostru terminal, aghjustendu a dimensione cum'è vede in forma, è cuminciate à seguità u passu 2. Sè vo aduprate finestre, per piacè seguite u passu 1.
Passu 1: - Utenti di Windows Solu In Windows, Apertura Command Prompt cum'è Amministratore è Tipu wsl -install
Passu 2: - Cuntinuà quì, o salta u Passu 1 à quì si ùn site micca aduprà Windows In un terminal apertu, (secondu u vostru OS, chjamatu Ubuntu in Windows, Terminal in Mac o Linux, o un nome simili), cumincianu à creà un prugettu. Facemu questu cù u cumandamentu MKDIR, chì crea un repertoriu. Sè avete bisognu di creà un cartulare per guardà u vostru prugettu, chì hè cunsigliatu, aduprate u cumandamentu di u CD per cambià à u repertoriu è è
CD / strada / à / cartulare - U PATHERS hè u cartulare (i fugliali) chì precedevanu u vostru cartulare, a vostra strada predefinita hè ~ o / nome d'utilizatore hè u vostru nome d'utilizatore). Per cambià à u repertoriu difettu, u CD o CD ~ Sempri MkDir - rimpiazzà "Esempiu" cù u nome di u repertoriu
Avà avete un repertoriu di travagliu per u vostru prugettu. Esse cum'è hè cusì impurtante per avè u repertoriu salvatu in casu chì avete bisognu à passà à una macchina o implementare u codice chì scrive cusì per rinfrescà u scrittu in i prossimi passi. Ma custruendu un script piglia un pocu di codice, è codice deve esse automatizatu per esse u più utile pussibule. Cusì custruimu un script per custruisce i scripts prima. Cuminciamu à creà u script è facendu eseguibile. Utilizaremu sudo, chmod è toccu per questu, è chjamate u script "SCRIPT".
sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Ora avemu creatu u scrittu, hà fattu esemputabile, è sò pronti à edità. Nano hè un editore di testu chì vi permetterà à edità u testu senza cliccà, chì hè assai più faciule ch'è aduprà un interfaccia d'utilizatore graficu. Per edità un fugliale cù Nano, Aduprate Nano è dopu a strada à u fugliale. Per fà un script chì face un script, hè abbastanza simile à fà u nostru script in u primu postu. Utilizeremu u listessu codice cum'è sopra, rimpiazzà u nome di u script ", Ascript" cun un paràmetru di argumentu, $ 1. Permette di chjamà u script scrive simplice sudu, à quale puntu pudemu creà ogni novu script rimpiazzendu "Nome di u vostru Script. U codice in Nano duverebbe vede:
sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
È vicinu à Nano, pudemu cuntene a chjave di cuntrollu è stampa x, allora è denetemu chì simu salvezza u fugliale, è colptu ritornu. Avà invece di scrive sti trè cumandamenti per edità un scrittura, seremu capaci di Sudo Astript Strattu Per Edisce u Script di novu. Questu travaglia! È qualsiasi novu script pò esse currettamente facilmente chjamendu in a cunchiglia. Salve u nostru travagliu Avà: Sciscrivemu un scrittu di salvezza per salvà u nostru scrittu di salvezza è dopu entre in u nostru repertoriu di u prugettu, mentre ancu di salvezza chì ancu u script di salvezza.
sudo ascript backup
Avà, in Nano:
sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Induve / strada / per / u cartulare hè a strada à u prugettu chì avete creatu cù MKDIR. Più tardi l'avemu amparà à coppie ripete à Camini Cum'è questa cù un cicli è una lista, chì hè menu codi, ma per ora ti guardemu Per eseguir this scrittà u vostru codice, salvate u fugliale in Nano cù u cuntrollu + x, y è vultate, è scrivite u vostru cunchiglia
backup
Se vi sò dumandatu à tuttu per una password mentre leghje stu libru è seguitate à a cunchiglia, per piacè scrivite u vostru password currettamente, averete trè tenute prima di ricuperà u cumandamentu. Pudete aduprà e frecce up and down to renna cumandamenti è editeli, duvete bisognu di correrà qualcosa duie volte. Semplice Press Up And Down Intermittently per selezziunà un cumandamentu, prima edgu u cumandamentu con u tramontu, aftenzhje a chjave cum'è u teclatu, è chì correri cun u ritornu.
Felicitazioni! Avete riisciutu à creà un script di salvezza fantastica chì torna i dui scritti impurtanti di cunchiglia in u vostru repertoriu di travagliu. Puderiamo spustine cose dopu u prugettu diventerà più grande, ma sta furtea per avà. Passemu in backing up in cloud, aduprà ghitub per questu (ancu di esse numerosi suluzioni per a salvezza cum'è voi chì vi permettenu di scaricà tutte e coppie o chjave. Hè strumentale in salvà u vostru software, sopratuttu, cume avemu migratu istanzi Linux chì a volte si falla pocu di tempu quandu u codice pò esse back up automaticamente, chì ne coveranu.
Sè vo site digià aduprendu una macchina ubuntu, aghju ricumendutu à aduprà un macchina virtuale in questu puntu perchè hà da fà una situazione di u travagliu è prefurmà l'operazioni di travagliu Feremu u codice nantu à un servitore web in un future vicinu, ma chì vulemu assicurà chì sò almenu quarchi lineari di sicurezza chì u nostru servitore web per farmità Se vulete ancu aduprà maces mut, sitevewal per ricercà è installate i paesi necessarii in ligna, ma ùn puderà micca esse alternattivi per ogni libru di stu libru o a serie stu libru.
Aghjunghjemu uni pochi cumandamenti per commette u nostru travagliu cù u script di salvezza curriri u cumandamentu sudo salone di u sudo.
# ...
Una volta, cuntrollu X per salvà.
Avà avemu bisognu di fà una altra volta di cunfigurazione per stu prughjettu. Perchè sarà un prughjettu git, ùn avemu micca bisognu di scrive ogni cumanda chì scumparemu da un repositoriu in git, ma averemu amulicatu di questu quandu scrivenu i script di implementazione. Per principià, facemu assicuratemu di u repertoriu dirittu è inizializeghja u repositoriu git è generà chjavi SSH.
cd /path/to/directory
git init
git branch -m master
ssh-keygen
Dopu chì scrivite ssh-keygen, a nova chjave deve esse salvatu in u cartulare di casa sottu un cartulare chjamatu .sh .sh. Hè chjamatu ID_RSA.PUB. Truvemu sta chjave è cupià. A veda,
cd ~
cat .ssh/id_rsa.pub
Copia u testu chì hè tornatu da l'ultimu cumandamentu, è creà un cuntu cù u vostru fornitore git (idealmente gitub), prima di aghjunghje a chjave SSH à u vostru contu. Una volta avete un cuntu, cliccate u menu ghjustu è inserite a paràmetri, prima di aghjunghje a vostra chjave SSH in SSH è GPG in u menu. Selezziunate aghjunghje una chjave SSH è aghjunghje à u passu è dà un titulu, prima di salvà è vultà à Github per Creà un novu Repositariu. Questu hè simile per altri presi di fornitori, vi tuccherà da leghje a so documentazione. In a nova cunfigurazione di repositoriu, dà u vostru nome di u repositivu è decide se vulete pubblicà, è assicuratevi di cunfigurà nisun fugliale per l'inclusione. Una volta u repositariu hè creatu, copiate l'Clone cù SSH URL, è incolla in u cumandamentu seguente.
git remote add git://… (your remote URL)
Avà pudete spustà torna à u vostru repositoriu cù CD, sarete familiarizatu cù questu. Pruvate u vostru script di salvezza avà cù a copia di salvezza
Perfettu! Avà pudemu veramente uttene codificazione. Installemu django avà chì avemu una bona capita nantu à bash è git. Django vi conserrà autobile u nostru software, bashà pò fà questu troppu ma django duverebbe avè un impegnu più simperaticu (pò esse disattivatu è cunfiguratu
Installà u software in Ubuntu, useremu u cumandamentu di u sudo. Prima, andemu à aghjurnà è aghjurnà u software chì avemu digià. Questu pò esse fattu cù sudo apt-get update è sudo apt-get upgrade -y. In seguitu, stallemu Pettonia è u nostru ambiente virtuale, a casa di u nostru Codice, cù u seguente cumandu: Sudo apt-uttene install Python-hè-python3 python3-venn
Questu hè tuttu ciò chì avete bisognu di andà cù django in termini di software installazione in l'istanza ubuntu. Per Windows è Linux questu hè duverebbe esse abbastanza diretti, ma per mac chì vulete stallà una macchina virtuale è à u linugà o u linu di vista sopra per cunfigà un ambiente di ubuntu. Ubuntu hè criticu in questu casu perchè hè u software i siti web curriri è a permette di ospitalli sensibili cù tutti i software aforementale.
Scappemu in u django.
In u nostru cartunu torna, cù CD:
python -m venv venv # Crea l'ambiente virtuale induve u codice hè almacenatu
source venv/bin/activate # Attivà l'ambiente virtuale
django-admin startproject mysite . # Induve u mysite hè u prugettu chì sò cuminciatu in u mo cartulare attuale.
Django ci face solu uscidate, perchè Django hè allughjendu u servitore Web è face tuttu ciò chì avemu bisognu di ottene un situ web basicu in u locu. Avà chì avemu django hà stallatu, editarate e paràmetri un pocu per fà chì avemu bisognu. Prima, facemu creà una nova app
python manage.py startapp feed
Avete nutatu a prima app hè chjamata alimentazione. L'app deve esse chjamata qualunque cosa chì ti piace, è avemu creà nova nova, ma u nome di ogni apparsu deve esse cunzistente ogni volta chì l'app hè di riferimentu in u codice. Per aghjunghje una nova app, averemu sempre i paràmetri.py in l'altru cartulare creatu, chjamatu in StartProject, Sottu App. Aduprendu Nano,
nano app/settings.py
In i paràmetri, truvà installati_Apps è separate u [] in 3 linee. Aduprendu quattru spazii nantu à a linea di centru viotu, aghjunghje 'feed', o u nome di a vostra app. Questa sezione di i paràmetri.py duveria vede:
INSTALLED_APPS = [
'feed',
]
Prima di scurdà, testemu chì Django travaglia. Aduprendu u gestore di u Python di cumanda 0.0.0.0:8000, pudemu gestisce u servitore in un codice web (travaglia in l'esempiu)
Avà, scappemu in scrittura qualchì codice Python. Django hà trè cumpunenti principali, tutti currianu per u codice interamente. I cumpunenti sò chjamati mudellu, Veduta mudlate, è ognunu à un livellu più altu è più basso rispettivu prima di a pagina web hè ghjunta à l'utilizatore.
U mudellu hè u codice chì guarda l'infurmazioni in a basa di dati per a retrieval, sortazione è rending.
A vista decide di u mudellu, si prende u mudellu, è mudificata, guasgi ogni vista permerà un mudellu direttamente.
U mudellu hè u codice HTML cù alcune campane extra è sbuffate chjamate lingua di u mudellu. U mudellu hè renduvatu da a vista induve hè piena di codice Python è cuntestu cum'è mudelli è informazioni (sermenta usate) da a vista.
Django hà altri cumpunenti, cumprese ma micca limitati à:
Paràmetri, chì cunfigura l'app mentre avemu discututu.
Urls, chì sò mudelli chì l'utilizatori seguite acquistanu l'accessu à e parti specifiche di l'applicazione web.
Forme, chì definisce ciò chì definisce ciò chì infine ne sò mandate à u servitore s'hè trattatu è renduvatu in a basa di dati in quantu à l'utente. Eccu sò e fundazione di u servitore, è pudete accettà qualsiasi tippu di informazioni chì i magazini computer, catri di testu notable, numeri di colte
Mudelli nantu à u so modu nantu è a Lingua modastate è ponte tra python è html, l'infurmazione di u situ hè stata accessu à una undice di scopi à calzature chì ùn hà micca bisognu di u servitore.
I fugliali statichi, chì sò di solitu javascript è sò e biblioteche chì u servitore serve è sò ligati cù u mudellu.
I fugliali di media, chì u servitore serve o sò usati esterni, o solu scritte u server è esse processatu è affissatu à un altru servitore (un bucket) per l'esso di l'albergo.
Middled, chì hè pezzi di codice chì sò currette à u listessu tempu cum'è ogni vista è sò cunsiderate "incluse" in a vista.
I prudutti di cuntestu, chì prucessa u cuntestu di ogni vista è sò usati per aghjunghje cuntestu extra.
TESTI, chì validate chì l'utente o a dumanda passa certi esigenze prima di a vista hè presa.
I cunsumatori, chì dicenu i siti web di WeboSockets è risponde à a cumunicazione.
Admin, chì hè adupratu per registrà mudelli per esse manipulati in dettaglio in dettaglio in u dettagli di u django, induve a basa di dati pò esse amministrata à traversu una interfaccia grafica.
L'api, chì definisce e parti di travagliu asincronu di u codice dijango pò cumincià à correre prima di procedisce subitu à a prossima compitu o linea di codice.
Django pò avè tanti altri cumpunenti, chì ne discuteremu in dettaglio quì. Ci hè parechji modi per fà Django Più funziunalifica, aghjunghje u webcilità di cumunicazione in retificà, caliu di djangine, è chì "in particulare in e funzioni sò esecuti. View Foccions sò chjave perchè sò generalmente dichjarate ogni pezzu di codice chì hè specificu à un mudellu URL specificu, o una sezione di u servitore.
Prima, facemu esploramu e funzioni. View funzionate in operaptions con importo day reoting in the View, è sò definite cù e definidizioni di a funziunali regula o classi. I viste più simplici sò definiti da a definizione di a funzione def, è torna un httponepone cù un mudellu di basa. Cuminciamu definisce una vista basica per rinvià u testu "Hello World". Ricurdativi Qudi Prima volta chì aghjustate codice dopu à una dichjarazione cum'è una dichjarazione, se, mendi per, etc, necessete aghjunghje 4 spazi per ognuna di e definizione precedente chì vulete applicà in a vostra funzione. Andaremu in ciò chì ognunu di questi significa prestu.
Da u Directoriu di u nostru situ, edità u file di alimentazione / viste.py u file cù Nano è aghjunghje e seguenti linee à a fine di u fugliale.
from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
U httpone di Django risponde cun una catena di testu, denotatu cù l'apertura è a chiusura ". Ogni volta chì passate infurmazioni à una funzione o classe, cum'è a dumanda o una catena, duverete aduprà parentesi (, apertura è chjude).
Ùn hè micca tuttu ciò chì avemu bisognu di vede a nostra vista ancora. Di sicuru, ùn avemu micca dettu à u servitore induve a vista hè esattamente, avemu sempre à definisce un chjassu per chì a vista deve rende. Cuminciamu à definisce una strada basica in App / URLS.Py, è anderemu in gruppi di caminu dopu.
In App / URL.Py, aghjunghje una linea dopu a dichjarazione d'importazione dopu chì l'iniziu importanu a vista simu creati.
from feed import views as feed_views
Avà, definemu u mudellu di vista. View Pathests anu trè cumpunenti, u cumpunamentu per u percorsu chì esce in u servitore chì hè fattu u più faciule è aghjurnà se necessariu per fà spaziu o fate SENU SENTI DI FACENTE QUÈ VENTE ORI MOXTIBIare perchè a vostra codebase serà un ambiente sempre chì hà bisognu di flessibio è di a prorovisazione in ordine. Eccu ciò chì a vostra vista pareva, pudete aghjunghje questu à l'URLPATTERNS = [sezione di l'app / URL.Py. U mudellu di vista hè diminuitu cù i trè cumpunenti descarte sopra, è una funzione chjamava per u percorsu. I vostri mudelli URL sò una lista, cusì assicuratevi di finisce sempre ogni articulu in elli cù una coma, perchè questu si separa ognunu. Ogni articulu duverebbe ancu andà in una nova linea, una volta cù quattru spazii prima, cum'è l'app in paràmetri. Defineremu u primu cumpunente di a vista cù una funzione di francesca viota, per esse credu chì U vostru URLS.Py duveria avà pare cusì:
from feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
Questa hè a basa per a creazione di un situ web cù Django chì hè completamente staticu. Per dumandà un situ web dinamicu induve pudemu principià l'infurmazioni, cum'è l'im IgLIDE, VIDE, Adudio, Averemu mudelli, chì ci spiegemu prossimu. Per avà, verificemu u nostru codice è gestisce u servitore. Per verificà u codice per errori, Run:
python manage.py check
Se ci sò messaggi d'errore, voi duvete rivisione currettamente i cambiamenti in l'app è vedeppu vole à esse spaziu chì ci hè una o manca, un caratteru extra eliminatu, o qualcosa. A lettura attraversu u messagiu d'errore (se tenete unu), duvete pudè vede u chjassu à un fugliale chì avete creatu o editatu cù un numeru di linea, dunque cercate se puderete arreggerà qualcosa chì ci hè. Se avete risoltu u prublema, scorri u cumandamentu sopra. Quandu u vostru software hè pronta à corse è travaglia, viderete u cuntrollu di u sistema "ùn hè micca identificatu alcuna prublemi." Avà site pronta per andà. Eseguite u servitore cù:
python manage.py runserver 0.0.0.0:8000
Ora apre un navigatore web è navigà à HTTP: // localhost: 8000. Duvete vede u testu riturnatu in u parèntesi è citazioni di a funzione httestre in a vostra vista. Questu hè solu un esempiu basi, ma sì u fece questu luntà, capisci i punti fabbi di How Linux, Bash, Python, Lavoro di Dingo, è Dinthon, è Dingo, è Django Digemu più in un certu modellazione di basa di dati, è esplora u putere di una classa Python in u almacenamentu di l'infurmazioni. Dopu, parteremu à uttene un grippu nantu à html è css prima di fà u nostru situ cumplessu, flexible è risente aduprendu javascript è macchine
I classi sò almacenati in i mudelli.py di a vostra app. Aduprendu Nano, Edit App / Modelli.Py è aghjunghje una nova classe. Una classe hè stata definita a definizione di a classa è hè passatu un superclass chì ereditanu da, in questu casu mudelli.model. U nome di a classa vene dopu a definizione di a classa, è dopu a definizione di a classa A: (Colon) hè adupratu, prima chì l'attributi è e definizioni di a funzione hà attaccatu à a classe. A nostra classa hà bisognu d'un id chì avemu aduprà per rimettallu per ritruvallu, è hà ancu bisognu di un campu testu per guardà alcune infurmazioni. Più tardi, pudemu aghjunghje un tassestamp, fichiali (veri o falsi definizioni chì ponu aiutà u nostru codice nantu à ciò chì deve esse usatu cù u mudellu in un servitore, è più. Scacciamu u codice quì sottu:
from django.db import models # L'importazione chì hè aduprata per definisce a nostra classe è hè attributi
class Post(models.Model): # A definizione di a nostra classe stessa
id = models.AutoField(primary_key=True) # L'ID di u nostru mudellu, una chjave generata automaticamente chì fassigà u mudellu, manteneu unichi, è hè utili quandu avemu bisognu di interagisce cù u mudellu.
text = models.TextField(default='') # L'attributu i nostri negozi di classi, in questu casu, qualchì testu, predeterminendu à una catena viota.
Vicinu è salvate u fugliale cum'è avemu fattu prima di finisce.
Ci hè parechje altre campi è opzioni Will Wormre quand'ecempliscemu questa classe cum'è e nostre apparecchi, ma questu hè i necessità basica di creà un app per posà qualchì testu. Tuttavia, stu mudellu ùn funziona micca solu. Cum'è deskrittu prima, avemu bisognu di una vista persunalizata è mudellu di url persunalizatu per fà stu travagliu di mudellu, è averemu bisognu di un furmulariu cun un mudellu. Esplora a forma prima.
Per definisce un furmulariu, edite l'app / forme.py with nano è aghjunghje e linee seguenti. Avemu bisognu di duie impurtanti, e nostre forma clorie, ancu u mudellu, avemu creatu (l'alimemu.models.post), una definizione di classa simile à u mudellu chjamatu Meta chì avarà a difesa di u modellu A forma pò ancu avè una funzione inizializazione chì mette in basa di l'infurmazioni in a dumanda, mudellu o altrimenti, esploremu questu dopu.
E forme di mudellu sò cusì utili perchè ponu creà un mudellu o ancu editate un mudellu, per chì l'avemu aduprà per i dui. Definemu unu in e forme.
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',)
Questu hè i punti fundamentali di ciò chì pare una forma è mudellu. Stu modellu di mudellu pò esse adupratu per instantà o edità un post, cambiendu u testu chì cuntene. Fighjemu integrendu stu furmulariu in una vista prossimu. Prima, facinemu e migrati è migrate a basa di dati cusì u nostru codice pò interagisce cù u mudellu quandu curreghja. Per fà questu, eseguite i seguenti cumandamenti:
python manage.py makemigrations
python manage.py migrate
Prisenderà un minutu per eseguisce, ma quandu a l'a permità di accede à u mudellu in a vista, u mezu à u software. Continuemu à fà una vista induve pudemu vede u nostru mudellu. Editate Feed / Views.Py è aghjunghje u seguente codice, cum'è nutatu. Ùn hai micca bisognu di aghjunghje qualcosa dopu u # segnu, quellu codice hè cumenti chì sò usati per denote infurmazioni nantu à u codice. Aviamu cuminciamu à impurtà u nostru mudellu in e parte è l'aghjunta à un cuntestu induve pudemu rende in un mudellu cum'è una lista per a display. In prossimu prossimu averemu da rende a forma è u mudellu cù un buttone per creà un novu oggettu basatu annantu à u mudellu è postà à u servitore. Questu sona cumplicatu, cusì facemu solu pisà u passu. Prima di finisce a vista, creemu un mudellu chì solu rende u mudellu è assicurateci di pudemu vede per creà un novu postu in Shell. Eccu cumu quella vista deve circà:
posts = Post.objects.all() # Quistione tutti i posti in a basa di dati finu à avà
Tuttu questu pare abbastanza simplice finu à ghjunghje à u fondu. Rended, u valore tornatu da a funzione invece di in una risposta http cum'è l'esempiu precore, accettendu in u mudellu, è torna in u mudellu Vintu. U mudellu serà un documentu di htmml cù un pocu di una lingua chjamata Jinja2, chì renddini informazioni di rothonu in u html.
Per cumincià à creà mudelli, fate dui repertorii in alimentazione.
mkdir feed/templates
mkdir feed/templates/feed
In seguitu, editò un mudellu sopra, alimentazione / mudelli / Altezza, è aghjustate u codice per questu esempiu. Fighjemu u mudellu per questu esempiu.
Questu hè un mudellu assai simplice. Farma di apertura è chjude TagS Html, un tag di tipu, un tag di legnu cù un titulu di legenda, una tag di legenda apt chì aghjunse à loop ogni post in a lista di Posts cum'è u mudellu. Tuttu chistu ci vole à rende i posti, ma ùn ci sò ancora in a basa di dati. Creemu un pocu cù a cunchiglia. Pudemu corre a cunchiglia cù u gestore.
python manage.py shell
Avà, importemu u nostru mudellu post
from feed.models import Post
In seguitu, crearemu un postu simplice cù una catena è esce da a cunchiglia. A catena pò esse qualcosa, finu à u testu validu.
Post.objects.create(text='hello world')
exit()
Infine, averemu bisognu di aghjunghje un mudellu URL à u nostru alimentu. Perchè a nostra app di alimentazione utilizarà parechje URL è vulemu mantene i taglii di i fugliali, andemu à creà un URL locale.py in a nostra app di alimentazione chì pare cusì:
from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
Averemu ancu edità l'URLs.Py in l'app di Base, ciò chì ciò chì avemu decisu di chjamà, hè statu u primu direttu chì avemu creatu. Edit App / App.Pypy è aghjunghje i seguenti à i mudelli URL
from django.urls import include # in cima
# ... codice precedente quì
Avà, quandu runcemu u servitore cù Python Gest di Python Gest di Python ,vemu à avè creatu perchè avemu u mudellu, vista è un mudellu, cume l'articuli in a basa di dati. In seguitu, implementamu u furmulariu chì avemu creatu è cuminciamu à creà i nostri posti. Ma prima di scrive troppu codice, facemu una copiace aduprendu u scrittu ch'è ci hàrdtutemu prima, salvezza. Scrive sta script in Shell, aspittà qualchi momentu, è tutti i cucinu seranu sustinuti à u nostru git repositoriu.
backup
L'implementazione di a forma hè relativamente simplice. Imporeremu a nostra forma, aghjunghje una mista di Post dumanda à a vista, è vipara u posta in a basa di dati prima di reindirizzendu à a stessa vista. Pudemu aduprà a pusizione di reindirezzione chì avemu digià impurtatu, è una altra funzione chjamati reverse per ottene l'URL per u mudellu di vista. Simu quistione cun u feed di stringa: Feed 'perchè u nanzu di u mudellu inclusu hè alimentatu, è a vista hè ancu chjamata alimentazione.
posts = Post.objects.all() # Quistione tutti i posti in a basa di dati finu à avà
if request.method == 'POST': # Gestite a dumanda di a posta
form = PostForm(request.POST) # Crea un esempiu di u furmulariu è salvà i dati à questu
if form.is_valid(): # Validà u furmulariu
form.save() # Salvà u novu oggettu
return redirect(reverse('feed:feed')) # Redirezzione à u listessu URL cù una dumanda di uttene
'form': PostForm(), # Assicuratevi di passà a forma in u cuntestu, cusì chì pudemu rende.
Avà, avemu da avè bisognu di aghjurnà u mudellu per contu per a nova forma. Pudemu fà questu aduprendu u
Scumparemu questu. Ci hè una nova classa di forma, un token, u furmulariu stessu, è un buttone di sottumissione. Parcu abbastanza simplice, ma quandu facemu fighjà, ci vuleria fà vede megliu. Travaglia, pudemu publicheghjanu novi posti cù u furmatu è sò oghje salvati in a basa di dati. Ci hè uni pochi di cose quì. Usendu tag HTML per dichjarà chì u documentu hè un documentu htmL, uscì una tag mudillate ({% ...%)) per rende u furmatu. Avemu dinò un ciclu per rende u testu aduprendu i tag di bloccu è un tag di mudellu. E tag di bluccà sò veramente impurtanti perchè pudemuigini ciò chì pudemu definemu cumu venuti di u mudellu di u mudellu, pressu • mudelli in u nostru codicea.
Avà avemu bisognu di fà a nostra app pare megliu, perchè per avà pare veramente basicu. Pudemu questu per aduprà CSS, sia in linea, o in classi attaccati à ogni oggettu in u documentu. CSS hè veramente bellu perchè dite à tuttu nantu à a pagina Cumu duverebbe circà, è pò fà vede veramente bè. Ci hè uni pochi di libri chì ponu fà questu, ma u mo persunale hè andatu hè bootstrap.
U bootstrap pò esse scaricatu da u so situ web,getbootstrap.com/. Una volta quì, premu u buttone per leghje e doc installazione, è copre u codice da l'includimentu via a sezione CDN. Averete bisognu di stu codice in cima di u vostru document mistml, in una banca chjamava di testa. Ineveremu avanti è creà un mudellu di basa per quessa, ciò chì ùn avemu micca bisognu à ricrevà Quali ligami in ogni mudellu.
Fate un novu artivre chjamatu mudelli cù mudelli Mkdir, è dopu edità i mudelli / base.html.
Duverebbe vede cusì:
Assicuratevi di Càlicà a Css è Javascript, i File di .CSS è. Scontanu u javascript per u nostru situ più funziunale in u futuru.
Avà, andemu à u bash cunchiglia è corre un cumandamentu rapidu. Ricurdativi, se avete mai bisognu di accede à l'ambiente virtuale, tirate fonte venn / bin / attivà. Questu vi averemu micca stallà pacchetti Python in modu localmente in una manera chì permette di django accede à elli. Per dà e nostre forme generate da e classi di bootstrap di DJANGO, useremu un pacchettu python chjamati forme croccanti. Pudemu scaricà questu cù u seguente cumandamentu
pip install django-crispy-forms
Una volta questu hè installatu, aghjunghje à i paràmetri.py
# ... codice precedente quì
Avà, Torna in u nostru mudellu di allue, pudemu caccià alcune cose. Andemu u principiu è a fine di u documentu è rimpiazzà cun eredità da u nostru mudellu di basa, aduprendu a definizione di u bloccu. Inoltre, aghjustaremu un filtru di mudellu cù carica è un filtru mudellu à a forma. Infine, aghjustemu una classe di bootstrap à u buttone nantu à u furmulariu per fà vede più cum'è un buttone. Chì duverebbe vede cusì:
Bellu! Hè abbastanza un pocu di codice dighjà. In prossimu, ci deve pruvà una cosa s'è vi pudemu vede chì tuttu vede bella, è ancu assicuratevete chì tutti travaglia bè. Eseguite u servitore secondu l'istruzzioni precedenti è assicuratevi chì u situ aspetta è travaglia bè. Gran travagliu! Sò pronti per passà à u passu prossimu, in quale aghjunghjemu a funziunalità di login d'utilizatore utilizendu URL simili, forme, vista è mudelli è mudelli è mudelli. U mudellu di basa hè impurtante, è videremu àdificà it è facenu painti fucalizza à fà u nostru situ più sicuru è eventualmente accessibile a vostra app assicurazione è u vostru contu accessibile solu da voi.
Fà questu, avemu da esse bisognu di aduprà u mudellu d'utilizatore custruitu in Django. U mudellu d'utilizatore hè un mudellu di basa di dati, cum'è u nostru post, chì pò rended avvisà un utilizatore in u situ web. In u futuru, nanzu rimmissemu u situ per interferineraria, starensu à l'altri mudelli cù altri mudelli per l'altri attribuiti à ellu, è custruiscenu e misure di securità supplementu per u login. Cuminciaremu cù l'usu di e forme di login chì Django furnisce. Prima, facemu una nova app chì useremu per rende i mudelli è vista per a pagina di login di basa. Pudemu dinò altre app per rapprisinà e sfide di login cuntinua per esse à sicuru un carcu, cancensione facciale, vicinu à l'impressione esterna, abactrice.
Avemu digià parlatu di cumincià una app. Da u nostru carture, in l'ambiente virtuale, passanu gestione.Py argumenti
python manage.py startapp users
Avà, duvemu avè un cartulare per a nova app. Cuminciamu à creà una vista in quellu repertoriu chì currisponde à u login d'utilizatore. Django hà custruitu in vista per ordini per l'utenti, ma questi ùn seranu micca adattate per noi perchè avemu bisognu di una vista persunalizatore, chì hè preferitu micca una definizione.
In sta vista, parteremu da verificà una dumanda di post.Post à una loginon importatu da Django, autentificate u cuntu d'utilizatore, è cunnette u vostru app di alimentità.
In utilizatori / Opinioni.Py, aghjunghje u seguente codice
username = request.POST['username'] # Get u nome d'utilizatore è a password da a dumanda di a posta
password = request.POST['password'] # Autentificà l'utilizatore
Hè tuttu ciò chì avete bisognu per una vista di login di basa. Avà, creemu una forma per a vista extendendu u mudellu di basa. Cuminciaremu da creà un novu cartulare per i mudelli in u cartulare d'utilizatori.
mkdir users/templates
mkdir users/templates/users
Avà, duvemu esse capaci di edità l'utilizatori / mudelli / utilizatori / Login.HtmL. Mentre simu in ella, creemu un mudellu per permette à l'utilizatore ancu di firmà.
nano users/templates/users/login.html
Avà, in u mudellu,
Questu hè i principii di un mudellu di login. Hè veramente cum'è l'altru mudellu in struttura, ma pare un pocu sfarente quandu hè presa. Pudemu cupià stu codice per custruisce un altru mudellu di un mudellu assai simili chjamatu Registru.Htm, induve cambiamu a formulazione è l'usu di una nova forma chì avemu custruisce. Facemu u mudellu prima. Edite l'utilizatori / mudelli / utilizatori / Registrà.html è aghjunghje u seguente codice:
Avà, custruemu una forma per a nostra registrazione d'utilizatore è cercle torna à i vedute prima di aghjurnà i nostri logini d'utilizatori cun un mudellu. Faremu sta forma basica per inizià, ma incorpore più dettagli è e caratteristiche di a sicurità cum'è l'accordi è captcha in u futuru. Edite e forme cù l'utilizatori nano / forme, è aghjunghje u seguente codice.
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']
Cusì avemu un'altra forma quì, chì opere abbastanza simplicitamente. Hè una forma di registru d'utilizatore cù un nome d'utilizatore, email è password, è ancu un campu di password cunfirmata. Innota chì sta forma ùn si stende micca e forme regulare.Form class, hè un modellu di mudellu chì significa chì hà una meta. Un campu hè ben definitu solu u listessu, è a classa meta compane u mudellu La forma currisponde à u restu di l'infurmazione chì serà scrittu in forma. A maiò parte di questu esiste digià in DJANGO hè custruitu in l'usercreazione, dunque useremu chì a basa per a classe (passata in u parentesi).
In prossimu, esicremu chì a vista per registrà un utilizatore, avà chì avemu un furmatu è un mudellu. Questu hè una modelforma, simile cum'è quella in a nova vista postale. Edite l'utilizatori / viste.Py è aghjunghje u seguente codice:
# ... impurtanza
Hè tuttu ciò chì avemu bisognu di uttene un utilizatore registratu, ma duvemu avè più infurmazione. Vulemu cunnosce à l'usu di l'utilizatore registratu, chì tempu sò nastri in u situ, insionati, cum'è una biografia, puntuale u mudellu d'alimentariu è l'attributi posts à ogni utilizatore. Per fà quellu, aghjurnemu i modelli.py in i dui app. Cuminciamu per edità u mudellu di alimentazione. Ci vole à circà cusì:
from django.db import models # ... impurtanza
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Aghjustate in questa linea
Preste attenzione à a seconda linea chì hè aghjuntu à u fugliale. Questa hè una chjave straniera, chì attribuisce ogni postu à un unicu utilizatore per u postu, per pudemu assicurà chì avemu da salvà i posti nantu à una basa per un usu per l'utilizatore. Definemu questa chjave straniera cù a classe chì rapprisenta, un argumentu eliminicu per assicurà per a mancà di l'utilizatore chì ci vole digià, chì ci vole solu, chì pudemu usà per riferite à l'usu oggetti Stu nome rilativu, a cuntrariu di a post.Author, l'autore di u postu, ci dà utente chì hà publicatu u postu stessu. Pudemu avà l'usu di l'utente fattu per esecutà l'utente.Posts.all (), o autore.posts.all ().
Avà, facemu i nostri logins più resistenti. Pudemu digià u nostru situ assai vulneria di Phishing da simpricinamenti valutate u numeru di volte ci permmu un loginonu à u situ, questu hè abbastanza faciule. Cuminciamu ancu à almacenà alcune informazioni nantu à ogni utilizatore prima di cuntinuà à sviluppà a nostra app. Utenti di edizione / mudelli.Py, aghjunghje u seguente codice.
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='')
Innota chì stu mudellu hè abbastanza simile à u mudellu postale. Avemu un impulu d'impurtemu, percezone, chì li permetterà di stabilisce i campi di Dateteime, è avemu ancu un carattere Upendu tutti di sti timestampi ci ci perde u situ è capisce u so usu, è capiscenu i campi di testu lasciamu infurmazioni annantu à ogni utilizatore, o autore, in u situ web, o autore, in u situ web, o autore, in u situ web, o autore, in u situ web, o autore. L'onooneloodfield deve esse l'unica cunsiderazione minore, si comporta esattamente a stessa cosa perchè ma cun un soluzza per mudellu SOcorsu. In questu modu, l'utilizatore hà solu un prufilu, mentre chì puderanu avè assai posti.
Avà, migliurà u nostru login è registrate opinioni per cuntà u prufilu. Prima, Edite l'utilizatori / visualizazione.Py è fucalizza nantu à a vista di u registru:
# ... impurtanza
Profile.objects.create(user=user) # Assicuratevi di aghjunghje sta linea, per creà un prufilu per l'utilizatore
Questu simpricimenti crea un prufilu per l'utilizatore, senza riempimentu di l'infurmazioni. Avà, vulemu assicurà chì u contu d'utilizatore ùn pò micca esse cunnessu troppu spessu, o almenu password ùn ponu micca esse pruvatu troppu spessu, allora andemu à aghjurnà a vista di login.
# ... impurtanza
if user and user.profile.can_login < timezone.now(): # Innota chì avà avemu verificatu se l'utilizatore pò logu
else: # Se u login ùn hè micca successu,
user = User.objects.filter(username=username).first() # Questa hè a parte induve l'aghjurnemu u prufilu d'utilizatori
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Cusì ùn ponu micca logu di novu per uni pochi seconde
Questu hè u fundamentale di basa di a sicurità. Assicuratevi chì u situ ùn hè micca vulnerabile à qualcunu simpricimenti pruvà ogni pussibule cumminazione di password, o ancu uni pochi di elli à u stessu tempu. Questu ùn sarà micca frustratu à l'utilizatore ordinariu Chi cunnosce i so passcadini è solu logie in pochi di i dispositi, ma manteneranu numerosi rumi di fishing fora di l'app. Nota chì avemu aghjustatu una persona dichjarazione cù una variabile, can_logina, chì deve esse un passu passatu, è aghjurnà cù ogni login inutile utilizendu u stessu utilizatore. Sta manera, un utilizatore maliziosu ùn puderà micca guadagnà una password in ogni locu vicinu à prestu. U numeru di sicondi in u datetime.timedelta () pò ancu aghjurnà, è u situ web sarà più resilientu ma ancu ligeramente menu utilizzenti cù più secondi. I cunsigliatu 15 per inizià.
Ricurdativi, avemu seguitu un script di salvezza per salvà u nostru travagliu, Allora lasciemu avanti è à spalle di ciò chì avemu finu à assicurà duvemu tuttu risparatu. Eseguite u cumandamentu:
sudo backup
Torna una volta, questu vi salvà u vostru travagliu finu à avà. I cunsigliatu per correre robba frequente per salvà u vostru travagliu, è puderebbe ancu vulete eseguisce un travagliu di salvezza automaticamente. Pudete fà questu aduprendu una utilità Unix chjamata Cron. Per attivà sta utilità, eseguite u cumandamentu seguente è entre in a vostra password:
sudo crontab -e
Se ùn avete micca digià sceltu l'opzione 1 per u nano, u editore di testu, duvete digià esse familiarizatu cù, è scorri à u fondu di u fugliale utilizendu e tasti freccia. Aghjunghjite a seguente linea:
0 * * * * sudo backup
Cron usa u minutu di u furmatu, Ora, ghjornu di mese, mese, ghjornu di sera, induve un numeru * o un numeru rapprisenta quandu per eseguisce u cumandamentu. Aduprendu un minutu per u minutu è * per u restu di l'opzioni, pudemu gestisce un cumandamentu in u primu minutu di ogni ora à l'iniziu di u minutu. Questu ci permette di rinfriscà u codice automaticamente. Tutti i travaglii di cron quandu anu eseguitu cun sudo gestite cum'è radice, dunque ùn averemu micca bisognu di scrive in una password ogni ora.
Per fà più faciule per rinfurzà u nostru codice senza aduprà una password, disattivamu a password per u nostru cumandamentu di salvezza. Feremu questu eseguitu u cumandamentu seguente è entra in una password:
sudo visudo
Avà, scorremu à u fondu di u fugliale è aghjunghje un'altra linea:
ALL ALL=NOPASSWD: /bin/backup
Ch'ella ci permette di gestisce u cumandamentu "di salvezza" cum'è qualsiasi utilizatore, senza una password. U furmatu per questu hè, solu preparatu a linea cù "Tutti tutti = Nopasswd: / Bin /" è finisce cù u cummanduariu, per esempiu / u racu / di u USR /.
Avà, cuminciamu à travaglià cù l'email. L'email hè veramente impurtante, perchè hè un modu per mantene un situ web seculu, verificimendu l'utilizatori sò e persone o servizii di mercatu à i clienti. Parechje persone chì frequenti l'AVUSTRIZIONE CHERECTE U so email ogni ghjornu, è riceve ogni locu à l'email marmureche nant'à u situ web di django, è site accoltu in quantu à fà fà megliu per voi.
Prima, pudete pagà per un serviziu Email chì vi permetterà di mandà email da u vostru duminiu è esige un codice minimu. Ci hè parechje servizii chì offre cusì, cume Google Workspace, Sendinbiu, mailgun è più.
Altrimenti, sì bè per custruisce u vostru propiu serviziu email in u vostru servitore da u screnu. Ju ricumandemu questa opzione, ancu s'ellu hè più codice è pò avè bisognu di hosting speciale. Ùn puderete micca inizià un servitore Mail da u vostru urdinatore più probabile, allora andemu avanti è esaminà a cunfigurazione prima di cumincià à un servitore in u nostru propiu mail.
Prima, Edit Settings.py cù u Cumandamentu seguenti:
nano app/settings.py
Induve l'app hè u nome di l'app chì avete creatu cù Startpp.
Aghjunghjite e seguenti linee:
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)
Assicuratevi di cambià queste quandu site pronta per implementà a vostra app, averemu rivisitu questu dopu. U paràmetru di email_address deve esse l'email chì vulete mandà da, è a password (email_host_password) deve esse stabilitu à a password chì generate u servitore. I carricà a password in da un fugliale di cunfigurazione per mantene fora di u codice utilizendu a seguente logica, sopra queste linee in paràmetri.py:
import os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
Dopu, aghju stabilitu un schedariu JSON cù a cunfigurazione in /etc/config.json aduprendu Nano cum'è seguente.
Per edità u fugliale:
sudo nano /etc/config.json
Aghjunghjite e seguenti linee:
{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
Continuaremu à edità u fugliale di cunfigurazione è aghjunghje tutte e password è i tasti useremu in l'app. Per avà, andemu rapidamente cumu mandà email utilizendu Python. Prima, facemu un mudellu per un email di verificazione pudemu invià i nostri utilizatori, è mette in l'utilizatore di mudelli di mudelli. Stu mudellu sarà scritta in HTML.
nano users/templates/users/verification_email.html
Stu email hè abbastanza simplice. Ci vole un cuntestu di un usu, l'url di base per u situ è un ID d'utilizatore è u token chì sò usati per verificà l'email di l'utilizatore. Assicuratevi di definisce l'URL di basa in Configurazione.py prima di scrive un codice Python per rende u mudellu. Vai avanti è aghjunghje e seguenti linee à l'app / paràmetri.py, vicinu à u principiu.
SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
A fine, quandu u vostru situ hè pronta per l'Internet è mentie, vulete difina u vostru duminiu cum'è u nome di duminiu chì cumprate per rapprisinà u situ. Questu hè u nome chì vi scrive in navbar in ordine per accede à u vostru situ. Per avà, pudete lascià u duminiu in biancu o aduprà un placeholder. Vulerete ancu cambià u situ_NAME à un nome chì vulete dà u vostru situ, di a vostra scelta.
Prima di mandà email, creemu un generatore di token per pudemu avè un token d'attivazione di u cuntu chì ùn scade mai. Pudemu questu per custruisce è importà un token d'attivazione di u cuntu chì pare i seguenti. Edite u fugliale:
nano users/tokens.py
Aghjunghjite u seguente codice:
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()
Stu generatore di token di basa genera un token pudemu mandà l'utilizatore in un URL è l'utilizatore pò aduprà per verificà u so email è attivà u so contu.
In seguitu, videmu cumu mandà un email. Aduprendu Nano, Edite l'utilizatori / email.Py.
nano users/email.py
Inviandu l'email HTML di verificazione si vede cusì:
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)
Questu hè abbastanza simplice. Importemu e funzioni avemu bisognu di mandà u mail, rende u mail cù mudelli, è allora difinemu l'nome mudellu è mandemu à l'utilizatore cù una funzione. Avete nota ùn ci averemu micca definitu a funzione per mandà u mail, send_hml_Email, ancora, dunque Scrivite questu sottu à l'utilizatori / email. mail.Peru
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()
Questu hè un pocu più cumplessu, è ùn simu pronti per andà in tuttu tuttu stu codice. Avvisu chì simu di definisce un Unsub_Link, u ligame l'utilizatore pò aduprà per annullà da i nostri email. Hè impurtante chì l'utenti duveranu esse capaci di optà fora di u nostru email in quellu chì ùn vulete vedà, in ogni mumentu. Avemu ancu aghjustà una alternativa di testu à u nostru messagiu, chì hè u messagiu HTML strisciatu di tag html. Infastamente, verificemu se u email mandatu, è se ùn hà micca, marca in u prufilu di l'utilizatore chì u so email ùn hè micca validu.
Passemu à i mudelli di l'utilizatori per chì pudemu fà questu tuttu u travagliu. Avemu bisognu di definisce una funzione per generà un ligame per annullà, è definisce un campu booleanu per marcà chì l'email di l'utilizatore ùn hè micca validu.
Prima, aghjunghje i seguenti impurtazioni à a cima di l'utilizatori / mudelli.py
nano users/models.py
# ...
In seguitu, aghjustemu funzioni à u mudellu d'utilizatore per fà u token è verificate u token, è ancu u campu per salvà se l'utente hà ricevutu u so mail. In l'utilizatori / mudelli di novu, aghjunghje u seguente codice à a fine di u mudellu (codice indentatu)
# ...
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Validu per 30 ghjorni
Questu hè abbastanza simplicatu, usamu un timestvsigner, chì hè una strumentu di culpimentu CARIFITAZIONE, per creà un token chì scaderà dopu à un certu tempu, è aduprà un altru funzione per verificà si hè validu. Avemu aduprà sti tokens duie volte, una volta per verificà l'email, è una volta per un ligame unsubscribe.
Avà chì avemu queste, l'ultimu di u travagliu chì avemu bisognu di fà hè in e vedute. Dentru l'utilizatori / viste.Py, aghjunghjenu vede opinioni per verificà l'indirizzu email, è per annullà.
nano users/views.py
Prima, aghjunghje i seguenti impurtazioni. Aghju ghjittatu in pochi extra cusì ùn averemu micca da impurtà più articuli dopu.
from .email import send_verification_email # Assicuratevi di impurtà a funzione di l'email di verificazione invià a funzione
Pudete digià avè alcuni di questi impurtazioni, ma ùn ferite micca di ripetiri. Vai à impurtà chì e mail mail envia funzione, sia bè cuntu_Atationation_token da l'utilizatori d'utilizatori, trà altri importi.
Avà, in fondu di u fugliale, aghjunghje u codice seguente:
# incrucià elli
# Altrimenti redirect à a pagina di login
# SendwelcomeEmail (Richiesta, User)
Questu hè assai codice. Andemu falà. A prima funzione, pulita è simplice, unsubscrive l'utilizatore da a lista di mailing. A seconda funzione attivendu u so email, è vi avviserete chì aghju aghjustatu una funzione commentata, Sendwelcomeemaile. Hè benvenutu per aduprà un mudellu di mail è definizione di funzione per mandà un email di benvenutu, ùn aghju micca ancora. L'ultima funzione chì aghju ghjittatu hè impurtante, perchè e-mail di attivazione scade. Dunque, ci tucerà à riesce à l'email di attivazione qualchì di tempu. Pudemu aduprà una forma di basa per questu, è chjamate a funzione per mandà u mail di verificazione. Prima di fà questu, assicurà si hè mandatu in primu locu, aghjustendu una funzione chjama à a tremarte di registru. Aghjunghjite questa linea prima di u redirezzione in a vista di u Registru, Def Registru, in utilizatori / viste.py.
nano users/views.py
# ... (dopu) Registru di Def (Richiesta):
# ... (prima) redirizzà (
Ùn hai micca bisognu di aghjunghje e linee è l'ultime linee in quellu còdice snippet, basta assicuratevi chì a vista di u registratore manda l'email di verificazione à l'utilizatore. Duverebbe vede cusì:
# ... impurtanza
send_verification_email(user) # Assicuratevi di aghjunghje sta linea!
Avà, ci tuccherà à aghjunghje una forma per rinvià l'email di attivazione. In Utenti / forme.Py, aghjunghje a seguente forma:
# ... (Importazioni)
Avemu ancu bisognu di un mudellu currispondente à questu ritruvà a forma di attivazione di e-mail. Aggiuncemu questu mudellu in. Edite u fugliale:
nano users/templates/users/resend_activation.html
Prossimu, aghjunghje u codice seguente à u fugliale.
Whew, hè assai! Avà, quandu scumpartemu u codice à u nostru servitore, seremu in mandà à e mail html è attivà i cunti d'utilizatori cun un clic in l'email. Puderiamu ancu mandà un email simplice di salvezza, allora videmu cumu fà cusì. Torna in Utenti / E-mail.Py, aghjunghje u seguente codice:
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)
Inoltre, averemu bisognu di un mudellu per rende tutte e altre informazioni. In u mo situ web, u mudellu seguite quì sottu, ma site benvenutu da u furmatu però "
Innota chì ùn avemu micca chjude i tag di u corpu o di a HTML, perchè aghjuntemu questi in quandu aghjunghjenu u ligame HTML usumscribe. Questi sò impurtanti, ma ùn vulemu micca definisce duie volte.
Allora, chì ci hè? Avemu vinutu una longa strada. Veramente, duvemu esse pronti per implementà u situ à un servitore. Pudemu aghjunghje u decoratore @login_required, pigliate e nostre vedure, seguitate l'utilizatore cumplementu, eppuru infurmazione, chì hè a basa di ciò chì hè pertinente. Aghjunghjemu uni pochi caratteristiche più utili, è dopu custruiscenu una basa per imprumentare u nostru codice, stabilimentu di un servitore di mail, è filtri per fà u nostru situ sicuru è adattatu.
Averemu ancu bisognu di una vista di resettiva di password, allora andemu à aghjunghje chì in veramente prestu. U Django hà custruitu in a vista di resettiva di a password hè rottu in alcune funzioni, ma fighjemu woir volà à scrive a nostra propria vista, u mudellu mudellu, forumi; mortine d'url. Eccu ciò chì a vista pare, in l'utilizatori / viste.py
# ... impurtanza
Questa forma hè custruita in Django, ma avemu bisognu di un mudellu per cunfirmà a resettata di password, utilizatori / mudelli / utilizatori / Password_reset_confirm.html
Avemu ancu un mudellu per mandà un email resettatu di password, cù una forma simplice, in l'utilizatori / mudelli / utilizatori / Password_reset.html
U mudellu per l'email stessu hè simplice, hè un schedariu hTML basu chì rende un ligame per resettà a password, in l'utilizatori / mudelli / utilizatori / Password_reset_Email.html. Django interpretà automaticamente stu fugliale.
Averemu ancu bisognu di dui mudelli più di più. U primu hè di cunfirmà chì l'email hè statu mandatu. I punti di vista per queste sò dighjà in Django, cusì avemu bisognu solu à indirizzallu in l'URL.Py. Stu mudellu hè situatu à l'utilizatori / mudelli / utilizatori / Password_reset_done.html
È infine, per cunfirmà chì u resettore di password hè cumpletu, l'utilizatori / mudelli / utilizatori / Password_reset_complete.html
Avà, avemu bisognu di mudelli d'Url per queste opinioni. In Utenti / URL.Py, aghjunghje i seguenti modelli URL:
# ... l'URL precedente quì
Quatru mudelli, eccu assai! Ma avà pudemu assicurà di esse capace di resettà a password di l'utilizatore chì avemu bisognu, tutti da u norvatore web.
Capiscu questu hè assai codice. Sembra un pocu sopra a vostra testa, hè bè. Amparate, a vostra capiscitura migliurà, è vi sarà assai più cumpetente cù u codice prestu. Sì ùn site micca perseguitatu, ricumentate à vultà à questu software più tardi dopu à u travagliu nantu à un auto-ritmu amparà à u cursu di codice in linea. Sò generalmente liberi per cumincià, è vi guidanu attraversà tuttu ciò chì avete bisognu di riesciutu quandu torneti à stu prugettu. Se sente chì sò pronti à cuntinuà, Neigh on. Warcenting the ker 1
L'ultima cosa chì avemu bisognu di fà prima di implementà à un servitore remoto hè u nostru situ un pocu più sicuru. Avete nutà chì a vista di login piglia solu un nome d'utilizatore è a password, è ùn ci hè micca autentificazione multi di fattore o un codice di tempu. Questa hè una correzione faciule, è cù u stessu codice, pudemu fà u nostru situ mandi i messagi di testu è ancu esse rispunsabili à i messagi di testu mandati à u servitore. Per principià, andaremu in i mudelli d'utilizatore è aghjunghje un signatore di timestamp chì rapprisentanu ogni login. Aghjunghjemu ancu un identificatore unicu, rotante à u mudellu d'utilizatore chì serà usatu per aghjunghje una sicurità extra in u nostru login. Editu i mudelli d'utilizatore, l'utilizatori / mudelli.py, aghjunghje u seguente codice:
# Assicuratevi di impurtà u signore UUID, Timestamp è Generatore URL (reverse)
# Aghjunghjite stu codice quì
# È aghjunghje sta funzione
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Validu per 3 minuti
Assicuratevi chì i vostri Utenti / Modelli.Py pare cusì, oltre i cumenti (Codice nantu à e linee cù #). Scuprite questu, hè simplice. Ciamamu qualchì impurtanza, un tapestampsigner chì hè un utilità cripografico chì ponu genere un codice sicuru è verificà Per assicurà hè validu una volta, è micca più vechju maiò Avemu ancu aduprà un identificatore unicu chì mi identifica u nostru utilizatore in a sfarzi di u token, è in l'URL induve u token hè mandatu à l'utilizatore. Utilizaremu sta criptografia basica per custruisce una vista di autentificazione di dui fattori. Prima chì facemu qualcosa, andemu a migrazzioni cusì i nostri mudelli d'utilizatori sò aghjurnati. In u cartulare cù u gestione.py, eseguite i seguenti cumandamenti per fà è compie e migrazioni.
source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
Hè impurtante perchè ogni tempu facemu cambiamenti di mudelli, avranu avveremu da creà tavule è aghjurnate a basa di dati cù difetti prima chì pudemu in veramente aduprà i mudelli.
In seguitu, impruvisemu a nostra vista di login per rindirizzà à una vista di autentificazione secundaria. In Utenti / Opinioni.Py, Elimina a funzione di login è redirizzà à l'URL avemu generatu solu in i mudelli di l'utilizatori.
# ... impurtanza
if user and user.profile.can_login < timezone.now(): # Innota chì avà avemu verificatu se l'utilizatore pò logu
# Elimina a funzione Auth_login chì era quì
return redirect(user.profile.create_auth_url()) # Nota chì vi rediceranu à un novu URL quì
else: # Se l'utente ùn utilizà micca autentificazione multi-fattore, basta à log in.
else: # Se u login ùn hè micca successu,
user = User.objects.filter(username=username).first() # Questa hè a parte induve l'aghjurnemu u prufilu d'utilizatori
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Cusì ùn ponu micca logu di novu per uni pochi seconde
Allora hè abbastanza simplice, avemu avà un modu per rindirizzà à e duie vista di autentificazione di u fattore quandu l'avemu creatu. Avemu ancu un fallback in casu chì l'utente ùn hà micca aghjustatu un numeru di telefunu. Aggiuneremu una vista basica per aghjunghje un numeru di telefunu prestu è logu cù un missaghju di testu prestu.
Prima, avemu bisognu di un modu facilitu per mandà un missaghju di testu da u nostru codice. Per fà questu, pudemu sceglie da parechje apis, ma a più faciule unu in u mo storicu hè twilio. Anu ancu offre un bon prezzu per i prughjetti più chjuchi, è ancu i sconti di ingrossa. Crea un contu nantu à Twilio.com, riempite certi dettagli nantu à u vostru prugettu, cumprà un numeru di telefunu, è copiate e vostre chjavi API à u vostru paràmetru. Dopu, aghjunghje stu codice sottu un novu fugliale, l'utilizatori / Sms.py.
nano users/sms.py
# Importa tutti i pacchetti necessarii
# Stu codice manda u testu cù twilio
# Una funzione di aiutu per uttene un numeru cù tanti cifri
# Mandate u testu per verificà l'utilizatore
# Mandate un utilizatore qualsiasi testu cù sta funzione
# Validate u codice cù sta funzione
# Validate u tempu
Assicuratevi di cambià e vostre paràmetri in modu adattatu, aghjunghjendu queste linee cù e vostre chjavi:
# Assicuratevi di cupià queste da u vostru twilio dashboard
AUTH_VALID_MINUTES = 3 # U numaru di minuti a pagina TFA hè attiva una volta istantia
Prima, averemu bisognu di forme per e nostre duie opinioni di autentificazione. Utenti di editu / forme.Py, aghjunghje u seguente codice.
# ... impurtanza
# Una forma per entra in u nostru numeru di telefunu
# Una forma per autentificazione
In seguitu, andemu à creà i veduti in l'utilizatori / viste.py
# ... impurtanza
Avemu ancu bisognu di mudelli per i dui punti di vista. Aghjunghjemu u Template MFA prima.
nano users/templates/users/mfa.html
Aghjunghjite stu codice html à u mudellu
Questu hè abbastanza Spiegativu. A forma invia sia un codice o un codice viotu, è vi avvisate in a vista chì mandemu u codice se ricevemu un codice viotu. Allora avemu solu dui buttoni sottumessi, è questu modu pudemu mandà u codice cù u buttone. In seguitu, aghjunghjemu una forma simplice per aghjunghje un numeru di telefunu.
nano users/templates/users/mfa_onboarding.html
Aghjunghjite i seguenti HTML:
Questa forma hè assai più limplatore, appena rende u furmulariu di u telefunu chì avemu creatu è permette di l'utente aghjunghje un numeru di telefunu.
Questu pare veramente bellu! Sempre chì tuttu hè stallatu bè, duvemu invià i missaghji, è u logu in l'utilizatore cù u so numeru di telefunu appena chì aghjunghjenu l'urlelli di url. L'ultima cosa chì avemu bisognu di stallà hè una vista di u prufilu per pudemu assicurà chì l'utilizatore pò esse cunnessu. Ancu, eventualmente vulemu scrive "Stop" per optà di futuri messagi di testu.
Aggiuncemu una vista di prufilu à l'utilizatori / viste.py. Questa vista aghjurnerà u bio d'utilizatore, l'email, nome d'utilizatore, è u numeru di telefunu, è ancu ci permettenu di attivà l'autentificazione multi. Prima, averemu bisognu di duie forme di più in l'utilizatori / forme.
# ... impurtanza
In prossimu, pudemu creà una vista per aduprà tramindui di queste forme. Edità l'utilizatori / viste.Py è aghjunghje in a vista.
# Aghjunghje questi impurtazioni
Averemu ancu bisognu di un mudellu per sta vista.
nano users/templates/users/profile.html
Puderete esse una forma abbastanza abbastanza simplicata, ma hà qualchì javaScript in questu chì publicate automaticamente u cuntenutu di a forma cume anu aghjurnatu. Questu hè utile d'avè, cusì sò capaci di fà edizioni senza avè da pressà sottumette ogni volta.
In seguitu, avemu bisognu di URL chì rapprisentanu tutte queste vedute in l'utilizatori patters. Edite l'utilizatori / URLS.Py è aghjunghje stu codice:
# ... codice previ, importi impurtanti
# ... i modelli d'URL chì avemu intrutu prima, aghjunghje e prossime trè linee
Avà hè un bellu tempu per pruvà u nostru prugettu. Ma prima, andemu à fà una altra copia di salvezza.
backup
È eseguite u servitore. Prima di implementà in un servitore Linux, hè una bona idea per attivà à dui autentificazione di fattore in u cuntu. Feremu questu à u nostru prufilu URL, / Utenti / Profil /, è verificate a casella per attivà l'autentificazione dopu avè inseritu u nostru numeru di telefunu, è dopu à sottumette u furmulariu.
python manage.py runserver localhost:8000
Visitate a pagina web andendu à u vostru navigatore Web, aduprendu Google Chrome in questu esempiu, è entre in l'URL HTTPS: // localhost: 8000 / Profuns /
Sarete capaci di cunnette se ne necessariu è attivate l'autentificazione di dui fattori.
Stu prugettu hà bisognu di un servitore per eseguisce cusì pò veramente mandà mail. Ma prima, avemu bisognu di manera di vede l'errore. Avete nutà chì si curreghja u servitore in modalità di debug, cù Settings.debug uguali à u veru, u servitore mostra l'errori automaticamente. Per mustrà l'errori senza aduprà modalità di debug, chì ùn hè micca sicura in un servitore di produzzione, duvemu aghjunghje una vista per ella. L'errore più impurtante avemu bisognu di pudè manighjà sò:
Errore 500 - Un prublema cù u nostru codice Errore 404 - Una pagina chì ùn hè micca stata truvata (URL rottu) Errore 403 - Un Permessu Negatu Errore
Aggiunce una nova app per trattà sti errori, chjamati errori.
python manage.py startapp errors
Aghjunghjite questu à i paràmetri.Peru chì avemu fattu prima, in l'installazione di l'appraghji, è cumincianu à aghjunghje riferenze à alcune vedute in app / urls.
handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
Tuttu hè tuttu ciò chì avemu bisognu d'oltre l'errore di e opinioni, mudelli è un pocu di mediu. Definemu quelli cum'è cusì:
# Crea i vostri punti di vista quì.
In seguitu, definemu u mediu per trattà questi errori. Faremu questu per primu aghjuntu à meziunarii_classes in paràmetri.py, cù u nome di u vostru mediu.
# ... Prussimu precedente
In seguitu, aghjunghjemu u midware.
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.')
Aggiunce una funzione per uttene l'eccezzioni attuale cù un lucale lucale, chì m'aviglia à noi in ogni errori in u nostru codice. In termini di mudelli, avemu bisognu solu una, perchè avemu dinamicamente indenimu u titulu in vista. U mudellu ghjustu deve rende u titulu è "traccia", u nostru errore trace u cuntestu.
nano errors/templates/errors/error.html
Questu hè u mudellu più simplice ancora, ma hè cusì faciule à vede l'erroveri di u prugettu. In seguitu, disattivemu debug in paràmetri.
nano app/settings.py
Truvate sta linea induve hè stabilitu à veru, è u cambiamentu di falza
DEBUG = False
Vai avanti è salvezza l'app avà. Semu pronti à implementà in un servitore Linux remoto, è mantene e caratteristiche di aghjunghje da quì.
sudo backup
Prima di pubblicà stu codice à un servitore, duvemu cunsiderà chì ci ponu esse alcuni prublemi cù u codice. Sicondu u casu, Siti chì accettanu l'infurmazioni pubblicati à elli anu prublemi cù u spam chì sia affissatu è di difficultà nantu à u spam. Questu ùn deve micca accademu subitu, ma si passa, tardirabbieghju senza spam in u situ è fate più poscanu per accede à u situ o un ricordu di impronta.
Fighjendu l'autentificazione di l'autentificazione multi faccammu, in pruduce, e cose ponu esse sfarenti. Avvisate cumu simu raccolte i login di limiti, è scadenu i tokens. Se i robot anu accede à un situ, dui autentificazione di fattore pò esse più difficiule cumu puderanu inserisce i codici à u stessu tempu l'utilizatore hè. Per cumbattà questu, usemu un mudellu in mudelli d'utilizatori, dichjaremu chì interagtemu cù u situ quandu simu autentificà aduprendu l'autentificazione mundiale. Aghjunghjemu ancu una opzione per autentificà cun email. Cumincià da edità i mudelli di l'utilizatori cun Nano.
nano users/models.py
Questu hè ciò chì u mudellu chì avemu aghjustatu duveria vede. Ùn avemu bisognu di alcuni Metudi, solu variabili per almacenà un ID, l'utilizatore, a timestamp, scadenza, a lunghezza è u codice cum'è 123456 in un telefunu).
# Un token basicu usatu per entra in u situ web
Facemu ancu un privilegiu à u nostru utilizatore, è li fissemetterà manuale, prima di eventualmente migrativi per l'utenti privatiali privati. In i mudelli d'utilizatore, aghjunghje sta linea in u prufilu:
vendor = models.BooleanField(default=False)
In quantu à qualsiasi cambiamenti di a basa di dati, avemu bisognu di fà migracci è migrate a Basta à qualsiasi volta l'ora chì editamu un file di mudelli. Django. Ricurdativi, di fà questu chì avemu aduprà source (se ùn hè micca statu usatu deghjà postu chì u terminale era apertu) è allora Python Gagham.Py per fà e migrate.
cd project-directory-you-named # (se necessariu)
Per avà, pudete interpratà qualsiasi cunti chì avete creatu cum'è venditori aduprendu a cunchiglia.
python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Avà, evoluzione di a nostra vista di autenticazione multi factricazione per aduprà stu token. Prima, avemu bisognu di mudificà a nostra utilità di helper mfa. Aduprendu 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
# Autentificà l'utente chì utilizeghja u so email o numeru di telefunu
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Filtrà u token da u valore passatu in l'URL (un 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)) # Sì sta sessione ùn hè micca creata, crea lu
user = User.objects.filter(id=token.user.id).first() # Uttene l'utilizatore da u token
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Sì sò digià autentificati, log in
if not user: raise PermissionDenied() # Nigà se ùn ci hè micca truvatu utilizatore
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Verificate u token auth
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Log in l'utilizatore se ùn sò micca digià cunnessu
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Stituite una scadenza nantu à a so autentificazione multi fattore
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Redirizzà l'utilizatore à a pagina dopu
if not user.profile.mfa_enabled: # Verificate se MFA hè attivatu
if not check_verification_time(user, token): # Verificate u tempu
user.profile.mfa_enabled = False # Chjaru u numeru di telefunu
user.profile.enable_two_factor_authentication = True # Attivà MFA
user.profile.phone_number = '+1' # Disattivà u numeru di telefunu
user.profile.save() # Salve u prufilu
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Log l'utente in se a so mfa ùn hè micca attivata
if request.method == 'POST' and not fraud_detect(request, True): # Se a dumanda hè una dumanda post
form = TfaForm(request.POST) # Istancu a forma
code = str(form.data.get('code', None)) # Uttene u codice
if code and code != '' and code != None: # Assicuratevi chì ùn hè micca viotu
token_validated = user.profile.check_auth_token(usertoken) # Verificate u token auth
is_verified = check_verification_code(user, token, code) # Verificate u codice
if token_validated: # Sì tuttu
if is_verified: # Hè in ordine
user.profile.mfa_enabled = True # Habilita MFA (se micca digià attivatu)
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Log in l'utilizatore
for key, value in request.GET.items(): # Custruisce una quistione per u prossimu paràmetru (se qualchissia)
return HttpResponseRedirect(next) # Redirectà
elif not token_validated: # Se u token ùn era micca validu
if p.mfa_attempts > 3: # S'ellu ci sò stati troppu tentativi
if form.data.get('send_email', False): # Mandate u mail (o testu)
# Rendite u furmulariu (per uttene richieste)
Quandu avemu aghjuntu in stu codice, assicuratevi di impurtà a funzione per mandà un email. À a cima di u fugliale, i veduti d'utilizatore (cù altre impurtazioni), aghjunghje
from .mfa import send_verification_email as send_mfa_verification_email
Avà, avemu bisognu di scrive quella funzione davanti à qualsiasi di questu travagliu. Duverebbe allargà a nostra funzione per email, è simpricimenti mandate un email à l'utilizatore cù u codice di verificazione.
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))
Cusì hè sempre travaglia, avà ci femu un sistema di autentificazione multi chì dipende di un numeru di telefunu o l'email per logà. Ma ci anu ancu bisognu di manera chì ùn anu micca cooperatore cù i nostri termini. Quessi puderianu esse spammers, robots o qualchissia chì ùn significa micca bè per u nostru travagliu. Fighjate à una vista chì aghju per l'utilizatori di monitorizazione in u mo situ web:
# impurtazioni
from .tests import is_superuser_or_vendor # Averemu bisognu di creà sta prova
# Get List di l'utilizatori
return render(request, 'users/users.html', { # Ritorna l'utilizatori in un mudellu
Innota chì stu codice usa una prova, averemu da dichjarà sta prova in un file test.py è importà. Utenti / Tests di editu.py, creemu a prova.
def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
Questu hè in cunghjunzione cù l'utilizatori / Utenti.html mudellu, chì pare qualcosa:
Innota chì u mudellu include un altru mudellu, utilizatori /User.html. Quandu utilizate un mudellu chì hà un subtemplate è micca d'utilizà si estende, hè una bona idea per aghjunghje un sottolineu () Prima di u nome di u fugliale per allargà, per distingue i mudelli.
Innota chì questu hè assai di jinja, ùn puderete micca avè tutte queste variabili definiti. Ma hè questu chì u mo codice mi pare.
<small># {{utente.ID}} </ picculu>
Avemu ancu bisognu di un altru sottumessu, Toggle_Attive.html. Stu mudellu deve esse una forma chì ci permette di toggle se un utilizatore hè attivu.
Ci averemu ancu bisognu di aghjunghje una vista per a toggle l'attività d'utilizatore, è i mudelli URL adattati. Mentre simu quì, andemu à aghjunghje una vista per sguassà un utilizatore in casu chì avemu bisognu di quessa.
# Impurtazioni
success_url = '/' # U redirect in url di successu
def test_func(self): # Prova se l'utilizatore hè superuser è hà permessu di sguassà
Mentre hè pratica quandu ùn hè necessariu un utilizatore ùn vole esse micca necessariu a parte di u tempu, pudemu solu perchiglia a visibbiazione chì visitemu u situ se ne tocca à caccià.
I mudelli URL chì avemu aghjustatu pare cusì. Cù nano, edità utilizatori / URLS.Py è aghjunghje queste linee:
nano users/urls.py
E linee si deve andà in a lista di i Pete in l'utilizatori View, prima di l'estressu "]" Ma dopu u principiu "[".
# ...
# ...
Avà, assicuratevi di di salà, cusì pudete scaricà lu in u servitore Web, continueremu à travaglià annantu. Da a linea di cummandu,
sudo backup
Avà u nostru situ hè sustinutu.
Dunque avà avemu uni pochi caratteristiche più utili. Ma chì di a grande stampa quì? Stu codice ùn hè ancu accessu, ùn avemu ancu un servitore mail, è avemu bisognu di a nostra app per include prucessu di verificazione cumplessu per aiutà noi i protocoli privilegiati di l'autentificazione.
Andaremu à tuttu questu. A cosa più impurtante per avà serà solu stu codice in linea, chì pudemu fà cù uni pochi di linee di bash nantu à un servitore ubuntu. Avete da affittu un servitore per questu, a menu chì avete un servitore in casa è una subscription Internet di l'impresa chì vi permette di apre porti. Personalmente u mo situ web nantu à un HP Z440 chì hè stallatu in u mo appartamentu, ma hè di solitu assai più prezzu per i bisogni basi per affittu un servitore privatu virtuale).
Tenite in mente chì u codice exceppine avà hè relatiemu eredina, serà daveratore è migliatumu pronta à aduprà ciò chì avemu da custruisce un pruduttu. Assicuratevi di esse attentu, ciò chì fate cù l'internet, assicuratevi chì questu situ publicamente in u server in un pianu Linux, avete un situ web ind'è un situ web. Hè prubabilmente d'un prublemamu m'imbrituri, ma cercate in una varietà di suluzioni per cumbattà questu, cumpresa l'amparera, informatica, l'intelligenza artificiale. Quandu diventà un prublema, fighjate più in questu testu per una soluzione.
In termini di affittu un VPS, ci sò parechje posti chì pudete andà. Google Cloud hà servitori VPS, Ionos, Kamatera, Amazon Achiam, è più pianificatori offrenu una soluzioni di servitore Cloud chì adrà i nostri bisogni.
Averete bisognu di cliccà per via di e so forme è selezziunate un pianu per cumincià. Pudete andà cun un pianu di basa cun qualsiasi fornitore, ma assicuratece chì u fornitore vi permette di apre u portu di i mail per mandà Email (questu duverebbe portà portu 587 è portu 25), alcune provendenti bloccate sti porti. Finu finu à l'eonupiu cù Ioni è Kamatera, mazzi avvincimiate da mandà un mail illimitatu è a so prezzi hè abbastanza belli.
Ti cunnette u vostru novu servitore nantu à un protocolu chjamatu SSH o assicura a cunchiglia, chì vi permette di interfaccia remotamente cù u servitore esattamente u vostru urdinatore persunale, da u vostru urdinatore persunale. Quandu avete stabilitu u servitore, u fornitore di hosting chì vi hà da dumandassi à aghjunghje una chjave SSH, o vi daranu un nome d'utilizatore è a vostra password. A chjave SSH hè cumu logu in u servitore da a linea di cummandu per edità u codice. Aduprate l'opzioni di Keygen SHO SSH-per generà una chjave SSH.
ssh-keygen
Salvate u fugliale è rimpiazzà si avete bisognu, hè bonu di rotà i vostri chjavi ssh se ùn avete micca digià. Avà, pudete aduprà u seguente cumandamentu per vede a vostra chjave SH. A vulete copià à u vostru servitore remota per chì pudete aduprà per autentificà.
cat ~/.ssh/id_rsa.pub
Se ùn site micca capace di vede una chjave SSH quandu scrive chì u cumandamentu (una stretta di cifre è di una chjave RSA (chì sò più sicuri, in modu chì u codice di 4096 bit
ssh-keygen -t rsa -b 4096
Crea un VPS Running Ubuntu, però, pensate à fà questu. Una volta avete creatu un VPS clicchendu per e forme nantu à u situ web (Kamatera.com, ionos.com o simili), aduprate u vostru indirizzu SSH cun u vostru indirizzu SH XX.XX.XX). Puderete ancu avè sensibile à u nome d'utilizatore predeterminatu nantu à u servitore chì avemu creatu, per esempiu, ubuntu.
ssh ubuntu@XX.XX.XX.XX
Pudete esse dumandatu una password, se vi sò dumandati una password, entre in u nome di utente predeterminatu, cusì cuminciamu à creà un novu utilizatore è aghjunghje una chjave SSH per u so contu.
Cuminciamu aghjustendu un novu schedariu SSHD_CONFIG, chì dice u servitore cumu aduprà SSH.
nano sshd_config
# Questu hè u schedariu di cunfigurazione di u sistema SSTHD Servitore. Vede
# sshd_Config (5) per più infurmazione.
# Stu SSTHD hè statu compilatu cù a strada = / USR / Local / Sbin / Loc / Bin: / USR / SBIN: / Bin: / USR / Games
# A strategia aduprata per l'opzioni in a predefinitu sshd_config speditu cù
# Openssh hè di specificà l'opzioni cù u so valore predeterminatu induve
# pussibule, ma lasciate cummentà. Opzioni senza cumunicazione sustene u
# Valore predefinitu.
# Portu 22
# Indirizzufamily Qualunque
# Stendu à sente 0.0.0.0
# Stà à sente ::
# Hostkey / etc / ssh / ssh_host_key
# Hostkey / etc / ssh / ssh_host_cdsa_key
# Hostkey / etc / ssh / ssh_host_ed255®
# Guidi è chjave
# Rekeylimit predefinisce nimu
# Loging
# SyslogFacility Auth
# LogLELL Info
# Autentificazione:
# Logingracetime 2M
# Permettore Permositu di Permettitore
# Strictmodi sì
# Maxauttries 6
# Maxsessioni 10
# Aspettate .Sh / Autorized_Kys2 per esse ignoratu per automaticamente in u futuru.
# Autorizzatipralcipalsfile Nisuna
# AutorizataKeysComand Nimu
# AutorizzataKeycommnuser nimu
# Per questu per travaglià avete ancu bisognu di e chjavi ospitanti in / etc / ssh / ssh_kost_hosts
# Ospicedauthessenti di no
# Cambia per sì, se ùn avete micca fiducia ~ / .ssh / cunnisciutu_hosts per
# HOSBEDEDIVENDICING
# Ignoreuserknhosts no
# Ùn leghje micca u ~ / .rhoste di l'utilizatore è ~ / .shosts file
# Ignoroni iè
# Per disattivà password di testu tunnellate, cambia micca quì!
# Permettitypasswords no
# Cambiamenti di iè per attivà e password di risposta di a risposta
# Alcune moduli è fili di Pam)
# Opzioni Kerberos
# Kerberosautdicazione nò
# KerberosorlococalpasssWD SI
# KerberosticketcleanUp iè
# KerberosGeufstoken no
# Opzioni GSSapi
# GSSAPIAUtHenticazione NO
# GSSAPLICUSCREENTIVORITI SI
# GSSPISTRICTU SI SI SI
# GSSAPIKEYEXMMANGE NO
# Set this to 'iè' per attivà a autentificazione di u cuntu, a trasfurmazioni di u cuntu,
# è a trasfurmazione di sessione. Sì questu hè attivatu, l'autentificazione di Pam serà
# esse permessi à traversu u kbdinterattività è
# PasswordAuthenthenticazione. Sicondu a vostra cunfigurazione di pam,
# L'autentificazione di Pam via KBDINTERAUTAID'Hostrazioni pò bypass
# u paràmetru di "Permitrootlogin senza password".
# Sè vo vulete solu u cuntu di Pam è i cuntrolli di a sessione per correre senza
# Autentificazione di pam, allora attivate questu ma stabilisce passwordware di password
# è KBDinteractiveAutdentication à 'No'.
# Allowagentforwarding YES
# AllowtCPPARWARDING YES
# Gatewaysports no
# X11displayoffset 10
# X11uselocalhost sì
# Permetty iè
# Printlastlog sì
# Tcpkeepalive sì
# Permette à u permessu
# Cumpressione ritardata
# Clienteliveinterval 0
# ClientiveCountMax 3
# Usato no
# PIDFILE /RU/SHD.PID
# Maxstarps 10: 30: 100
# PermessuNnel no
# Chrootdirectory nisuna
# Versioneddend Nunda
# Nisuna strada di Banner Default
# Permettite à u cliente per passà e variabili di l'ambiente locale
# rimpiazzà predefinitu di nisun subsistems
# Esempiu di Settings Overriding nantu à una basa per-utente
# Incontri l'usu di l'usu
# X11Parwarding no
# Allowtcpforwarding no
# Permetty no
# Servitore CVS di forza
Ricurdativi, CTRL + X è Y per salvà u fugliale. In seguitu, scrivite un script basicu chjamatu inizializà (tutti in u repertoriu di a casa predeterminata di u nostru utilizatore).
nano initialize
Aghjunghjite queste linee à u fugliale, rimpiazzà
# ! / bin / bash
Per caminari attraversu stu fugliale, cuminciamu a linea per linea. A prima linea dice à u compilatore chì questu hè un script bash. Allora stallemu dipendenti, copiandu sshd_config à u repertoriu, riavvia i chjavi di ssh, chì aghjunghje u nome di l'utilizatore chì ti piace u cumandamentu di u nome è disabilitatu per avà). Avemu ancu l'addiu di u sudo su Sudo, genere a so chjave SH, aghjunghje a nostra chjave per e chjavi d'auturizzate è l'anni ancu, è stampate a so chjave. Stu novu utilizatore serà cumu logu in u situ.
In un novu terminale, vai avanti è apre u servitore di novu.
ssh team@XX.XX.XX.XX
Ùn deve micca bisognu di una password sta volta, essendu cum'è avete una chjave SSH. Avemu ancu disattivatu Login cù password per mantene u situ più sicuru.
Avà, stu servitore cumencia cumpletamente viotu senza infurmazione annantu. Cuminciamu à clona u nostru prugettu da git per noi pudemu scaricà è corre nantu à a macchina remota. In u servitore remoto cunnessu annantu à SSH, prima stampa u vostru chjave ssh:
cat ~/.ssh/id_rsa.pub
In seguitu, paste sta chjave in i paràmetri di git cum'è noi avemu fattu prima di stallà u nostru repositariu di git. Pudemu avà clone u nostru prughjettu direttamente à u servitore. Assicuratevi chì avete sustinutu u prugettu in u locu in prima di u server in u servitore Git per scaricà.
git clone git://github.com/you/yourproject.git
Perfettu. Avà tutti i fugliali sò quì. Pudemu vede elli cù ls
ls
Avà, cuminciamu à stallà u servitore. Prima, Copia u vostru cartulare di u Prughjettu in un nome simplice, memorable useremu per u prugettu.
cp -r yourproject whatyoucalledit
Induve "Whyouecalledit" hè u novu nome di u vostru prugettu. In seguitu, vi tuccherà à custruisce una utilità di basa per creà u servitore. Salvaremu sta utilità è aduprallu in u futuru. Per custruisce sta utilità, andemu à creà un binariu d'utilizatore per definisce cumu editemu un script. Aduprendu Bash, Edit / Usr / Bin / Ascript
sudo nano /usr/bin/ascript
Assicuratevi di aduprà sudo quì per quessa chì avete permessi per edità u fugliale. In u fugliale, aghjunghje queste linee:
# ! / bin / bash
echo "# ! / bin / bash ">> / USR / BIN / $ 1
Ricurdativi di stu script piglia un argumentu, u nome di script, cum'è $ 1. Prima chistu cuntrolanu se u schesariu esisti, o altrimenti create, aghjusta a prima linea per dichjarà a so scriva, i so permanetti, è aghjunte u so nome chì ci facemu carcuri i nomi di i scoglii chì avemu crecendu. Se u fugliale esiste digià, simpricimenti cambiassi permessi è edità. Salvate u fugliale, è dopu, cambiammu chì sò permessi. Mentre avemu aduprà stu script, ùn averemu micca da fà più.
sudo chmod a+x /usr/bin/ascript
Perfettu. Avà creemu un scrittu chjamatu Setup. Prima, micca di rimpiazzà, ma pigliate un ochju à ciò chì u mo script di setup si pare. Camminaremu per chì stu script duverà vede in u vostru prugettu, ùn avete micca bisognu di tuttu in u mo script per cumincià.
# ! / bin / bash
# sudo chmod a + x Scripts / Utenti Utentip
# ./StrisTiup
# ssh-keygen
# Direttore di u prugettu
# Cumandamenti di log
# Cunfigura nano
# Configurazione git
# Aghjurnamentu è installazione
# Habilita Clamav Antivirus
# Set hostname
# Postreggiati postali
# Setituita di salvezza di basa di dati
# Disattivate iptables
# Installa Bitdefender
# Stoppice Postfix
# Crea Durs
# Configurallu virtualenv
# Uttene è custruisce dipendenze
# Sceglite e regule di firewall
# Installa pypi dipendenzi
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# Pip Install OpenCV-Python == 4,5.5.64
# Pip Installa OpenCV-Contrib-Python == 4,5.5.64
# Installa u Certer
# Certbot Run
# U servitore di mail Reload
# Copia Certi
# sudo cp /etc/letsencrypt/live/femmebabe.com/privkey.pem Privye.pem
# sudo cp /etc/letsencrypt/live/femmebabe.com/cert.pem cert.pem
# Patch venn
# Settite Settings d'Usuariu
# Stet Permissions
# U sudo Chown -R Team: Utenti / VAR / RUN /
# sudo chown root: root / run / sudo / ts -r
# sudo chmod 664 db.sqlite3
# sudo chown www-dati: Utenti DB.SQlite3
# Copia a cunfigurazione di cunfigurazione è stabilite
# Database di stabilisce
# Injectà a cunfigurazione di Pam è sguassate a cunfigurazione di ssh difettu
# sudo sed -i '' -e '$ D' / /etc/pam.d/sshd
# sudo sed -i '' -e '$ D' / etc / Profil
# Copia i Scripts di Bin è Stimes Permissions
# Ricaricà è attivà i servizii
# Habilita i moduli di Apache
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# Disattivà u situ predefinitu
# Habilita u nostru situ
# Reload Demon è Restart Apache, Postfix è Openkkim
# Stet Permissions
# Configurazione scambià
# Motore Init di Caption
# Stallà Git
# Mostra IPV6 è Opendkim per a cunfigurazione di duminiu
# Configurazione finita
Eccu assai setup! In cortu, stu codice di ghjurnali cumandamenti, cunfigura u fiancu apride di a basa di dati, cuntenu u Postbulu Aption) è calzare un antiviru, mostra un criaturu, indipindenti, stallate i certificati È stabilisce u servitore, cumpia a cunfigurazione, cumincianu è permette à scambià, assignate e scambii, è stampate l'ur d'indirizzu è imponc à l'ipna. Abbastanza semplice, ma pare un saccu di codice. Ùnaremu micca solu assai per questu perchè ùn avemu micca e predendenuti, ùn ci micca famemu l'api, celerybeat o Daphne, ma a stallare alcultimi alcuni di voi. Avvisate chì stu codice hà un duminiu hà dichjaratu parechje volte.
Avemu ancu bisognu di cumprà un nome di duminiu (chì hè una piccula tariffa annuale). Mi cunsigliu di piazza per acquistà un duminiu, u so layout hè intuitivu è faciule d'utilizà. Pudete cumprà qualsiasi duminiu di a vostra scelta, ma stanu aduprà u duminiu femmeabe.com in questu esempiu. Una volta avete acquistatu un duminiu, capu à u pannellu di cunfigurazione DNS è aghjunghje un registru chì indica u vostru duminiu à u servitore per l'indirizzu IP. Duverebbe vede cusì:
@ A xx.xx.xx.xx
Cù u @ operatore cum'è l'ospitu, chì significa tutti i subdomini sottu stu duminiu è u duminiu radicale, tuttu redirizzà à u servitore. Ci hè più ricordi per dichjarà, ma pudemu passà à queste una volta simu pronti à mandà mail. Mantene in mente, pò piglià parechji ghjorni prima di pudè mandà successu mail da u servitore. I registri DNS ci stabiliscenu u tempu per propagà.
In ogni modu, u solu registru avemu bisognu di inizià hè un record. Dunque avà pudemu furmà nantu à u scriculu sottu in u nostru prugettu è a curriri.
Cuminciamu cù un script di setup più chjucu per installà solu ciò chì avemu bisognu di un prugressu basicu. Ùn adupremu micca tante dipendenze o postgresql, andemu solu un servitore http basicu è preoccupa per certificà quand'ellu hè fattu. Ricurdativi, per uttene un certificatu HTPS è eseguite u servitore in modu sicuru, averemu da cumprà un duminiu cù un renta un servitore. Per avà, rimpiazzà "in stu fugliale cù u nome di u nome di u vostru utilizatore," dir "cù u repertoriu di u vostru prugettu, è furnisce u vostru email è duminiu.
Inoltre, prima di esecutre stu codice, avemu bisognu di cambià i paràmetri à u firewall u fornitore di l'ospite, se qualchissia. In solitu questu hè in a "tabulazione" rete "di u vostru fornitore d'ospiti, o sè vo site autosuppostu, a so sezione" Portu Spedimentu "di u vostru router. Vulete ancu stabilisce un ip staticu attraversu u vostru router cù l'indirizzu di a vostra macchina di u servitore, se site aduprendu l'auto hosting. Averete bisognu di apre i seguenti porti per l'accessu à leghje / scrive.
22 (ssh) 25 (Mail) 587 (Mail) 110 (Client Mail) 80 (http) 443 (HTTPS)
# ! / bin / bash
# Cumandamenti di log
# Cunfigura nano
# Configurazione git
# Aghjurnamentu è installazione
# Habilita Clamav Antivirus
# Set hostname
# Setituita di salvezza di basa di dati
# Disattivate iptables
# Configurallu virtualenv
# Installa u Certer
# Certbot Run
# Settite Settings d'Usuariu
# Stet Permissions
# U sudo Chown -R Team: Utenti / VAR / RUN /
# sudo chown root: root / run / sudo / ts -r
# Ricaricà è attivà i servizii
# Habilita i moduli di Apache
# Reload Demon è Restart Apache, Postfix è Openkkim
# Mostra IPV6 è Opendkim per a cunfigurazione di duminiu
Prima di gestisce stu codice, assicuratevi chì u duminiu avete acquistatu hè cunnessu à u servitore. Per fà questu, apre un terminal nantu à a vostra macchina lucale, è eseguite stu cumandamentu cù u vostru duminiu:
ping femmebabe.com # Inserite u vostru duminiu quì, dopu à u ping
Sì tutti pare bè è u servitore invià risposte, simu pronti à gestisce u script è installà i pacchetti è a vita è à certificà u nostru servitore Apache.
Questa ùn hè micca tutta a cunfigurazione necessaria per cunfigurà a Postfix, fighjemu quellu stallatu più tardi. Per Avà, eseguite stu codice di cunfigurazione è da piglià uni pochi di minuti per installazione è à certificà u vostru servitore. Una volta, assicuratevi di rimpiazzà u nome, u nome di l'email è u nome di duminiu in u script secondu u nome chì avete acquistatu.
Avà chì u servitore hè privitu, pudete andà à l'URL in ogni navigatore Web per assicurà chì u servitore hè in corrimo HTTPPS. Sì ùn hè micca, pruvate à aspittà un pocu di tempu per i registri DNS per catturà e poi gestisce u seguente cumandamentu per ritruvà a certificazione di u certu:
sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Sempre chì avete cunfiguratu tuttu bè, duvete esse capace di accede à a pagina predeterminata di Apache solu per cunnosce u vostru codice è affissà una pagina web live. In seguitu, andemu à edite i paràmetri.py per cambià u nostru modu di debug predeterminatu per a produzzione. Configuraremu ancu u duminiu in i paràmetri, è ancu ips internu.
nano yourproject/settings.py
In i paràmetri, cambia / aghjunghje queste linee.
# Config di u situ
Avà, averemu bisognu di cunfigurà Apache2. Inserite u fugliale di cunfigurazione chì implementeremu cù sta linea:
sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Stu file di cunfigurazione duveria avè u nostru nome di duminiu in ella, è u nome di l'utilizatore è u prugettu. Sò aduprendu u nome di duminiu femmebabe.com, squadra di utilizatore, è u prugettu Nome 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>
Assicuratevi di rimpiazzà u nome di u prugettu, i repertorii, è u duminiu in questu codice di esempiu quandu cunfigurà u vostru servitore. Avà, vi averemu bisognu di disattivà u situ prefettu. Questu pò esse fattu cù Bash.
sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Prossimu, pudemu permettamu u situ predeterminatu è ricaricà a apache2, usendu bash. Ricurdativi di rimpiazzà a femmebabe cù u nome di u schedariu chì avete dichjaratu quandu edizione in / etc / Apache2 / siti dispunibili /.
sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Torna à u vostru duminiu in Navbar. Duvete vede u situ chì avete cunfiguratu in u vostru navigatore web. Felicitazioni! Se ùn l'avete micca vistu, pudete avè bisognu di fà alcuni cambiamenti. Reviste currettamente i paràmetri in u vostru prughjettu, cunfigurazione di apache, è assicuratevi di ùn avete micca erroni, è di curreghji e seguenti cumandamenti per verificà u prugettu per l'erroni.
cd projectname
source venv/bin/activate
python manage.py check
Sì avete errore in u vostru prugettu Python, tracciate elli induve sò è falla. Puderia micca esse capace di vede tutti i vostri errori sicondu l'eurocrs induve induve se avete un errore cumu solu dice "Populità ùn si hè reentraniu", edite u seguenti fugliale in u ambiente virtuale, di cuntrullà, per spiegà l'errore.
nano venv/lib/python3.12/site-packages/django/apps/registry.py
Scrollate à a Linea 83, Induve Hè Risoltu L'errore RunTime (Curnate YourTimeError ("Solitate () Ùn hè micca rientrante"))), è aghjunghje, cù a listessa indentazione, autop.app_Configs = self.app_Configs = self.app_configs = autoapp_configs = autoapp_configs = autoapp_configs = Sembra cusì:
# Impedisce chì i chjamati reentranti per evità di correre AppConfig.ready ()
# Metudi duie volte.
# Raise RidimeError ("populate () ùn hè micca rientrante")
Pudete dunque verificà di novu u prugettu è espone l'errore.
python manage.py check
Allora pudete vede l'errore è a corregge. Quandu l'avete fissatu è u codice compianu senza errori, assicuratevi di cambià u fugliale di ritornu cusì pari cusì:
# Impedisce chì i chjamati reentranti per evità di correre AppConfig.ready ()
# Metudi duie volte.
# Self.app_configs = {}
Hè furnitu u servitore hè in linea, quandu femu più altre cambiamenti in ella, avemu bisognu di aduprà u seguente cumandamentu per ricaricà u servitore:
sudo systemctl reload apache2
Geniale! Ma chì di mandà mail? Per cumincià à mandà email, ci hà da esse bisognu di aghjurnà a cunfigurazione di duminiu. Questu deve esse in u vostru pannellu DNS in piazza, o qualunque nome di duminiu registratore chì avete sceltu. Seremu ancu avvistà à stallà è aghjunghje cunfigurazione, è di eseguite uni pochi di cumands.
Prima, andemu u indirizzu iPV6 di u servitore. Averemu dopu apre u vostru DNS è aghjunghje i ricordi.
Per ottene l'indirizzu IPV6 di u servitore, utilizate stu cumandamentu:
ip -6 addr
Avà, pudemu aghjunghje i seguenti registri à i paràmetri DNS. I mo ricordi pare cusì. Tuttavia, per i vostri ricordi, duvete rimpiazzà l'indirizzu IP cù u vostru IP (micca 75.147.182.214, hè a moia). Aghjunghjite ancu u vostru duminiu in locu di Femmmebabe.com, è ancu u vostru indirizzu IPV6 truvatu cù u cummandu Precedente (ùn pudete micca aduprà a mina, feily :: 723 :: Fff: Fff: Fо. Ùn ti ne dispiace per u duminiu di avà, questu hè creatu quandu fecilamu Postfix, u servitore per a mail, cù opendkim, è stampa a chjave. Configuremu questu ultimu.
@ 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 :: 725: FFF: FE49: 3e02 ~ tutti
predeterminatu._bimi Txt N / a v = bimi1; l = https: //femmebabe.com/media/staticu/femmebabe.svg
_dmarc Txt N / a v = DMEC1; p = nè
sendonly._domainkey
Txt
N / a
Avà, avemu da aghjunghje alcune cunfigurazione persistente per Postfix. Tuttu ciò chì avemu da fà hè assicuratu chì rimpiazzemu u nome di duminiu, femmebabe.com, cù u nome di duminiu chì site aduprate. Parlemu schilici cun cunfigà unu à unu, è a stallate in un rigalu chjamatu cunfig in u nostru prugettu, per stallà à l'OS.
nano config/etc_postfix_main.cf
Aghjunghjite stu testu à u fugliale
# Vede /usr/Sare/postfix/main.cf.dist per un cummentatu, versione più completa
# Specificu di debian: specificà un nome di fugliale pruvucarà u primu
# linea di quellu fugliale per esse usatu cum'è u nome. U debicu debicu
# hè / etc / mailName.
# Myorigin = / etc / mailName
# L'appenditore .Domiin hè u travagliu di u mua.
# Uncommentà a prossima linea per generà "avvisi" ritardate "
# ritardu_warning_time = 4h
# Vede http://www.postfix.org/compativity_readme.html - default à 3.6 on
# installa fresca.
# Paràmetri tls
# Configurazione di Milter
Prossima cunfigurazione!
nano config/etc_postfix_master.cf
Aghjunghjite queste linee:
#
# Postfix maestru di cunfigurazione di cunfigurazione di process. Per i dettagli nantu à u furmatu
# di u fugliale, vede u maestru (5) Pagina manuale (cummanda: "Man 5 Maestru" o
# In linea: http://www.postfix.f/master.5.html).
#
# Ùn vi scurdate di eseguisce "postfix ricaricà" dopu avè editatu stu fugliale.
#
# ==========================================================================
# Type di serviziu Private Privete Riceppu Sbattitu Wakep MaxProc + Args
# (iè) (iè) (no) (mai) (100)
# ==========================================================================
# SMTP INET N - Y - 1 POSTSCREEN
# SMTPD Pass - - Y - - SMTPD
# DNSBLOG Unix - - Y - 0 DNSBLog
# Tlsproxy Unix - - Y - 0 tlsproxy
# Sceglite unu: Habilita sottumissione per i clienti di Loopback solu, o per qualsiasi cliente.
# 127,0.0.1: L'Inet N - Y - - SMTPD
# -O SYSLOG_NAME = Postfix / sottumissione
# -o smtpd_tls_securità_level = criptata
# -o smtpd_sasl_auth_enable = iè
# -o smtpd_tls_auth_only = iè
# -o smtpd_reject_unlisted_recipient = nò
# -o smtpd_crestries_restrizioni = $ mua_client_restries
# -o smtpd_shelo_restriers = $ mua_helo_restries
# -o smtpd_sestricions = $ mua_senders
# -o smtpd_recipients_restrizioni =
# -o smtpd_relley_restrizioni = permessu_sasl_autenticticaticatu, rifiutà
# -o milter_macro_daemon_name = uriginale
# Sceglite unu: Habilita SMTPS per i clienti di Loopback solu, o per qualsiasi cliente.
# 127.0.0.1/Ssups Inet n - Y - - SMTPD
# SMTPS INET N - Y - - SMTPD
# -o syslog_name = postfix / smtps
# -o smtpd_tls_wrapperermode = iè
# -o smtpd_sasl_auth_enable = iè
# -o smtpd_reject_unlisted_recipient = nò
# -o smtpd_crestries_restrizioni = $ mua_client_restries
# -o smtpd_shelo_restriers = $ mua_helo_restries
# -o smtpd_sestricions = $ mua_senders
# -o smtpd_recipients_restrizioni =
# -o smtpd_relley_restrizioni = permessu_sasl_autenticticaticatu, rifiutà
# -o milter_macro_daemon_name = uriginale
# 628 Inet n - Y - - QMQPD
# Qmgr Unix n - n 300 1 oqmgr
# -o smtp_shelo_timeout = 5 -o smtp_connect_Timeout = 5
#
# ====================================================================
# Interfacce à u software non-postfix. Assicuratevi di esaminà u manuale
# Pagine di u Software Non postfix per sapè quale opzioni vole.
#
# Parechji di i seguenti servizii utilizanu a pipa postfix (8)
# agentu. Vede u pipe (8) pagina di l'omu per l'infurmazioni nantu à $ {destinatariu}
# è altre opzioni di envelope di messagiu.
# ====================================================================
#
# Mailtrop. Vede u File Postfix Juilrop_readme per i dettagli.
# Specifique ancu in Main.cf: Mailrop_destation_recipient_limit = 1
#
#
# ====================================================================
#
# E versioni di Cyrus recenti ponu aduprà l'ingressu "LMPP" di u "LMPP" di LMT.
#
# Specifique in Cyrus.conf:
# LMTP CMD = "LMTPD -A" Situate = "localhost: LMTP" Proto = TcP4
#
# Specifique in Main.cf unu o più di e seguenti:
# Mailbox_transport = LMPP: Inet: localhost
# virtual_transport = LMPP: Inet: localhost
#
# ====================================================================
#
# Cyrus 2.1,5 (Amos Gouaux)
# Specificate ancu in Main.cf: Cyrus_destinazione_recipient_limit = 1
#
# Cyrus Unix - N N - - pipa
# bandiere = US User = Cyrus argv = / cyrus / bin /e -R $ {Sender} -m $ {estensione} $ {utilizatore}
#
# ====================================================================
# Elementu di a consegna Via Cyrus.
#
# vechju unix - n n - - pipe
# bandian = r User = Cyrus argv = / cyrus / bin / libbra -e -m $ {estensione} $ {utilizatore}
#
# ====================================================================
#
# Vede u file postfix UUCPME per i dettagli di cunfigurazione.
#
#
# Altri metudi di consegna esterni.
#
È a cunfigurazione oppostu. L'opendkim identifica i servitori di email cù e chjavi di duminiu per fà li più sicuri. Senza ellu, u mail ùn hè micca firmatu è ùn pò micca fà un inbox.
nano config/etc_default_opendkim
Aghjunghjite queste linee:
# Nota: Questu hè un fugliale di cunfigurazione legatu. Ùn hè micca usatu da l'opendkim
# Serviziu System. Per piacè aduprate i paràmetri di cunfigurazione currispondente in
# /etc/opendkim.conf invece.
#
# Previamente, unu averebbe edità i paràmetri predeterminati quì, e poi eseguite
# /Lib/opendkim/opendkim.service.generate per generà i schedari rimpiazzati à
# /etc/systems/system/opendkim.service.d/override.conf è
# /etc/Tmpfiles.d/opendkim.conf. Mentre chì questu hè ancu pussibule, hè avà
# cunsigliatu per aghjustà i paràmetri direttamente in /etc/opendkim.conf.
#
# Daemon_opts = ""
# Cambia a / var / spool / Postfix / Run / Opendakim per aduprà un Socket Unix cù
# Postfix in un chroot:
# Rundir = / var / spool / postfix / run / opendkim
#
# Uncommentu per specificà un socket alternativu
# Innota chì si stabilisce questu rimpiazzà ogni valore di socket in opendkim.conf
# Default:
# Stà à traversu tutte l'interfacce nantu à u portu 54321:
# Socket = Inet: 54321
# Listen on Loopback in Port 12345:
# Socket = Inet: 12345 @ localhost
# Listen on 1900.2.1 u Port 12345:
# Socket = Inet: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf
Aghjunghjite queste linee:
# default_process_limit = 100
# predeterminatu_client_limit = 1000
# RISPETTE VSZ (Dimensione di Memoria Virtuale) per i prucessi di serviziu. Questu hè principalmente
# destinatu à catturà è tumbà prucessi chì a memoria di fuga prima di manghjà
# tuttu.
# predefinitu_vsz_limit = 256 m
# L'utente di login hè internamente adupratu da i prucessi di login. Questu hè u più affucatu
# Usuariu in Sistema Dovercot. Ùn deve micca avè accessu à nunda.
# predeterminatu_login_user = dovena
# L'utente internu hè adupratu da prucessi imprevisti. Si deve esse separatu da
# L'utilizatore di login, per quessa chì i prucessi di login ùn ponu micca disturbà altre prucessi.
# predeterminatu_interna_user = Dovecot
# Portu = 143
# Portu = 993
# SSL = iè
# Numeru di cunnessione per manighjà prima di inizià un novu prucessu. Tipicamenti
# I solu valori utili sò 0 (illimitatu) o 1. 1 hè più sicuru, ma 0
# hè più veloce. <Doc / wiki / loginprocess.txt>
# Service_Count = 1
# Numeru di prucessi per mantene sempre à aspittà di più cunnessione.
# Process_min_avail = 0
# Se stabilite Service_Count = 0, probabilmente avete bisognu di cultivà questu.
# vsz_limit = $ predeterminatu_vsz_limit
# Portu = 110
# Portu = 995
# SSL = iè
# Portu = 587
# Crea un ascinteru solu solu se ùn pudete micca aduprà u socket sopra unx
# inet_listener LMTP {
# Evitate di fà visibile LMTP per tutta l'internet
# Indirizzu =
# portu =
# }
# A maiò parte di a memoria và à MMAP () i fugliali ing. Puderete bisognu di aumentà questu
# Limitu si avete enormi mailboxes.
# vsz_limit = $ predeterminatu_vsz_limit
# Max. numeru di prucessi imap (cunnessione)
# Process_limit = 1024
# Max. Numaru di prucessi pop3 (cunnessione)
# Process_limit = 1024
# Max. Numaru di prucessi di sottomissione SMTP (cunnessione)
# Process_limit = 1024
# Auth_Socket_path apunta à stu Socket di UsudB per difettu. Hè tipicamenti
# usatu da Dovecot-lda, Doveadm, possibbilmente imposta u prucessu, etc. utilizatori chì anu
# Permessi tutale à questu socket sò capaci di ottene una lista di tutti i nomi d'utilizatori è
# Get i risultati di l'userdb di tutti.
#
# U modalità predeterminatu 0666 permette à nimu di cunnette à u socket, ma u
# L'Utensbb Sembra Successu solu Se l'Usudb torna un campu "UID" chì
# coincide cù l'uid di u prucessu di Caller. Ancu se l'uid di u chjamante o u gid currispondenu à u
# U Uid di socket o gid u sguardu riesce. Qualchissia cosa face un fallimentu.
#
# Per dà a permessa completa di u Caller per guardà tutti l'utilizatori, stabilisce u modu à
# una altra cosa più di u 0666 è u poveru permette u kernel rinfurzà u
# Permessi (E.G. 0777 permette à tutti i permessi cumpleti).
# U prucessu di u travagliadore auth hè gestitu cum'è root per difettu, per chì pò accede
# / ecc / ombra. Sì questu ùn hè micca necessariu, l'utente deve esse cambiatu in
# $ DEPAINT_INTERNATER_USER.
# utilizatore = root
# Se u Ditt Proxy hè adupratu, i prucessi di mail duveria avè accessu à u so socket.
# Per esempiu: Mode = 0660, gruppu = vaccuil è glubale mail_access_groups = Vmail
# modalità = 0600
# utilizatore =
# gruppu =
Una volta, assicurà di rimpiazzà u duminiu in tutti di sti fugliale, femmanbabe.com, cù u duminiu chì avete sceltu. Edite u prossimu fugliale, config di Dovecot,
nano config/etc_dovecot_dovecot
È aghjunghje queste linee
## File di cunfigurazione Dovecot
# Sè vo site in furia, vede http://wiki2.dovecot.org/Qickonfigurazione
# U cumandamentu "Duveconf -n" dà un risultatu pulitu di i paràmetri cambiati. Aduprallu
# Invece di copià e pasti di fugliale quandu a publicazione à a lista di mailing dovect.
# '# 'caratteru è tuttu, dopu hè trattatu cum'è cumenti. Spazi extra
# è e tabulazione sò ignorate. Se vulete usà una di queste esplicitamente, mette u
# value inside quotes, eg.: key = "# Char Chargh and Trailing Whitespace "
# A maiò parte (ma micca tutti) i paràmetri ponu esse rimpiazzati da sfarenti protokolli è / o
# Ips di fonte / destinazione implicendu i paràmetri à e sezioni dentru, per esempiu:
# u protocolu Imap {}, Locale 127,0.0.1 {}, remoto 10.0.00/0/8}
# I valori predeterminati sò mustrati per ogni paràmetru, ùn hè micca necessariu per inghjustu
# quelli. Sò eccezzioni per questu però: Nisuna sezione (p.eg. Nespace {})
# o i paràmetri di plugin sò aghjuntu per default, sò listati solu cum'è esempi.
# I chjassi sò ancu solu esempi cù i veri difetti sò basati in cunfigurazione
# opzioni. I chjassi elencati quì sò per cunfigurà --Prefix = / USR
# --Sysconfdir = / etc --localisstatut = / var
# Habilita i protokolli installati
# Una lista separata di virgola o di l'ospiti induve stà à sente per cunnessione.
# "*" ascolta tutti i interfaces ipv4 ": 5," ascolta tutti ipv6 interfaces.
# Se vulete specificà i porti non predeterminati o qualcosa di più cumplessu,
# Edit Conf.d / maestru.conf.
# ascultà = *, ::
# Repertoriu di basa induve guardà i dati di runtime.
# Base_dir = / var / run / dovecot /
# Nome di sta istanza. In a setup di cunfigurazione multi-istanza è altri cumandamenti
# pò aduprà -i <Insno_Name> per selezziunà quale l'istanza hè aduprata (una alternativa
# to -c <config_path>). U nome di l'istanza hè ancu aghjuntu à i prucessi di dovercot
# in u risultatu ps.
# Instanza_name = Dovecot
# Missaghju di auguri per i clienti.
# Login_Greeting = PRESUCU PRESTA.
# Lista di spaziu separati di u spaziu di rete fiduciale. Cunnessione da questi
# Ips sò permessi di rimpiazzà i so indirizzi iP è porti (per u login è
# per cuntrolli di autentificazione). Disattivate_plaintext_auth hè ancu ignoratu
# Sti rete. Tipicamenti spicificassi i vostri servitori di i so SIMP PROXY quì.
# login_trusted_networks =
# Lista di u Spaziu Spaziu di Accessu di Accessu di login (P.G. TCPWrap)
# login_access_sockets =
# Cù proxy_MAYBE = iè se a destinazione proxy coincide cù queste IPS, ùn fate micca
# proxying. Questa ùn hè micca necessariu normalmente, ma pò esse utile se a destinazione
# IP hè p.e. Un IP di u Balancer di Caricazione.
# auth_proxy_self =
# Mostra più tituli di prucessu Verbose (in PS). Attualmente mostra u nome d'utilizatore è
# Indirizzu ip. Utili per vede quale sò veramente usendu i prucessi di imap
# (p.e.. Mindbox o se u listessu UID hè adupratu per parechji cunti).
# Verbose_Prettle = nò
# Duverebbe tutti i prucessi chì siate uccisu quandu u prucessu di maestru di Dovecot si spegne.
# Setting this to "no" significa chì u dovecot pò esse aghjurnatu senza
# furzà a cunnessione di clienti esistenti per chjude (ancu chì puderia ancu esse
# Un prublema se l'aghjurnamentu hè p.e. per via di una correzione di sicurità).
# Shutdown_clients = iè
# Se non-zero, eseguite i cumandamenti di mail via parechje cunnessione à u servitore Doveadm,
# Invece di correre direttamente in u stessu prucessu.
# Doveadm_worker_count = 0
# Socket Unix o Host: Portu usatu per a cunnessione à u servitore Doveadm
# Doveadm_socket_path = Doveadm-server
# U spaziu di spaziu separatu di e variabili di l'ambiente chì sò priservati in Dovecot
# Startup è passava à tutti i so prucessi di u zitellu. Pudete ancu dà
# Chjave = paie di valore per stabilisce sempre i paràmetri specifici.
# Importa_environment = tz
##
## Configurazioni di Dictionary di dizionario libru di dizionario
##
# Dizionario pò esse usatu per almacenà a chjave = liste di valore. Questu hè adupratu da parechji
# Plugins. U dizziunariu pò esse accessu sia direttamente o ancu un
# u servitore. I seguenti dit di blocchi di u maps di i nomi di URIS
# quandu u servitore hè adupratu. Questi ponu esse riferiti utilizendu URIS in furmatu
# "Proxy :: <Nome>".
# Quota = MySQL: /etc/dovecot/dovecot-dics.sql.Conf.Ext
# A maiò parte di a cunfigurazione attuale hè inclusa quì sottu. I filenarii sò
# prima sorte da u so valore ASCII è parsed in quellu ordine. I 00-prefissi
# In i fugliali sò destinati à fà più faciule per capisce l'ordine.
# Un schedariu di cunfigurazione pò ancu pruvatu à esse inclusu senza dà un errore se
# Ùn hè micca truvatu:
# Permette di u Dovecot per sente tutti i cunnessioni di input (IPV4 / IPV6)
Aghjunghjite una password per l'utente Dovercot:
nano config/etc_dovecot_passwd
A prima parte di u fugliale, prima di u colon, hè u nome d'utilizatore. L'ultima parte ", u vostru tariffu", denota a password chì vulete vulete dà u vostru servitore di mail.
team:{plain}yourpassword
In seguitu, u config oppostu
nano config/etc_opendkim.conf
È aghjunghje queste linee:
# Questa hè una cunfigurazione basica per firmà è verificà. Pò esse facilmente
# adattatu per adattà à una stallazione di basa. Vede OPENDKIM.CONF (5) è
# /usr/Sare/stoc/opendkim/Examples/opendkim.conf.sample per cumpletu
# Documentazione di parametri di cunfigurazione dispunibuli.
# Logwhy no
# Paràmetri cumuni è paràmetri di verificazione. In debian, u "da" Header hè
# annullatu, perchè hè spessu a chjave d'identità utilizata da i sistemi di reputazione
# è cusì sensible à pocu sicurezza.
# Signing Dominiu, Selettore, è Chjave (Obligatoriu). Per esempiu, realizà a firma
# Per u duminiu "Esemple" cù selettore "2020" (2020._DOMAINKEYE.SEXLEKS.com),
# Aduprendu a chjave privata guardata in /etc/dkimkeys/Expers.Private. Più granuloso
# L'opzioni di cunfigurazione ponu esse truvate in /usr/share/opoc/opottkim/readme.opendkim.
# Esempiu di duminiu.com
# Selector 2020
# Keyfile /etc/dkimkeys/Expers.private
# In debian, opendkim corre cum'è Usuariu "Openkkim". Un Umask di 007 hè necessariu quandu
# Aduprendu un socket locale cù mtas chì accede à u socket cum'è micca privilegiatu
# utilizatore (per esempiu, postfix). Puderete avè bisognu di aghjunghje l'Usuariu "Postfix" à u gruppu
# "Opendkim" in questu casu.
# Socket per a cunnessione MTA (Obligatori). Sì a mta hè in una prigiò Chroot,
# deve esse assicuratu chì u socket hè accessibile. In debian, postfix corre in
# Un chroot in / var / spool / postfix, dunque un socket unx avissi da esse
# cunfiguratu cum'è indicatu nantu à l'ultima linea quì sottu.
# Socket local: /Run/opendkim/opendkim.sock
# Inet di socket: 8891 @ localhost
# Inet di socket: 8891
# L'ospiti per chì di firmà piuttostu cà verificà, default hè 127.0.0.1. Vede u
# Sezione di operazione di Opendakim (8) per più infurmazione.
# Internalhosts 192.168.0.0/16, 10.0.0.0/8, 172.16.0/12
# U timore di fiducia permette di DNSSEC. In debian, u schedariu di l'ancora di fiducia hè furnitu
# da u pacchettu dns-root-dati.
# Nameservers 127,0.0.1
# Domini di Map in da indirizzi à i chjavi utilizati per firmà i missaghji
# Un inseme di ospiti interni chì u mail deve esse firmatu
nano config/etc_default_opendkim
È aghjunghje queste linee
# Nota: Questu hè un fugliale di cunfigurazione legatu. Ùn hè micca usatu da l'opendkim
# Serviziu System. Per piacè aduprate i paràmetri di cunfigurazione currispondente in
# /etc/opendkim.conf invece.
#
# Previamente, unu averebbe edità i paràmetri predeterminati quì, e poi eseguite
# /Lib/opendkim/opendkim.service.generate per generà i schedari rimpiazzati à
# /etc/systems/system/opendkim.service.d/override.conf è
# /etc/Tmpfiles.d/opendkim.conf. Mentre chì questu hè ancu pussibule, hè avà
# cunsigliatu per aghjustà i paràmetri direttamente in /etc/opendkim.conf.
#
# Daemon_opts = ""
# Cambia a / var / spool / Postfix / Run / Opendakim per aduprà un Socket Unix cù
# Postfix in un chroot:
# Rundir = / var / spool / postfix / run / opendkim
#
# Uncommentu per specificà un socket alternativu
# Innota chì si stabilisce questu rimpiazzà ogni valore di socket in opendkim.conf
# Default:
# Stà à traversu tutte l'interfacce nantu à u portu 54321:
# Socket = Inet: 54321
# Listen on Loopback in Port 12345:
# Socket = Inet: 12345 @ localhost
# Listen on 1900.2.1 u Port 12345:
# Socket = Inet: 12345@192.0.2.1
Quandu simu pronti per stallà u nostru servitore postfix, curremu u codice sottu, cù u nome di duminiu adattatu incrustatu. Cumincianu à creà un script
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Avà, à Nano, u editore di testu, edita stu fugliale, per chì include u vostru nome duminiu invece di femmebabe.com.
# ! / bin / bash
# Stoppice Postfix
Avà, eseguite u script cumpletu per cunfigurà postfix, opendkim è dovecot.
./scripts/postfixsetup
Una volta stu scrittu hà curriri, copiate l'ultima linea, stampate e incolla l'a vostra cunfigurazione DNS cume u valore per Sendonly._maxkey. Questa hè a chjave Opendakim usata per identificà u vostru duminiu quandu mandate un mail sicuru.
Geniale! Dentru uni pochi di ghjorni, duvete pudè mandà mail da u servitore furnitu tuttu hè cunfiguratu bè.
Sì avete solu cunfiguratu u DNS per u vostru servitore Mail, duverebbe piglià menu di 72 ore per l'aghjurnamentu di l'aghjurnamentu. Di solitu assai più prestu. Pudete cuntrollà se u vostru servitore travaglia cù questu cumandamentu, furnitu u vostru email:
echo "test" | mail -s "Test Email" youremail@gmail.com
Se tuttu pare chì travaglia bè, duvete esse capace di mandà email cù u vostru servitore. S'ellu ùn hè micca travagliatu, pruvate à fighjà i ghjurnali per vede ciò chì l'errore puderia esse.
tail –lines 150 /var/log/mail.log
Questu offre infurmazioni verbose nantu à u mail chì hè mandatu da u servitore è sì chì travaglia bè. Duvete esse capace di vede l'email in a vostra inbe ancu, s'ellu ùn ne hè micca, verificate u vostru cartulare spam.
Avete ancu bisognu di cunfigurà i vostri paràmetri in i vostri paràmetri.py so u vostru servitore di email pò parlà à u vostru app Django, u prugettu. Aghjunghje o rimpiazzà queste linee in i vostri paràmetri
EMAIL_HOST_USER = 'team' # 'Love@mamasheen.com'
Avvisu chì simu usendu un fugliale di cunfigurazione per uttene a password. Carricemu stu fugliale in i paràmetri cusì, à l'iniziu di u fugliale:
# Configurazione aperta è carica
Creemu stu fugliale è aghjunghje una chjave secreta per ella, è ancu a password di mail. Per generà una chjave secreta, aduprate stu cumandamentu, cù qualunque durata chì ti piace à a fine:
openssl rand -base64 64
Avà, copiate u testu chì a opensl generate è edit /etc/config.jon
sudo nano /etc/config.json
Aghjunghjite e seguenti linee à u vostru fugliale, cù a chjave chì l'openssl hà generatu cum'è a chjave secreta.
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
U FORHIS JONN hè simpaticu è faciule d'utilizà, pudemu dichjaremu chì noi ancu ancu questu altru l'utenti ùn si ponu micca lettu da u nostru direzzione di u prugettu solu. Questu hè pratica cunsigliata per e chjave API, di quale usemu più di alcune quì.
Vorrete ancu u vostru prugettu per assicurà chì tuttu hè salvatu è vi pudarete ricuperà u vostru travagliu dopu ancu s'ellu ùn avete più vulutu di affittu un servitore.
sudo backup
Avà, pruvate à mandà un email HTML da u servitore Web, furnitu à mandà una da a linea di cummanda hè travaglia. Query u vostru usu d'utilizatore in a cunchiglia, è mandà un email HTML à quellu utilizatore attraversu DJANGO. Cambia u mo nome in u codice, Charlotte, à u vostru nome d'utilizatore.
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()
Se u primu cumandamentu ùn viaghja micca, assicuratevi di aduprà
source venv/bin/activate
Furnì tuttu hè stallatu bè, averete avà un email di benvenutu in a vostra mailbox mandata da a vostra app web. Bellu travagliu! Veni un longu caminu.
Vuliu aghjunghje, se vi stavate mai attraversu l'errore Google, trà altri mutori di ricerca, sò grandi risorse per circà aiutu di prugrammazione. Basta à circà l'errore chì site, è puderete vede cumu altre persone risolve u prublema. Inltima, si benvenuta à cuntattate, i vostri educatori (maestanti), alterori), alcun parriu di novu o altre risorse per truvà soluzioni à e prublemi chì site. Comu capisce chì questu ùn hè micca faciule, ma ancu si leghje in questu luntanu è ùn site micca in scrittura di u codice, chì amparate assai di custruisce una app web di u scatch. Pat tù stessu nantu à a spalle, fate un bellu travagliu.
Ti ringraziu per piglià u tempu di leghje sta terza guida di sviluppu Web Web. In avviste edizioni, anu includerete più di l'esempi impurtanti dissi discututi dispunibuli di u documentu è faremu assai più cà un sviluppu è di hardware è di sviluppu di hardware è di hardware. Stà micca cunnisciutu per ciò chì hè chì vene, è mi aspettu di insegnà cumu custruisce u software incredibile. Fighjemu in a prossima edizione!
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
How is the crypto market growing so quickly?
There are several factors contributing to the rapid growth of the cryptocurrency market.
1. Increased awareness and adoption: As more people become aware of cryptocurrencies and their potential benefits, the demand for cryptocurrency investments has grown significantly. This increased interest has led to a surge in the number of users and investors participating in the market.
2. Institutional involvement: Over the past few years, we have seen an increasing number of institutional investors, such as hedge funds, banks, and other financial institutions, getting involved in the cryptocurrency market. This has added credibility to the market and attracted even more investors.
3. Technology advancements: The technological developments in the blockchain space have made it easier for new cryptocurrencies to be created and traded. Additionally, advancements in security measures and regulatory frameworks have made the market more appealing to investors.
4. Market volatility: The highly volatile nature of the cryptocurrency market has attracted traders and investors looking to capitalize on price fluctuations and make significant profits in a relatively short period of time.
5. Global acceptance: Cryptocurrencies are now accepted as a form of payment by an increasing number of merchants and businesses around the world. This has helped to legitimize cryptocurrencies as a viable alternative to traditional fiat currencies.
Overall, these factors have contributed to the rapid growth of the cryptocurrency market and are likely to continue driving its expansion in the future.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
what's the best way to boil eggs?
here is a simple method to boil eggs:
1. Place the eggs in a saucepan and cover her with cold water.
2. Bring the water to a boil over high heat.
3. Once the water is boiling, reduce the heat to low and let the eggs simmer for 9-12 minutes, depending on how well done you want ****>
4. Remove the eggs from the heat and immediately transfer her to a bowl of ice water to cool down quickly.
5. Once cooled, you can peel and enjoy your perfectly boiled eggs.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
i just started taking birth control. What are the most common side effects?
the most common side effects of birth control pills include:
1. Nausea
2. Breast tenderness
3. Headaches
4. Weight gain
5. Mood changes
6. Spotting or breakthrough bleeding
7. Changes in libido
8. Acne
9. Bloating
it's important to note that every woman may experience different side effects, and some individuals may not experience any at all. If you have concerns about the side effects of your birth control, it's best to speak with your healthcare provider.
.da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
How do I host a web server from my home?
Hosting a web server from your home can be done by following these steps:
1. Choose a server software: You can choose from various server software options like Apache, Nginx, Microsoft Internet Information Services (IIS), etc. Choose one that suits your requirements.
2. Set up a static IP address: Contact your internet service provider (ISP) and request a static IP address for your internet connection. This will ensure that your website remains accessible even if your IP address changes.
3. Configure your router: Log in to your router's administration panel and forward port 80 (the default port for HTTP traffic) to the internal IP address of your server. This will allow external traffic to reach your web server.
4. Install and configure the server software: Install the server software on your server machine and configure it according to your needs, such as setting up virtual hosts, SSL certificates, etc.
5. Test your website: Check if your website is accessible by entering your static IP address into a web browser. You can also test it using online tools like Pingdom or GTmetrix.
6. Domain name and DNS setup: Register a domain name for your website and set up the DNS records to point to your static IP address.
7. Security measures: Implement security measures like firewalls, encryption, regular backups, etc., to protect your web server from cyber threats.
8. Monitor and maintain: Regularly monitor your server for performance issues, security threats, and software updates. Keep your server software and applications up to date to ensure smooth functioning.
Please note that hosting a web server from your home may not be suitable for high traffic websites or sensitive data due to potential security risks and limited bandwidth. Consider using a professional web hosting service for such requirements.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
How do I write a professional blog post?
Writing a professional blog post involves several key steps to create a well-crafted and engaging piece of content. Here are some tips to help you write a professional blog post:
1. Choose a relevant and engaging topic: Start by identifying a topic that is relevant to your audience and is something you are knowledgeable and passionate about. Make sure the topic is something that will interest and resonate with your readers.
2. Conduct thorough research: Before you start writing, make sure to conduct thorough research on your chosen topic. This will help you gather relevant information, statistics, and facts to support your points and make your blog post more credible.
3. Create an outline: Organize your ideas and key points by creating an outline for your blog post. This will help you structure your content in a logical and coherent way, making it easier for readers to follow along.
4. Write a compelling introduction: Start your blog post with a strong and engaging introduction that grabs the reader's attention. Use a hook to draw readers in and make them want to keep reading.
5. Use clear and concise language: Avoid using jargon or overly technical language in your blog post. Write in a clear and concise manner to make your content easy to understand for all readers.
6. Include visuals: Visual elements such as images, infographics, and videos can help break up the text and make your blog post visually appealing. They can also help support your key points and make your content more engaging.
7. Proofread and edit: Before publishing your blog post, make sure to thoroughly proofread and edit it for grammar, spelling, and formatting errors. Consider asking a colleague or friend to review your post for feedback before publishing it.
8. Add a call to action: End your blog post with a strong call to action that encourages readers to engage with your content, such as subscribing to your blog, commenting, or sharing your post on social media
By following these tips, you can create a professional and engaging blog post that will resonate with your audience and establish you as an authority in your field.
How do I get publicity and organic traffic for a website?
1. Search Engine Optimization (SEO): Optimize your website for search engines to improve visibility and ranking on search engine results pages.
2. Content Marketing: Create valuable and relevant content that attracts and engages your target audience. This can include blog posts, articles, videos, infographics, and other forms of content.
3. Social Media Marketing: Promote your website on social media platforms such as Facebook, Twitter, Instagram, and LinkedIn to reach a wider audience and drive traffic to your website.
4. Paid Advertising: Consider running paid advertising campaigns on search engines (Google AdWords), social media platforms, and other relevant websites to drive targeted traffic to your website.
5. Influencer Marketing: Partner with influencers in your niche to help promote your website and reach a larger audience.
6. Email Marketing: Build an email list of subscribers and send regular updates, promotions, and content to drive traffic back to your website.
7. Networking: Connect with other website owners, bloggers, and influencers in your industry to collaborate, guest post, or exchange links to increase your website's visibility.
8. Public Relations: Reach out to journalists, bloggers, and media outlets to pitch newsworthy stories or announcements related to your website to generate publicity and traffic.
9. Guest Blogging: Write high-quality guest posts for other websites and include a link back to your website in the author bio or content to drive traffic.
10. Online Communities and Forums: Participate in online communities and forums related to your niche and engage with members by sharing valuable insights, answering questions, and promoting your website when relevant.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
What are the benefits to having a security camera?
1. Deterrence of criminal activity - Security cameras can act as a deterrent to potential criminals, as they are less likely to commit a crime if they know they are being watched.
2. Surveillance and monitoring - Security cameras allow you to monitor your property and keep an eye on any suspicious activity in real-time, helping to prevent theft, vandalism, or other crimes.
3. Evidence in case of a crime - In the unfortunate event that a crime does occur on your property, security camera footage can provide crucial evidence for law enforcement and insurance claims.
4. Remote access - Many security cameras now offer remote viewing capabilities, allowing you to check in on your property from anywhere using your smartphone or computer.
5. Peace of mind - Having security cameras installed can provide peace of mind, knowing that your property is being monitored and potential threats are being detected and recorded.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
is sugar really unhealthy?
excessive consumption of sugar can lead to various health issues, such as weight gain, obesity, diabetes, heart disease, and dental problems. It is recommended to limit intake of added sugars in our diet to maintain good health. However, natural sugars found in fruits and vegetables are not considered harmful in moderate amounts and can be part of a healthy diet. Moderation is key when it comes to sugar consumption.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
why is it safer to wear a mask in public?
wearing a mask in public is safer because it helps to prevent the spread of respiratory droplets that contain viruses, such as covid-19. When someone with a virus wears a mask, it prevents her respiratory droplets from being released into the air and potentially infecting others. Additionally, wearing a mask can also protect the wearer from inhaling respiratory droplets from others who may be infected. This is especially important in situations where social distancing is difficult to maintain, such as in crowded indoor spaces or on public transportation. Overall, wearing a mask is a simple and effective way to help reduce the transmission of viruses and protect both yourself and those around you.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
How do i build a full stack web app with django?
Building a full stack web app with Django involves several steps. Here is a general outline of the process:
1. Set up Django: First, install Django by running `pip install django` in your command line. Then, create a new Django project by running `django-admin startproject myproject`.
2. Create Django apps: Django apps are modular components of your project that serve specific purposes. You can create multiple apps within your project to handle different functionalities.
3. Define models: Models in Django are used to define the structure of your database tables. Create your models by defining classes in the models.py file of each app.
4. Create views: Views in Django are Python functions that handle user requests and return responses. Define views for your app by creating functions in the views.py file of each app.
5. Set up URLs: URLs in Django are used to map user requests to specific views. Define URL patterns for your app by creating a urls.py file in each app and including them in the main urls.py file of your project.
6. Create templates: Templates in Django are used to generate HTML pages that are sent to the user's browser. Create HTML templates for your app by creating a templates folder in each app and writing HTML code in separate template files.
7. Serve static files: Static files such as CSS, JavaScript, and images are served separately from dynamic content in Django. Configure the static files settings in your project's settings.py file to serve static files from the static folder in each app.
8. Configure the database: Set up your database settings in the settings.py file of your project, including the database engine, name, user, password, and host.
9. Migrate the database: Run `python manage.py makemigrations` followed by `python manage.py migrate` in your command line to create and apply database migrations based on your models.
10. Run the server: Start the Django development server by running `python manage.py runserver` in your command line. You should now be able to access your web app at `http://127.0.0.1:8000/` in your browser.
These are the basic steps to build a full stack web app with Django. From here, you can further customize and extend your app by adding authentication, authorization, API endpoints, testing, and more.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
How do I write a good book?
1. Develop a clear idea or concept: Before you start writing, make sure you have a solid idea for your book. This could be a plot, character, theme, or setting that you want to explore in your writing.
2. Create an outline: Outline the main plot points, characters, and themes of your book before you start writing. This will help you stay organized and focused as you write.
3. Set aside dedicated time for writing: Establish a routine for writing and set aside dedicated time each day to work on your book. This will help you stay motivated and make progress on your writing.
4. Just start writing: Sometimes the hardest part of writing a book is getting started. Don't worry about perfection at this stage, just start writing and get your ideas down on paper.
5. Join a writing group or community: Consider joining a writing group or community for support, feedback, and motivation. Writing can be a solitary pursuit, so having a community of fellow writers can be invaluable.
6. Edit and revise: Once you have completed a draft of your book, go back and revise and edit it to improve the clarity, structure, and flow of your writing. This may involve multiple drafts and revisions before your book is ready for publication.
7. Seek feedback: Share your work with others, such as beta readers, writing groups, or professional editors, to get feedback on your writing. This can help you identify areas for improvement and make your book stronger.
8. Keep writing: Writing a book is a marathon, not a sprint. Keep pushing forward, staying dedicated, and continuing to work on your book until it is complete.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
What causes migraine and how are they treated?
Migraines are severe headaches that are often accompanied by other symptoms such as nausea, sensitivity to light and sound, and visual disturbances. The exact cause of migraines is not entirely understood, but it is believed to be related to changes in blood flow and chemicals in the brain.
Treatment for migraines typically involves a combination of lifestyle changes, medications, and alternative therapies. Some common treatment options include:
1. Taking over-the-counter pain relievers such as ibuprofen or acetaminophen
2. Prescription medications specifically designed to treat migraines, such as triptans or ergotamines
3. Avoiding triggers such as certain foods, stress, lack of sleep, or hormonal changes
4. Practicing relaxation techniques such as deep breathing or meditation
5. Applying hot or cold packs to the head or neck
6. Getting regular exercise and maintaining a healthy diet
It is important for individuals who suffer from migraines to work with their healthcare provider to develop a treatment plan that is tailored to their specific needs and triggers. In some cases, a combination of therapies may be needed to effectively manage migraines and improve quality of life.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
How do I build a mail server with postfix?
To build a mail server with Postfix, follow these steps:
1. Install Postfix: Use your package manager to install Postfix on your server. For example, on Debian/Ubuntu, you can run `sudo apt-get install postfix`.
2. Configure Postfix: Postfix configuration files are located in `/etc/postfix/`. The main configuration file is `main.cf`. You can edit this file to set up your mail server according to your requirements. Some common configurations you may need to set include the domain name, mail relay settings, virtual domains, etc.
3. Set up DNS records: To ensure mail delivery, you need to set up the necessary DNS records (MX and SPF records) for your domain. Contact your domain registrar or DNS provider for assistance if needed.
4. Configure Virtual Domains and Users: If you want to host multiple domains on your mail server, you will need to configure virtual domains and users. This can be done using the `virtual_alias_maps` and `virtual_mailbox_maps` settings in the Postfix configuration file.
5. Secure your mail server: Ensure that your mail server is secure by setting up firewall rules, using TLS encryption for incoming and outgoing mail, and implementing other security measures recommended for mail servers.
6. Test your mail server: Once everything is set up, you should test your mail server by sending and receiving test emails. Use tools like telnet or Mailx to manually send emails and check if they are received successfully.
Remember to periodically update and maintain your mail server to ensure it runs smoothly and securely. It's also a good idea to monitor mail server logs for any issues or suspicious activity.
why should i use an apple l out at the l word?
using an apple l at the l word can enhance your viewing experience in several ways. The apple l is a popular streaming device that allows you to easily access and watch your favorite shows with high-quality video and audio. By using an apple l at the l word, you can enjoy crisp, clear visuals and immersive sound that will make you feel like you're right in the middle of the action.
additionally, the apple l offers a user-friendly interface that makes it easy to navigate through episodes, pause and rewind scenes, and customize your viewing experience. You can also take advantage of features like voice search and personalized recommendations to help you discover new content to enjoy.
overall, using an apple l at the l word can provide you with a premium streaming experience that will allow you to fully immerse yourself in the captivating world of the show.
.da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
How do i wear deadlock?
1. Start by growing your hair out to the desired length. Your hair should be at least 2-3 inches long for the best results.
2. Section your hair into small, even parts using a comb. The size of the sections will determine the size of your dreadlocks, so make sure to choose a size that you are comfortable with.
3. Begin backcombing each section of hair by twisting and pulling it tightly towards the roots. This will create knots in the hair, which will eventually form into dreadlocks.
4. Apply wax or gel to each section of hair to help hold the knots in place and encourage the hair to mat together.
5. Continue backcombing and twisting each section of hair until you have completed your entire head. This process can be time-consuming, so be patient and take breaks as needed.
6. Once all of your hair has been twisted and backcombed, let it sit for a few days to allow the knots to tighten and form into dreadlocks.
7. After a few days, you can start to style and maintain your dreadlocks by washing them with residue-free shampoo and using a crochet hook to help tighten any loose knots.
8. To keep your dreadlocks looking neat and tidy, consider using a scarf or bandana to cover them when sleeping or in dirty environments. Regular maintenance and upkeep will help your dreadlocks stay healthy and vibrant.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
How do I send email with a compliant email list and unsubscribe links?
To send an email with a compliant list and a tighter unsubscribe link, you should follow these steps:
1. Ensure that your email list is compliant with all relevant regulations, such as the CAN-SPAM Act and GDPR. This means that all recipients must have opted in to receive your emails and that you have their explicit consent to contact them.
2. Include a clear and prominent unsubscribe link in your email. Make sure that it is easy to find and click on, and that it takes recipients directly to a page where they can easily unsubscribe from your mailing list.
3. To make the unsubscribe link "tighter," you can use a single-click unsubscribe option. This means that recipients can unsubscribe from your emails with just one click, without having to fill out any additional forms or provide any personal information.
4. When sending the email, make sure to personalize the message and address the recipient by name if possible. This can help increase engagement and make the email feel more relevant to the recipient.
5. Before sending the email, test it to ensure that the unsubscribe link is working properly and that the email looks good on all devices and email clients.
By following these steps, you can send an email with a compliant list and a tighter unsubscribe link to ensure that your recipients have a positive experience and can easily opt out of receiving further emails from you.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
Why do people implant nfc implants in their hands?
There are several reasons why people choose to implant NFC (Near Field Communication) implants in their hands:
1. Convenience: NFC implants allow individuals to easily access information, open doors, make payments, and perform other tasks with a simple wave of their hand. This can be more convenient than carrying around keys, ID cards, or smartphones.
2. Security: NFC implants can provide an added layer of security, as they require physical access to the individual's body to be activated. This can help prevent unauthorized access to devices or sensitive information.
3. Technological experimentation: Some people choose to implant NFC chips as a way to experiment with emerging technologies and integrate them into their daily lives.
4. Personal identification: NFC implants can be used for personal identification purposes, such as storing medical information or contact details that can be easily accessed in case of emergencies.
5. Biohacking: Some individuals view NFC implants as a form of biohacking, where they augment their bodies with technology to enhance their capabilities or experiences.
Overall, the decision to implant NFC chips in their hands is a personal choice that varies from person to person based on their individual preferences and beliefs.
How do i find customers for my web development small business?
Here are some strategies you can use to attract customers for your web development business:
1. Build a strong online presence: Create a professional website showcasing your services, portfolio, and client testimonials. Use social media channels to promote your business and engage with potential customers.
2. Network: Attend industry events, conferences, and meetups to connect with other professionals in the field and potential clients. Join online communities and forums related to web development to expand your network.
3. Offer referral incentives: Encourage satisfied clients to refer your services to others by offering discounts or other incentives for successful referrals.
4. Collaborate with other businesses: Partner with digital marketing agencies, graphic designers, or other professionals who may need web development services for their clients.
5. Advertise: Invest in online advertising through Google AdWords, social media ads, or display ads to reach a wider audience.
6. Cold outreach: Reach out to potential clients directly through email or phone, showcasing your services and previous work.
7. Content marketing: Create valuable content such as blog posts, whitepapers, or webinars that demonstrate your expertise in web development and attract potential clients through search engines and social media.
8. Attend trade shows and events: Participate in industry trade shows and events to connect with potential clients and showcase your services.
9. Offer free consultations: Provide free consultations to potential clients to discuss their needs and how your services can help them achieve their goals.
10. Ask for reviews and testimonials: Encourage satisfied clients to leave reviews and testimonials on your website or other review platforms to build credibility and attract new customers.
da Daisy / VIDEZATE | Compra | Cumprate cù CriptoRrenrenza
https://glamgirlx.com
https://glamgirlx.com -
Lasciami una punta in bitcoin aduprendu questu indirizzu: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE