Izindaba - Vakashela Isayithi
I-Player Player Colour Sudoku online mahhala Dlala ama-Sudoku Colour Sudoku nomngane mahhala.Mema umngane Joyina umdlalo
Thenga ukuqhubeka

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency



Dlala umbala Sudoku Online - Free ColorOku umdlalo Lokhu kukhululekile ukudlala umbala Sudoku (Colordoku) umdlalo.

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ukufundwa okujulile kwewebhu okujulile nokuphepha ngesibonelo Isiqondisi Esithathu UCharlotte Harper Julayi 3, 2024 Isandulela: Ukucatshangelwa Kwezokuphepha ekwakheni isoftware yewebhu kuyingxenye ebalulekile yanoma yiliphi uhlelo lonjiniyela weWeb kanye nokwenzayo ngenkathi ubunjiniyela obuhle obunokwethenjelwa, lube wusizo ngezinhloso ezisebenzayo. I-DOM (Idokhumenti Yento Ukukhishwa kwe-DOM), Ngokuqaliswa kwe-HTML, i-JavaScript, kanye ne-CSS kanye nesoftware yokusebenzisa i-Python, C / C+, Java, Java, Java kanye ne-Breaks Inkululeko ekhombisa Ukuqamba, hlinzeka ngokusetshenziswa kalula nokusebenza, ukuveza ukuthobeka kanye nomlingiswa, futhi unikeze kalula ukusetshenziswa kanye nezinsizakalo ezibalulekile zonke ezikhangayo ku-joe average, Umsebenzisi wokugcina ofuna ukubulala isikhathi noma ukwenza okuthile okwenziwe kwi-Intanethi, imvamisa kudivayisi ye-smartphone yokuthinta. Abantu abaningi bebengeke bazi ukuthi bangaqala kuphi lapho bafuna ukwakha iwebhusayithi kusuka ekuqaleni,Bazovame ukuqala ngewebhusayithi yomunye umuntu futhi bakha okuthile okulinganiselwe ekusebenzeni, ukwethenjwa, ukusetshenziswa kalula futhi ikakhulukazi ubuqambe lapho bebengabathola khona izinkinobho zokucindezela isikhathi, futhi Imali ebiza kakhulu imali yokubhaliswa okubizayo ku-software abambalwa abantu ababefuna ukuyisebenzisa noma kunjalo ukulinganiselwa kokusebenziseka kalula nokuvumelana nezimo. Uma unemizuzu embalwa yokufunda ngale ncwadi futhi ufunde ukuthi yini engifuna ukukufundisa yona, noma ngikhulume nami ngokwami ​​ngezinhloso zakho futhi ngithole ukuholwa endaweni efanele, futhi ngigqugquzelwe ukuba ngifunde ukubhala futhi ngibhale isoftware yakho , Thatha le ncwadi ikhaya bese ubeka eceleni isikhathi sokufunda ukwakha uhlelo lwewebhu olulandelayo, olunamandla, olubalulekile futhi olubalulekile lwewebhu, iwebhusayithi enikuwe futhi yenza kahle lokho okufunayo futhi kuhlangabezana nezidingo zezithameli zakho. Mayelana nami: Ngingumthuthukisi wesoftware obanziI-Ange yesipiliyoni ku-C / C ++, Java, Python, HTML, CSS kanye neJavaScript. Ngakha amawebhusayithi abantu abafuna ukusebenzisa, abafuna ukuvakasha, futhi bathole umlutha wokusebenzisa nje ukufunda, ukuphinda uphinde uphinde ufunde, ukuphinda futhi ubulale isikhathi, futhi okubaluleke kakhulu, ngithengisa isoftware. Ukube ubunomqondo wokuthi ubufuna kanjani iwebhusayithi ukuthi ubukeke futhi usebenze, ubukade ungisekela ukuze ngikwazi ukubhekana nezidingo zami ngenkathi ngihlangana nezindleko zokusebenzisa iwebhusayithi ngokwakho, Ngingakwakha i-YouTube elandelayo ye-YouTube, Tiktok, Twitter, Google, noma uhlelo lokusebenza lokuphepha lobuchwepheshe obuphezulu kuphela ongaluthola. Esikhundleni sokuzama ukukuthengisa isikhathi sami, ngizama ukuthenga kwakho: Ngifuna ukukhuluma nawe ngokwakha uhlelo lokusebenza (iwebhusayithi) ngokwakho ngolwazi oluvele lukhona, futhi lukufundise lokho okudingeka kube ngunjiniyela wesoftware ozimele, Usomabhizinisi, ohola umsebenzi ophumelelayo kunoma iyiphi insimu oyifisayo. Futhi ake ngicace, imfundo ngikunikeza ukuthi izohleleka. Ungaya esikoleni futhi ufunde konke lokhu ngeImfundo ye-RMAl, noma ifunde le ncwadi esikoleni, iqedele izabelo zakho, futhi uthathe imali enkulu evela emfundweni yakho, kodwa ngeke ngikubeke phansi esihlalweni esishisayo futhi ngikucele ukuthi ugcwalise izabelo. Angisiye uprofesa wakho, ungacabanga ngami njengomngane ofuna ukukuqondisa emsebenzini oqhutshwa yimpumelelo yakho. Futhi angikuthengise impumelelo noma, uzodinga ukuyithenga nesikhathi sakho. Ukufunda kwikhodi kune-curve yokufunda ijika futhi akukaze kube lula, noma kufanele kube. Udinga ukusebenza kanzima ngangokunokwenzeka futhi uqhubeke nokuzama futhi wehluleke futhi uzame futhi lapho ukhungathekile ukuze ufunde futhi wakhe izinhlelo zokusebenza ngokwakho. Lokho kungokwemvelo yekhodi uqobo. Ikhodi iqhutshwa ngumhlanganisi owenzelwe ukunikeza imiyalezo yephutha ye-Programmer, futhi lokhu kuzokufundisa ukuthi ungayibonisa kanjani ikhodi, noma ngabe ukukopisha iphutha kwi-Injini yakho yokusesha nokufunda izibonelo zabanye abantu. Futhi kufanele ngithi, awudingi ukuba ucebe kakhulu, uhlakaniphile, uphumelele,en ethambekeleni noma ehlelekile ukwakha uhlelo lokusebenza. Ikhompyutha iyakunakekela leyo nhlangano. Udinga nje ukukhuthazela ngesivivinyo nephutha, gcina ukugxila futhi usebenze kanzima kulokho okwenzayo, futhi uzoba nomsebenzi ophumelele kakhulu kulo lonke wenzani. Ngingubani: Ngiyabona ukuthi isigaba sokugcina sasisemayelana nokufunda futhi uthathe izindlela ezivela kule ncwadi. Ngingubani ngempela? Lowo ngumbuzo oyinkimbinkimbi. Angikacaci ukuthi ngokwami, njengoba ngihlushwa izimo zezokwelapha ezingenza kube nzima kimi ukubhala noma zibhale le ncwadi ngezinye izikhathi, ngenkathi zethula izinselelo zokuhlalisana nobunikazi ezenza impilo yami ibe nzima ngokwengeziwe maqondana nami . Ngamafuphi, uma ufunda le ncwadi, ulethe ekhaya ngoba ulibutheke ngalo futhi wacabanga ukuthi bekulusizo, noma uma nje ufunda lokhu okude, kuwe ngingumuntu othanda ukukubona uphumelela Konke okwenzayo. Ngingunjiniyela uqobo, isoftwareUnjiniyela, kanye nomfundi, futhi ngibhala le ncwadi kwabanye abafundi abafuna ukwenza izimpilo zabo zibe lula ngokuba nencwadi yesoftware abayidingayo ukwenza izimpilo zabo zibe lula ngokubhala ndawonye njengephazili enkulu ekusebenzeni , ewusizo, enkulu, esebenzayo, enobumbano, nokwenza uhlelo lokusebenza oluhlanganayo olungashayela impumelelo noma ngabe umugqa webhizinisi. Kakhulu, yilokhu engikwenzayo: Ngakha izinhlelo zokusebenza ukuze ngizisize mina nabanye abantu baphumelele. Ngingumbhali futhi, yize le yincwadi yami yokuqala engihlose ukuyigcwalisa ukuze ngibeke iphothifoliyo yami ibe yincwadi ewusizo, futhi ngingumculi futhi. Ngizokuvuma lokhu kuwe, ngingumuntu ongaziwa. Angiphelele, sengiphelile ngomthetho ngisho nokungiholela ngisho ngishiya amakolishi kanye namanyuvesi futhi ngishiye izifundazwe ukuze ngizame ukuzenzela igama ngempumelelo. Ngingowesifazane ngokuzalwa, ngigqoka izimonyo, thatha izithombe zami, ngigqoke izingubo kanye nezinye izingubo zabesifazane, futhi ngihlala ngizazi ukuthiowesilisa ngokwemvelo. Ngibe nezinkinga nabanye abantu esikhathini esedlule esiholela ezimpini ngokubhala nokwakha iWebApps, futhi ngiyaxolisa ukuthi angikwazi ukuthola le ncwadi ezandleni kungekudala: Uyakudinga lokhu. Uzofuna ukufunda nokubhala ikhodi ebukeka efana neyami futhi isebenze njengeyami futhi yenza into efanayo kepha ingcono, ngoba uma ukwazi ukuthenga le ncwadi esikhundleni sokusebenzisa incwadi yakho enjengezincwadi Kuyo, unezinsizakusebenza okudingeka uziphumelele empilweni yakho. Nginazo zonke izinhlobo zezingqinamba ngokukhula komndeni, izimo zezempilo, odokotela, abezindaba, kanye nomthetho, futhi ikhodi yami ibonakala ngokujulile umzabalazo onobuntu besifazane nowesifazane emhlabeni ohlukene futhi okhungathekile. Kodwa-ke, le ncwadi yinto engiyikhathalela ngokujulile, ingane yami, iphothifoliyo yami, kanye nendlela yami yokuphila, ngakho-ke ngiyabonga ukucubungula kwakho lapho uthatha umbhalo wayo ukuze ufunde kimi. Sicela ugcine engqondweni angiphelele,Incwadi izoba namaphutha, izibuyekezo, kanye nohlelo olusha, futhi uzodinga ukucabanga ngengqondo yakho enengqondo ngangokunokwenzeka ukuze ube nesipiliyoni esiphumelelayo ngokubhala kwami. Futhi, qonda ukuthi ngiqonde kahle ngawe noma ngabe ubhekana nezinselelo lapho ubhala. Cabanga ngakho kanjena: Lapho ungavele uqashe uhlelo lwekhompyutha ukuze wenze noma yini ongayicabanga lapho ungacabanga khona endaweni yedijithali, gcina lonke ulwazi ohlangabezana nalo, ulihlele, uzokuqonda, uzokuqonda, uzokuqonda, uzokuqonda, uzokuqonda, uzokuqonda, uzokuqonda, uzokuqonda, uzokuqonda, uzokuqonda, uzokuqonda, Ukubhekana nobunzima obungenakugwemeka ngolwazi olifaka futhi nokushicilela. Ngikutshela lokhu ngoba ngihlangabezana nobunzima obufanayo. Sebenzisa le ncwadi ngengozi yakho, sebenza nomphakathi wakho kanye nemiphakathi etholakalayo kuwe ukwakha isoftware ngaphakathi kwesilungiselelo esiphephile, futhi ungahambi kahle noma uphumelele ngendlela engafanele , futhi kungani ngingakulethela lo mbhalo futhi ngikusize uphumelele ngaphandle kokuphambuka endleleni yobuhlanya eshiya amaqabungaNgichithekile, ngidwengulwe ngenkathi ngihlangabezana nezinkinga ezijwayelekile wonke umuntu owenza emhlabeni wonke ngenxa yesilinganiso somhlaba wonke esizosebenza kuyo, i-Intanethi. Kungenzeka ungajwayelani kakhulu ukuthi ngingubani ngamazwi ambalwa, kodwa ngikukhuthaza ukuthi ufunde, uzokwazi njengoba uqhubeka nokufunda nokungiqonda imisebenzi yakho ukuze uqedele umsebenzi wakho. Ngeke kube khona umsebenzi wesikole ngale ncwadi, inqobo nje uma oprofesa noma othisha bakho abangakukunikanga noma ngubani, kodwa ngikukhuthaza kakhulu ukuthi wakhe iphothifoliyo yamaphrojekthi ngokwakho njengoba ufunda, kanye nephrojekthi ye-capstone ekhombisa ukuthi ungakwazi kanjani Sebenzisa lokho okufundile. Iphrojekthi yami ye-Capstone isisekelo salokho ozofunda kule ncwadi, ngoba kufaka ikhodi kumaphrojekthi ami edlule, ikhodi engiyenzile futhi yafunda ukubhala ngokusebenza ngesandla, kanye nemibono eminingi ebingisize uphumelele iphuzu lapho ngikwazi ukuxuqa khona uhlelo lokusebenza olululaI-Welly ifakiwe futhi ibukeka futhi iziphatha njenge-app edumile ungabona umngani wakho noma umndeni usebenzisa, kwi-Intanethi, oyikhangisekile, noma ezindabeni. Le ncwadi yile: Le ncwadi iyisifundo ngesibonelo. Ungathola ikhodi lapha, imiyalo yokuthi ungafunda kanjani ikhodi, imininingwane ngekhodi ye-debugging kanye namaphutha okulungisa, ukuhambisa imiyalo yakho, uphinde usebenzise ikhodi yakho, uvikele Ikhodi yakho, yakha amawebhusayithi asebenzayo ajabulisayo, ahlanganyele, futhi umlutha, futhi uzothola umuzwa wokuthi ngingubani, kungani lokhu kubalulekile, futhi ungakuveza kanjani, nohlelo lwakho lwenkampani, kanye ne Isoftware owakhela ekukhanyiseni okuhle kakhulu ukuze ube ekhangayo kakhulu ngangokunokwenzeka kubasebenzisi bakho bokugcina, izivakashi zewebhusayithi yakho. Kule nc...
Ukufunda Okujulile Okusekelwe Kuwebhu Nokuvikeleka Ngokwesibonelo

Ukufundwa okujulile kwewebhu okujulile nokuphepha ngesibonelo Isiqondisi Esithathu UCharlotte Harper Julayi 3, 2024 Isandulela: Ukucatshangelwa Kwezokuphepha ekwakheni isoftware yewebhu kuyingxenye ebalulekile yanoma yiliphi uhlelo lonjiniyela weWeb kanye nokwenzayo ngenkathi ubunjiniyela obuhle obunokwethenjelwa, lube wusizo ngezinhloso ezisebenzayo. I-Dom (dokhumenti yento markup), ngokuqalisa kwe-HTML, iJavaScript, kanye ne-CSS kanye ne-SexTend Software esebenzisa inkululeko, nikeza nokusebenzisa kalula kanye nezinsizakalo ezibalulekile zonke ezikhangayo ku-Joe, Umsebenzisi wokugcina ofuna ukubulala isikhathi noma ukwenza okuthile okwenziwe kwi-Intanethi, imvamisa kudivayisi ye-smartphone yokuthinta. Abantu abaningi bebengeke bazi ukuthi kufanele baqale kuphi lapho bafuna ukwakha iwebhusayithi kusukaScratch, bazothambekela ukuqala ngewebhusayithi yomunye umuntu futhi bakha okuthile okulinganiselwe ekusebenzeni, ngokwethenjwa, ukusetshenziswa kalula ikakhulukazi lapho bebenawo lapho bebezokwazisa khona ukuthi bambalwa abantu abaningi abafuna ukusetshenziswa kalula nokuvumelana nezimo. Uma unemizuzu embalwa yokufunda ngale ncwadi futhi ufunde ukuthi yini engifuna ukukufundisa yona, noma ngize ngikhulume nami ngezinjongo zakho, futhi ngigqugquzelwe ukuthi ngifundele ukubhala futhi ngibeke iwebhusayithi yakho, ibeke iwebhusayithi enikufunayo futhi ihlangabezana nezidingo zabalaleli bakho. Mayelana nami: Ngingumthuthukisi wesoftware nayeUhla lokuhlangenwe nakho ku-C / C ++, Java, Python, HTML, CSS kanye neJavaScript. Ngakha amawebhusayithi abantu abafuna ukusebenzisa, abafuna ukuvakasha, futhi bathole umlutha wokusebenzisa nje ukufunda, ukuphinda uphinde uphinde ufunde, ukuphinda futhi ubulale isikhathi, futhi okubaluleke kakhulu, ngithengisa isoftware. Ukube ubunomqondo wokuthi ubufuna kanjani iwebhusayithi ukuthi ubukeke futhi usebenze, ubukade ungisekela ukuze ngikwazi ukubhekana nezidingo zami, futhi ngizimisele ukuhlanganisa i-YouTube, iTiktok, i-Twitter, noma uhlelo lokusebenza lokuphepha oluphezulu kuphela ongaluthola. Esikhundleni sokuzama ukukuthengisa isikhathi sami, ngizama ukuthenga kwakho: ngifuna ukukhuluma nawe ngokwakha uhlelo lokusebenza (iwebhusayithi) ngokwakho ngolwazi oluvele lukhona, futhi lukufundise lokho okudingeka kube ngumthuthukisi wesoftware ozimele, osomabhizinisi, oholele umsebenzi ophumelelayo kunoma iyiphi insimu oyifisayo. Futhi ake ngicace, imfundo ngikunikeza ukuthi izohleleka. Ungaya esikoleni futhi ufunde konke lokhu ngeImfundo ehlelekile, noma ifunde le ncwadi esikoleni, iqedele izabelo zakho, bese ususa kakhulu imfundo yakho, kepha angikubekise esihlalweni esishisayo futhi ngikucele ukuthi ugcwalise izabelo. Angisiye uprofesa wakho, ungacabanga ngami njengomngane ofuna ukukuqondisa emsebenzini oqhutshwa yimpumelelo yakho. Futhi angikuthengise impumelelo noma, uzodinga ukuyithenga nesikhathi sakho. Ukufunda kwikhodi kune-curve yokufunda ijika futhi akukaze kube lula, noma kufanele kube. Udinga ukusebenza kanzima ngangokunokwenzeka futhi uqhubeke nokuzama futhi wehluleke futhi uzame futhi lapho ukhungathekile ukuze ufunde futhi wakhe izinhlelo zokusebenza ngokwakho. Lokho kungokwemvelo yekhodi uqobo. Ikhodi iqhutshwa ngumhlanganisi owenzelwe ukunikeza imiyalezo yephutha ye-Programmer, futhi lokhu kuzokufundisa ukuthi ungayibonisa kanjani ikhodi, noma ngabe ukukopisha iphutha kwi-Injini yakho yokusesha nokufunda izibonelo zabanye abantu. Futhi kufanele ngithi, awudingi ukuba ucebe kakhulu, uhlakaniphile,Ukuthambekela okuthe xaxa, noma okuqondiswe imininingwane noma okuhlelekile ukwakha uhlelo lokusebenza. Ikhompyutha iyakunakekela leyo nhlangano. Udinga nje ukukhuthazela ngesivivinyo nephutha, gcina ukugxila futhi usebenze kanzima kulokho okwenzayo, futhi uzoba nomsebenzi ophumelele kakhulu kulo lonke wenzani. Ngingubani: Ngiyabona ukuthi isigaba sokugcina sasisemayelana nokufunda futhi uthathe izindlela ezivela kule ncwadi. Ngingubani ngempela? Lowo ngumbuzo oyinkimbinkimbi. Angikacaci ukuthi ngokwami, njengoba ngihlushwa izimo zezokwelapha ezingenza kube nzima ngami ukuthi ngize ngibhale noma ngibhale le ncwadi ngezinye izikhathi, ngenkathi ngiveza izinselelo zokuhlalisana nobunikazi ezenza impilo yami ibe nzima ngokwengeziwe maqondana nokwethula. Ngamafuphi, uma ufunda le ncwadi, ulethe ekhaya ngoba ulibutheke ngalo futhi wacabanga ukuthi bekulusizo, noma uma nje ufunda lokhu okude, noma ngabe ufunda lokhu okunengqondo okufunwa nakho konke okwenzayo. Ngingunjiniyela uqobo,Unjiniyela, kanye nomfundi, futhi ngibhala le ncwadi yabanye abafundi abafuna ukwenza izimpilo zabo zibe lula ngokuba nencwajana yesoftware abayidingayo ekwenzeni izibonelo ezisebenzayo ngokuhambisana kanye nohlelo lokusebenza olusebenzayo, futhi olusebenzayo olungakwazi ukushayela impumelelo noma ngabe umugqa webhizinisi. Kakhulu, yilokhu engikwenzayo: Ngakha izinhlelo zokusebenza ukuze ngizisize mina nabanye abantu baphumelele. Ngingumbhali futhi, yize le yincwadi yami yokuqala engihlose ukuyigcwalisa ukuze ngibeke iphothifoliyo yami ibe yincwadi ewusizo, futhi ngingumculi futhi. Ngizokuvuma lokhu kuwe, ngingumuntu ongaziwa. Angiphelele, sengiphelile ngomthetho ngisho nokungiholela ngisho ngishiya amakolishi kanye namanyuvesi futhi ngishiye izifundazwe ukuze ngizame ukuzenzela igama ngempumelelo. Ngingowesifazane ngokuzalwa, ngigqoka izimonyo, thatha izithombe zami, ngigqoke izingubo kanye nezinye izingubo zabesifazane, futhi ngihlala ngizazi ukuthiOwesifazane ngokwemvelo. Ngibe nezinkinga nabanye abantu esikhathini esedlule esiholela ezimpini ngokubhala nokwakha iWebApps, futhi ngiyaxolisa ukuthi angikwazi ukuthola le ncwadi ezandleni kungekudala: Uyakudinga lokhu. Uzofuna ukufunda nokubhala ikhodi ebukeka efana neyami futhi isebenze njengeyami futhi yenza into efanayo kepha ingcono, ngoba uma ukwazi ukuthenga incwadi yakho esikhundleni sokuthi ngenze incwadzi yakho enjengezinsizakusebenza ngokubuza imali yakho. Nginazo zonke izinhlobo zezingqinamba ngokukhula komndeni, izimo zezempilo, odokotela, abezindaba, kanye nomthetho, futhi ikhodi yami ibonakala ngokujulile umzabalazo onobuntu besifazane nowesifazane emhlabeni ohlukene futhi okhungathekile. Kodwa-ke, le ncwadi yinto engiyikhathalela ngokujulile, ingane yami, iphothifoliyo yami, kanye nendlela yami yokuphila, ngakho-ke ngiyabonga ukucubungula kwakho lapho uthatha umbhalo wayo ukuze ufunde kimi. Sicela ugcine engqondweni angisiyeEct, le ncwadi izoba namaphutha, izibuyekezo, kanye nezinhlelo ezintsha, futhi uzodinga ukucabanga ngengqondo yakho enengqondo ngangokunokwenzeka ukuze ube nesipiliyoni esiphumelelayo ngokubhala kwami. Futhi, qonda ukuthi ngiqonde kahle ngawe noma ngabe ubhekana nezinselelo lapho ubhala. Cabanga ngakho kanjena: Lapho ungavele uqashe uhlelo lwekhompyutha ukuze wenze noma yini ongayicabanga endaweni yedijithali, gcina lonke ulwazi ohlangabezana nalo, ulihlele, uzobhekana nobunzima obungenakuphikwa. Ngikutshela lokhu ngoba ngihlangabezana nobunzima obufanayo. Sebenzisa le ncwadi ngengozi yakho, sebenza nomphakathi wakho kanye nemiphakathi etholakala kuwe ukwakha isoftware ngaphakathi kwesilungiselelo esiphephile, futhi ungakutholi nale nto yakho lapho wehluleka khona, futhi kungani ngikulethela le nto, futhi kungani ngikusiza ukuthi uphumelele ngaphandle kokuphambuka endleleni yobuhlanyaUngonakalisiwe, wadabula futhi waphampula ngenkathi ngihlangabezana nezinkinga ezijwayelekile wonke umuntu owenzayo emhlabeni wonke ngenxa yesilinganiso se-Global Scale esisebandlululo senethiwekhi esizosebenza kuyo, i-Intanethi. Kungenzeka ungajwayelani kakhulu ukuthi ngingubani ngamazwi ambalwa, kodwa ngikukhuthaza ukuthi ufunde, uzokwazi njengoba uqhubeka nokufunda nokungiqonda imisebenzi yakho ukuze uqedele umsebenzi wakho. Ngeke kube nomsebenzi wesikole ngale ncwadi, inqobo nje uma oprofesa noma othisha bakho abangakukukhulisanga, kepha ngikukhuthaza kakhulu ukuthi wakhe iphothifoliyo yamaphrojekthi ngokwakho njengoba ufunda, kanye nephrojekthi ye-capstone ekhombisa ukuthi ungakusebenzisa kanjani lokho okufundile. Iphrojekthi yami ye-Capstone isisekelo salokho obekufundwa yile ncwadi, njengoba kufaka ikhodi kumaphrojekthi ami wangaphambilini, ikhodi engiyenzile futhi yangisiza ukuphumelela kuhlelo lokusebenza olulula ukuthiKufakwe ngokugcwele futhi kubukeka futhi ziphatha njengohlelo lokusebenza oludumile ungabona umngani wakho noma umndeni usebenzisa, kwi-Intanethi, kukhangise wena, noma ezindabeni. Le ncwadi yile: Le ncwadi iyisifundo ngesibonelo. Ungathola ikhodi lapha, imiyalo yokuthi ungafunda kanjani ikhodi, imininingwane ngekhodi ye-debugging kanye namaphutha akho, ubeke ikhodi yakho, futhi ungakufakazela, futhi ungayiveza kanjani, futhi ungayiveza kanjani, kanye ne-app yakho Isoftware owakhela ekukhanyiseni okuhle kakhulu ukuze ube ekhangayo kakhulu ngangokunokwenzeka kubasebenzisi bakho bokugcina, izivakashi zewebhusayithi yakho. Kule ncwadi, ngizokhombisa izibonelo eziningi zokwakheka kwesoftware ngokugxila kuwebhu njengeplatifomu kanye nokuphepha. Sizoqala okuhlangenwe nakho kokufunda ngokwakha okuyisisekeloFaka i-gell ye-UNIX, ngesipele nezici zokubhala. Ngemuva kwalokho, sizohlola iwebhusayithi ye-Blog eyisisekelo, sithuthukise ibhulogi yethu ngezithombe nezithombe zevidiyo futhi sisebenzisa lezi zici ukuqasha izixazululo zokuphepha zisebenzisa i-software yamahhala, futhi sivikele iseva yethu isebenzisa imodyuli yokufakazela i-pluggable (Pam). Sizobe sesibukeza ukuphathwa kwefayela nokucutshungulwa, ukuhlola ukuhlelwa kwevidiyo, ukunikela ngezwi, ukuskena ibhakhodi yokuskena kanye nokuqashelwa kwezinhlamvu ze-Optical, phakathi kweminye imiqondo. Endleleni sizohlola i-APIS ezosisiza ukuba senze isoftware yethu ibe lusizo futhi iphephe, ngezindlela zamahhala nezikhokhelwayo. Endleleni, sizohlola ukuphepha ngokomzimba kanye namathuluzi asemzimbeni anjengezibhamu kanye nokuklanywa kwemikhiqizo efaka i-barrel and turret kanye ne-drone Sizothatha ikhefu lapho eyakha imidlalo, 2D ne-3DIzinjini ezinikelayo, futhi zisebenze ngehadiwe eshumekiwe uma kwenzeka zifunda izibonelo zesoftware yokunikeza ubukhulu kanye ne-massager ye-electronic evuthayo ye-silicone Rubber ngokulandelana. Endleleni, sizosebenzisa futhi izixazululo zokufunda zomshini sezivele zitholakala ukuze zivikeleke kangcono isoftware yethu. Sizophinde futhi sisebenzise amathuluzi wesitoko atholakalayo kwiWebhu ukuze aqondise futhi avikele inqubo. Le ncwadi iyinkomba empumelelweni yakho ekwakheni uhlelo lwewebhu futhi iluhlanganise nenethiwekhi yobuchwepheshe yezinhlelo zekhompyutha kanye nezinhlelo zokwakha ezishumekiwe, futhi yonke imihlahlandlela yokwakha i-software ne-Hardware yangasemuva engenalo ulwazi lwangemuva noma isipiliyoni sangemuva. LOKHO AKUKHO: Uma ngempela ufuna ukuba newebhusayithi, ungavele usethe isitolo esilula futhi uthengise okudingayo, thumela i-blog, izithombe noma amavidiyo, noma ngenye indlela ngaphandle kokubhala umugqa owodwa wekhodi. Le ncwadi akuyona lokho. Le ncwadi izokufundisa ukuthi ungakha kanjani isoftware ewusizo kakhulu, ngokugcweleKufakwe, kuyasebenza futhi kuvikelekile kunanoma iyiphi isoftware ongayithola, ngoba isebenzisa isoftware yakamuva ekhombisa ukuthi izinkampani ezindala ezikhulile zisebenza, futhi azidlulisele ezinkampanini ezikhona, futhi azidlulisele ezinkampanini ezikhulile zisebenza, futhi azithandeki ukwenza imali engenzi imali engenzi lutho. Uma ulandela le ncwadi eduze, uzofuna ukubhala ikhodi, ikhodi yocwaningo, wakhe izinhlelo zakho zokusebenza, futhi uzokwenza imali kulokho okwenzayo. Ngizokwenza imali kule ncwadi, ngisho nasezigabeni zokuqala, ngoba iqukethe imininingwane abantu abayidingayo futhi bafuna ukuyifunda, futhi isivele ithenga lapho bethenga noma besebenzisa izinhlelo zami zokusebenza. Le ncwadi ngeke yakha uhlelo lokusebenza kuwe, kepha izokukhomba indlela efanele bese uhlomela ngamathuluzi owadingayo kanye namakhono wekhodi uzodinga ukubhekisisa ukuze uthole isoftware wena nabasekeli bakho, izivakashi, amakhasimende,Ama-Riends, umndeni, izivakashi, osonkontileka, futhi abantu be-Intanethi bafuna ukusebenzisa nokuxhasa. Ozofunda: Le ncwadi izokufundisa ukuthi ungakha futhi uthengise kanjani isoftware, isebenza ngempela, i-software ewusizo, ukuqoshwa kwezokuphepha kwebhakhodi, ukuqopha ukuxhumana kanye nezithombe, kanye nokushintshana kwe-Bluetooth (NFC). Le ncwadi izokufundisa ukuthi ungayisebenzisa kanjani ikhompyutha enethiwekhi, ugxile ku-Debian Linux, ukuthi ungakha kanjani ikhodi ye-Bash ukwenza i-PSS engenamthungo, ukuxhumanisa imidiya yenethiwekhi, ukuxhumanisa ama-Pys. Ukuqinisekiswa noma ezinye izinhloso, ukuskena kwe-ID, isithombe kanye nokulinganiselwa kwevidiyo, idathaAma-Ransection ukugcina isoftware yakho iphephile, ukucubungula inkokhelo, ukuhweba nge-cryptocurlous, imisebenzi ye-asynchronous, nokuningi. Uzofunda ukuthi ungawakha kanjani owakho amadivaysi e-Bluetooth, ngamabhethri, amashaja, ama-microcoController, amasekethe, ama-motor kanye nezinzwa, usebenzisa i-soler, ucingo kanye ne-3D ephrintiwe kanye nezinto zokwakha. Ngizokhombisa othishanhloko be-3D Design basetshenziswa ekukhiqizeni okungeziwe nethuluzi nokufa kwenziwa, ngakho-ke uyakwazi ukwenza owakho amadivaysi ashumekile, ama-charger, amasekethe we-elekthronikhi, nokuphuma okusebenzayo. Futhi uxhumane nabo nge-Bluetooth nakuwebhu. Ngokuqondile, sizohlola izifundo ezimbili zamacala, i-massager evubsayo kanye nesibhamu esizenziwe ekhaya, zombili zihlelwe e-OpenScad, ezitholakala njengesibonakaliso sokuqhafaza noma i-Command Line Utility futhi ingahlanganiswa kwiWebhu yemiphumela esheshayo. Uzofunda ukuthi ungakha futhi ubeke kanjani iwebhusayithi kusuka emhlabathini up ngaphandle kokuhlangenwe nakho kwangaphambilini, kwenze kube yinto esebenzayo, evikelekile, enhle, ewusizo futhi iningiesebenza ngokusebenza. Uzofunda ukuthi ungayisebenzisa kanjani ukufunda ngomshini kanye nombono wekhompyutha ukwenza isayithi livikelekile futhi lisebenze kakhulu, thwesa ividiyo nomsindo nge-audios yakho ukuze unikeze onke imininingwane ewusizo ongayisebenzisa, futhi okubaluleke kakhulu ukuletha abantu kwisoftware yakho kanye nebhizinisi. Le ncwadi izogxila kakhulu kwabezindaba, ezokuphepha kanye nokufunda komshini, okuyingxenye emithathu emithathu ezokusiza ekwakheni i-software ewusizo yewebhu ngokufaka amaqiniso ngendlela enengqondo, engokoqobo, izandla nokuzibandakanya ngenkathi i-automatic. Le ncwadi ifundisa i-Unix, ngokukhethekile i-Debian (Ubuntu), i-Bash Shell, Python, HTML, CSS, JavaScript, kanye namaphakeji esoftware asebenzayon njengezicelo, kanye nesoftware ewusizo ye-bash efana ne-git ne-ffmpeg. Ngizokufundisa nokuthi ungathengisa kanjani i-cryptocurrencyction ngokuzenzakalelayo, futhi ngikhokha nge-cryptocurrencyn noma kusuka kumakhadi wedebithi ajwayelekile ngenkathi ukhokha ngisho nezivakashi zakho isabelo semali engenayo uma ukhetha ukwenza kanjalo. Ngizokufundisa ukuthi ungayenza kanjani imali kuwebhusayithi yakho ngokusebenzisa ukukhangisa futhi, ukuthi ungalulungisa kanjani uhlelo lwakho lokusebenza lwezinjini zokucinga futhi ulenze ngokushesha, zibekwe ezingeni lokuqala elizosesha ukukuthola, futhi zibekwe ekusesheni okuningi okuvamile ngangokunokwenzeka. Ngizokufundisa ukuthi ungayithengisa kanjani isoftware yakho, ngikhangise, ukhange kumakhasimende afuna izinsizakalo zakho, futhi wazimele kwi-Intanethi nge-Avenues ezivele zikhona, azibizi futhi zisebenza kahle. Ngizokufundisa ukuthi ungayigcina kanjani idatha yakho kumakhompiyutha e-Cloud asebenzela wena futhi ugcine idatha yakho eshibhile, kanjani ukuhlela iwebhusayithi eyenza lokho okufunayo, nokuthi yini ongayisebenzisa ngayoukufaka isayithi lakho empompini kude nezingcingo zabo ngezaziso, i-imeyili, imiyalezo, izingcingo, kanye nezingcingo eziningi ukuletha abasebenzisi bakho kuwebhusayithi yakho ngemuva kokuchofoza kwakho kuphela. Le ncwadi izogxila ekusebenzeni kokushicilelwa kanye nokusabalalisa abezindaba ngamanani amakhulu, kusukela ku-Petric To Photings kuya kumavidiyo aya kuma-audio, wena lokusebenza omele wena kanye nawe kuphela, futhi kwenza, isoftware yakho nenkampani yakho ibukeka kahle ngendlela engcono kakhulu. Uzofunda namathiphu ambalwa namaqhinga avela kimi, kusuka kumathiphu wokufaka amakhodi, okusebenzayo okufana nokwenza izimonyo nezithombe, okuzobaluleka ngokuziveza ngokwakho amathuluzi atholakele kuwo wonke amapulatifomu okuletha akhoe ekulweni nomzamo, umsebenzi, noma imali kunalokho okudingekayo. Le ncwadi ibizwa ngokuthi "ukuphepha okujulile kwewebhu ngokuphepha ngesibonelo" ngesizathu: Iphatha ngokufunda i-Code, ngokukhethekile nge-Web Poice, kusuka ekumeni okusebenzayo, ngezibonelo zekhodi yokusebenza esebenza ngezinhloso ezisebenzayo ezichazwe embhalweni. Ingxenye yokufunda yalo mbhalo ifaka futhi ukufundwa komshini, ikhodi ngizokukhombisa ukuthi kufanele ngisebenze kanjani i-web ezophatha i-computer metricle Ukufundwa komshini kubaluleke kakhulu uma kukhulunywa ngokuphepha kwewebhu kanye nokuphepha kwesoftware, ngoba kungadla imisebenzi ebingenzeka ngenye indlela. Ikhompyutha yakhoNgena ngemvume ngekhodi yephasi, kepha kungenzeka kube iphephe ukuyisebenzisa uma ingena ngemvume ngobuso bakho. Ungenza ikhompyutha yeseva lokhu kuphephile, ikhompyutha evame ukukubuza ngegama lomsebenzisi nephasikhodi bese lingena kulo, mhlawumbe nesoftware eqinisekisiwe, okulula ukuyisebenzisa, lokhu kungahle kube ngokwanele. Ukubopha isoftware yakho eduze kakhulu kwisoftware yomunye umuntu, njengensizakalo ye-imeyili noma insiza yemiyalezo yombhalo, akwanele ukwenza isoftware yakho iphephe, noma noma ngubani (noma iyiphi indawo oyisebenzisayo). Noma ngubani owakha isoftware evikelekile ngokungenangqondo inomqondo othile wokuthi lokhu kusho ukuthini. Isoftware ingavikelekile ngokwemvelo ngoba amadivaysi nama-akhawunti esiwasebenzisayo ukufinyelela kuwo awahlali onawo, angaba sezandleni zomunye umuntu onenhloso embi yesoftware uqobo. Lokhu kuyinto yokugxila kwale ncwadi. Ikhompyutha enethiwekhi ngokuzenzakalelayoIvikelwe ngethokheni ende ende, ebizwa nge-SSH noma i-SSH noma i-SSH SHELT Key, futhi itholakala kangcono ngeseva yewebhu, ngoba iseva yeWebhu ihlinzeka ukufinyelela okuvulekile kanye namathuluzi okuphepha abuciko asebenza kwiseva uqobo. Iseva yeWebhu inokufinyelela kwisiphequluli sewebhu somsebenzisi, okuyingxenye enamandla kakhulu yedivayisi yomsebenzisi, ngoba yindawo lapho umsebenzisi angafinyelela khona isoftware enethiwekhi. Leli thuluzi lamathuluzi lingahambisa umbhalo, futhi lingarekhoda izithombe, umsindo kanye nevidiyo (njengesithombe sobuso noma amakhadi asemkhakheni angemuva kwedatha enezinombolo ze-syrial ezihlukile futhi eziqinisekiswe yiseva yeWebhu eboshwe kwiWebhu. Usebenzisa wonke amathuluzi onawo, ngale ncwadi uzozihlomisa ngolwazi lokwakha iwebhusayithi ephephile, futhi jikelele aUhlelo lwekhompyutha lwenethiwekhi olusebenzela wena, luyakubhidliza, futhi lubukeka futhi luzwa kahle. Ukuqala kuphi: Wamukelekile ukweqa isigaba ngiqale le ncwadi nge, noma yisiphi isigaba, kwikhodi ngqo oyidingayo, ikakhulukazi uma unesipiliyoni sokufaka amakhodi ngaphambi noma ngamakhodi okusetshenziswa kanye nezibonelo ezisebenzayo. Uma ungenazo isipiliyoni kwikhodi yokubhala, ngincoma kakhulu ukuthi ufunde yonke le ncwadi, futhi ikakhulukazi incoma ukuthi ufunde izigaba ezedlule, ukuze uqiniseke ukuthi le ncwadi ilungile kuwe. Uma le ncwadi ilungekela wena, cabanga ngokuwuphokela kumngane noma isihlobo esingaba nesifiso sokufunda ngentuthuko yeWebhu uqobo, futhi sicabange ukuboleka emuva futhi sikufunda kubo ukugcwalisa izikhala lapho ngikwehlule khona uma uthisha, noma abanye othisha behluleka phambi kwami. Qala lapho uzothanda khona, yonke ingxenye yale ncwadi izoba wusizo uma uhlose ukwakha i-UlutyI-PP, bese ubheka ukuthi izinhlelo zokusebenza ezinhle kakhulu zakhiwe ngomsebenzisi wokugcina engqondweni: Yazi ikhasimende lakho. Manje uyangazi, uyayazi le ncwadi, futhi usukulungele ukuqala. Ukuqala, bamba ikhompyutha (ngisho ne-laptop eshibhile kunazo zonke esitolo sebhokisi, i-Amazon, noma ideskithophu yakudala iyasebenza, bese uyibeka ngendlela esebenza kuwe. Ungayifunda kanjani le ncwadi: Umbhalo uqokonyiswe, usho ukuthi lo mbhalo ungowokuqala komyalo, lapho uzobhala khona ikhodi oyigijimayo. Umyalo wokukhuthaza ikhibhodi enkulu egxile futhi kudinga okuncane ukuthi kungabikho ngokuchofoza, ukusheshisa ukuhamba kwakho kokusebenza nokwenza izinto zibe lula kuwe. Ukuqalisa: Masingene ngaphakathi. Sizoqala ngokwakha ikhodi emshinini wendawo futhi siqale ngaphandle kokwakha iwebhusayithi exhunywe kwi-Intanethi. Lokhu kuphephile ukuqala nge, kubiza lutho, futhi kulula kuwe. Ngokuya ngohlelo lwakho lokusebenza, ukungena egobolondweni le-bash kuzohluka kancane. NgeMac OS, ngincoma ukufaka umshini obonakalayo ngalesi sikhathi, ngoba uzothola ukuhambisana okuningiumshini obonakalayo. Abahlinzeki abahlukahlukene njenge-Virtualbox kanye nama-Cagerolls angagijimisa umshini obonakalayo kuwe, yize kungenzeka futhi ukufaka ubuntu ngqo emshinini okunconywayo ukuze kunconywe okusheshayo, okuhlangenwe nakho okusheshayo. Uma usebenzisa i-Linux noma iWindows, engincoma, kufanele kube lula ukudala iphrojekthi. Vula i-terminal yakho, lungisa ukulinganisa njengoba ubona kufanelekile, bese uqala ukulandela igxathu 2. Uma usebenzisa iWindows, sicela ulandele Isinyathelo 1. Isinyathelo 1: - Abasebenzisi beWindows kuphela Ku-Windows, i-Open Command Prompt esheshayo njengomphathi kanye nohlobo I-WSL -install Isinyathelo 2: - Qhubeka lapha, noma weqa isinyathelo 1 kuya lapha uma ungasebenzisi iWindows Esigungwini esivulekile, (kuya nge-OS yakho, ebizwa nge-Ubuntu kuWindows, e-terminal eMac noma iLinux, noma igama elifanayo), liqala ngokwakha iphrojekthi. Lokhu sikwenza ngomyalo weMKDIR, odala umkhombandlela. Uma udinga ukudala umkhombandlela wokugcina iphrojekthi yakho, enconyelwe, sebenzisaI-CD umyalo wokushintsha kwisikhombi futhi I-CD / PATT / TO / TO / TOCRECY - Indlela ingamafolda (amafayela) andulela umkhombandlela wakho wendawo, indlela yakho ezenzakalelayo yi- ~ noma / ikhaya / igama lomsebenzisi (lapho igama lomsebenzisi lingegama lakho lomsebenzisi). Ukushintshela kwisikhombi esizenzakalelayo, thayipha i-CD noma i-CD ~ Isibonelo seMKDIR - buyisela "Isibonelo" ngegama lesiqondisi Manje unesikhombi esisebenzayo sephrojekthi yakho. Ukuba njengoba kubaluleke kakhulu ukuthi lolu hlelo lugcinwe uma kwenzeka udinga ukushintshela kumshini ohlukile noma ukuthumela ikhodi oyibhala ngakho-ke isilungele i-Web, sizokwakha umbhalo ukuze silwele umkhombandlela wakho ezitebhisini ezimbalwa ezizayo. Kepha ukwakha umbhalo kuthatha ikhodi encane, futhi ikhodi idinga ukuthi isebenze ngokuzenzakalela ibe lusizo ngangokunokwenzeka. Ngakho-ke ake sakhe iskripthi sokwakha imibhalo kuqala. Ake siqale ngokudala iskripthi futhi siyenze. Sizosebenzisa i-sudo, Chmod futhi sithinte lokhu, bese ushayela umbhalo


sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Manje sesidale iskripthi, senze kwavela, futhi sekulungile ukuyihlela. I-NANO ingumhleli wombhalo ozokuvumela ukuthi uhlele umbhalo ngaphandle kokuchofoza, okulula kakhulu kunokusebenzisa isikhombimsebenzisi somsebenzisi. Ukuhlela ifayela nge-nano, sebenzisa i-nano bese indlela eya kwifayela. Ukwenza iskripthi esenza iskripthi, kufana nendlela efanele ekwenzeni umbhalo wethu kwasekuqaleni. Sizosebenzisa ikhodi efanayo nangaphezulu, sifaka esikhundleni segama leskripthi, "I-Ecryript" ngepharamitha yokuphikisana, $ 1. Lokhu kusivumela ukuba sibize umbhalo ngokuthayipha nje i-sudo redo Breadcript, lapho singakha noma yimuphi umbhalo omusha ngokufaka esikhundleni esithi "Breadcript" negama leskripthi sakho. Ikhodi e-Nano kufanele ibukeke:

sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
Futhi ukuvala i-nano, singabamba ukhiye wokulawula bese sicindezela u-X, bese u-Y ukuchaza esindisa ifayela, bese ushaya ukubuya. Manje esikhundleni sokuthayipha le miyalo emithathu ukuhlela iskripthi, sizokwazi ukuthayipha i-Sudow Brecript ukuhlela iskripthi. Lokhu kuyasebenza! Futhi noma yimuphi umbhalo omusha ungaqhutshwa kalula ngokuwushayela egobolondweni. Masilondoloze umsebenzi wethu manje: Bhala umbhalo wesipele ukuze usindise umbhalo wethu omusha bese ubuyela emuva kusikhombisi sethu sephrojekthi, ngenkathi bese ubeka umbhalo we-backup.

sudo ascript backup
Manje, eNano:

sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Lapho / Indlela / ku-Directory kuyindlela eya kuphrojekthi oyidalile ngeMKDIR. Kamuva kuso sizofunda ukuthi singakopisha kanjani izindlela eziphindwayo ezinje nge-loop kanye nohlu, okuyikhodi encane, kepha okwamanje masiyigcine ilula futhi ibe nemigqa embalwa. Ukuze usebenzise lo mbhalo bese uhlela kabusha ikhodi yakho, gcina ifayela eNano nge-control + x, y bese ubuya, bese uthayipha okungezansi kugobolondo lakho

backup
Uma ugqugquzelwa yi-password ngenkathi ufunda le ncwadi futhi ulandela egobolondweni, sicela ufake iphasiwedi yakho yomsebenzisi ngokufanele, uzoba nomzamo ezintathu ngaphambi kokudinga ukugijima kabusha umyalo. Ungasebenzisa imicibisholo ephezulu naphansi ukuyokwazi ukuhlela imiyalo bese uhlela, uma kufanele udinge ukusebenzisa noma yini kabili. Cindezela up up up futhi phansi ngezikhathi ezithile ukukhetha umyalo, ngaphambi kokuhlela umyalo ngesokunene, imicibisholo yangakwesobunxele bese ususa ukhiye kanye nekhibhodi, bese uyisebenzisa ngokubuya. Siyakuhalalisela! Ukwazile ukudala umbhalo owesabekayo wesipele obeka imibhalo emibili ebalulekile ye-Shell kwisikhombi sakho esisebenzayo. Singase sihambisa izinto kamuva njengoba iphrojekthi iba nkulu, kepha lokhu kuyasebenza manje. Ake siqhubeke sibheke efwini, sizosebenzisa i-GitHub yalokhu (yize kunezisombululo eziningi ze-git zesipele, zonke ziseduze okufanayo.) I-GIT yi-software yokulawula okukuvumela ukuba ubuyise ukuhlelwa kwakho kwakho isoftware njengoba uwenza kwiseva, kuyilaphoFuthi ukunika amandla okukwazi ukulanda wonke amakhophi wesoftware yakho ngemuva kwephasiwedi noma ukhiye. Kubangelwa ukonga isoftware yakho, ikakhulukazi njengoba sithuthela ezimweni ezivikelekile ze-Linux eziphule kwesinye isikhathi lapho umugqa owodwa we-code wehluleka, ushiya ukhiye uma ungatholi ithuba lokuyisekela phezulu ngokuzenzakalelayo, esizomboza. Uma ungekho vele usebenzisa umshini we-Ubuntu Virtualter kuleli phuzu, ngiphinda ngisebenzise umshini we-Ubuntu Virtualter kuleli phuzu ngoba kuzokwenza impilo yakho ibe lula lapho ufaka wonke amaphakheji adingekayo ukuze wakhe iwebhusayithi esebenzayo kanye nokufunda okujulile ukusebenza kukhompyutha yakho. Sizohambisa ikhodi kwiseva yeWebhu kungekudala, kepha sifuna ukuqiniseka ukuthi kunezendlalelo ezimbalwa zokuphepha ngemuva kweseva yethu yeWebhu ezimelana nobugebengu, futhi ziqashe amaphakheji e-Linux ukuze akwenze Lokhu. Uma usafuna ukusebenzisa iMac OS, wamukelekile ukusesha nokufakaAmaphakeji adingekayo ku-inthanethi, kepha kungenzeka angabi ezinye izindlela zayo yonke iphakheji le ncwadi noma uchungechunge oluzosibekela. Masingeze imiyalo embalwa yokwenza umsebenzi wethu nge-Isipele Isipele ngokusebenzisa umyalo we-Sudo Script

# ...
git add –all
git commit -m “backup”
git push -u origin master
Nakulokhu futhi, lawula u-X ukuze ulondoloze. Manje kudingeka senze ukucushwa kwesikhathi esisodwa sale phrojekthi. Ngoba kungekudala kuzoba yiphrojekthi ye-git, asidingi ukuthayipha yonke imiyalo ngaso sonke isikhathi lapho sisuka endaweni yokugcina izinto, kepha sizothola i-hanges yalokhu lapho sibhala imibhalo yethu yokuthumela. Ukuze uqale, ake siqinisekise ukuthi sisesikhombi esifanele futhi siqale indawo yokugcina i-git futhi sikhiqize okhiye be-SSH.

cd /path/to/directory
git init
git branch -m master
ssh-keygen
Ngemuva kokuthayipha i-SHSH-keygen, ukhiye omusha kufanele ugcinwe kwifolda yasekhaya ngaphansi kwefolda ebizwa nge-.ssh. Ibizwa nge-ID_RSA.PUB. Ake sithole le nkinobho bese sikopisha. Ukuyibona,

cd ~
cat .ssh/id_rsa.pub
Kopisha umbhalo obuyiselwe umyalo wokugcina, bese udala i-akhawunti nomhlinzeki wakho we-git (kahle github), ngaphambi kokungeza ukhiye we-SSH kwi-akhawunti yakho. Uma usune-akhawunti, chofoza imenyu ephezulu kwesokudla bese ufaka amasethingi, ngaphambi kokungeza ukhiye wakho we-SSH ku-SSH ne-GPG Keys ngaphansi kwemenyu. Khetha Faka ukhiye we-SSH bese ungeza eyakho ngokunamathisela futhi uyinikeze isihloko, ngaphambi kokonga futhi ubuyele ku-GitHub ukudala indawo entsha. Lokhu kuyafana nabanye abahlinzeki be-git, kuzodingeka ufunde imibhalo yabo. Ekuhlelweni okusha kokubeka kabusha, nikeza indawo yakho igama elichazayo bese unquma ukuthi uyafuna ukuyishicilela, futhi uqiniseke ukulungiselela amafayela okufakwa okwamanje. Lapho sekukhishwe indawo yokugcina impahla, kopisha i-Clone nge-SSH URL, bese uyinamathisela kumyalo olandelayo.

git remote add git://… (your remote URL)
Manje usungabuyela emuva kwindawo yakho yokubeka nge-CD, uzokwazi lokhu. Zama umbhalo wakho wesipele manje ngesipele Kuhle! Manje singathola ukufaka amakhodi ngempela. Ase sifake i-Django manje ukuthi sikubambe kahle ku-bash ne-git. I-Django izosivumela ngokuzenzakalelayo isoftware yethu, i-bash ingenza lokhu kodwa i-Django kufanele ibe nokuqaliswa okuphephile okulula (kungakhubazeka futhi kulungiselelwe kalula). Ukufaka isoftware e-Ubuntu, sizosebenzisa umyalo we-Sudo Apt-Get. Okokuqala, ake sivuselele futhi sithuthukise isoftware esasinayo. Lokhu kungenziwa nge-Sudo Apt-Thola Ukuvuselelwa kanye ne-Sudo Apt-Thola ukuthuthuka- Okulandelayo, ake sifake i-Python nemvelo yethu ebonakalayo, ikhaya lekhodi yethu, ngomyalo olandelayo: I-Sudo Apt-Get Faka Python-is-venv Lokhu konke okudingayo ukuze uhambe nge-DJango ngokuya ngokufakwa kwesoftware kwisibonelo sobuntu. Ku-Windows neLinux Lokhu kufanele kube ngqo ngqo, kepha nge-Mac ungafuna ukufaka umshini obonakalayo futhiI-Linux kuyo usebenzisa imvelo yamahhala noma ekhokhwayo ebonakalayo efana ne-Virtualbox noma i-Cagerolls Desktop bese uphinda izinyathelo ezingenhla ukuze usethe imvelo yobuntu. Ubuntu bubalulekile kulokhu ngoba yisoftware amawebhusayithi asebenza futhi abenze bakwazi ukusingatha amawebhusayithi ngayo yonke le software eshiwo ngenhla. Ake simbele ku-Django. Kwisikhombi sethu futhi futhi, nge

python -m venv venv # Kwakha imvelo ebonakalayo lapho ikhodi igcinwa khona
source venv/bin/activate # Kusebenze indawo ebonakalayo
pip install Django
django-admin startproject mysite . # Lapho i-MySite iphrojekthi engiqala khona kwisikhombi sami samanje.
I-Django isisenza nje siqale, ngoba i-DJango ibambe iseva yeWebhu futhi yenza konke esikudingayo ukuthola iwebhusayithi eyisisekelo yendawo phezulu nokusebenza. Manje njengoba sesifakwe i-Django, ake sihlele amasethingi kancane ukuze sikwenze kube yindlela esidinga ngayo. Okokuqala, ake sakhe uhlelo lokusebenza olusha

python manage.py startapp feed
Uzobona uhlelo lokusebenza lokuqala libizwa ngokuthi okuphakelayo. Uhlelo lokusebenza kufanele lubizwa noma yini oyithandayo, futhi sizokwakha izinhlelo zokusebenza ezintsha, kepha igama lohlelo lokusebenza ngalunye kufanele liguquguquke isikhathi ngasinye lapho uhlelo lokusebenza lubhekiselwe kwikhodi. Ukwengeza uhlelo lokusebenza olusha, sizohlala sihlela izilungiselelo.Phy Kokunye uhlelo lokusebenza okwenziwe, okuthiwa ku-StartProject, Aleafter App. Usebenzisa i-nano,

nano app/settings.py
Kuzilungiselelo, thola ufakiwe_apps bese uhlukanisa [] emigqeni emi-3. Kusetshenziswa izikhala ezine kulayini wesikhungo esingenalutho, engeza 'Okuphakelayo', noma igama lohlelo lwakho lokusebenza. Lesi sigaba sezilungiselelo.Phalo kufanele zibukeke:

INSTALLED_APPS = [
    'feed',
]
Ngaphambi kokuthi sikhohlwe, ake sihlole ukuthi i-Django iyasebenza. Usebenzisa umyalo we-python ukuphatha.py RunServer 0.0.0.0:8000, singakwazi ukuqhuba iseva bese sihamba esipheqululini seWebhu kwikhompyutha sisebenzisa ikhodi ku-HTTP: //) Yeka iseva ngokulawula c, okufanayo nanoma yimuphi omunye umyalo. Manje, ake sikubhale ukubhala ikhodi ethile yePython. I-Django inezinto ezintathu eziphambili, zonke zisebenza ngekhodi ngokuphelele. Izakhi zibizwa ngokuthi imodeli, ukubukwa kanye nethempulethi, futhi ngalinye lisezingeni eliphakeme neliphansi ngokulandelana ngaphambi kokuba ikhasi lewebhu lihanjiswa kumsebenzisi. Imodeli yikhodi egcina imininingwane kwi-database ukuze ibuyiselwe, ukuhlungwa nokuhunyushwa. Umbono unquma ukuthi imodeli ihunyushwa kanjani, yatholwa futhi yaguqulwa, cishe yonke imibono izosebenzisa imodeli ngqo. I-template iyikhodi ye-HTML enezinsimbi ezingeziwe kanye namakhwela abizwa ngokuthi ulimi lwesifanekiso. Ithempulethi ihunyushwa ngokubuka lapho igcwele ikhodi yePython futhiumongo njengamamodeli nolwazi (izintambo ezisetshenziswayo kanye nezinombolo) kusuka ekubukweni. I-Django inezinye izingxenye nayo, kufaka phakathi kepha ingagcini ku: Izilungiselelo, ezilungiselela uhlelo lokusebenza njengoba sixoxile. Ama-URLs, angamaphethini umsebenzisi alandela ukuthola ukufinyelela ezingxenyeni ezithile zohlelo lwewebhu. Amafomu, achaza ukuthi imininingwane ethunyelwe kanjani kwiseva isingathwa futhi yanikezwa ku-database kanye nomsebenzisi. Lezi ziyisisekelo sokucutshungulwa kolwazi ohlangothini lweseva, futhi angemukele noma yiluphi uhlobo lolwazi izitolo zekhompyutha, izintambo ezithenjezelwe kakhulu, izinombolo, kanye nama-booleans eqiniso (ama-Checks). Izifanekiso, okuyikhodi ye-html kanye nolimi lwe-html kanye ne-template yolimi bese uvala igebe phakathi kwePython ne-HTML, imininingwane ye-Python ingafakwa njengekhodi ye-hyml etholakala nge-web ekhawulelwe, ilusizo ngezinhloso ezahlukahlukene kudivayisi eyihlane engeyenau-eed ukuze abe eduze kweseva. Amafayela a-Static, ajwayele ukugcwala kwe-javascript futhi imitapo yolwazi lapho iseva isebenza futhi ixhumeke ngethempulethi. Amafayela wemidiya, lapho iseva esebenza noma aphethwe ngaphandle, noma abhalelwe nje kuseva ngaphambi kokucutshungulwa futhi athunyelwa kwenye iseva (ibhakede) yokusingathwa. I-Middleware, okuyizingcezu zekhodi eziqhutshwa ngasikhathi sinye njengokubukwa konke futhi kubhekwa "kufakiwe" ekubukeni. Ama-processor womongo, acubungula umongo wokubuka ngakunye futhi asetshenziselwa ukwengeza umongo owengeziwe. Izivivinyo, eziqinisekisa ukuthi umsebenzisi noma isicelo zidlulisela izidingo ezithile ngaphambi kokuba kunikezwe umbono. Abathengi, ababeka ukuthi amawebhusayithi aphatha kanjani futhi aphendule ekuxhumaneni. Admin, esetshenziselwa ukubhalisa amamodeli ukuze akhohliswe ngokuningiliziwe ekhasini le-Django Admin, lapho i-database ingalawulwa khona ngesimo esibonakalayo. UCelery, ochaza izingxenye zemisebenzi ye-asynchronous zekhodi ye-Django zingaqalanning ngaphambi kokuya emsebenzini olandelayo noma umugqa wekhodi. I-Django ingaba nezinye izinto eziningi, esizoxoxa ngemininingwane lapha. Kunezindlela eziningi zokwenza i-DJango zisebenze ngokwengeziwe, engeza ama-websockets, asheshayo, iziteshi zokuxhumana ezihle kakhulu, nenqwaba yezinye izingcezu zesoftware zokunweba imali, ikakhulukazi emisebenzini yokubuka, lapho iningi lemisebenzi Ikhodi yenziwa. Imisebenzi yokubuka ibalulekile ngoba imvamisa imemezela yonke ingxenye yekhodi eqondene nephethini ethile ye-URL, noma ingxenye yeseva. Okokuqala, ake sihlole imisebenzi yokubuka. Imisebenzi yokubuka iqala ngokungenisa ikhodi okubonisayo okuzosetshenziswa ekubukeni, futhi kuchazwa kusetshenziswa izincazelo zomsebenzi ezijwayelekile noma amakilasi. Imibono elula kunazo zonke ichazwa yi-def yencazelo yomsebenzi, bese ubuyisela i-httpresponse ngethempulethi eyisisekelo. Ake siqale ngokuchaza umbono oyisisekelo wokubuyisa umbhalo "Sawubona World". Khumbula ukuthi isikhathi ngasinye lapho ufakaFter isitatimende esinjenge-def, uma, ngenkathi, ngoba, njll, uzodinga ukwengeza izikhala ezi-4 zencazelo ngayinye evelele ongathanda ukuyisebenzisa emsebenzini wakho. Sizongena kulokho ngakunye kwalezi kungekudala. Ukusuka kwisikhombi sendawo yethu, hlela okuphakelayo / ukubukwa.py.py ifayela usebenzisa i-nano bese wengeza imigqa elandelayo kuze kube sekupheleni kwe

from django.http import HttpResponse

def hello(request):
    return HttpResponse('hello world')
I-Django's Httprespense iyaphendula ngentambo yombhalo, ebonisiwe ngokuvula nokuvala '. Njalo lapho udlulisa imininingwane emsebenzini noma ekilasini, njengesicelo noma ngentambo, uzodinga ukusebenzisa umzali (ukuvula nokuvala). Lokhu akusikho konke esikudingayo ukubona ukubuka kwethu okwamanje. Vele, asikaze sitshele iseva lapho umbono ulapho ngqo, kusadingeka sichaze indlela lapho umbono okufanele ulunikeze khona. Ake siqale ngokuchaza indlela eyisisekelo kuhlelo lokusebenza / ama-URL.Phy, futhi sizongena emaqenjini emindeni ngokuhamba kwesikhathi. Kuhlelo lokusebenza / ama-URLS.PY, engeza umugqa ngemuva kwezitatimende zokungenisa ngemuva kokuqala ukungenisa ukubuka esisanda kudalwa.

from feed import views as feed_views
Manje, ake sichaze iphethini yokubuka. Amaphethini wokubuka anezakhi ezintathu, ingxenye yendlela, etshela iseva lapho ukubukwa khona khona ngaphakathi kweseva (indlela ye-URL eyayingenayo umsebenzisi kubha yewebhu), ingxenye yokubuka lapho umbono uchaziwe khona, futhi a Igama elinobungane lombono ngakho-ke kulula ukuyithola kabusha iphethini ye-IT lapho usebenza ngethempulethi, ikakhulukazi ngakho-ke igama lingashintshwa futhi livuselelwa uma kunesidingo ukwenza isikhala sokubukwa noma sithathe igama elithile. Kunengqondo ukwenza izinto ngale ndlela futhi uvumelana nezimo, ngoba ikhodi yakho yekhodi izoba yindawo eshintshayo edinga ukuguquguquka nokuthuthuka ukuze kube lula futhi kube lula ukusebenza nakho. Nakhu ukuthi ukubukwa kwakho kuzobukeka kanjani, ungangeza lokhu ku-URLPATTRS = [isigaba sohlelo lokusebenza / ama-URL.Phs.Phy. Iphethini yokubuka ichazwa ngezakhi ezintathu ezichazwe ngenhla, kanye nomsebenzi obizwa nge-Path. Amaphethini akho e-URL uhlu, ngakho-ke qiniseka ukuthi uhlala uqeda into ngayinye kuzongekhefana, ngoba lokhu kuhlukanisa ngamunye. Into ngayinye kufanele futhi iqhubeke nomugqa omusha, futhi kanye nezikhala ezine ngaphambi kwayo, njengohlelo lokusebenza kuzilungiselelo.Phy. Sizochaza ingxenye yokuqala yombono ngomsebenzi ongenalutho, ukuze kwakhiwe umbono oqhuba umkhombandlela wezimpande weseva yewebhu. Ama-urls akho.PY kufanele manje abukeke

from feed import views as feed_views

urlpatterns = [
    path('', feed_views.hello, name='hello'),
]
Lesi yisisekelo sokwenza iwebhusayithi nge-Django e-static ngokuphelele. Ukuze wenze iwebhusayithi eshukumisayo lapho singaqala khona imininingwane yokulondolozwa, njengezithombe, amavidiyo, umsindo nokuningi, sizodinga ukusebenzisa amamodeli, esizohlola ngokulandelayo. Okwamanje, ake sihlole ikhodi yethu bese sisebenzisa iseva. Ukuhlola ikhodi yamaphutha, run:

python manage.py check
Uma kuneminye imilayezo yephutha, kufanele ubuyekeze ngokucophelela izinguquko ozenzile kuhlelo lwakho lokusebenza futhi ubone ukuthi ngabe kukhona yini okudinga ukulungiswa, njengesikhala esengeziwe, umlingiswa owengeziwe, noma iyiphi i-typo, noma iyiphi i-typo, noma iyiphi i-typo, noma iyiphi i-typo, noma yikuphi ngengozi umlingiswa osusiwe, noma yini enye. Ukufundwa ngomlayezo wephutha (uma unayo), kufanele ukwazi ukubona indlela eya kwifayela olidalile noma elihlelwe kanye nenombolo yomugqa, ngakho-ke bheka lelo fayela nomugqa futhi ubone ukuthi yini ekhona . Uma usuyilungisile inkinga, gijima umyalo ongenhla futhi. Lapho isoftware yakho isilungele ukugijima futhi iyasebenza, uzobona okuphumayo "Ukuhlola kohlelo akukhonjwanga zingqinamba." Manje usukulungele ukuhamba. Gijimisa iseva nge:

python manage.py runserver 0.0.0.0:8000
Manje vula isiphequluli sewebhu futhi uzulazule ku-HTTP: // I-Localhost: 8000. Kufanele ubone umbhalo ubuya kubazali kanye nezingcaphuno zomsebenzi we-HTTPresponse ekubukeni kwakho. Lesi yisibonelo esiyisisekelo nje, kepha uma ukwenze lokhu kude, uyakuqonda izisekelo ze-linux, bash, uPython, nomsebenzi we-Django. Ake sigaye sijule ukuze sifinyelele kuma-modeli athile wedatha, futhi uhlole amandla ekilasi lePython ekugcinweni kwemininingwane. Ngemuva kwalokho, sizoqala ukuthola ukubamba ku-HTML kanye ne-CSS ngaphambi kokuthi isayithi lethu lihleleke ngokuphelele, liguquguquke futhi livikeleke lisebenzisa iJavaScript kanye nokufunda komshini. Amakilasi agcinwe kumamodeli.py ohlelo lwakho lokusebenza. Usebenzisa i-Nano, hlela uhlelo lokusebenza / amamodeli.Spy bese wengeza isigaba esisha. Isigaba sichazwa nencazelo yekilasi futhi sidlulisela i-superclass ukuthi ifa kusuka kulo, kuleli cala amamodeli.Model. Igama lekilasi liza ngemuva kwencazelo yekilasi, nangemva kokuchazwa kwekilasi A: (IColon) iyasetshenziswa, ngaphambi kwezimfanelo nezincazelo zomsebenzi eziboshwe ekilasini ziboshwe ngezansi. Ikilasi LethuIdinga i-ID esingayisebenzisa ukuyibuyisa futhi siyigcine ihlukile, futhi idinga nenkambu yombhalo ukugcina imininingwane ethile. Kamuva kuqhubeke singangeza isikhathi, amafayela, ama-booleans (izincazelo zeqiniso noma ezingamanga ezingasiza ikhodi yethu ukuthi zenze izinqumo ngalokho okufanele zikwenze ngemodeli, futhi kungasetshenziselwa ukubopha imodeli kumsebenzisi ungene ngemvume kwiseva, nokuningi. Ake siyeke ikhodi

from django.db import models # Ukungenisa okusetshenziselwa ukuchaza ikilasi lethu futhi kunezimfanelo zethu

class Post(models.Model): # Incazelo yekilasi lethu uqobo
    id = models.AutoField(primary_key=True) # I-ID yemodeli yethu, ukhiye okhiqizwa ngokuzenzakalelayo ozosivumela ukuba sibuze imodeli, sigcine ihlukile, futhi ilusizo lapho sidinga ukuxhumana nemodeli uma seliwe.
    text = models.TextField(default='') # Izimfanelo zekilasi lethu, kulokhu, umbhalo othile, wehlisa isithunzi esingenalutho.
Vala bese ugcine ifayili njengoba senze ngaphambi kokuqeda. Kuneminye imikhakha eminingi nezinketho eziningi esizohlola lapho sibuyekeza lesi sigaba njengoba uhlelo lwethu lokusebenza luvela, kepha lesi izidingo eziyisisekelo zokwenza uhlelo lokusebenza ukuthumela umbhalo othile. Kodwa-ke, le modeli ngeke isebenze yedwa. Njengoba kuchaziwe ngaphambili, sizodinga ukubuka ngokwezifiso nendlela yangokwezifiso ye-URL yokwenza le modeli ukuthi isebenze, futhi sizodinga nefomu kanye nethempulethi. Ake sihlole ifomu kuqala. Ukuchaza ifomu, hlela uhlelo lokusebenza / amafomu.Spy ne-nano bese wengeza imigqa elandelayo. Sizodinga ukungeniswa kwezinto ezimbili, isigaba sethu samafomu, kanye nemodeli esadale (feed.models.Post), incazelo yekilasi efana nemodeli ezochaza i-meta exhumana nge. Ifomu lingaba nomsebenzi wokuqalisa olibeka kususelwa kulwazi ngesicelo, imodeli noma ngenye indlela, sizohlola lokhu ngokuhamba kwesikhathi. Amafomu amamodeli alusizo kakhulu ngoba angakha imodeli noma ahlele imodeli,Ngakho-ke sizowasebenzisa bobabili. Masichaze eyodwa ngezindlela.Phlisayo

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',)
Lezi yizisekelo zefomu nemodeli ebukeka ngayo. Leli fomu lemodeli lingasetshenziswa ukuhambisa noma ukuhlela okuthunyelwe, ukuguqula umbhalo oqukethe. Sizobheka ukuhlanganisa leli fomu ngombono olandelayo. Okokuqala, ake senze ukufuduka futhi sihambisa imininingo egciniwe ukuze ikhodi yethu ingasebenzisana nemodeli lapho isebenza. Ukuze wenze lokhu, gijimani imiyalo elandelayo:

python manage.py makemigrations
python manage.py migrate
Lokhu kuzothatha umzuzu ukuzokwenza, kepha uma kwenzeka, kuzokuvumela ukuthi ufinyelele imodeli ekubukeni, Middleware, noma kwenye indawo ku-software. Masiqhubeke ngokwenza umbono lapho singabona khona imodeli yethu. Hlela okuphakelayo / ukubukwa.Pokuhlelwa bese wengeza ikhodi elandelayo, njengoba kuphawuliwe. Ngeke udinge ukufaka noma yini ngemuva kwesibonakaliso #, leyo khodi yimibono esetshenziselwa ukukhombisa imininingwane ngekhodi. Sizoqala ngokungenisa imodeli yethu ekubukeni, futhi sikungeze kumongo lapho singayivumela khona esithebulethi njengohlu lokuboniswa. Okulandelayo, sizokwengeza ithempulethi lapho singanikeza khona ifomu nemodeli enenkinobho yokwakha into entsha ngokususelwa kwimodeli bese uyithumela kuseva. Lokhu kuzwakala kuyinkimbinkimbi, ngakho-ke asithathe nje isinyathelo ngesinyathelo. Ngaphambi kokuthi siqede umbono, ake sakhe isifanekiso esivele sinikeze imodeli futhi siqiniseke ukuthi singayibona ngokwakha okuthunyelwe okusha egobolondweni. Nakhu ukuthi lowo mbono kufanele ubheke kanjani:

from feed.models import Post
from django.shortcuts import render, redirect
from django.urls import reverse

def feed(request):
    posts = Post.objects.all() # Buza konke okuthunyelwe ku-database kuze kube manje
    return render(request, 'feed/feed.html', {
        'posts': posts,
    })
Konke lokhu kubukeka kulula impela kuze kube yilapho sifika ezansi. Nikeza, inani elibuyiselwe umsebenzi esikhundleni sempendulo ye-HTTP njengesibonelo esedlule, ngaso sonke isikhathi kuthatha isicelo njengokufaka kwayo okokuqala, kwamukela umongo (kulokhu okuthunyelwe ku-database), okungenziwa manje kwisifanekiso , bese ibuyisa isifanekiso esichazwe emsebenzini. I-template izoba yidokhumenti ye-HTML enolimi oluncane olubizwa ngeJinja2, olunikezela ngemininingwane ye-Pyphon ku-HTML. Ukuqala ukudala izifanekiso, yenza izinkomba ezimbili kokuphakelayo.

mkdir feed/templates
mkdir feed/templates/feed
Okulandelayo, hlela ithempulethi ku-Directory ngenhla, okuphakelayo / izifanekiso / okuphakelayo, bese wengeza ikhodi yalesi sibonelo. Ake sibheke ithempulethi yalesi sibonelo.
 
<!doctype HTML>
<html>
<body>
<legend>Feed</legend>
<hr>
{% for post in posts %}
<p>{{ post.text }}</p>
{% endfor %}
</body>
</html>
 
Lesi ithempulethi elula kakhulu. Kuchaza ukuvula nokuvala amathegi e-HTML, ithegi yohlobo lwedokhumenti, umaki womzimba onesihloko se-Legend, ithegi yebheki elingeza umugqa omncane esikrinini njengesigaba ithempulethi. Lokhu konke kudinga ukunikela okuthunyelwe, kepha akukho ku-database okwamanje. Ake sakhe amanye ngegobolondo. Singagijimisa igobolondo nge-phante.py

python manage.py shell
Manje, ake singethembele imodeli yethu yeposi

from feed.models import Post
Okulandelayo, sizokwakha okuthunyelwe okulula ngentambo bese siphuma egobolondweni. Intambo ingaba yinoma yini, inqobo nje uma umbhalo ofanele.

Post.objects.create(text='hello world')
exit()
Okokugcina, sizodinga ukwengeza iphethini ye-URL ekuphathweni kwethu. Ngoba uhlelo lwethu lokusebenza lokuphakelayo luzosebenzisa ama-URL amaningi futhi sifuna ukugcina osayizi befayela lincane, ake sakhe ama-URLS endawo.Pluy kuhlelo lwethu lokusebenza lokuphakelayo olubukeka kanjena:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.feed, name='feed'),
]
Sizodinga futhi ukuhlela ama-URL.Phy kuhlelo lokusebenza lwesisekelo, noma yini esinqume ukuyibiza, lokhu kwakuyisikhombisi sokuqala esidaliwe. Hlela uhlelo lokusebenza / uhlelo lokusebenza.Spy futhi ungeze okulandelayo kumaphethini we-URL

from django.urls import include # phezulu

urlpatterns = [
    # ... ikhodi yangaphambilini lapha
    path('feed/', include(('feed.urls'), namespace='feed')),
]
Manje, lapho sisebenzisa iseva ngePython Phatha.Spy RunServer, sizobona ikhasi esilidalile ngoba sinemodeli, ukubukwa kanye nethempulethi kanye nephethini ye-URL, kanye nezinto ezise-database. Okulandelayo, ake sisebenzise ifomu esilidalile bese liqala ukudala okuthunyelwe kwethu. Kepha ngaphambi kokuthi sibhale ikhodi eningi, ake senze isipele sisebenzisa umbhalo esiyibhale ngaphambili, isipele. Qalisa lo mbhalo egobolondweni, ulinde izikhathi ezimbalwa, futhi yonke ikhodi izosekelwa lapho isembozo sethu se-git.

backup
Ukusebenzisa ifomu kulula kakhulu. Sizongenisa ifomu lethu, engeza isipele sesicelo seposi ekubukeni, bese ugcine okuthunyelwe ku-database ngaphambi kokuqondisa kabusha ekubukeni okufanayo. Singasebenzisa umsebenzi wokuqondisa kabusha esivele singenise, futhi omunye umsebenzi obizwa nge-reverse ukuthola i-URL yephethini yokubuka. Sizobuza lokhu ngentambo 'Okuphakelayo' Okuphakelayo 'ngoba amagama afakiwe wephethini efakiwe awondla, futhi umbono ubuye wabizwa ngokuthi okuphakelayo.

from feed.forms import PostForm

def feed(request):
    posts = Post.objects.all() # Buza konke okuthunyelwe ku-database kuze kube manje
    if request.method == 'POST': # Phatha isicelo seposi
        form = PostForm(request.POST) # Dala isibonelo sefomu bese ugcine idatha kuyo
        if form.is_valid(): # Qinisekisa ifomu
            form.save() # Gcina into entsha
        return redirect(reverse('feed:feed')) # Ukuqondisa kabusha ku-URL efanayo ngesicelo se-Thola
    return render(request, 'feed/feed.html', {
        'form': PostForm(), # Qiniseka ukuthi udlulisa ifomu kumongo ukuze sikwazi ukukunikeza.
        'posts': posts,
    })
Manje, sizodinga ukubuyekeza ithempulethi ukuze i-akhawunti ngefomu elisha. Singakwenza lokhu ngokusebenzisa
Ithegi ku-HTML futhi unikeze ifomu kwithempulethi ye-HTML ngenkinobho yokuhambisa. Sizodinga futhi ithokheni ye-CSRF, ithokheni evimbela amasayithi angaphandle ekuthumeleleni kwifomu ngaphandle kokulayisha kuqala ikhasi.
 
<!doctype HTML>
<html>
<body>
<legend>Feed</legend>
<form method=”POST”>
{% csrf_token %}
{{ form }}
<button type=”submit”>New Post</button>
</form>
<hr>
{% for post in posts %}
<p>{{ post.text }}</p>
{% endfor %}
</body>
</html>
 
Ake sikwephule lokhu. Kunesigaba esisha sefomu, ithokheni, ifomu ngokwalo, nenkinobho yokuhambisa. Kulula, kepha uma sikubheka, singafuna ukukwenza kubukeke kangcono. Kuyasebenza, singathumela okuthunyelwe okusha ngefomu futhi manje sebesindisiwe ku-database. Kunezinto ezimbalwa ezenzeka lapha. Sisebenzisa amathegi e-HTML ukumemezela ukuthi idokhumenti idokhumenti ye-HTML, sisebenzisa ithegi ye-template ({% ...%}) ukuhumusha ithokheni lefomu, elinye, {{{{{{{{{{{{{{{{{{{...}} ukunikela ngefomu. Siphinde sibe ne-loop ukuze sinikeze umbhalo usebenzisa amathegi we-block kanye nethegi yethempulethi. Amathegi e-block abaluleke kakhulu ngoba singachaza ukuthi izingxenye zethempulethi zihunyushwa kanjani nazo, futhi amathegi wethempulethi ayisisekelo sendlela esibeka ngayo okuguqukayo kwikhodi yethu. Manje kudingeka senze uhlelo lwethu lokusebenza lubukeke lube ngcono, ngoba manje lubukeka lusekelo ngempela. Lokhu singakwenza ngokusebenzisa i-CSS, noma ku-inline, noma emakilasini aboshwe entweni ngayinye kudokhumenti. I-CSS imnandi impela ngoba itshela konke okusekhasini ukuthi kufanele libukeke kanjani,Futhi kungenza ukuthi kubukeke kukuhle impela. Kunemitapo yolwazi embalwa engakwenza lokhu, kepha ukuya kwami ​​kuya ku-bootstrap. I-Bootstrstrap ingalandwa kuwebhusayithi yabo,Llbootstrap.com/. Lapho bese lapho, cindezela inkinobho ukuze ufunde amadokhumenti wokufaka, bese ukopisha ikhodi kusuka ku-CDN Isigaba. Uzodinga le khodi phezulu kwedokhumenti lakho le-HTML, kuthegi elibizwa ngekhanda. Futhi, ake siqhubeke futhi sakhe ithempulethi eyisisekelo ngakho-ke akudingeki ukuthi uphinde uphinde uphinde uphinde uphinde uphinde axhumane nalezi zixhumanisi kwithempulethi ngayinye. Yenza umkhombandlela omusha obizwa ngamathempulethi nge-MKDIR templates, bese uhlela izifanekiso / i-Base.html. Kufanele kubukeke kanjena:
 
<!doctype HTML>
<html>
<head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>
 
Qinisekisa ukukopisha i-CSS ne-JavaScript, ama-.css namafayela .'s kanye namafayela we-.js, ngoba sizodinga iJavaScript ukwenza isiza sethu sisebenze ngokwengeziwe ngokuzayo. Manje, ake sibuyele e-Bash Shell bese sigijimisa umyalo osheshayo. Khumbula, uma kwenzeka udinga ukufinyelela imvelo ebonakalayo, uhlobo lomthombo we-venv / Bin / Cupha. Lokhu kuzokuvumela ukuthi ufake amaphakheji wePython endaweni yalapho evumela i-Django ifinyelele kubo. Ukunikeza amafomu ethu akhiqizwe amakilasi we-Django Bootstrap, sizosebenzisa iphakethe lePython elibizwa ngokuthi amafomu e-crispy. Singalanda lokhu ngomyalo olandelayo

pip install django-crispy-forms
Uma lokhu kufakiwe, kwengeze kuzilungiselelo.Phy

INSTALLED_APPS = [
    # ... ikhodi yangaphambilini lapha
    'crispy_forms',
]
Manje, emuva esithekweni sethu sokuphakelayo, singasusa ezinye izinto. Ake sisuse isiqalo nesiphelo sedokhumenti bese siyifaka esikhundleni sefa kusuka kusifanekiso sethu sesisekelo, usebenzisa ukunwebeka nencazelo yebhlokhi. Futhi, sizokwengeza ukungenisa kwesithombe se-template ngomthwalo nesihlungi sethempulethi kufomu. Okokugcina, ake sengeze isigaba se-bootstrap kwinkinobho esefomini ukulenza libukeke njengenkinobho. Lokho kufanele kubukeke kanjena:
 
{% extends 'base.html' %}
{% block body %}
{% load crispy_forms_tags %}
<form method=”POST”>
{% csrf_token %}
{{ form|crispy }}
<button type=”submit” class=”btn btn-outline-primary”>New Post</button>
</form>
<hr>
{% for post in posts %}
<p>{{ post.text }}</p>
{% endfor %}
{% endblock %}
 
Kuhle! Kuyinto encane kakhulu yekhodi. Okulandelayo, kufanele sikuhlole futhi siqiniseke ukuthi siyabona ukuthi yonke into ibukeka yinhle, futhi iqiniseke futhi ukuthi konke kusebenza kahle. Gijimisa iseva ngokwemiyalo edlule futhi uqiniseke ukuthi isayithi libukeka futhi lisebenza kahle. Umsebenzi omuhle! Usukulungele ukuqhubekela esigabeni esilandelayo, lapho sizofaka khona ukusebenza kokungena ngemvume kwabasebenzisi kusetshenziswa ama-URL afanayo, amafomu, ukubukwa kanye nezifanekiso. Isifanekiso sesisekelo sibalulekile, futhi sizoqhubeka nokuyiguqula futhi sisebenzise izinguquko njengoba kudingeka, kepha manje ake sigxile ekwenzeni isiza sethu siphephe kakhulu, ngokunika amandla abasebenzisi ukuthi bangene ngegama lomsebenzisi nephasikhodi, futhi ekugcineni bawulwazi olubaluleke kakhulu lokho Sizosiza ukugcina uhlelo lwakho lokusebenza luphephe futhi i-akhawunti yakho itholakale kuphela ngawe. Ukuze senze lokhu, sizodinga ukusebenzisa imodeli yabasebenzisi eyakhelwe ku-Django. Imodeli yabasebenzisi iyimodeli yedatha, efana neposi yethu, ekwazi ukunikelwa ukuze kufakwe umsebenzisi kuwebhusayithi. Ngokuzayo, ngaphambi kokuba sisebenzise indawo kwi-Intanethi, sizokwenzaNweba le modeli namanye amamodeli abhalwe kuyo, futhi wakhe amanye amanyathelo okuphepha okungena ngemvume okuvimbela ebugebeng. Sizoqala ngokusebenzisa ezinye ezakhelwe ngamafomu okungena nge-Django ahlinzekayo. Okokuqala, ake sakhe uhlelo lokusebenza olusha esizolusebenzisa ukuhumusha izifanekiso nokubukwa kwekhasi lokungena eliyisisekelo. Sizokwakha nezinye izinhlelo zokusebenza ukumela izinselelo eziqhubekayo zokungena ngemvume ukuze kuvikeleke uhlelo lokusebenza, kufaka phakathi i-pincode, ukwamukelwa kobuso, ukuxhumanisa insimu, ukuqinisekiswa kwezinto eziningi, nokuqashelwa kwezinto eziningi, kanye nokuqashelwa kweminwe. Sesikhulumile ngokuqala uhlelo lokusebenza. Ukusuka kwisikhombi sethu, ngaphakathi kwemvelo ebonakalayo, dlulisa Phatha.PY Lezi

python manage.py startapp users
Manje, kufanele sibe nesiqondisi sohlelo lokusebenza olusha. Ake siqale ngokwakha umbono kulowo mkhombandlela ohambelana nokungena komsebenzisi. I-Django yakhele ngokubukwa kwama-logins abasebenzisi, kepha lokhu ngeke kusilungele ngoba sidinga ukubuka ngokwezifiso, okungcono kwenziwa ngencazelo. Kulobu mbono, sizoqala ngokubheka isicelo seposi, i-Pass Cela.Post kwi-logform engeniswe kusuka ku-DJango, fakazela i-akhawunti yomsebenzisi, bese ungena kumsebenzisi ngaphambi kokuzithumela kuhlelo lwethu lokusebenza lokuphakelayo. Kubasebenzisi / ukubukwa.Pha, engeza ikhodi elandelayo

from django.shortcuts import render, redirect
from django.urls import reverse
from django.contrib.auth.forms import AuthenticationForm, SetPasswordForm
from django.contrib.auth import authenticate, logout
from django.contrib.auth import login as auth_login
from django.contrib import messages

def login(request):
    if request.method == “POST”:
        username = request.POST['username'] # Thola igama lomsebenzisi nephasiwedi kusuka kwisicelo seposi
        password = request.POST['password'] # Qinisekisa umsebenzisi
        user = authenticate(username=username, password=password)
        if user:
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend')
            messages.success(request, 'Your password was accepted. Please continue')
            return redirect(reverse('feed:feed'))
        else: messages.warning(request, 'Username or password incorrect. Please try again')
    return render(request, 'users/login.html', {'form': AuthenticationForm()})
Konke lokhu okudingayo ukuthola umbono wokungena oyisisekelo. Manje, ake sakhe ifomu lokubuka ngokwandisa isibonisi sesisekelo. Sizoqala ngokwakha umkhombandlela omusha wezifanekiso kufolda yabasebenzisi.

mkdir users/templates
mkdir users/templates/users
Manje, kufanele sikwazi ukuhlela abasebenzisi / izifanekiso / abasebenzisi / Login.html. Ngenkathi sikulo, sizokwakha ithempulethi ukuvumela umsebenzisi ukuthi abhalise futhi.

nano users/templates/users/login.html
Manje, kuthempulethi,
 
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<form method="POST">
    {% csrf_token %}
    <fieldset class="form-group">
        <legend class="border-bottom mb-4 break">Log In</legend>
        {{ form|crispy }}
    </fieldset>
    <div class="form-group">
        <button class="btn btn-outline-info" type="submit">Login</button>
    </div>
</form>
{% endblock %}
 
Lezi yizisekelo zethempulethi yokungena ngemvume. Kufana nenye ithempulethi esesakhiweni, kepha kubukeka kuhluke kancane lapho kunikelwa. Singakopisha le khodi ukwakha enye ithempulethi efanayo ebizwa ngokuthi irejista.html, lapho sizoshintsha khona amagama futhi sisebenzise ifomu elisha esakha. Masenze ithempulethi kuqala. Hlela abasebenzisi / izifanekiso / abasebenzisi / Rejista.html bese wengeza ikhodi elandelayo:
 
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<form method="POST">
    {% csrf_token %}
    <fieldset class="form-group">
        <legend class="border-bottom mb-4 break">Create an account</legend>
        {{ form|crispy }}
    </fieldset>
    <div class="form-group">
        <button class="btn btn-outline-info" type="submit">Register</button>
    </div>
</form>
{% endblock %}
 
Manje, ake sakhe ifomu lokubhaliswa kwethu komsebenzisi bese sibuyisela emuva ekubukeni ngaphambi kokuthi sithuthukise ukungena komsebenzisi ngemodeli. Sizokwenza leli fomu libe lisekelo liqale nge, kepha faka imininingwane eminingi nezici zokuphepha ezifana nezivumelwano neCAPTCHA ngokuzayo. Hlela amafomu nabasebenzisi be-nano / amafomu.Spy, bese wengeza ikhodi elandelayo.

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']
Ngakho-ke sinelinye ifomu lapha, elisebenza kahle. Ifomu lokubhalisela umsebenzisi ngegama lomsebenzisi, i-imeyili nephasiwedi, kanye nenkambu yokuqinisekisa iphasiwedi. Qaphela ukuthi leli fomu alinwebi amafomu ajwayelekile.Iklasi elijwayelekile, liyifomu lemodeli okusho ukuthi line-meta. Inkambu eyodwa ichazwa okufanayo, futhi i-Meta yekilasi ichaza imodeli leli fomu elifana nalo lonke ulwazi oluzobhalwa kwifomu. Iningi lalokhu selivele likhona e-DJANGO elakhiwe ngokusebenza komsebenzisi, ngakho-ke sizosebenzisa lokho njengesisekelo sekilasi (kudlule kumzali). Okulandelayo, sizohlola umbono wokubhalisa umsebenzisi, manje njengoba sinefomu nethempulethi. Lesi yisibonelo, njengaleso ekubukeni okusha kweposi. Hlela abasebenzisi / ukubukwa.Po bese wengeza ikhodi elandelayo:

# ... amanani
from .forms import UserRegisterForm

def register(request):
    if request.method == “POST”:
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = form.save()
            messages.success(request, 'Welcome to the app, {}.'.format(user.username))
    return render(request, 'users/register.html', {'form': UserRegisterForm})
Lokhu konke esikudingayo ukuthola umsebenzisi abhaliswe, kepha kufanele sibe neminye imininingwane. Sifuna ukwazi isikhathi umsebenzisi abhaliswe ngaso, ngasiphi isikhathi esagcina esizeni, imininingwane ethile ngabo, njenge-biography, i-Timezone, njll. Futhi, sizodinga ukubuyekeza imodeli yethu yokuphakelayo, okuthunyelwe imodeli kanye nokuthunyelwe kwezwi kumsebenzisi ngamunye. Ukuze senze lokho, sizobuyekeza amamodeli.Phy kuzo zombili izinhlelo zokusebenza. Ake siqale ngokuhlela imodeli yokuphakelayo. Kufanele kubukeke kanjena manje:

from django.db import models # ... amanani
from django.contrib.auth.models import User

class Post(models.Model):
    id = models.AutoField(primary_key=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Faka kulomugqa
    text = models.TextField(default='')
Naka umugqa wesibili ongezwe kufayela. Lokhu kungukhiye wakwamanye amazwe, okuzothi okuthunyelwe ngakunye kumsebenzisi oyedwa othunyelwe ngakunye, ngakho-ke singakwazi ukuqiniseka ukuthi sisindisa okuthunyelwe kusisekelo somsebenzisi kanye nangekho okuthunyelwe ngaphandle kokufaka umsebenzisi. Sichaza lo mhluko wangaphandle ngekilasi elimele, ukususa impikiswano ukuze kuqinisekiswe ukuthi okuthunyelwe kususwa nabasebenzisi, izimpikiswano ezingenalutho nezingenalutho ukuze qiniseka ukuthi singasusa umsebenzisi uma kufanelekile, futhi ukuze kuhlaluleke ukuswela umsebenzisi kokuthunyelwe esivele sikhona Kwenziwe, negama elihlobene nalo, esingalisebenzisa ukubhekisa ezintweni ezithunyelwe umsebenzisi adala. Leli gama elihlobene, ngokungafani nePost.Author, umlobi weposi, lisinika umsebenzisi ukuthi athumele iposi uqobo. Manje sesingathola okuthunyelwe umsebenzisi owenziwe ngokusebenza komsebenzisi.posts.all (), noma umlobi.posts.onke (). Manje, ake senze ama-Egins ethu aqine ngokwengeziwe. Sesivele senze isayithi lethu libe lisengozini enkulu ebugebengle ngokubuphana ngokubumbana ngokukhawulela inani lezikhathi esizovumele ukungena ngemvume kuIsiza, lokhu kulula impela. Ake siqale ukugcina imininingwane ethile mayelana nomsebenzisi ngamunye ngaphambili njengoba siqhubeka nokuthuthukisa uhlelo lwethu lokusebenza. Ukuhlela Abasebenzisi / Amamodeli.Spy, engeza okulandelayo

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='')
Qaphela ukuthi le modeli ifana kahle nemodeli yeposi. Sinokungenisa okwengeziwe kokungenisa, isikhathi, okuzosivumela ukuthi sisekele okuzenzakalelayo kumasimu we-datettime, futhi futhi sinomlingiswa kanye ne-textifield njengokuthunyelwe. Ukusebenzisa wonke lamuhla ama-timestamp kusisiza ukuvikela isiza futhi siqonde ukusetshenziswa kwayo, futhi amasimu wombhalo ake sinikeze imininingwane mayelana nomsebenzisi ngamunye, noma umbhali, kwiwebhusayithi. I-OnetoOnefield kufanele kube kuphela ukucatshangelwa okuncane, iziphatha ngokufana ne-foreginkey kodwa eyodwa kuphela ngemodeli ngayinye elandelayo. Ngale ndlela, umsebenzisi kuphela unephrofayili eyodwa, ngenkathi beba nokuthunyelwe okuningi. Manje, ake sithuthukise ukungena kwethu futhi sibhalise ukubukwa ukuze ku-akhawunti ngephrofayili. Okokuqala, hlela abasebenzisi / ukubukwa.Po. Futhi gxila ekubukeni kokurejista:

# ... amanani
from .forms import UserRegisterForm

def register(request):
    if request.method == “POST”:
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = form.save()
            Profile.objects.create(user=user) # Qinisekisa ukwengeza lomugqa, ukudala iphrofayili yomsebenzisi
            messages.success(request, 'Welcome to the app, {}.'.format(user.username))
    return render(request, 'users/register.html', {'form': UserRegisterForm})
Lokhu kumane kwakha iphrofayili yomsebenzisi, ngaphandle kokugcwalisa noma yiluphi ulwazi. Manje, sifuna ukuqiniseka ukuthi i-akhawunti yomsebenzisi ayikwazi ukungena ngemvume kaningi, noma amaphasiwedi okungenani awakwazi ukuqulwa kaningi, ngakho-ke ake sivuselele ukubuka kokungena ngemvume.

# ... amanani
from .models import Profile
from django.utils import timezone
import datetime

def login(request):
    if request.method == “POST”:
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user and user.profile.can_login < timezone.now(): # Qaphela ukuthi manje sihlola ukuthi umsebenzisi angangena yini
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend')
            messages.success(request, 'Your password was accepted. Please continue.')
            return redirect(reverse('feed:feed'))
        else: # Uma ukungena ngemvume kungaphumeleli,
            messages.warning(request, 'Username or password incorrect. Please try again.')
            user = User.objects.filter(username=username).first() # Le yingxenye lapho sibuyekeza khona iphrofayili yabasebenzisi
            if user: 
                profile = user.profile
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Ngakho-ke abakwazi ukungena ngemvume ngemizuzwana embalwa
                profile.save()
    return render(request, 'users/login.html', {'form': AuthenticationForm()})
Lokhu kuyisisekelo sokuphepha. Qinisekisa ukuthi isiza singesengcupheko kumuntu umane nje uzama yonke inhlanganisela yephasiwedi, noma ambalwa ngasikhathi sinye. Lokhu ngeke kukhungathekise umsebenzisi ojwayelekile owaziyo iphasikhodi yabo futhi avele angena kumadivayisi ambalwa, kepha azogcina amarobhothi amaningi wobugebengu kokwenza imininingwane. Qaphela ukuthi sengeze isitatimende esinokuhlukahluka, can_login, okufanele kube yisikhathi esedlule, futhi sikuvuselele nge-login ngayinye engaphumelelanga usebenzisa igama lomsebenzisi elifanayo. Ngale ndlela, umsebenzisi onobungozi ngeke akwazi ukuqagela iphasiwedi noma kuphi lapho esheshayo. Inani lemizuzwana ku-DateTime.Timedelta () lingavuselelwa futhi, futhi iwebhusayithi izokhuthazeka kakhulu okwamanje kungasebenzi kahle ngemizuzwana engaphezulu. Ngincoma ukuthi ngiqale nge. Khumbula, sakha umbhalo wesipele ukuze asindise umsebenzi wethu, ngakho-ke ake siqhubeke sibuyele emuva kwalokho esikude kangaka ukuze siqiniseke ukuthi konke kusindisiwe. Gijimani umyalo:

sudo backup
Nakulokhu futhi, lokhu kuzosindisa umsebenzi wakho kuze kube manje. Ngincoma ukusebenzisa ama-backups ajwayelekile ukuze ngisindise umsebenzi wakho, futhi ungahle ngisho nokufuna umsebenzi wesipele ngokuzenzakalelayo. Ungakwenza lokhu usebenzisa umsebenzi we-UNIX obizwa ngeCron. Ukuze usebenzise lo msebenzi, gijima umyalo olandelayo bese ufaka iphasiwedi yakho:

sudo crontab -e
Uma ungakakhethi inketho 1 ye-nano, umhleli wombhalo kufanele usuvele ujwayele, bese upheqela ezansi kwefayela usebenzisa okhiye bemicibisholo. Faka umugqa olandelayo:

0 * * * * sudo backup
I-Cron isebenzisa umzuzu omncane wefomethi, ihora, usuku lwenyanga, inyanga, usuku lwesonto, lapho inombolo noma inombolo imelela lapho kufanele iqale khona umyalo. Usebenzisa i-0 ngomzuzu futhi * Kwazo zonke izinketho, singagijimisa umyalo ngomzuzu wokuqala wazo zonke ihora ekuqaleni komzuzu. Lokhu kusivumela ukuba senzele ikhodi ngokuzenzakalelayo. Yonke imisebenzi ye-cron lapho yenziwa nge-sudo igijime njengempande, ngakho-ke ngeke sidinge ukuthayipha kwiphasiwedi njalo ngehora. Ukwenza kube lula ukwenza isipele ikhodi yethu ngaphandle kokusebenzisa iphasiwedi, ake sikhubaze iphasiwedi yomyalo wethu wesipele. Sizokwenza lokhu ngokwenza umyalo olandelayo bese ufaka iphasiwedi:

sudo visudo
Manje, ake siphele ezansi kwefayela bese wengeza omunye umugqa:

ALL ALL=NOPASSWD: /bin/backup
Lokhu kusivumela ukuba sigijime umyalo "Isipele" njenganoma yimuphi umsebenzisi, ngaphandle kwephasiwedi. Ifomethi yalokhu ilula, isiqalo nje umugqa onama- "All All All = Nopasswd: / Bin /" bese uphela ngomyalo, isibonelo / i-Backup, ekhona /. Manje, ake siqale ukusebenza nge-imeyili. I-imeyili ibaluleke ngempela kumawebhusayithi, ngoba kuyindlela yokugcina iwebhusayithi iphephe ngokwengeziwe, qinisekisa ukuthi abasebenzisi babantu bangempela, futhi ngisho nemikhiqizo yemakethe noma izinsizakalo kumakhasimende. Abantu abaningi abavame ukubheka i-imeyili yabo nsuku zonke, futhi bathola zonke izinhlobo ze-imeyili ye-Marketing mayelana nemikhiqizo nezinsizakalo abazithandayo. Kufika izinketho ezimbalwa lapho uvumela i-imeyili kuwebhusayithi ye-DJANGO, futhi wamukelekile ukukhetha Noma yikuphi okusebenzele okuhle kuwe. Okokuqala, ungakhokhela insizakalo ye-imeyili ezokwenza ukuthi uthumele i-imeyili kusuka kwisizinda sakho futhi idinga ikhodi encane. Kunezinsizakalo eziningi ezinikeza lokhu, njengendawo yokusebenza ye-Google, i-SendInblue, iMeyiliGun, nokuningi. Ngaphandle kwalokho, ususekhandlekweni kahleInsizakalo yakho ye-imeyili yakho ngaphakathi kweseva yakho kusuka ekuqaleni. Ngincoma le nketho, noma ngabe yikhodi engaphezulu futhi ingadinga ukusingathwa okukhethekile. Ngeke ukwazi ukuqala iseva yemeyili kusuka kwikhompyutha yakho yasekhaya kungenzeka kakhulu, ngakho-ke ake siqhubeke sihlole ukucushwa kanye nekhodi ukuthumela i-imeyili ngaphambi kokuqala iseva yethu. Okokuqala, hlela izilungiselelo.py ngokulandelayo

nano app/settings.py
Lapho uhlelo lokusebenza igama lohlelo lokusebenza olwenzile nge-Startapp. Faka imigqa elandelayo:

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)
Qiniseka ukuthi ushintsha lezi lapho usukulungele ukusebenzisa uhlelo lwakho lokusebenza, sizophinde sivumele lokhu ngokuhamba kwesikhathi. Ukusetha i-imeyili_Address kufanele kube yi-imeyili ongathanda ukuyithumela kuyo, nephasiwedi (i-imeyili_host_password) kufanele isethwe kwiphasiwedi oyikhiqizayo kwiseva. Ngilayisha iphasiwedi kusuka kufayela le-config ukuze ngiligcine liphume kwikhodi esebenzisa logic okulandelayo, ngaphezulu kwale migqa kuzilungiselelo.Phy:

import os
import json
with open('/etc/config.json') as config_file:
    config = json.load(config_file)
Ngemuva kwalokho, sengibekele ifayela le-JSON nge-Config ku /etc/config.json usebenzisa uNano ngale ndlela elandelayo. Ukuhlela ifayela:

sudo nano /etc/config.json
Faka imigqa elandelayo:

{
	“EMAIL_HOST_PASSWORD”: “<some password here>”
}
Sizoqhubeka nokuhlela ifayela le-Config futhi sengeze wonke amaphasiwedi nezinkinobho esizozisebenzisa kuhlelo lokusebenza. Okwamanje, masisihlole ngokushesha ukuthi singayithumela kanjani i-imeyili usebenzisa i-Python. Okokuqala, ake sakhe ithempulethi nge-imeyili yokuqinisekisa esingayithumela kubasebenzisi bethu, bese siyibeka kwisikhombisi sethempulethi yomsebenzisi. Le template izobhalwa ku-HTML.

nano users/templates/users/verification_email.html
 
<h1>Django App - Verify Your Email</h1>
<p>Dear {{ user.username }},</p>
<p>To verify your email, please <a href="{{ base_url }}{% url 'users:activate' uidb64=uid token=token %}">click here</a>.</p>

<p>Alternatively, you can paste the following link in your browser's address bar:</p>
<p>{{ base_url }}{% url 'users:activate' uidb64=uid token=token %}</p>

<p>The link will expire in 30 minutes.</p>
<p>If you have not requested a verification email you can simply ignore this email.</p>
<p>See you there,</p>
<p>Daisy</p>
 
Le imeyili ilula. Kuthatha umongo womsebenzisi, i-URL eyisisekelo yesayithi, ne-ID yomsebenzisi nethokheni esetshenziselwa ukuqinisekisa i-imeyili yomsebenzisi. Qiniseka ukuthi uchaza i-URL eyisisekelo kuzilungiselelo.PY Ngaphambi kokuthi sibhale ikhodi yePython ukuhumusha ithempulethi. Qhubeka futhi ungeze imigqa elandelayo kuhlelo lokusebenza / izilungiselelo.Pow, eduze kwasekuqaleni.

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

BASE_URL = PROTOCOL + '://' + DOMAIN
Ekugcineni, lapho isiza sakho sesilungele i-Intanethi futhi uyayisebenzisa, uzofuna ukuchaza isizinda sakho njengegama lesizinda olithenga ukumela isiza. Leli igama ozolithayipha kwi-navbar ukuze ufinyelele kwisayithi lakho. Okwamanje, ungashiya isizinda esingenalutho noma usebenzise umninindawo. Futhi uzofuna ukushintsha isiza_ igama elithi Ufuna ukunikeza isiza sakho, sokukhetha kwakho. Ngaphambi kokuthi sithumele i-imeyili, ake sakhe i-Tysen Generator ukuze sibe nethokheni yokuvula i-akhawunti engaphelelwa yisikhathi. Lokhu singakwenza ngokwakha nokungenisa ithokheni yokuvuselelwa kwe-akhawunti okubukeka njengokulandelayo. Hlela ifayela:

nano users/tokens.py
Faka ikhodi elandelayo:

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()
Le generator yethokheni eyisisekelo ikhiqiza ithokheni singathumela umsebenzisi ku-URL futhi umsebenzisi angawasebenzisa ukuqinisekisa i-imeyili yakhe futhi asebenze i-akhawunti yawo. Okulandelayo, ake sibheke ukuthi ungayithumela kanjani i-imeyili. Usebenzisa i-Nano, hlela abasebenzisi / i-imeyili.Spy.

nano users/email.py
Ukuthumela i-imeyili yokuqinisekisa ye-HTML kuzobukeka kanjena:

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)
Lokhu kulula. Singenisa imisebenzi esiyidingayo ukuthumela i-imeyili, inikeze i-imeyili ngezifanekiso, kanye nezilungiselelo zethu, bese sichaza i-imeyili ngegama lethempulethi bese lilithumela kumsebenzisi esebenzisa umsebenzi. Uzobona ukuthi asikashintshi umsebenzi ukuthumela imeyili, uthumele_html_email, okwamanje, ngakho-ke ake sibhale lokhu ngezansi ikhodi esivele ingeziwe kubasebenzisi / imeyili.PY

def send_html_email(user, mail_subject, html_message):
    to_email = user.email
    username = user.username
    if to_email == '':
        return None
    unsub_link = settings.BASE_URL + user.profile.create_unsubscribe_link()
    html_message = html_message + "<p><a href=\"" + unsub_link +  "\" + title=\"Unsubscribe from " + settings.SITE_NAME + " emails\">Unsubscribe</a></p></body></html>"
    msg = EmailMultiAlternatives(mail_subject, strip_tags(html_message), settings.DEFAULT_FROM_EMAIL, [to_email], headers={'List-Unsubscribe' : '<' + unsub_link + '>'},)
    msg.attach_alternative(html_message, "text/html")
    profile = user.profile
    try:
        msg.send(fail_silently=False)
        if not profile.email_valid:
            profile.email_valid=True
            profile.save()
    except:
        profile.email_valid=False
        profile.save()
Lokhu kuyinkimbinkimbi ngokwengeziwe, futhi asikakulungeli ukugijima yonke le khodi. Qaphela Sichaza i-Unsub_Link, isixhumanisi somsebenzisi esingasisebenzisa ukuze sikhiphe ohlwini lwama-imeyili ethu. Lokhu kubalulekile, ngoba abasebenzisi kuzodingeka bakwazi ukuphuma kuma-imeyili ethu ngaphandle kokuthi bafuna ukubabona, nganoma yisiphi isikhathi. Siphinde singeze enye indlela yoMlayezo emyalezweni wethu, okuwumyalezo we-HTML osuswe kumathegi e-HTML. Okokugcina, sibheka ukuthi ngabe i-imeyili ithunyelwe, futhi uma kungenjalo, simaka kuphrofayili yomsebenzisi yokuthi i-imeyili yabo ayivumelekile. Masibuyele emuva kumamodeli omsebenzisi ukuze sikwazi ukwenza konke lokhu kusebenze. Sidinga ukuchaza umsebenzi wokukhiqiza isixhumanisi sokuzikhipha ohlwini, futhi sichaze insimu yaseBoolean ukumaka ukuthi i-imeyili yomsebenzisi ayisebenzi. Okokuqala, engeza okungeniswa okulandelayo kwesokudla kwabasebenzisi / amamodeli.Spy

nano users/models.py

# ...
from django.core.signing import TimestampSigner, BadSignature, SignatureExpired
from django.urls import reverse
Okulandelayo, ake sengeze imisebenzi kwimodeli yabasebenzisi ukwenza ithokheni futhi ihlole ithokheni elisetshenziselwa ukwenza kusebenze i-imeyili, kanye nenkambu yokusindisa ukuthi ngabe umsebenzisi uthola ngempumelelo yini imeyili yabo. Kubasebenzisi / amamodeli.Spy futhi, engeza ikhodi elandelayo kuze kube sekupheleni kwemodeli (ikhodi efakiwe)

# ...
    email_valid = models.BooleanField(default=True)
    
    def make_token(self):
        return TimestampSigner().sign(self.user.username)

    def check_token(self, token):
        try:
            key = '%s:%s' % (self.user.username, token)
            TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Ivumelekile izinsuku ezingama-30
        except (BadSignature, SignatureExpired):
            return False
        return True

    def create_unsubscribe_link(self):
        username, token = self.make_token().split(":", 1)
        return reverse('users:unsubscribe', kwargs={'username': username, 'token': token,})
Lokhu kulula, sisebenzisa i-Timestampsigner, okuyithuluzi lezincwadi eziyisisekelo, ukudala ithokheni ezophelelwa yisikhathi ngemuva kwesikhathi esithile, futhi sisebenzisa nomsebenzi wokuhlola ukuthi ngabe uvumelekile yini. Sisebenzisa la mathokheni kabili, kanye ukuze aqinisekise i-imeyili, kanye kanye kwesixhumanisi sokuzikhipha. Manje njengoba sinakho lokhu, owokugcina womsebenzi esizodinga ukuwenza ekubukeni. Ngaphakathi kwabasebenzisi / ukubukwa.Pha, ake wengeze ukubukwa ukuqinisekisa ikheli le-imeyili, nokuzikhipha ohlwini.

nano users/views.py
Okokuqala, engeza okungenisa okulandelayo. Ngaphonsa okungeziwe okumbalwa ngakho-ke ngeke sikwazi ukungenisa izinto eziningi futhi ngokuhamba kwesikhathi.

from django.contrib.auth import logout
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.models import User
from django.utils.encoding import force_str
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
import json
import requests
import datetime, traceback
from django.contrib import messages
from .models import Profile
from django.utils import timezone
from django.views.decorators.cache import never_cache
from .email import send_verification_email # Qiniseka ukuthi ungenisa umsebenzi wokuthumela we-imeyili wokuqinisekisa
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.utils.decorators import method_decorator
from django.http import HttpResponseRedirect
from django.conf import settings
from django.utils import timezone
import datetime
import pytz
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
from django.contrib.auth.tokens import default_token_generator
from django.utils.http import urlsafe_base64_decode
from .tokens import account_activation_token
Kungenzeka ukuthi usuvele unakho okunye kwalokhu okungeniswayo, kepha akulimazi ukuziphindaphinda. Uzodinga ukungenisa umsebenzi wokuthumela we-imeyili wokuqinisekisa, kanye ne-akhawunti_activation_token kusuka kubasebenzisi.Tokens, phakathi kokunye okungeniswa. Manje, ezansi kwefayela, engeza ikhodi elandelayo:

def unsubscribe(request, username, token):
    user = get_object_or_404(User, username=username)
    if((request.user.is_authenticated and request.user == user) or user.profile.check_token(token)):
        # Zibhalele
        profile = user.profile
        profile.subscribed = False
        profile.save()
        return render(request, 'users/unsubscribe.html')
    # Ngaphandle kwalokho phinda uqondise ekhasini lokungena ngemvume
    messages.warning(request,f'Your unsubscribe link has expired. Please log in to unsubscribe.')
    next_url = reverse('users:unsubscribe', kwargs={'username': username, 'token': token,})
    return HttpResponseRedirect('%s?next=%s' % (reverse('login'), next_url))

def activate(request, uidb64, token):
    try:
        uid = force_str(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=uid)
    except(TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None
    ip = get_client_ip(request)
    if user is not None and account_activation_token.check_token(user, token):
        user.profile.email_verified = True
        user.profile.save()
        user.save()
# I-SendwelcoreEmail (Cela, Umsebenzisi)
        messages.success(request, f'Thanks for confirming your email! You can now log into your account, and a welcome email has been sent to you.')
        return redirect(user.profile.create_face_url())
    else:
        messages.success(request, f'Your activation link has expired. Please request a new activation link.')
        return redirect('verify:verify')

def resend_activation(request):
    if request.method == 'POST':
        form = ResendActivationEmailForm(request.POST)
        email = request.POST['email']
        try:
            user = User.objects.get(email=email)
            send_verification_email(user)
            messages.success(request,'Your verification email sent. Please click the link in your email to verify your account.')
            return redirect(reverse('verify:verify'))
        except:
            messages.warning(request,f'Your email is not correct. Please try again.')
    else:
        form = ResendActivationEmailForm()
    return render(request,'users/resend_activation.html',{'form': form, 'title': 'Resend Activation', 'small': True})
Le yikhodi eningi. Asiphule. Umsebenzi wokuqala, uhlanzekile futhi olula, obhaliwe umsebenzisi ohlwini lwamakheli. Umsebenzi wesibili wenza i-imeyili yakhe, futhi uzobona ukuthi ngingeze umsebenzi onamazwana, i-Sendwelreemail. Wamukelekile ukusebenzisa ithempulethi ye-imeyili kanye nencazelo yomsebenzi wokuthumela i-imeyili yokwamukela, angikakakakakabi. Umsebenzi wokugcina engiphonse wona kubalulekile, ngoba ama-imeyili asebenze aphelelwa yisikhathi. Ngakho-ke, kuzodingeka siphinde sisebenzise kabusha i-imeyili yokuvula isikhathi esithile. Singasebenzisa ifomu eliyisisekelo lalokhu, futhi sibize umsebenzi ukuthumela i-imeyili yokuqinisekisa. Ngaphambi kokuthi senze lokhu, ake siqinisekise ukuthi sithunyelwa okokuqala, ngokungeza ucingo lomsebenzi ekubukeni kwerejista. Faka lo mugqa ngaphambi nje kokuqondisa kabusha ekubukeni kokurejista, ukubhaliswa kwe-def, kubasebenzisi / ukubukwa.Pha.

nano users/views.py

# ... (ngemuva) irejista (isicelo):
            send_verification_email(user)
# ... (Ngaphambi)) Ukuqondisa kabusha (
Awudingi ukwengeza imigqa yokuqala neyokugcina kulelo khodi snippet, vele uqiniseke ukuthi ukubukwa kokurejista kuthumela i-imeyili yokuqinisekisa kumsebenzisi. Kufanele kubukeke kanjena:

# ... ukungenisa
from .forms import UserRegisterForm

def register(request):
    if request.method == “POST”:
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = form.save()
            send_verification_email(user) # Qinisekisa ukwengeza lomugqa!
            messages.success(request, 'Welcome to the app, {}.'.format(user.username))
    return render(request, 'users/register.html', {'form': UserRegisterForm})
Manje, sizodinga ukwengeza ifomu lokuthumela kabusha i-imeyili yokuvula. Kubasebenzisi / amafomu.Spy, engeza ifomu elilandelayo:

# ... (Ukungenisa)
class ResendActivationEmailForm(forms.Form):
    email = forms.EmailField(required=True)
Sizodinga futhi ithempulethi ehambelana nale fomu yokusebenzisa kabusha i-imeyili. Masingeze le template. Hlela ifayela:

nano users/templates/users/resend_activation.html
Okulandelayo, engeza ikhodi elandelayo kufayela.

{% extends 'base.html' %}
{% block content %}
{% load crispy_forms_tags %}
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Resend activation email</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-secondary" type="submit">Resend activation email</button>
            </div>
        </form>
{% endblock %}
Whew, lokho kuningi! Manje, lapho sithumela ikhodi kwiseva yethu, sizokwazi ukuthumela i-imeyili ye-HTML futhi sisebenzise ama-akhawunti omsebenzisi ngokuchofoza ku-imeyili. Singase futhi sifune ukuthumela i-imeyili elula yokwemukela, ngakho-ke ake sibheke ukuthi ungakwenza kanjani lokho. Emuva kubasebenzisi / imeyili.Pha, engeza ikhodi elandelayo:

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)
Futhi, sizodinga ithempulethi ukunikeza lonke lolu lwazi. Kuwebhusayithi yami, ithempulethi ibukeka njengaphansi, kepha wamukelekile ukufometha noma ngabe uyathanda.
 
<html>
<body>
<h3>Welcome to {{ site_name }}</h3>
<p>Hello {{ username }},</p>
<p>We are happy to see you here! Thank you for joining {{ site_name }} and being a part of the fun. To get started, here are a few things you can do after you verify your identity.</p>
<ol>
    <li><a href="{{ base_url }}/" title="Use the app">Use the app</a>. This is the main page of {{ site_name }}</li>
    <li><a href="{{ base_url }}/feed/profile/Clementine/" title="See my profile">Visit my private {{ site_name }} profile</a>. This is a page for anyone wanting to get to know me.</li>
    <li><a href="{{ base_url }}/feed/profiles/" title="See all profiles currently on the site">More profiles</a>. You can find these people on the site, and see their content.</li>
    <li><a href="{{ base_url }}/feed/all/" title="See everything on {{ site_name }}">See all posts here</a>. This is the private front page of {{ site_name }}.</li>
</ol>
<p>There is even more on the site, so feel free to visit and see what you find. You can share the site with any of the social buttons on each page. I hope you enjoy your time with {{ site_name }}! Thanks for being here.</p>
<p>With much love,</p>
<p>{{ model_name }}</p>
<a href="{{ base_url }}" title="{{ site_name }}">{{ base_url }}</a>
 
Qaphela ukuthi asinawo umzimba wokuvala noma amathegi e-HTML, ngoba singeza lokhu lapho sifaka isixhumanisi sokuzikhipha ohlwini lwe-HTML. Lokhu kubalulekile, kepha asifuni ukuwachaza kabili. Ngakho-ke yini elandelayo? Size isikhathi eside. Ngempela, kufanele sikulungele ukuthumela isayithi kwiseva. Singangeza umhlobisi we- @login_required futhi senze ukubuka kwethu kuvikeleke, kuthathe ama-Sickpurs Abasebenzisi, thumela i-imeyili ethobekile, kanye nemininingwane yenqolobane, okuyisisekelo salokho iwebhusayithi okudingeka ukwenze ukuze uhlale ufanele. Sizongeza izici ezimbalwa eziwusizo, bese sakha isisekelo sokuthumela ikhodi yethu kwiseva ekude, ukusetha iseva yemeyili, ukucushwa kwesizinda, nokuhlunga ukwenza isiza sethu siphephe futhi kufanelekile. Sizodinga futhi ukubukwa kabusha kwephasiwedi, ngakho-ke ake singeze lokho kusheshe ngempela. U-Django owakhelwe ekubukeni kabusha kwephasiwedi uphukile kweminye imisebenzi, kepha sizobheka ukuthi singabhala kanjani umbono wethu, ithempulethi ye-imeyili, amafomu, namaphethini we-URL. Nakhu okubukeka sengathi ukubukwa okubukekayo, kubasebenzisi / ukubukwa.Py

# ... amanani
from django.contrib.auth.tokens import default_token_generator
from django.contrib.auth.forms import SetPasswordForm
from django.utils.http import urlsafe_base64_decode

def password_reset(request, uidb64, token):
    user = get_object_or_404(User, id=urlsafe_base64_decode(uidb64))
    if request.method == 'POST':
        form = SetPasswordForm(user, request.POST)
        if form.is_valid() and default_token_generator.check_token(user, token):
            form.save()
            messages.success(request, 'Your password has been reset.')
        elif not form.is_valid():
            messages.warning(request, 'Your passwords do not match, or do not meet the requirements. Please try again.')
            return redirect(request.path)
        else:
            messages.warning(request, 'Your password reset link has expired. Please create a new one.')
        return redirect(reverse('users:login'))
    return render(request, 'users/password_reset_confirm.html', {
        'title': 'Reset your Password',
        'form': SetPasswordForm(user)
Leli fomu lakhiwa ku-Django, kepha sizodinga ithempulethi ukuqinisekisa ukusetha kabusha iphasiwedi, abasebenzisi / izifanekiso / abasebenzisi / Iphasiwedi_reset_conml.html
 
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Reset Password</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Reset Password</button>
            </div>
        </form>
{% endblock content %}
 
Siphinde sibe nethempulethi yokuthumela i-imeyili yokusetha kabusha iphasiwedi, ngefomu elilula, kubasebenzisi / izifanekiso / abasebenzisi / Iphasiwedi_Reset.html.html
 
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Reset Password</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Request Password Reset</button>
            </div>
        </form>
{% endblock content %}
 
Isifanekiso se-imeyili ngokwaso silula, iyifayela eliyisisekelo le-HTML elinikeza isixhumanisi sokusetha kabusha iphasiwedi, kubasebenzisi / izifanekiso / abasebenzisi / i-password_reset_email.html. I-Django izohumusha ngokuzenzakalelayo leli fayela.
 
<h1>Uglek - Reset Your Password</h1>
<p>Hello,</p>
<p>To reset your password, please <a href="https:/uglek.com{% url 'password_reset_confirm' uidb64=uid token=token %}">click here</a>.</p>
<p>Alternatively, you can paste the following link into your browser:</p>
<p>https://uglek.com{% url 'password_reset_confirm' uidb64=uid token=token %}</p>
<p>If you have not requested a password reset you can simply ignore this email.</p>
<p>Thanks for joining us,</p>
<p>Daisy</p>
 
Sizodinga futhi izifanekiso ezimbili eziningi. Owokuqala ukuqinisekisa ukuthi kuthunyelwe i-imeyili. Ukubukwa kwalokhu sekuvele ku-DJango, ngakho-ke sidinga nje ukubhekana nabo kuma-URL.Phy. Le template itholakala kubasebenzisi / izifanekiso / abasebenzisi / Iphasiwedi_reset_done.html
 
{% extends 'base.html' %}
{% block content %}
  <div class="media-body">
    <div class="alert alert-info">
        An email has been sent with instructions to reset your password.
    </div>
  </div>
{% endblock content %}
 
Futhi okokugcina, ukuqinisekisa ukuthi ukusetha kabusha kwephasiwedi kuqediwe, abasebenzisi / izifanekiso / abasebenzisi / Iphasiwedi_reset_complete.html
 
{% extends 'base.html' %}
{% block content %}
 <div class="media-body">
    <div class="alert alert-info">
        Your password has been set.
    </div>
    <a href="{% url 'users:login' %}">Sign In Here</a>
  </div>
{% endblock content %}
 
Manje, sidinga amaphethini we-URL wale mibono. Kubasebenzisi / ama-URLS.PY, engeza amaphethini alandelayo we-URL:

urlpatterns = [
    # ... ama-URL edlule lapha
    path('password-reset/',
         auth_views.PasswordResetView.as_view(
             template_name='users/password_reset.html',
             html_email_template_name='users/password_reset_html_email.html'
         ),
         name='password_reset'),
    path('password-reset/done/',
         auth_views.PasswordResetDoneView.as_view(
             template_name='users/password_reset_done.html'
         ),
         name='password_reset_done'),
    path('password-reset-confirm/<uidb64>/<token>/',
         auth_views.PasswordResetConfirmView.as_view(
             template_name='users/password_reset_confirm.html'
         ),
         name='password_reset_confirm'),
    path('password-reset-complete/',
         auth_views.PasswordResetCompleteView.as_view(
             template_name='users/password_reset_complete.html'
         ),
         name='password_reset_complete'),
]
Izibonisi ezine, lokho okuningi! Kepha manje singaqiniseka ukuthi sikwazi ukusetha kabusha iphasiwedi yomsebenzisi nganoma yisiphi isikhathi lapho sidinga khona, konke kusuka kusiphequluli seWebhu. Ngiyaqonda ukuthi le yikhodi eningi. Uma kubonakala kuncane ngaphezulu kwekhanda lakho, kulungile. Uzothuthuka, ukuqonda kwakho kuzothuthuka, futhi uzoba nekhono ngokwengeziwe ngeKhodi kungekudala. Uma ulahleka ngokuphelele, ngincoma ukubuyela kule software ngokuhamba kwesikhathi ngemuva kokusebenza ngokuzikhethela kokufunda okufundwayo ku-Code Course online. Lokhu kuvame ukukhululekile ukuqala, futhi kuzokuqondisa kukho konke okudingayo ukuze uphumelele lapho ubuyela kulo msebenzi. Uma uzizwa sengathi usukulungele ukuqhubeka, ufunde, olandelayo, sizomboza ukuthumela ikhodi yakho kwiseva ekude futhi sisetha iseva yemeyili, kanye ne-aupport yakho, kanye nokushintshanisa kabusha kusetshenziswa iphrojekthi entsha ngemiyalo embalwa elula. Into yokugcina esidinga ukuyenza ngaphambi kokuthumela kwiseva ekude yenza indawo yethu iphephe kancane. UzokwaziQaphela ukuthi ukubukwa kokungena ngemvume kuthatha kuphela igama lomsebenzisi nephasiwedi, futhi akukho ukuqinisekiswa kwe-multi poctor noma ikhodi yesikhathi esisodwa. Lokhu kulungiswa okulula, futhi ngekhodi efanayo, singenza isayithi lethu lithumele imiyalezo futhi liphendule imiyalezo ethunyelwe kwiseva. Ukuze uqale, sizobuyela emuva kumamodeli omsebenzisi bese wengeza isibonakaliso sesikhathi esizomela ukungena ngemvume ngakunye. Sizophinde sengeze isikhombi esiyingqayizivele, esijikelezayo kwimodeli yomsebenzisi ezosetshenziselwa ukwengeza ukuphepha okwengeziwe ekungeneni kwethu. Ukuhlela amamodeli omsebenzisi, abasebenzisi / amamodeli.Spy, engeza okulandelayo

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
# Qiniseka ukuthi ungenisa i-UUID, isibonakaliso se-Timestamp ne-URL Generator (Reverse)
import uuid
from django.core.signing import TimestampSigner, BadSignature, SignatureExpired
from django.urls import reverse

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='')
    # Faka le khodi lapha
    uid = models.CharField(max_length=32, default=uuid.uuid4, null=True, blank=True)
    mfa_enabled = models.BooleanField(default=False)
    enable_mfa = models.BooleanField(default=False)
    phone_number = models.CharField(default='', null=True, blank=True, max_length=15)
    verification_code = models.CharField(default='', null=True, blank=True, max_length=15)
    verification_code_length = models.IntegerField(default=6)
    mfa_code_expires = models.DateTimeField(default=timezone.now)
    mfa_attempts = models.IntegerField(default=0)

    def make_auth_token(self):
        return TimestampSigner().sign(self.uid)

    # Bese wengeza lo msebenzi
    def create_auth_url(self):
        username, token = self.make_auth_token().split(":", 1)
        return reverse('users:mfa', kwargs={'username': username, 'token': token,})

    def check_auth_token(self, token):
        try:
            key = '%s:%s' % (self.uid, token)
            TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Ivumelekile ngamaminithi ama-3
        except (BadSignature, SignatureExpired):
            return False
        return True
Qiniseka ukuthi abasebenzisi bakho / amamodeli.Spy ubukeka kanjena, ngaphandle kwamazwana (ikhodi emigqeni nge #). Ukuphula lokhu phansi, kulula. Sinokungenisa okumbalwa, i-Timestampsigner okuyinto eyinkohliso ye-cryptographic engakhiqiza ikhodi ephephile futhi ayiqinisekise ukuze uqiniseke ukuthi uvumelekile, futhi hhayi ngaphezulu kwenombolo ethile yemizuzwana. Siphinde sisebenzise i-UUID, okuyisikhombi esiyingqayizivele esikhomba umsebenzisi wethu ekusayineni koPhawu, futhi ku-URL lapho ithokheni ithunyelwa khona kumsebenzisi. Sizosebenzisa le hlaka lwe-cryptography eyisisekelo ukwakha umbono wokuqinisekiswa kokuqinisekiswa kwezici ezimbili. Ngaphambi kokuthi senze noma yini enye, ake siqhubekele ukufuduka ukuze amamodeli ethu omsebenzisi avuselelwa. Kukhombandlela nge-Phatha.Py, gijimisa imiyalo elandelayo ukwenza futhi uqedele ukuthutha.

source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
Lokhu kubalulekile ngoba ngaso sonke isikhathi lapho senza izinguquko kumamodeli, sizodinga ukudala amatafula futhi sivuselele imininingwane ngezinto ezizenzakalelayo ngaphambi kokuthi sisebenzise amamodeli. Empeleni singasebenzisa amamodeli. Okulandelayo, ake sithuthukise umbono wethu wokungena ukuze uqondise kabusha ekubukeni kobuqiniso kwesibili. Kubasebenzisi / ukubukwa.py.py, susa umsebenzi wokungena ngemvume bese uqondisa kabusha kwi-URL esisanda kukhiqizwa kumamodeli omsebenzisi.

# ... ukungenisa

def login(request):
    if request.method == “POST”:
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user and user.profile.can_login < timezone.now(): # Qaphela ukuthi manje sihlola ukuthi umsebenzisi angangena yini
            # Susa umsebenzi we-Author_login owawulapha
            messages.success(request, 'Your password was accepted. Please continue.')
            if user.profile.mfa_enabled:
                return redirect(user.profile.create_auth_url()) # QAPHELA SIBONISA I-URL entsha lapha
            else: # Uma umsebenzisi engasebenzisi ubuqiniso be-multi-factor, vele ungene kuwo.
                auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend')
                return redirect('feed:feed')
        else: # Uma ukungena ngemvume kungaphumeleli,
            messages.warning(request, 'Username or password incorrect. Please try again.')
            user = User.objects.filter(username=username).first() # Le yingxenye lapho sibuyekeza khona iphrofayili yabasebenzisi
            if user: 
                profile = user.profile
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Ngakho-ke abakwazi ukungena ngemvume ngemizuzwana embalwa
                profile.save()
    return render(request, 'users/login.html', {'form': AuthenticationForm()})
Ngakho-ke lokhu kulula, manje sinendlela yokuqondisa kabusha ukubukwa kokuqinisekiswa kokuqinisekiswa kwezici ezimbili lapho sakha. Siphinde sibe ne-fallback uma kwenzeka umsebenzisi engangezi inombolo yocingo. Sizokwengeza umbono oyisisekelo ukwengeza inombolo yocingo kungekudala futhi ungene ngemvume ngombhalo maduze. Okokuqala, sidinga indlela elula yokuthumela umyalezo ovela kwikhodi yethu. Ukuze senze lokhu, singakhetha kusuka kunombolo yama-API, kepha okulula ngombono wami nguTwilio. Baphinde banikeze amanani amahle amaphrojekthi amancane, kanye nezaphulelo eziningi. Dala i-akhawunti ku-wilio.com, gcwalisa imininingwane ethile ngephrojekthi yakho, uthenge inombolo yocingo, bese ukopisha okhiye bakho be-API kuzilungiselelo zakho.Pha. Ngemuva kwalokho, engeza le khodi ngaphansi kwefayela elisha, abasebenzisi / i-SMS.PY.

nano users/sms.py

# Ngenisa wonke amaphakheji adingekayo
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
import traceback

account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
source_phone = settings.PHONE_NUMBER

# Le khodi ithumela umbhalo nge-Twilio
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)
    except:
        print(traceback.format_exc())

# Umsebenzi wokusiza ukuthola inombolo ngamadijithi amaningi kangaka
def get_num_length(num, length):
    n = ''
    for x in range(length):
        n = n + str(num)
    return int(n)

# Thumela umbhalo ukuze uqinisekise umsebenzisi
def send_verification_text(user):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    user.profile.verification_code = code
    user.profile.mfa_code_expires = timezone.now() + datetime.timedelta(minutes=3)
    user.profile.save()
    send_user_text(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)))

# Thumela umsebenzisi noma yimuphi umbhalo ngalo msebenzi
def send_user_text(user, text):
    send_text(user.profile.phone_number, text)

# Qinisekisa ikhodi ngalo msebenzi
def check_verification_code(user, code):
    user.profile.mfa_attempts += 1
    result = user.profile.verification_code != None and code != '' and user.profile.verification_code == code and user.profile.mfa_code_expires > timezone.now() and user.profile.mfa_attempts <= 3
    if user.profile.mfa_attempts < 3 and result:
        user.profile.verification_code_length = 6
    elif user.profile.mfa_attempts > 2 and not result:
        user.profile.verification_code_length = 8
    user.profile.save()
    return result

# Qinisekisa isikhathi
def check_verification_time(user):
    result = user.profile.mfa_code_expires > timezone.now()
    return result
Qiniseka ukuthi ushintsha izilungiselelo zakho ngokufanele, ungeza le migqa ngezinkinobho zakho:

# Qiniseka ukuthi ukukopisha lokhu kusuka ku-Twilio Dashboard yakho
TWILIO_ACCOUNT_SID = “<your sid>”
TWILIO_AUTH_TOKEN = “<your token>”
PHONE_NUMBER = “<your twilio phone number>”
SITE_NAME = “<Your site name>”
AUTH_VALID_MINUTES = 3 # Inani lemizuzu yekhasi le-TFA lisebenza ngokushesha
Okokuqala, sizodinga amafomu emibono yethu yokufakazela ubuqiniso emibili. Ukuhlela Abasebenzisi / Amafomu.Spy, engeza ikhodi elandelayo.

# ... ukungenisa
from django import forms

# Ifomu lokufaka inombolo yethu yocingo
class PhoneNumberForm(forms.Form):
    phone_number = forms.RegexField(regex=r'^\+?1?\d{9,15}$', error_messages = {'invalid': "Phone number must be entered in the format: '+999999999'. Up to 15 digits is allowed."})
    def __init__(self, *args, **kwargs):
        super(PhoneNumberForm, self).__init__(*args, **kwargs)
        self.fields['phone_number'].label = phone_number_label

# Ifomu lokuqinisekisa
class TfaForm(forms.Form):
    code = forms.IntegerField(required=False)
    def __init__(self, *args, **kwargs):
        super(TfaForm, self).__init__(*args, **kwargs)
        self.fields['code'].widget.attrs.update({'autocomplete': 'off'})
    help_texts = {
        'code': 'Please enter the six digit code after sending it to your phone with the button above.'
    }
Okulandelayo, ake sakhe ukubukwa kubasebenzisi / ukubukwa.py

# ... amanani
from django.http import HttpResponseRedirect
from .forms import PhoneNumberForm, TfaForm

def mfa(request, username, token):
    user = User.objects.filter(profile__uuid=username).first()
    if not user: return HttpResponseRedirect(reverse('verify:age') + '?next=' + request.GET.get('next') if request.GET.get('next') else '/go/' if request.user.is_authenticated and request.user.profile.vendor else '/' if request.user.is_authenticated else reverse('users:login'))
    user = get_object_or_404(User, profile__uuid=username)
    next = request.GET.get('next','')
    if not user.profile.mfa_enabled:
        if not check_verification_time(user):
            user.profile.mfa_enabled = False
            user.profile.enable_two_factor_authentication = True
            user.profile.phone_number = '+1'
            user.profile.save()
            print('Logging in user')
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend')
            messages.warning(request, 'Please enter a valid phone number and verify it with a code.')
            return redirect(reverse('users:mfa_onboarding'))
    if request.method == 'POST':
        form = TfaForm(request.POST)
        code = form.data['code']
        if code and code != '' and code != None:
            token_validated = user.profile.check_auth_token(token)
            p = user.profile
            is_verified = check_verification_code(user, int(code))
            p.mfa_authenticated = is_verified
            if token_validated:
                if is_verified:
                    user.profile.mfa_enabled = True
                    user.profile.save()
                    auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend')
                    p.verfication_code = None
                    p.uid = get_uuid()
                    p.save()
                    messages.success(request, 'You have been authenticated. Welcome.')
                    qs = '?'
                    for key, value in request.GET.items():
                        qs = qs + key + '=' + value + '&'
                    if next != '' and not (next.startswith('/accounts/logout/') or next.startswith('/accounts/login/') or next.startswith('/admin/login/') or next.startswith('/accounts/register/')):
                        return HttpResponseRedirect(ext)
                    elif next.startswith('/accounts/logout/') or next.startswith('/accounts/login/') or next.startswith('/accounts/register/'):
                        return redirect('feed:feed')
                    elif request.META.get('HTTP_REFERER', '/').startswith('/accounts/login/'):
                        return redirect(reverse('feed:feed'))
                    elif not next:
                        return redirect(reverse('feed:feed')
                    else:
                        return HttpResponseRedirect('feed:feed')
                else:
                    messages.warning(request, 'The code you entered was not recognized. Please try again.')
            elif not token_validated:
                messages.warning(request, 'The URL token has expired or was not recognized. Please try again.')
                logout(request)
                return redirect(reverse('users:login'))
            if p.mfa_attempts > 3:
                messages.warning(request, 'You have entered the incorrect code more than 3 times. please send yourself a new code.')
                p.verification_code = None
                p.save()
        elif user.profile.can_send_mfa < timezone.now():
            user.profile.mfa_attempts = 0
            user.profile.can_send_mfa = timezone.now() + datetime.timedelta(minutes=2)
            user.profile.save()
            send_verification_text(user)
            messages.success(request, "Please enter the code sent to your phone number. The code will expire in 3 minutes.")
        else:
            messages.warning(request, 'You are sending too many two factor authentication codes. Wait a few minutes before sending another code.')
    form = TfaForm()
    hide_logo = None
    if user.profile.hide_logo:
        hide_logo = True
    return render(request, 'users/mfa.html', {'title': 'Enter Code', 'form': form, 'xsmall': True, 'user': user, 'hide_logo': hide_logo, 'accl_logout': user.profile.shake_to_logout, 'preload': False})

@login_required
def mfa_onboarding(request):
    if request.method == 'POST':
        form = PhoneNumberForm(request.POST)
        request.user.profile.phone_number = form.data['phone_number'].replace('-', '').replace('(','').replace(')','')
        request.user.profile.mfa_enabled = True
        request.user.profile.enable_two_factor_authentication = True
        request.user.profile.save()
        messages.success(request, 'You have added a phone number to your account.')
        user = request.user
        return redirect(user.profile.create_auth_url())
    form = PhoneNumberForm(initial={'phone_number': request.user.profile.phone_number if request.user.profile.phone_number else '+1'})
    return render(request, 'users/mfa_onboarding.html', {'title': 'Enter your phone number', 'form': form, 'small': True})
Sizodinga futhi izifanekiso zazo zombili lezi zibuke. Masingeze ithempulethi ye-MFA kuqala.

nano users/templates/users/mfa.html
Faka le khodi ye-HTML kwisifanekiso
 
{% extends 'base.html' %}
{% block content %}
{% load app_filters %}
{% load crispy_forms_tags %}
        <form action="{{ request.path }}{% if request.GET.next %}?next={{ request.GET.next }}{% endif %}" method="POST">
            {% csrf_token %}
            <legend class="border-bottom mb-4">Enter Verification Code</legend>
            <p>Step 1: Send the code</p>
	    <i>Never share your code with anyone, as it can be used to access your account temporarily.</i>
	    <div class="form-group">
                <button class="btn btn-outline-primary" type="submit">Send code</button>
            </div>
	    <hr>
	    <p>Step 2: Enter the code</p>
            <fieldset class="form-group">
                {{ form|crispy }}
		<p>Press the enter button to send yourself the code at {{ user.profile.phone_number|securephone }}. Then, enter the code and press enter.</p>
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-secondary" type="submit">Enter code</button>
            </div>
        </form>
{% endblock %}
 
Lokhu kuhle kakhulu. Ifomu lithumela ikhodi noma ikhodi engenalutho, futhi uzokwazi ukubona umbono esithumela ikhodi uma sithola ikhodi engenalutho. Ngemuva kwalokho siba nezinkinobho ezimbili nje, futhi ngale ndlela singathumela ikhodi ngenkinobho noma iyiphi inkinobho. Okulandelayo, sizongeza ifomu elilula ukwengeza inombolo yocingo.

nano users/templates/users/mfa_onboarding.html
Faka i-HTML elandelayo:
 
{% extends 'base.html' %}
{% block content %}
{% load crispy_forms_tags %}
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Set Up Two Factor Authentication</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-secondary" type="submit">Add phone number</button>
            </div>
        </form>
{% endblock %}
 
Leli fomu lilula kakhulu, limane nje linikeze ifomu lenombolo yocingo esidala futhi livumela umsebenzisi engeza inombolo yocingo. Lokhu kubukeka kukuhle impela! Uma nje konke kusethwe kahle, kufanele sikwazi ukuthumela imiyalezo, futhi singene umsebenzisi ngenombolo yabo yocingo ngokushesha nje lapho sengeza amaphethini we-URL. Into yokugcina esidinga ukusetha ukusetha umbono wephrofayili ukuze siqiniseke ukuthi umsebenzisi angashintsha inombolo yakhe yocingo ngaphandle kokungena ngemvume. Masingeze umbono wephrofayili kubasebenzisi / ukubukwa.Py.py. Lo mbono uzovuselela i-bio yomsebenzisi, i-imeyili, igama lomsebenzisi, nenombolo yocingo, kanye nokusivumela ukunika amandla ukuqinisekiswa kwe-multi poctor. Okokuqala, sizodinga amanye amafomu amabili kubasebenzisi / amafomu.Spy

# ... amanani
class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField()
    class Meta:
        model = User
        fields = ['username', 'email']

phone_number_label = 'Phone number (no spaces, parenthesis \'(\' or dashes \'-\', numbers beginning with + only)'

class ProfileUpdateForm(forms.ModelForm):
    subscribed = forms.BooleanField(required=False)
    phone_number = forms.CharField(required=False)
    def __init__(self, *args, **kwargs):
        super(ProfileUpdateForm, self).__init__(*args, **kwargs)
    class Meta:
        model = Profile
        fields = ['bio', 'phone_number', 'enable_mfa', 'subscribed']
Okulandelayo, singakha umbono ukuze sisebenzise womabili la mafomu. Hlela abasebenzisi / ukubukwa.Po bese ungeze ngokubuka.

# Faka lokhu okungeniswa
from .forms import UserUpdateForm, ProfileUpdateForm
from django.views.decorators.cache import never_cache
from django.views.decorators.csrf import csrf_exempt
from .models import Profile
from .mfa import send_user_text

@csrf_exempt
@never_cache
@login_required
def profile(request):
    if request.method == 'POST':
        u_form = UserUpdateForm(request.POST, instance=request.user)
        p_form = ProfileUpdateForm(request.POST,
                                       request.FILES,
                                       instance=request.user.profile)
        if u_form.is_valid() and p_form.is_valid():
            new_phone_number = p_form.data['phone_number']
            u_form.save()
            profile = p_form.save(commit=False)
            profile.phone_number = profile.phone_number.replace('-', '').replace('(','').replace(')','')
            profile.save()
            if new_phone_number != oldprofile.phone_number and oldprofile.phone_number and len(oldprofile.phone_number) >= 11:
                profile.mfa_enabled = True
                profile.save()
                send_text(oldprofile.phone_number, 'Your phone number has been updated to ' + new_phone_number + '. Please refer to texts on that phone to log in. If you didnt make this change, please call us. - {}'.format(settings.SITE_NAME))
            if profile.enable_two_factor_authentication and profile.phone_number and len(profile.phone_number) < 11:
                profile.enable_two_factor_authentication = False
                messages.success(request, f'Two factor authentication can\'t be activated without entering a phone number. Please enter a phone number to enable two factor authentication.')
            profile.save()
            if new_phone_number != oldprofile.phone_number and new_phone_number and len(new_phone_number) >= 11:
                send_user_text(request.user, 'You have added this number to {} for two factor authentication. You can now use your number for two factor authentication. If you didnt make this change, please call us. - {}'.format(settings.SITE_NAME, settings.DOMAIN))
                profile.mfa_enabled = True
                profile.mfa_code_expires = timezone.now() + datetime.timedelta(minutes=3)
                profile.save()
                return redirect(profile.create_auth_url())
            messages.success(request, f'Your profile has been updated!')
            print('Profile updated')
            return redirect('users:profile')
    else:
        u_form = UserUpdateForm(instance=request.user)
        p_form = ProfileUpdateForm(instance=request.user.profile, initial={'phone_number': request.user.profile.phone_number if request.user.profile.phone_number else '+1'})
    context = {
        'u_form': u_form,
        'p_form': p_form,
        'title':'Update Your Profile',
    }
    return render(request, 'users/profile.html', context)
Sizodinga futhi ithempulethi yalombono.

nano users/templates/users/profile.html
 
{% extends "base.html" %}
{% load crispy_forms_tags %}
{% load feed_filters%}
{% block content %}
	<h2>Edit Your Profile</h2>  
	<form method="POST" enctype="multipart/form-data" id="profile-form">
          {% csrf_token %}
          <fieldset class="form-group">
              <legend class="border-bottom mb-4 mt-4">Profile info</legend>
              {{ u_form|crispy }}
              {{ p_form|crispy }}
          </fieldset>
          <div class="form-group">
              <button class="btn btn-outline-info" type="submit">Update}</button>
          </div>
	</form>
        <p style="text-color: green;" class="hide" id="posted">Saved</p>

{% endblock content %}
{% block javascript %}
var form = document.getElementById('profile-form');
$('input').change(function(){
	var formdata = new FormData(form);
	$.ajax({
		url: window.location.href,
		type: "POST",
		data: formdata,
		processData: false,
		contentType: false,
		timeout: 1000 * 60,
                success: function(data) {
                  $(posted).removeClass("hide");
		  setTimeout(function() {
			$(posted).addClass("fade-hidden");
			setTimeout(function() {
				$(posted).addClass("hide");
				$(posted).removeClass("fade-hidden");
			}, 2000);
		  }, 2000);
                }
	});
});
{% endblock %}
 
Uzobona ukuthi le yifomu elilula, kepha line-JavaScript kuyo elithumela ngokuzenzakalelayo okuqukethwe kwefomu njengoba kuvuselelwa. Lokhu kuyasiza ukuba nakho, ngakho-ke uyakwazi ukwenza ukuhlela ngaphandle kokuthi ucindezele ukuhambisa ngaso sonke isikhathi. Okulandelayo, sidinga ama-URL amele yonke le mibono kubasebenzisi be-URL ama-patterters. Hlela abasebenzisi / ama-URLS.PY bese wengeza le khodi:

# ... Ikhodi yangaphambilini, Ukungenisa ngaphakathi
from django.urls import path
from . import views

app_name='users'

urlpatterns = [
# ... amaphethini we-URL esiwafake phambilini, engeza imigqa emithathu elandelayo
    path('mfa/<str:username>/<str:token>/', views.mfa, name='mfa'),
    path('mfa/onboarding/', views.mfa_onboarding, name='mfa_onboarding'),
    path('profile/', views.profile, name='profile'),
]
Manje yisikhathi esihle sokuhlola iphrojekthi yethu. Kepha okokuqala, ake sisebenzise enye isipele.

backup
Bese usebenzisa iseva. Ngaphambi kokuthi sithumele kuseva ye-Linux, kuwumqondo omuhle ukunika amandla ukuqinisekiswa kwezici ezimbili kwi-akhawunti. Sizokwenza lokhu ngokuya kwi-URL yethu yephrofayili, / abasebenzisi / iphrofayili / ukubheka ibhokisi ukunika amandla ukuqinisekiswa ngemuva kokufaka inombolo yethu yocingo, bese kuthumela ifomu.

python manage.py runserver localhost:8000
Vakashela ekhasini le-web ngokuya kwisiphequluli sakho seWebhu, ngisebenzisa i-Google Chrome kulesi sibonelo, bese ngifaka i-URL HTTPS: // I-Localhost: 8000 / Ama-Akhawunti / Iphrofayili / Uzokwazi ukungena ngemvume uma kunesidingo futhi unika amandla ukuqinisekiswa kwezici ezimbili. Le phrojekthi idinga iseva ukuze isebenze ukuze ikwazi ukuthumela ngempela imeyili. Kepha okokuqala, sidinga indlela yokubona amaphutha. Uzobona ukuthi uma usebenzisa iseva kwimodi ye-debug, ngezilungiselelo.deBug zilingana neqiniso, iseva ikhombisa amaphutha ngokuzenzakalelayo. Ukukhombisa amaphutha ngaphandle kokusebenzisa imodi yokulungisa iphutha, okungaphephile kwiseva yokukhiqiza, kufanele sengeze umbono ngakho. Amaphutha abaluleke kakhulu esidinga ukukwazi ukuphatha yile: Iphutha 500 - Inkinga ngekhodi yethu Iphutha 404 - Ikhasi elingatholakali (i-URL ephukile) Iphutha 403 - Imvume yenqatshelwe iphutha Masingeze uhlelo lokusebenza olusha ukuphatha la maphutha, okuthiwa amaphutha.

python manage.py startapp errors
Faka lokhu kuzilungiselelo.Phy njengoba senze ngaphambili, ekuhlelweni kwe-_apps, bese uqala ngokungeza izinkomba kokubukwa okuthile kuhlelo lokusebenza / ama-URL.Phy, lapho uhlelo lokusebenza lungu-App wephrojekthi yakho ye-DJango.

handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
Lokhu konke esikudingayo ngaphandle kokubukwa kwephutha, izifanekiso kanye nokuncane kwe-Middleware. Masichaze lezo njengoba kunjalo:

from django.shortcuts import render, redirect
from django.http import HttpResponse
from stacktrace.models import Error
from errors.middleware import get_current_exception
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import user_passes_test
from .logs import get_logs
from face.tests import is_superuser_or_vendor
from django.views.decorators.csrf import csrf_exempt
from errors.highlight import highlight_code
from django.shortcuts import redirect
from django.urls import reverse

# Dala ukubukwa kwakho lapha.
@login_required
@user_passes_test(is_superuser_or_vendor)
def logs(request):
    logs = highlight_code(get_logs())
    return render(request, 'errors/live_error.html', {'title': 'Error Logs', 'pagetitle': 'Error Logs', 'notes': 'These are the recent error logs.', 'trace': logs, 'full': True})

@login_required
@user_passes_test(is_superuser_or_vendor)
def logs_api(request):
    logs = highlight_code(get_logs())
    return HttpResponse(logs)

@login_required
def handler404(request, exception):
    if not request.path.endswith('/'): return redirect(request.path + '/')
    return render(request, 'errors/error.html', {'title': 'Error 404', 'pagetitle': 'Error 404', 'notes': 'This page was not found on the server. It may have moved or been deleted.', 'is_404': True})

def handler500(request):
    print(get_current_exception())
    user = None
    if hasattr(request, 'user') and request.user and request.user.is_authenticated:
        user = request.user
    try:
        Error.objects.create(user=user, stack_trace=get_current_exception(), notes='Logged by 500 handler.')
    except: pass
    return render(request, 'errors/error.html', {'title': 'Error 500', 'pagetitle': 'Error 500', 'notes': 'There is a problem with the server, or with a request coming from you. Thank you for your understanding while we get things set up.', 'trace': get_current_exception()})

def handler403(request, exception):
    return render(request, 'errors/error.html', {'title': 'Error 403', 'pagetitle': 'Error 403', 'notes': 'You don\'t have permission to preform this request. If you think this is in error, please contact the server administrator.', 'is_403': True})

def handler400(request, exception):
    return render(request, 'errors/error.html', {'title': 'Error 400', 'pagetitle': 'Error 400', 'notes': 'This was a bad request.'})
Okulandelayo, ake sichaze i-Middleware ukuphatha la maphutha. Sizokwenza lokhu ngokungeza kuqala ku-Middleware_Classes kuzilungiselelo.Phy, negama le-Middleware yethu.

MIDDLEWARE_CLASSES = [
    # ... Middleware edlule
    'errors.middleware.ExceptionVerboseMiddleware,
]
Okulandelayo, ake sengeze i-Middleware.

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.')
Sifaka umsebenzi ukuthola okuhlukile kwamanje ngokusebenzisa i-Threating Local, esisiza ukulandelela noma yimaphi amaphutha kwikhodi yethu. Ngokuya kwezifanekiso, sidinga eyodwa kuphela, ngoba sichaza ngamandla isihloko lapho kubukwa. Isifanekiso sidinga nje ukunikela ngesihloko kanye ne- "Landerati", iphutha lethu lilandela kumongo.

nano errors/templates/errors/error.html
 
{% extends 'base.html' %}
{% block content %}
<h1>{{ pagetitle }}</h1>
<p>{{ trace }}</p>
{% endblock %}
 
Lesi yithempulethi yethu elula kunazo zonke okwamanje, kepha yindlela elula ngayo ukubona amaphutha kuphrojekthi yethu. Okulandelayo, ake sikhubaze ukulungisa iphutha kuzilungiselelo.

nano app/settings.py
Thola lomugqa lapho isethwe khona kuyiqiniso, bese uyishintsha ibe ngamanga

DEBUG = False
Qhubeka futhi wenze isipele uhlelo lokusebenza manje. Silungele ukuphamba kwiseva ye-Linux ekude, futhi sigcine ukungeza izici kusuka lapho.

sudo backup
Ngaphambi kokuthi sibhale le khodi kwiseva, kufanele sicabange ukuthi kungenzeka kube nezinkinga ezithile ngekhodi. Ngokuya ngecala, amasayithi amukela imininingwane ethunyelwe kuwo azoba nezinkinga ezinogaxekile othunyelwa kanye nobunzima bokususa ogaxekile. Lokhu akufanele kwenzeke ngokushesha, kepha uma kwenzeka, ngokuhamba kwesikhathi sizohlola ukuthi singakwazi kanjani ukulinganisela amarobhothi ukufinyelela isiza, futhi siqinisekise ukuthi i-Akhawunti Yomsebenzisi, futhi iqinisekise ukuthi iskena lomsebenzisi nge-scan yabo noma i-scan ye-biometric, njengokuqashelwa kweminwe noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso noma ukwamukelwa kobuso. Uma ubheka isibonelo sokuqinisekiswa kwe-Multi Peotor esikuhlolile, ekukhiqizeni, izinto zingahluka. Phawula ukuthi silinganisela kanjani ama-logins wokungena, futhi amathokheni aphelelwe yisikhathi. Uma amarobhothi efinyelela kwisiza, ukuqinisekiswa kwezici ezimbili kungahle kube nzima njengoba kungafaka amakhodi ngasikhathi sinye umsebenzisi. Ukulwa nalokhu, ake sisebenzise imodeli kumamodeli omsebenzisi, ememezela ukuthi sixhumana kanjani nesiza lapho sikhonaUkuqinisekisisa ukusebenzisa ukuqinisekiswa kwe-multi poctor ngenombolo yocingo. Sizophinde sengeze inketho yokuqinisekisa nge-imeyili. Qala ngokuhlela amamodeli wabasebenzisi nge

nano users/models.py
Lokhu yilokho imodeli esikufakayo kufanele ibukeke. Asidingi zindlela, okuguquguqukayo kuphela ukugcina i-ID, umsebenzisi, isikhathi, ukuphelelwa yisikhathi, ubude nemizamo yokulwa nokuqinisekiswa kwe-multi poctor (ikhodi efana ne-123456 ithunyelwe ocingweni noma nge-imeyili).

# Ithokheni eyisisekelo esetshenziselwa ukungena kuwebhusayithi
class MFAToken(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='mfa_tokens')
    timestamp = models.DateTimeField(default=timezone.now)
    expires = models.DateTimeField(default=timezone.now)
    token = models.CharField(default='', max_length=100)
    length = models.IntegerField(default=6)
    attempts = models.IntegerField(default=0)
    uid = models.CharField(default=uuid.uuid4, max_length=100)
Masingeze futhi ilungelo lomsebenzisi wethu, futhi sizosetha ngesandla manje, ngaphambi kokuphela kokufuduka ukuze sibhalise abasebenzisi abanelungelo ngokuzenzakalelayo. Kumamodeli womsebenzisi, engeza lomugqa kuphrofayela:

    vendor = models.BooleanField(default=False)
Njenganoma iziphi izinguquko ku-database, kudingeka senze izinto zokufuduka futhi sihambisa database nganoma yisiphi isikhathi lapho sihlela amamodeli.Spy Ifayela eDjango. Khumbula, ukwenza lokhu esisebenzisa kuqala umthombo

cd project-directory-you-named # (uma kudingeka)
source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
Okwamanje, ungafaka noma imaphi ama-akhawunti owadalile njengabathengisi ngokusebenzisa igobolondo.

python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Manje, ake siguqule umbono wethu wokuqinisekiswa kwe-Multi Poind Moder ukusebenzisa lolu phawu. Okokuqala, kudingeka siguqule izinsiza zosizo lwe-MFA. Usebenzisa i-nano,

nano users/mfa.py

from django.utils import timezone
import random
import datetime
from django.conf import settings
from feed.middleware import get_current_request
from django.contrib import messages
from .email import send_html_email
import traceback
from .models import MFAToken

account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
source_phone = settings.PHONE_NUMBER

def send_text(target_phone, text):
    from twilio.rest import Client
    try:
        client = Client(account_sid, auth_token)
        if len(target_phone) >= 11:
            message = client.messages.create(
                to=target_phone,
                from_=source_phone,
                body=text + ' Text STOP to cancel.')
    except:
        messages.warning(get_current_request(), 'There was an error sending the message.')
        print(traceback.format_exc())

def get_num_length(num, length):
    n = ''
    for x in range(length):
        n = n + str(num)
    return int(n)

def send_verification_text(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_user_text(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)))

def send_verification_email(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))

def send_user_text(user, text):
    send_text(user.profile.phone_number, text)

def check_verification_code(user, token, code):
    token.attempts = token.attempts + 1
    profile = user.profile
    result = (token != None and code != '' and token.token == code and (token.expires > timezone.now()) and token.attempts <= settings.MFA_TOKEN_ATTEMPTS)
    if token.attempts < 3 and result:
        profile.verification_code_length = 6
    elif token.attempts > 1 and not result:
        profile.verification_code_length = profile.verification_code_length + 2
        if profile.verification_code_length > settings.MFA_TOKEN_LENGTH: profile.verification_code_length = settings.MFA_TOKEN_LENGTH
    token.save()
    profile.save()
    return result

# Qinisekisa umsebenzisi usebenzisa i-imeyili noma inombolo yocingo
def mfa(request, username, usertoken):
    token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Hlunga ithokheni ngenani elidluliselwe ku-URL (a 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)) # Uma lesi seshini singadalwanga, dala
    user = User.objects.filter(id=token.user.id).first() # Thola umsebenzisi kusuka kuthokheni
    if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Uma sezivele zigunyaziwe, zingene kuzo
    if not user: raise PermissionDenied() # Uphike uma kungekho msebenzisi otholakele
    next = request.GET.get('next','')
    if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Bheka ithokheni eli-Author
        auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Ngena ngemvume umsebenzisi uma nje bengangenile ngemvume
        user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Setha ukuphela kokuqinisekiswa kwabo okuyiqiniso
        user.profile.save()
        return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Phinda uqondise umsebenzisi ekhasini elilandelayo
    if not user.profile.mfa_enabled: # Bheka ukuthi i-MFA inikwe amandla
        if not check_verification_time(user, token): # Bheka isikhathi
            user.profile.mfa_enabled = False # Sula inombolo yocingo
            user.profile.enable_two_factor_authentication = True # Nika amandla i-MFA
            user.profile.phone_number = '+1' # Khubaza inombolo yocingo
            user.profile.save() # Gcina iphrofayili
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Ngena umsebenzisi uma i-MFA yabo ingavunyelwe
            messages.warning(request, 'Please enter a valid phone number and verify it with a code.')
            return redirect(reverse('users:mfa_onboarding'))
    if request.method == 'POST' and not fraud_detect(request, True): # Uma isicelo siyisicelo seposi
        form = TfaForm(request.POST) # Faka ifomu
        code = str(form.data.get('code', None)) # Thola ikhodi
        if code and code != '' and code != None: # Qiniseka ukuthi akunalutho
            token_validated = user.profile.check_auth_token(usertoken) # Bheka ithokheni eli-Author
            p = user.profile
            is_verified = check_verification_code(user, token, code) # Bheka ikhodi
            p.mfa_authenticated = is_verified
            if token_validated: # Uma konke
                if is_verified: # Ihlelekile
                    user.profile.mfa_enabled = True # Nika amandla i-MFA (uma ingekho vele inikwe amandla)
                    user.profile.save()
                    auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Ngena ngemvume umsebenzisi
                    face = user.faces.filter(session_key=None).last() 
                    p.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES)
                    p.save()
                    messages.success(request, 'You have been authenticated. Welcome.')
                    qs = '?'
                    for key, value in request.GET.items(): # Yakha i-BullString yepharamitha elandelayo (uma ikhona)
                        qs = qs + key + '=' + value + '&'
                    if next != '' and not (next.startswith('/accounts/logout/') or  next.startswith('/accounts/login/') or next.startswith('/admin/login/') or next.startswith('/accounts/register/')):
                        return HttpResponseRedirect(next) # Qondisa kabusha
                    elif next.startswith('/accounts/logout/') or next.startswith('/accounts/login/') or next.startswith('/accounts/register/'):
                        return redirect(reverse('/'))
                    elif request.META.get('HTTP_REFERER', '/').startswith('/accounts/login/'):
                        return redirect(reverse('/'))
                    elif not next:
                        return redirect(reverse('/'))
                    else:
                        return HttpResponseRedirect(reverse('verify:age') + '?next=' + request.META.get('HTTP_REFERER', '/'))
                else:
                    messages.warning(request, 'The code you entered was not recognized. Please try again.')
            elif not token_validated: # Uma ithokheni ibingalungile
                messages.warning(request, 'The URL token has expired or was not recognized. Please try again.')
                logout(request)
                return redirect(reverse('users:login'))
            if p.mfa_attempts > 3: # Ukube bekunemizamo eminingi kakhulu
                messages.warning(request, 'You have entered the incorrect code more than 3 times. please send yourself a new code.')
                p.verification_code = None
                p.save()
        elif user.profile.can_send_mfa < timezone.now():
            user.profile.mfa_attempts = 0
            user.profile.can_send_mfa = timezone.now() + datetime.timedelta(minutes=2)
            user.profile.save()
            if form.data.get('send_email', False): # Thumela i-imeyili (noma umbhalo)
                send_mfa_verification_email(user, token)
            else:
                send_verification_text(user, token)
            messages.success(request, "Please enter the code sent to your phone number or email. The code will expire in 3 minutes.")
        elif user.profile.can_send_mfa < timezone.now() + datetime.timedelta(seconds=115):
            messages.warning(request, 'You are sending too many two factor authentication codes. Wait a few minutes before sending another code.')
    form = TfaForm()
    hide_logo = None
    if user.profile.hide_logo:
        hide_logo = True
    if request.user.is_authenticated: return redirect(reverse('/'))
    # Nikeza ifomu (ukuthola izicelo)
    return render(request, 'users/mfa.html', {'title': 'Enter Code', 'form': form, 'xsmall': True, 'user': user, 'hide_logo': hide_logo, 'accl_logout': user.profile.shake_to_logout, 'preload': False, 'autofocus': request.method == 'POST'})
Lapho sengeza kule khodi, qiniseka ukuthi ukungenisa umsebenzi ukuthumela i-imeyili. Phezulu kwefayela, ukubukwa komsebenzisi (nabanye okungeniswayo), engeza

from .mfa import send_verification_email as send_mfa_verification_email
Manje, kudingeka sibhale lowo msebenzi ngaphambi kokuba noma yini yalokhu izosebenza. Kufanele kunwebe umsebenzi wethu we-imeyili Thumela, futhi umane uthumele i-imeyili kumsebenzisi ngekhodi yokuqinisekisa.

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))
Ngakho-ke konke lokhu kusebenza kakhulu, manje sesinohlelo lokuqinisekisa lobuqiniso obuningi kuncike inombolo yocingo noma i-imeyili ukungena ngemvume. Kepha futhi sidinga indlela yokususa, noma okungenani abasebenzisi abangasebenzisana nakathu. Lezi zingaba yi-spammers, amarobhothi noma noma ngubani ongasho kahle umsebenzi wethu. Bheka umbono enginawo wokuqapha abasebenzisi kwiwebhusayithi yami:

# amanani
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import user_passes_test
from .tests import is_superuser_or_vendor # Sizodinga ukudala lolu vivinyo

@login_required
@user_passes_test(is_superuser_or_vendor)
def users(request):
    # Thola uhlu lwabasebenzisi
    new_today = User.objects.filter(is_active=True, date_joined__gte=timezone.now() - datetime.timedelta(hours=24)).count()
    new_this_month = User.objects.filter(is_active=True, date_joined__gte=timezone.now() - datetime.timedelta(hours=24*30)).count()
    subscribers = User.objects.filter(is_active=True, profile__subscribed=True).count()
    return render(request, 'users/users.html', { # Buyisela Abasebenzisi ku-template
        'title': 'All Accounts',
        'users': User.objects.all(),
        'new_today': new_today,
        'new_this_month': new_this_month,
        'subscribers': subscribers
    })
Qaphela ukuthi le khodi isebenzisa isivivinyo, sizodinga ukumemezela lolu vivinyo ku-Test.py Ifayela futhi liyithumele. Ukuhlela Abasebenzisi / Ukuhlola.Phy, ake sakhe isivivinyo.

def is_superuser_or_vendor(user):
    return user.profile.vendor or user.is_superuser
Lokhu kuhlangana nabasebenzisi / abasebenzisi.html ithempulethi, ebukeka into enje:
 
{% extends 'base.html' %}
{% load app_filters %}
{% block content %}
<h1>All Registered Visitors</h1>
<p>{{ new_today|nts|capitalize }} new today, {{ new_this_month|nts }} new this month, {{ subscribers|nts }} subscribers, {{ users.count|nts }} total.</p>
<hr style="color: red;">
{% for user in users %}
{% include 'users/_user.html' %}
<hr style="color: blue;">
{% endfor %}
{% endblock %}
 
Qaphela ukuthi ithempulethi ifaka enye ithempulethi, abasebenzisi / _user.html. Lapho usebenzisa ithempulethi ene-subtemplate futhi ungasebenzisi ukunwebeka, umbono omuhle ukufaka i-underscore (_) ngaphambi kokuba igama lefayela linwebe, ukuze lihlukanise izifanekiso. Qaphela ukuthi lokhu kuningi kweJinja, kungenzeka ukuthi awunawo wonke lawa ma-eguquguqukayo achazwe. Kepha yilokhu okushiwo yikhodi yami.
 
{% load app_filters %}
<div>
<img src="{{ user.profile.get_image_url }}" alt="@{{ user.profile.name }}'s profile photo" width="120" height="120" align="left" style="margin-top:5px; margin-right:10px; margin-bottom:10px; border-radius: 50%;"/>
    <div class="article-metadata">
      <p class="mr-2">@{{ user.username }} - {{ user.profile.name }} ({{ user.profile.preferred_name }})</p>
      <small class="text-muted">Last seen {{ user.profile.last_seen|date:"F d, Y" }} {{ user.profile.last_seen|time:"H:i" }}</small>
      <small class="text-muted">Joined on {{ user.profile.date_joined|date:"F d, Y" }} {{ user.profile.date_joined|time:"H:i" }}</small>
      <small>{{ user.email }}</small>
      {% if user.profile.phone_number %}<small><i class="bi bi-phone-fill"></i>{{ user.profile.phone_number }}</small>{% endif %}
      {% if user.verifications.last %}
      <small>'{{ user.verifications.last.full_name }}'</small>
      <small><i class="bi bi-123"></i> {{ user.verifications.last.document_number }}</small>
      <small><i class="bi bi-calendar-heart-fill"></i> {{ user.verifications.last.birthdate }}</small>
      <a href="{{ user|document_front }}" class="btn btn-sm btn-outline-primary" title="ID front"><i class="bi bi-person-badge-fill"></i> ID front</a>
      <a href="{{ user|document_back }}" class="btn btn-sm btn-outline-primary" title="ID back"><i class="bi bi-upc-scan"></i> ID back</a>
      {% endif %}
      <small># {{user.id}} </ omncane>
      <small>{% if user.profile.subscribed %}Subscribed{% else %}Not subscribed{% endif %}</small>
    </div>
    {%if not user.is_superuser %}
    <div style="float: right;">{% include 'users/toggle_active.html' %}</div>
    {% endif %}
    {% autoescape off %}    
    <p class="article-content">{{ user.bio }}</p>
    {% endautoescape %}
    <hr>
    <p>{% if user.profile.identity_verified %}Verified user.{% else %}Unverified user.{% endif %} Verifications: {{ user.verifications.count|nts }}</p>
 
Siphinde sidinge enye engezansi, thobela_acce.html. Le template kufanele ibe yifomu elisivumela ukuthi siguqukele ukuthi ngabe umsebenzisi uyasebenza yini.
 
<form style="display: inline-block;" action="{% url 'users:toggle-user-active' user.id %}" method="POST" id="publishForm">
<button class="btn btn-sm btn-outline-danger" type="submit">{% if user.is_active %}<i class="bi bi-eye-fill"></i>{% else %}<i class="bi bi-eye-slash-fill"></i>{% endif %}</button>
</form>
 
Sizodinga futhi ukwengeza umbono wokuguqula umsebenzi womsebenzisi, kanye namaphethini afanele ama-URL. Ngenkathi sikulo, ake sengeze umbono wokususa umsebenzisi uma kwenzeka sidinga lokho.

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
@login_required
@user_passes_test(is_superuser_or_vendor)
def toggle_user_active(request, pk):
    user = User.objects.get(id=pk)
    if request.method == 'POST':
        user.is_active = not user.is_active
        user.save()
    return HttpResponse('<i class="bi bi-eye-fill"></i>' if user.is_active else '<i class="bi bi-eye-slash-fill"></i>')


# Amanani
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import DeleteView

class UserDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = User
    success_url = '/' # Ukuqondisa kabusha ku-URL Yempumelelo
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context

    def test_func(self): # Hlola uma umsebenzisi i-superuser futhi unemvume yokususa
        user = self.get_object()
        if self.request.user != user and self.request.user.is_superuser:
            return True
        return False
Ngenkathi lokhu kusebenza lapho kunesidingo, ukususa umsebenzisi akufanele kudingeke isikhathi esiningi, singakwazi nje ukuguqula ukubonakala kwabasebenzisi abavakashela isiza uma kudingeka sixoshe. Amaphethini we-URL esingezele abukeka kanjena. Nge-nano, hlela abasebenzisi / ama-URL.Spy bese wengeza le migqa:

nano users/urls.py
Imigqa kufanele ihambe ohlwini lwezindlela zokubukwa komsebenzisi, ngaphambi kokuphela "]" kodwa ngemuva kokuqala "[".

# ...
    path('user/<int:pk>/delete/', UserDeleteView.as_view(template_name='blog/user_confirm_delete.html'), name='delete-user'),
    path('user/<int:pk>/active/', views.toggle_user_active, name='toggle-user-active'),
# ...
Manje, qiniseka ukuthi ubuyela isiza ukuze uwayilande kwiseva yeWebhu sizoqhubeka nokusebenza. Kusuka kulayini womyalo,

sudo backup
Manje isayithi lethu lisekelwa. Ngakho-ke manje sinezinto ezimbalwa eziwusizo ezengeziwe. Kepha kuthiwani ngesithombe esikhulu lapha? Le khodi ayitholakali kwi-Intanethi, asinaseva yemeyili okwamanje, futhi sidinga ukwandisa uhlelo lwethu lokusebenza ukufaka inqubo ephelele yokuqinisekisa kanye nezakhiwo ezibushelelezi zokusisiza ukuba sihlole indawo, kanye nezinqubomgomo eziphephile zokuqinisekisa abasebenzisi abanenhlanhla. Sizofika kukho konke lokhu. Into ebaluleke kakhulu manje izothola le khodi online, esingayenza ngemigqa embalwa ye-bash kuseva ye-Ubuntu. Uzodinga ukuqasha iseva kulokhu, ngaphandle kokuthi uneseva ekhaya kanye nokubhaliswa kwe-Intanethi kwebhizinisi okuvumela ukuthi uvule amachweba. Mina uqobo ngisebenzisa iwebhusayithi yami kwi-HP Z440 efakwe efulethini lami, kepha imvamisa ishibhile kakhulu ngezidingo eziyisisekelo ukuqasha iseva yangasese ebonakalayo (VPS). Khumbula ukuthi ikhodi esisebenzayo manje iyincanyana, izodinga ukunakekelwa futhi ithuthukiswe ngaphambi kokuba sikhonaSilungele ukusebenzisa lokho esifanele sakhe umkhiqizo. Qinisekisa ukuthi uqikelela ukuthi wenzani nge-Intanethi, qiniseka ukuthi kuleli sayithi esidlangalaleni kwiWebhu kwiseva ye-Linux, unecebo lokuvimba ukusebenzelana okungafuneki ngewebhusayithi yakho. Lokhu kungenzeka kube yinkinga ekuqaleni, kepha sizobheka izixazululo ezahlukahlukene zokulwa nalokhu, kufaka phakathi ukufundwa komshini, ubuhlakani bokufakelwa kanye nombono wekhompyutha. Lapho iba yinkinga, bheka okunye kulo mbhalo ukuthola isisombululo. Mayelana nokuqasha i-VPS, kunezindawo eziningi ongahamba kuzo. I-Google Cloud inamaseva we-VPS, ionos, Kamatera, Ama-Amazon AWS, kanye nabahlinzeki abaningi bahlinzeka ngezixazululo ze-Cloud Server ezizofanela izidingo zethu. Uzodinga uchofoze amafomu abo bese ukhetha uhlelo ukuze uqalise. Ungahamba nohlelo oluyisisekelo nanoma yimuphi umhlinzeki, kepha qiniseka ukuthi umhlinzeki ukuvumela ukuthi uvule amachweba we-port port server ukuthumela i-imeyili (lokhu kufanele kube yiPort 587 nePort 25), abanye abahlinzeki bavimba la machweba. Kuze kube manje ngibe nayoIsipiliyoni se-EST nge-Ionos neKamatera, bobabili bazongivumela ukuthi ngithumele i-imeyili engenamkhawulo futhi amanani abo ashibhile. Uzoxhuma kwiseva yakho entsha ngaphezulu kwe-protocol ebizwa nge-SSH noma i-Shell evikelekile, evumela ukuthi ukhombe ukude neseva njengekhompyutha yakho, kusuka kwikhompyutha yakho. Lapho usetha iseva, umhlinzeki wokusingathwa kungenzeka azokucela ukuthi wengeze ukhiye we-SSH, noma azokunikeza igama lomsebenzisi nephasiwedi. Ukhiye we-SSH ukuthi uzongena kanjani kwiseva kusuka kulayini womyalo ukuhlela ikhodi. Sebenzisa izinketho ezingezansi ze-SHSH-keygen ukukhiqiza i-SSH

ssh-keygen
Gcina ifayili bese ubhala phansi uma udinga, kuhle ukushintshanisa okhiye bakho be-SSH uma ungakakwenzi. Manje, ungasebenzisa umyalo olandelayo ukubona ukhiye wakho we-ssh. Uzofuna ukuyikopisha kwiseva yakho eyihlane ukuze ukwazi ukuyisebenzisa ukuze uqinisekise.

cat ~/.ssh/id_rsa.pub
Uma ungakwazanga ukubona ukhiye we-SSH lapho uthayipha lowo myalo (intambo ende yamadijithi nezinhlamvu eziqala nge- "SHSH-RSA AAA"), zama ukukhiqiza ukhiye we-RSA (avikelekile, ngakho-ke ikhodi elandelayo izokhiqiza ukhiye we-4096 bit RSA SSH.

ssh-keygen -t rsa -b 4096
Dala i-VPS esebenzisa ubuntu, noma kunjalo uhlela ukwenza lokhu. Lapho usudale i-VPS ngokuchofoza amafomu kwiwebhusayithi yabahlinzeki (Kamatera.com, ionos.com noma efanayo), uzofuna ukungena ngemvume. Ukusebenzisa lokhu, sebenzisa i-SSH Command nge-XX.xx.xx.xx). Uzodinga futhi ukuzwela igama lomsebenzisi elizenzakalelayo kwiseva esidale, isibonelo, ubuntu.

ssh ubuntu@XX.XX.XX.XX
Ungacelwa iphasiwedi, uma ucelwa iphasiwedi, uyifake. Ngeke sisebenzise igama lomsebenzisi elizenzakalelayo, ngakho-ke ake siqale ngokwakha umsebenzisi omusha futhi sengeze ukhiye we-SSH kwi-akhawunti yabo. Ake siqale ngokungeza ifayela elisha le-SHSHD_CONFIG, elitshela iseva ukuthi ingayisebenzisa kanjani i-SSH.

nano sshd_config

# Leli ifayela lokucushwa kwe-SSHD serversi ebanzi.  Qonda
# sshd_config (5) ukuthola eminye imininingwane.

# Le sshd yahlanganiswa nePath = / USR / Local / SBIN: / USR / Local / Bin / BBIN: / USR / Bin: / SBIN: / BBIn: / I-USR / imidlalo

# Isu elisetshenziselwa izinketho ku-sshd_config ezenzakalelayo ethunyelwe nge
# I-OpenSsh ukucacisa izinketho ngenani lazo elizenzakalelayo lapho
# kungenzeka, kepha ubashiye baphawule.  Izinketho ezingafuneki zidlula
# Inani elizenzakalelayo.

# IPort 22
# Ikheli noma iyiphi
# Ikheli Lohlu 0.0.0.0
# Lalela i-Adress ::

# I-Hostoty / njr / ssh / ssh_host_rsa_key
# I-Hostoty / njr / ssh / ssh_host_ecda_key
# I-Hostoty / njr / ssh / ssh_host_Ed25519_key

# Ama-CIPHERS NOKUFUNDA
# I-Requekeylimit Okuzenzakalelayo Akukho

# Ukukhanisa
# I-Syslogfacility Author
# I-Loglevel Info

# Ukuqinisekiswa:

# I-Logringracetime 2m
# Imvumerrootlogin yenqabela-iphasiwedi
# I-Strictmode Yebo
# Maxiauntyd 6
# Amakhulu 10

PubkeyAuthentication yes

# Lindela .ssh / Authorized_lides2 ukuze unganakwa ngokuzenzakalelayo ngokuzayo.
AuthorizedKeysFile	.ssh/authorized_keys .ssh/authorized_keys2

# AuthorisespricipalsFile Akukho

# Igunya eligunyaziwe
# Authorizedkeysommanduser akekho

# Ukuze lokhu kusebenze futhi uzodinga izinkinobho zomphathi ku / njll / ssh / ssh_ukwazisa_wo
# I-Hostbasedauthentication Cha
# Shintsha uye ku-yebo uma ungathembi ~ / .ssh / owaziwa_wokhweni
# I-Hostbasedausentication
# Aziwazi phansi
# Musa ukufunda umsebenzisi ~ /.
# Ama-inoreerhosts yebo

# Ukuvimbela amaphasiwedi wombhalo acacile e-turnelited
PasswordAuthentication no
# Imvume yokuvunyelwa cha

# Shintsha uye ku-Yebo ukuze unike amandla amaphasiwedi wokuphendula inselelo (izingqinamba ze-Qaphela nge
# Amamojula athile we-pam kanye nemicu)
KbdInteractiveAuthentication no

# Izinketho zeKerberos
# Kerberosauthentication Cha
# KerberosorlocalCalpassw Yebo
# Kerberosticketleapple Yebo
# Kerberoscotted rod cha

# Izinketho ze-GSSAPI
# Gssapiausentication cha
# GSSAPICLEANUUPCRIONSYISO YES
# Gssapeistretcetcedcheck yebo
# Gssapikeyexchange cha

# Setha lokhu ku- 'Yebo' ukunika amandla ubuqiniso be-PAM, ukucutshungulwa kwe-akhawunti,
# kanye nokucutshungulwa kweseshini. Uma lokhu kunikwe amandla, ubuqiniso be-pam buzokwenza
# uvunyelwe ngokusebenzisa i-kbdinterActinectiveIveliveActicution futhi
# Iphasiwediauuntution.  Kuya ngokucushwa kwakho kwe-pam,
# Ukuqinisekiswa kwe-Pam nge-kbdinterInterActiveIveIvelication kungadlula
# ukuhlelwa kwe- "imvumeRootlogin ngaphandle kwephasiwedi".
# Uma ufuna nje i-akhawunti ye-PAM kanye neseshini kuhlola ukugijima ngaphandle
# Ukuqinisekiswa kwe-PAM, bese unika amandla lokhu kepha usethe i-passwoophauthentication
# kanye ne-kbdintercractiveausetion to 'no'.
UsePAM yes

# Vumela inqothulwa Yebo
# Vumela i-Yebo
# Ama-Gatewayports no
X11Forwarding yes
# X112displayset 10
# X11uselocalhost Yebo
# Iphilisi yebo
PrintMotd no
# I-PhrintaSallog Yebo
# Tcpkeepalive yebo
# I-Permittuenvelo in
# Ukucindezela kubambezelekile
# Isikhashana esivelayo 0
# I-ClientliveCountMax 3
# Kusetshenziswa ngaphakathi
# PidFile /run/sshd.pid
# I-Maxstartups 10: 30: 100
# I-Pemittunl no
# I-ChrootDirectory akekho
# I-adngerum yesengezo

# ayikho indlela ye-banner ezenzakalelayo
Banner /etc/banner

# Vumela iklayenti ukuthi lidlulise ukuguquguquka kwemvelo yendawo
AcceptEnv LANG LC_*

# ukweqa okuzenzakalelayo kwezinto ezingaphansi
Subsystem	sftp	/usr/lib/openssh/sftp-server

# Isibonelo sezilungiselelo eziphezulu kakhulu kumsebenzisi ngamunye
# Qondanisa umsebenzisi anoncvs
# X111Noming No
# I-SUVTTCPPRAMING NO
# Vumela
# I-Forcommand CVS Server
PermitRootLogin no
Khumbula, i-CTRL + X ne-Y ukuze ugcine ifayili. Okulandelayo, ake sibhale umbhalo oyisisekelo obizwa ngokuthi ukuqalisa (konke ku-Default Home Directory yomsebenzisi wethu).

nano initialize
Faka le migqa kufayela, ukufaka esikhundleniNgokhiye wakho we-SSH uthola usebenzisa ikati. (.ssh / id_rsa.pub)

# ! / BIN / Bash
sudo apt install -y nano git openssh-server
sudo cp sshd_config /etc/ssh/sshd_config
sudo service ssh restart
sudo service sshd restart
echo "/root/.ssh/id_rsa" | sudo su root -c "ssh-keygen -t rsa -N ''"
echo "root ssh key:"
sudo su root -c "cat /root/.ssh/id_rsa.pub"
sudo adduser --disabled-password --gecos "" team
sudo passwd -d team
sudo usermod -aG sudo team
echo "/home/team/.ssh/id_rsa" | su team -c "ssh-keygen -t rsa -N ''"
cat /home/team/.ssh/id_rsa.pub >> /home/team/.ssh/authorized_keys
echo '<key here>' >> /home/team/.ssh/authorized_keys
echo "team ssh key:"
cat /home/team/.ssh/id_rsa.pub
Ukukuhamba ngaleli fayela, ake siqale umugqa ngomugqa. Umugqa wokuqala utshela umhlanganisi ukuthi lokhu kungumbhalo we-bash. Ngemuva kwalokho sifaka ukuncika, ukukopisha i-SHSHD_Config kwisikhombi esifanele, ukuqala kabusha i-SSH, ukukhiqiza okhiye be-SSH ngezimpande, ukwengeza igama lomsebenzisi '(Ungalikhetha igama olithandayo kulokhu igama lesengezo nephasiwedi ekhubazekile manje). Siphinde sengeze iqembu eqenjini leSudo, sikhiqize ukhiye wabo we-SSH, engeza ukhiye wethu kwizinkinobho ezigunyaziwe kanye nezabo, bese uphrinta ukhiye wazo. Lo msebenzisi omusha uzoba yindlela esingena ngayo esizeni. Esigungwini esisha, qhubeka uphinde uvule iseva futhi.

ssh team@XX.XX.XX.XX
Akufanele udinge iphasiwedi kulokhu, ukuba njengoba une-SSH ukhiye. Siphinde sikhule ukungena ngemvume ngephasiwedi ukugcina isiza siphephe kakhulu. Manje, le seva iqala ngokungenalutho ngokuphelele ngaphandle kolwazi ngalo. Ake siqale ngokubopha iphrojekthi yethu kusuka ku-git ukuze sikwazi ukulanda bese siyiqhuba emshinini wakude. Eseva ekude exhunywe nge-SSH, okokuqala phrinta ukhiye wakho we-SSH:

cat ~/.ssh/id_rsa.pub
Okulandelayo, unamathisela lolu ke ukhiye kuzilungiselelo ze-git ezinjengasenza ngaphambi kokusetha indawo yethu yokubeka i-git. Manje senzeka sihlanganise iphrojekthi yethu ngqo kwiseva. Qiniseka ukuthi ususekele iphrojekthi yangakini kuqala ngakho kuseva ye-git ukulanda.

git clone git://github.com/you/yourproject.git
Iphelele. Manje wonke amafayela alapha. Singababona nge-LS

ls
Manje, ake siqale ukusetha iseva. Okokuqala, ukopishe umkhombandlela wakho wephrojekthi ube igama elilula, elikhumbulekayo esizolisebenzisa kulo msebenzi.

cp -r yourproject whatyoucalledit
Lapho "i-WhatYouCalledit" yigama elisha lephrojekthi yakho. Okulandelayo, sizodinga ukwakha ukusetshenziswa okuyisisekelo ukusetha iseva. Sizosindisa lokhu kusetshenziswa futhi sikusebenzise ngokuzayo. Ukwakha lo msebenzi, ake sakhe umsebenzisi kanambambili ukuchaza ukuthi sihlela kanjani umbhalo. Usebenzisa i-Bash, Hlela / USR / Bin / Brict

sudo nano /usr/bin/ascript
Qinisekisa ukusebenzisa i-sudo lapho ngakho-ke unemvume yokuhlela ifayela. Kuleli fayela, engeza le migqa:

# ! / BIN / Bash
if [ ! -f /usr/bin/$1 ]; then
    sudo touch /usr/bin/$1
    echo "# ! / Bin / Bash ">> / USR / Bin / $ 1
    sudo chmod a+x /usr/bin/$1
    sudo nano /usr/bin/$1
    echo $1 | sudo tee -a /etc/ascripts
else
    sudo chmod a+x /usr/bin/$1
    sudo nano /usr/bin/$1
fi
Khumbula lo mbhalo uthatha impikiswano, igama lesiskrisithi, njenge- $ 1. Okokuqala kuhlola ukuthi ngabe ifayela likhona, noma liyakha ngenye indlela, lingeza umugqa wokuqala ukumemezela iskripthi, lishintsha, liyengeza igama laso ku- / njll / imibhalo elisivumela ukuba sigcine amagama emibhalo esiyidala. Uma ifayela selivele likhona, vele ushintshe izimvume bese ulihlela. Gcina ifayili, futhi ngokulandelayo sizoshintsha izimvume. Uma nje sisebenzisa lo mbhalo, ngeke siphinde sikwenze lokho.

sudo chmod a+x /usr/bin/ascript
Iphelele. Manje ake sakhe umbhalo obizwa nge-SETUP. Okokuqala, hhayi ukweqisa, kepha bheka ukuthi umbhalo wami wokusetha ubukeka kanjani. Sizohamba ngalokhu okubonakala ngalo mbhalo kuphrojekthi yakho, ngeke udingeke konke embhalweni wami ukuqala.

# ! / BIN / Bash
SECONDS=0
PYTHON_VERSION=3.12
echo "femmebabe installer initialized."
# sudo chmod a + x script / abasebenzisi
# ./script/usseretup
# Ssh-Keyen
# Isiqondisi sephrojekthi
DIR="/home/team/femmebabe"
USER="team"
# Imiyalo ye-Log
echo "Logging commands"
sudo cp log/commands.log /var/log/commands.log
sudo chmod -R a+w /var/log
sudo chown -R :syslog /var/log
echo $'alias venv="source /home/team/femmebabe/venv/bin/activate"' | sudo tee -a /home/team/.profile
echo $'PROMPT_COMMAND=\'RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"\'' | sudo tee -a /etc/bashrc
echo $'PROMPT_COMMAND=\'RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"\'' | sudo tee -a "/home/team/.bashrc"
echo $'PROMPT_COMMAND=\'RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"\'' | sudo tee -a /root/.bashrc
echo "source /etc/bashrc" | sudo tee -a /home/team/.profile
echo "/var/log/commands.log" | sudo tee -a /etc/logrotate.d/syslog
echo "local6.*    /var/log/commands.log" | sudo tee -a "/etc/rsyslog.d/bash.conf"
sudo service rsyslog restart
# I-Nano Config
echo "set tabsize 4" >> .nanorc
echo "set tabstospaces" >> .nanorc
# GIT Config
echo "Git configuration"
sudo git config --global user.email "jasper.camber.holton@gmail.com" && sudo git config --global user.name "Jasper Holton"
git config --global user.email "jasper.camber.holton@gmail.com"
git config --global user.name "Jasper Holton"
git config --global --add safe.directory $"$DIR"
sudo ssh-keyscan -t rsa gitlab.com | sudo tee -a /root/.ssh/known_hosts
sudo ssh-keyscan -t rsa github.com | sudo tee -a /root/.ssh/known_hosts
echo "Mounting setup"
sudo mount -o remount,size=16G,exec /tmp
# Buyekeza futhi ufake
echo "Update and install packages"
sudo apt update && sudo NEEDRESTART_MODE=a apt upgrade -y
sudo apt purge postgresql-client-14 postgresql-client-common postgresql-common postgresql-contrib postgresql -y
echo "postfix postfix/mailname string femmebabe.com" | sudo debconf-set-selections
echo "postfix postfix/main_mailer_type string 'Internet Site'" | sudo debconf-set-selections
sudo NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt install -y postfix
sudo NEEDRESTART_MODE=a apt install -y rkhunter clamav-daemon libx264-dev ffmpeg libapache2-mod-wsgi-py3 apache2 cmake python-is-python3 python3-venv python3-pip python3-django expect tesseract-ocr openjdk-8-jdk redis-server libopencv-dev python3-opencv python3-dev libsasl2-dev opendkim opendkim-tools dovecot-core dovecot-pop3d dovecot-imapd auditd procmail libpq-dev postgresql postgresql-contrib libheif-dev snapd git software-properties-common certbot python3-certbot-apache
echo "-a exit,always -F arch=b64 -F euid=0 -S execve" | sudo tee -a /etc/audit/audit.rules
echo "-a exit,always -F arch=b32 -F euid=0 -S execve" | sudo tee -a /etc/audit/audit.rules
# Nika amandla i-Clamav Antivirus
echo "Starting antivirus"
sudo systemctl enable clamav-daemon
sudo systemctl start clamav-daemon
# Setha igama lomsingathi
echo "127.0.0.1 femmebabe" | sudo tee -a /etc/hosts
sudo hostnamectl set-hostname localhost
# Setha Postgres
echo "Postgres setup"
sudo -u postgres psql -U postgres -c "DROP DATABASE database;"
sudo -u postgres psql -U postgres -c "CREATE DATABASE database;"
sudo -u postgres psql -U postgres -c "CREATE USER django WITH PASSWORD 'password';"
sudo -u postgres psql -U postgres -c "ALTER ROLE django SET client_encoding TO 'utf8';"
sudo -u postgres psql -U postgres -c "ALTER ROLE django SET default_transaction_isolation TO 'read committed';"
sudo -u postgres psql -U postgres -c "ALTER ROLE django SET timezone TO 'UTC';"
sudo -u postgres psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE database TO django;"
# Setup Backup Database
echo "Building database from backup, this may take a while."
cat db.json.?? > db.json
echo "Configuring firewall"
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow 22
sudo ufw allow http
sudo ufw allow https
sudo ufw allow 'Postfix'
sudo ufw allow 'Postfix SMTPS'
sudo ufw allow 'Postfix Submission'
sudo ufw allow 'Dovecot POP3'
sudo ufw allow 'Dovecot Secure POP3'
sudo ufw allow 110/tcp
sudo ufw allow 25/tcp
echo "y" | sudo ufw enable
# I-IPatables ekhubazekile
echo "Configuring firewall"
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -F
sudo iptables-save
# Faka i-Bitdefender
cd $DIR
echo "Runnning BitDefender antivirus installer"
wget https://cloud.gravityzone.bitdefender.com/Packages/NIX/0/7aTSsy/setup_downloader.tar
mkdir bitdefender
tar -xf setup_downloader.tar -C bitdefender
sudo rm setup_downloader.tar
sed -i -e 's/{LOGINPASSWD/z&A*3BPd_qBGUMs/g' bitdefender/installer
sudo chmod a+x bitdefender/installer
sudo ./bitdefender/installer
# Setha Postfix Postfix
cd $DIR
echo "Mail services configuration"
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.backup
sudo cp config/etc_postfix_main.cf /etc/postfix/main.cf
sudo cp config/etc_postfix_master.cf /etc/postfix/master.cf
sudo cp config/etc_default_opendkim /etc/default/opendkim
sudo cp config/etc_dovecot_conf.d_10-auth.conf /etc/dovecot/conf.d/10-auth.conf
sudo cp config/etc_dovecot_conf.d_10-master.conf /etc/dovecot/conf.d/10-master.conf
sudo cp config/etc_dovecot_dovecot.conf /etc/dovecot/dovecot.conf
sudo cp config/etc_dovecot_passwd /etc/dovecot/passwd
sudo cp config/etc_opendkim.conf /etc/opendkim.conf
sudo cp config/etc_default_opendkim /etc/default/opendkim
sudo adduser postfix opendkim
sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys
sudo mkdir /etc/opendkim/keys/femmebabe.com
sudo mkdir /var/spool/postfix/opendkim
sudo echo "*@femmebabe.com     sendonly._domainkey.femmebabe.com" | sudo tee -a /etc/opendkim/signing.table
sudo echo "sendonly._domainkey.femmebabe.com    femmebabe.com:sendonly:/etc/opendkim/keys/femmebabe.com/sendonly.private" | sudo tee -a /etc/opendkim/key.table
sudo echo "127.0.0.1" | sudo tee -a /etc/opendkim/trusted.hosts
sudo echo "localhost" | sudo tee -a /etc/opendkim/trusted.hosts
sudo echo "" | sudo tee -a /etc/opendkim/trusted.hosts
sudo echo "*.femmebabe.com" | sudo tee -a /etc/opendkim/trusted.hosts
sudo chown -R opendkim:opendkim /etc/opendkim
sudo opendkim-genkey -b 2048 -d femmebabe.com -D /etc/opendkim/keys/femmebabe.com -s sendonly -v
sudo chmod go-rw /etc/opendkim/keys
sudo chown opendkim:opendkim /etc/opendkim/keys/femmebabe.com/sendonly.private
sudo chown opendkim:postfix /var/spool/postfix/opendkim
cd $DIR
sudo cp mailbox/* /var/mail/
sudo chown :users /var/mail/*
sudo chmod -R a+rwx /var/mail/*
sudo systemctl restart opendkim postfix dovecot
# Dala ama-Dris
cd $DIR
mkdir media/audio
mkdir media/audio/fingerprints
mkdir media/security
mkdir media/secure
mkdir media/secure/media
mkdir media/secure/video
mkdir media/secure/profile
mkdir media/secure/face
mkdir media/images
mkdir media/live
mkdir media/live/files
mkdir media/live/stills
mkdir media/files
mkdir temp
mkdir temp/data
mkdir temp/gfpgan
mkdir mail/inbox
mkdir mailbox
# Setha i-Virtup VirtueAlenv
cd $DIR
echo "Creating virtual environment"
python -m venv venv
source venv/bin/activate
# Thola futhi wakhe ukuncika
echo "Getting and building dependencies, this may take a whike"
cd $DIR
git clone https://github.com/sukhitashvili/violence-detection.git
cp config/vd-requirements.txt violence-detection/requirements.txt
cp config/vd-model.py violence-detection/model.py
cd violence-detection
pip3 install -r requirements.txt
cd $DIR
wget https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth -P experiments/pretrained_models
git clone https://github.com/TencentARC/GFPGAN.git
git clone https://github.com/davisking/dlib.git
cd dlib
mkdir build; cd build; cmake ..; cmake --build .
cd ..
source venv/bin/activate
python setup.py install
cd $DIR
source venv/bin/activate
cd $DIR/GFPGAN/
echo "Installing python dependencies"
pip install basicsr
pip install facexlib
pip install -r requirements.txt
python setup.py develop
pip install realesrgan
cd $DIR
sudo chown -R team:users gfpgan
echo "Installing ta-lib"
wget https://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
tar xvzf ta-lib-0.4.0-src.tar.gz
sudo rm ta-lib-*
cd ta-lib
sudo ./configure
sudo make
sudo make install
# Setha imithetho ye-firewall
cd $DIR
# Faka ukuncika kwe-Pypi
echo "Installing remaining python dependencies (this may take a while)"
sudo systemctl mask tmp.mount
cd $DIR
source venv/bin/activate
pip3 install -U "celery[redis]"
pip3 install -r requirements.txt --use-deprecated=legacy-resolver --use-pep517
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# Faka ukufaka i-OpenCv-Python == 4.5.5.64
# Faka i-Pip Opencv-Porib-Python == 4.5.5.64
pip3 install --upgrade opencv-python-headless
pip3 uninstall channels
pip3 uninstall daphne
pip3 install channels["daphne"]
pip3 install Pillow==9.5.0
pip3 install librosa
pip3 install -U 'Twisted[tls,http2]'
pip3 install --upgrade certifi requests urllib3 numpy oauthlib twisted pyjwt sqlparse cryptography astral webauthn docbarcodes pdf417 deepface --no-cache-dir
pip3 install tensorflow==2.15.1
# Faka i-certot
echo "Installing certificates"
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo snap install redis
sudo systemctl enable apache2
sudo systemctl start apache2
# Run Certot
sudo certbot --apache --non-interactive --agree-tos --domains femmebabe.com --email jasper.camber.holton@gmail.com
# Layisha kabusha iseva yemeyili
sudo systemctl restart opendkim postfix dovecot
# Kopisha Certs
# sudo CP /ETC/LEDENENCRYPTPT/LIVE/FEMMEBabe.com/privkey.pem
# sudo CP /ETC/lettesencryprypryt/live/femmebabe.com/cert.pem cert.pem
# Chibiyela
cp scripts/content.py $"/home/team/femmebabe/venv/lib/python${PYTHON_VERSION}/site-packages/pyxb/binding/content.py"
cp scripts/pwa_webpush_forms.py $"/home/team/femmebabe/venv/lib/python${PYTHON_VERSION}/site-packages/pwa_webpush/forms.py"
cp scripts/webauth_views.py $"/home/team/femmebabe/venv/lib/python${PYTHON_VERSION}/site-packages/webauth/views.py"
cp scripts/json.py $"venv/lib/python${PYTHON_VERSION}/site-packages/django/core/serializers/json.py"
# Setha izilungiselelo zomsebenzisi
sudo gpasswd -a www-data users
# Setha izimvume
echo "Setting permissions"
sudo chown -R team:users cache/
sudo chmod a+rwx -R cache/
# Ithimba leSudo Chewn -R: Abasebenzisi / Var / run /
# I-Sudo Clown Root: Izimpande / Run / Sudo / TS -r
sudo chown -R redis:redis /var/lib/redis
sudo chown -R redis:redis /var/log/redis
sudo chmod -R u+rwX,g+rwX,u+rx /var/log/redis
sudo chmod +r /etc/redis/redis.conf
sudo chown -R team:users /var/log/
sudo chown -R :users .././
sudo chmod -R g+rwX ./
sudo chmod -R g+rX .././
sudo chmod -R g-rwX ../.ssh
sudo chmod 774 ./
# sudo chmod 664 db.sqlite3
# Idatha ye-Sudo Chew www ye-WWW: Abasebenzisi i-DB.SQLite3
sudo chown -R www-data:www-data media/
sudo chown www-data:users ./
sudo chown -R team:users media/
sudo chown -R team:users ./
sudo chown -R team:users ./gfpgan/
sudo chown -R team:users ./temp/
sudo chmod a+r team /var/mail/$USER
# Kopisha ukuhlela kanye nezimvume
echo "Configuring remaining services"
sudo cp config/apis.json /etc/apis.json
sudo cp config/config.json /etc/config.json
sudo cp config/femmebabe-le-ssl.conf /etc/apache2/sites-available/femmebabe-le-ssl.conf
sudo cp config/etc_dovecot_passwd /etc/dovecot/passwd
sudo cp config/etc_init.d_celery /etc/init.d/celery
sudo cp config/etc_init.d_celerybeat /etc/init.d/celerybeat
sudo cp config/etc_default_celerybeat /etc/default/celerybeat
sudo cp config/etc_default_celery /etc/default/celery
sudo cp config/etc_systemd_system_daphne.service /etc/systemd/system/daphne.service
sudo cp config/etc_systemd_system_celery.service /etc/systemd/system/celery.service
sudo cp config/etc_systemd_system_celerybeat.service /etc/systemd/system/celerybeat.service
sudo chmod a+x /etc/init.d/celery
sudo chmod a+x /etc/init.d/celerybeat
# Ukusetha kwesizinda semininingwane
echo "Running migrations, this should be quick"
python manage.py makemigrations
python manage.py migrate --run-syncdb
echo "Loading data, this may take a while"
python manage.py loaddata db.json
echo "Setup crontab/sudoers configuration"
sudo crontab -l -u root | cat - config/crontab | sudo crontab -u root -
sudo sh -c "cat config/sudoers >> /etc/sudoers"
# Faka i-PAM Config bese ususa i-SHS Config enephutha
# Sudo Sed-'-E' $ d '$ d' /tc/pam.d/sshd
# Sudo sed-'-And $ D' / njll / Iphrofayili
echo "session required pam_exec.so seteuid /home/team/femmebabe/pam.sh" | sudo tee -a /etc/pam.d/sshd
echo "session required pam_exec.so seteuid /home/team/femmebabe/logout.sh" | sudo tee -a /etc/pam.d/sshd
sudo chmod a+x pam.sh
sudo rm /etc/ssh/sshd_config.d/50-cloud-init.conf
# Kopisha imibhalo yeBin bese usetha izimvume
echo "Copying scripts"
sudo cp scripts/reload /usr/bin/
sudo cp scripts/check /usr/bin/
sudo cp scripts/enagpu /usr/bin/
sudo cp scripts/disgpu /usr/bin/
sudo cp scripts/activate /usr/bin/
sudo cp scripts/backup /usr/bin/
sudo cp scripts/ascript /usr/bin/
sudo cp scripts/setup /usr/bin/
sudo cp scripts/addsetup /usr/bin/
sudo cp scripts/watchlogs /usr/bin/
sudo cp scripts/logs /usr/bin/
sudo cp scripts/cmds /usr/bin/
sudo cp scripts/setup /usr/bin/
sudo cp scripts/pushweb /usr/bin/
sudo cp scripts/purgecache /usr/bin/
sudo cp config/banner /etc/banner
cd /usr/bin/
sudo chmod a+x activate
sudo chmod a+x backup
sudo chmod a+x ascript
# Phinda ulayishe kabusha futhi unike amandla izinsizakalo
echo "Enabling services"
sudo systemctl daemon-reload
sudo systemctl enable daphne.service
sudo systemctl enable celery.service
sudo systemctl enable celerybeat.service
sudo systemctl enable clamav-daemon
sudo systemctl start daphne.service
sudo systemctl start celery.service
sudo systemctl start celerybeat.service
sudo systemctl start clamav-daemon
# Nika amandla amamojula we-Apache
echo "Enabling apache2"
sudo a2enmod rewrite
sudo a2enmod wsgi
sudo a2enmod headers
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel
# sudo a2dismod mpm_event
# Sudo A2Dismod MPM_Urwor
# sudo a2enmod mpm_prefreft
# Khubaza isiza esizenzakalelayo
sudo a2dissite 000-default
sudo a2dissite 000-default-le-ssl
# Nika amandla isiza
sudo a2ensite femmebabe-le-ssl
# Layisha kabusha i-daemon bese uqala kabusha i-apache, i-postfix kanye ne-opendkim
sudo systemctl daemon-reload
sudo systemctl restart apache2
sudo systemctl restart opendkim postfix
sudo systemctl start daphne
# Setha izimvume
sudo chown -R :www-data /var/www/
sudo chown -R :www-data /var/www/.deepface
# Shintsha ukucushwa
echo "Allocating swap, this may take a while"
sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 8G /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1024 count=8388608
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab
sudo swapon --show
# Injini yamagama
echo "Initializing routine caption"
/home/team/femmebabe/venv/bin/python /home/team/femmebabe/routine_caption.py
/home/team/femmebabe/venv/bin/python /home/team/femmebabe/setup_mail.py
# Isethaphu git
echo "Setting up git"
cd $DIR
sudo rm -r .git
git init --initial-branch=main
echo "Setting user password"
sudo usermod --password $(echo team | openssl passwd -1 -stdin) team
# Khombisa i-IPv6 ne-OpenKim ukuze kuculwe isizinda
echo "COPY the below information to domain configuration."
hostname -I
ip a | grep inet
ip -6 addr | grep "scope link"
sudo cat /etc/opendkim/keys/femmebabe.com/sendonly.txt | tr -d '\n' | sed 's/\s//g' | sed 's/""//g' | awk -F'[)(]' '{print $2}'
# Ukusetha kuqediwe
echo "Setup completed in"
wc -l scripts/setup
echo "lines of code."
echo "Total time:"
duration=$SECONDS
echo "$((duration / 60)) minutes and $((duration % 60)) seconds elapsed."
echo "TODO:"
echo "- COPY above IPv6 address to domain DNS configuration"
echo "- COPY domain key to domain DNS configuration"
echo "- ADD new git repository with git remote add originlab <repo>."
echo "- OPEN port 25"
echo "- INSTALL antivirus as per reccomendations"
echo "- TEST"
echo "If neccesary,"
echo "- DEBUG"
echo "- FIX setup and backup scripts"
echo "- Fix server"
echo ""
echo "Thank you for using the femmebabe installer. Have a great day!"
echo "Goodbye."
Lokho ukusetha okuningi! Ngamafuphi, le khodi ifaka imiyalo, ilungiselela i-nano ne-git, amakhophi amafayela, ukulanda kanye nokufaka i-postGeSQL, ilungiselela i-antivix (i-firewall esetshenzisiwe, ukuncipha, ukuncipha, ukuncika, ukuncika, ukuncika, ukuncika, ukuncika, ukuncika, ukuncika, ukuncika, ukuncika, ukuncika, ukuncika, ukuncika, ukuncika, kuncishisiwe, Ukufaka Izitifiketi bese usetha iseva, ukufaka ukucushwa, kuqala futhi kunikeze amandla i-sever, abezele ukushintshana, amasethi Imvume, bese kuphrinta ikheli le-IP, IPv6 kanye nokhiye we-IP, I-IPV6 ne-Opendkim Key. Kulula, kepha kubukeka njengekhodi eningi. Ngeke sidinge okuningi lokhu ngoba asinawo ukuncika, asisebenzisi i-celery, i-celerybeat noma i-daphne, kepha sizofaka ezinye zazo ukuze ziqale. Qaphela ukuthi le khodi inesizinda esimemezelwe kaningana. Sizodinga futhi ukuthenga igama lesizinda (okuyimali encane yonyaka). Ngincoma i-squarespace yokuthenga isizinda, ukwakheka kwawo kuyintoenembile futhi kulula ukuyisebenzisa. Ungathenga noma yisiphi isizinda sokukhetha kwakho, kepha ngisebenzisa isizinda femmebabe.com kulesi sibonelo. Uma usuthengile isizinda, ikhanda kwiphaneli yokucushwa kwe-squarespace DNS bese wengeza irekhodi elikhomba isizinda sakho kwiseva ngekheli le-IP. Kufanele kubukeke kanjena: @ A xx.xx.xx.xx Ngo-opharetha o- @ njengathi, okusho ukuthi zonke izizinda ngaphansi kwalesi sizinda futhi isizinda sezimpande sizophinda siqondise kuseva. Kunamarekhodi amaningi okumemezela, kepha singadlulela kulokhu uma sesikulungele ukuthumela imeyili. Khumbula, kungathatha izinsuku ezimbalwa ngaphambi kokuba ukwazi ukuthumela ngempumelelo imeyili kwiseva. Amarekhodi e-DNS Sibeka kuzothatha isikhathi sokusakazeka. Noma kunjalo, okuwukuphela kwerekhodi esidinga ukuqala ngalo kuyirekhodi. Ngakho-ke manje singakwazi ukugcwalisa umbhalo ongezansi ngokuya ngephrojekthi yethu bese uyiqhuba. Ake siqale ngombhalo omncane wokusetha ukuze nje ufake lokho esikudingayo ngentuthuko eyisisekelo. Ngeke sisebenzise ukuncika okuningi noma i-postgresql okwamanje, sizoveleUp iseva eyisisekelo ye-HTTP futhi ukhathazekile ngokuqinisekisa lapho kwenziwa. Khumbula, ukuthola isitifiketi se-HTTPS futhi usebenzise iseva ngokuphephile, sizodinga ukuthenga isizinda kanye nokuqasha iseva. Okwamanje, buyisela "iqembu" kuleli fayela ngegama lomsebenzisi wakho, "i-DR" nge-Directory yephrojekthi yakho, bese unikeza i-imeyili yakho nesizinda kumathegi we- <>. Ngaphezu kwalokho, ngaphambi kokuba siqhube le khodi, kudingeka siguqule izilungiselelo kwi-firewall umhlinzeki wokusingathwa asekela, uma ekhona. Imvamisa lokhu kuyithebhu 'yenethiwekhi' yomhlinzeki wakho wokubamba, noma uma uzindla, engxenyeni ethi 'Ukudluliselwa Ethekwini' kwe-router yakho. Futhi uzofuna ukusetha i-IP e-TOSTIC nge-router yakho ngekheli lomshini wakho weseva, uma usebenzisa ukuzibamba. Uzodinga ukuvula amachweba alandelayo wokufinyelela / wokubhala ukufinyelela. 22 (ssh) 25 (Imeyili) 587 (Imeyili) I-110 (Iklayenti le-imeyili) I-80 (http) 443

# ! / BIN / Bash
SECONDS=0
PYTHON_VERSION=3.12
echo "femmebabe installer initialized."
DIR="/home/team/<yourproject>"
USER="team"
# Imiyalo ye-Log
echo "Logging commands"
sudo cp log/commands.log /var/log/commands.log
sudo chmod -R a+w /var/log
sudo chown -R :syslog /var/log
echo $'alias venv="source /home/team/femmebabe/venv/bin/activate"' | sudo tee -a /home/team/.profile
echo $'PROMPT_COMMAND=\'RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"\'' | sudo tee -a /etc/bashrc
echo $'PROMPT_COMMAND=\'RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"\'' | sudo tee -a "/home/team/.bashrc"
echo $'PROMPT_COMMAND=\'RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"\'' | sudo tee -a /root/.bashrc
echo "source /etc/bashrc" | sudo tee -a /home/team/.profile
echo "/var/log/commands.log" | sudo tee -a /etc/logrotate.d/syslog
echo "local6.*    /var/log/commands.log" | sudo tee -a "/etc/rsyslog.d/bash.conf"
sudo service rsyslog restart
# I-Nano Config
echo "set tabsize 4" >> .nanorc
echo "set tabstospaces" >> .nanorc
# GIT Config
echo "Git configuration"
sudo git config --global user.email "<youremail>@gmail.com" && sudo git config --global user.name "<yourname>"
git config --global --add safe.directory $"$DIR"
sudo ssh-keyscan -t rsa gitlab.com | sudo tee -a /root/.ssh/known_hosts
sudo ssh-keyscan -t rsa github.com | sudo tee -a /root/.ssh/known_hosts
# Buyekeza futhi ufake
echo "Update and install packages"
sudo apt update && sudo NEEDRESTART_MODE=a apt upgrade -y
sudo apt purge postgresql-client-14 postgresql-client-common postgresql-common postgresql-contrib postgresql -y
echo "postfix postfix/mailname string femmebabe.com" | sudo debconf-set-selections
echo "postfix postfix/main_mailer_type string 'Internet Site'" | sudo debconf-set-selections
sudo NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt install -y postfix
sudo NEEDRESTART_MODE=a apt install -y rkhunter clamav-daemon libx264-dev ffmpeg libapache2-mod-wsgi-py3 apache2 cmake python-is-python3 python3-venv python3-pip python3-django expect tesseract-ocr openjdk-8-jdk redis-server libopencv-dev python3-opencv python3-dev libsasl2-dev opendkim opendkim-tools dovecot-core dovecot-pop3d dovecot-imapd auditd procmail libpq-dev postgresql postgresql-contrib libheif-dev snapd git software-properties-common certbot python3-certbot-apache
# Nika amandla i-Clamav Antivirus
echo "Starting antivirus"
sudo systemctl enable clamav-daemon
sudo systemctl start clamav-daemon
# Setha igama lomsingathi
echo "127.0.0.1 femmebabe" | sudo tee -a /etc/hosts
sudo hostnamectl set-hostname femmebabe
# Setup Backup Database
echo "Building database from backup, this may take a while."
cat db.json.?? > db.json
echo "Configuring firewall"
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow 22
sudo ufw allow http
sudo ufw allow https
sudo ufw allow 'Postfix'
sudo ufw allow 'Postfix SMTPS'
sudo ufw allow 'Postfix Submission'
sudo ufw allow 'Dovecot POP3'
sudo ufw allow 'Dovecot Secure POP3'
sudo ufw allow 110/tcp
sudo ufw allow 25/tcp
echo "y" | sudo ufw enable
# I-IPatables ekhubazekile
echo "Configuring firewall"
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -F
sudo iptables-save
# Setha i-Virtup VirtueAlenv
cd $DIR
echo "Creating virtual environment"
python -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
# Faka i-certot
echo "Installing certificates"
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo snap install redis
sudo systemctl enable apache2
sudo systemctl start apache2
# Run Certot
sudo certbot --apache --non-interactive --agree-tos --domains femmebabe.com --email <youremail>@gmail.com
# Setha izilungiselelo zomsebenzisi
sudo gpasswd -a www-data users
# Setha izimvume
echo "Setting permissions"
sudo chown -R team:users cache/
sudo chmod a+rwx -R cache/
# Ithimba leSudo Chewn -R: Abasebenzisi / Var / run /
# I-Sudo Clown Root: Izimpande / Run / Sudo / TS -r
sudo chown -R redis:redis /var/lib/redis
sudo chown -R redis:redis /var/log/redis
sudo chmod -R u+rwX,g+rwX,u+rx /var/log/redis
sudo chmod +r /etc/redis/redis.conf
sudo chown -R team:users /var/log/
sudo chown -R :users .././
sudo chmod -R g+rwX ./
sudo chmod -R g+rX .././
sudo chmod -R g-rwX ../.ssh
sudo chmod 774 ./
sudo chown -R www-data:www-data media/
sudo chown www-data:users ./
sudo chown -R team:users media/
sudo chown -R team:users ./
# Phinda ulayishe kabusha futhi unike amandla izinsizakalo
echo "Enabling services"
sudo systemctl daemon-reload
sudo systemctl enable clamav-daemon
sudo systemctl start clamav-daemon
# Nika amandla amamojula we-Apache
echo "Enabling apache2"
sudo a2enmod rewrite
sudo a2enmod wsgi
sudo a2enmod headers
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel
# Layisha kabusha i-daemon bese uqala kabusha i-apache, i-postfix kanye ne-opendkim
sudo systemctl daemon-reload
sudo systemctl restart apache2
sudo systemctl restart opendkim postfix
# Khombisa i-IPv6 ne-OpenKim ukuze kuculwe isizinda
echo "COPY the below information to domain configuration."
hostname -I
ip a | grep inet
ip -6 addr | grep "scope link"
Ngaphambi kokusebenzisa le khodi, qiniseka ukuthi isizinda osithengile sixhumeke kwiseva. Ukuze wenze lokhu, vula i-terminal emshinini wangakini, bese uqhuba lo myalo ngesizinda sakho:

ping femmebabe.com # Faka isizinda sakho lapha, ngemuva kwe-ping
Uma konke kubukeka kahle futhi iseva ithumela izimpendulo, sikulungele ukusebenzisa iskripthi bese sifaka amaphakheji kanye nokuqala, vumela futhi uqinisekise iseva yethu ye-Apache. Lokhu akuyona yonke ukusetha okudingekayo ukumisa i-PostFix, sizobheka lokho kusethwa kamuva. Okwamanje, gijimisa le khodi yokusetha futhi kufanele uthathe imizuzu embalwa ukufaka futhi iqinisekise iseva yakho. Nakulokhu futhi, qiniseka ukufaka igama, i-imeyili negama lesizinda kwiskripthi ngokwegama owathengile. Manje njengoba iseva ihlinzekiwe, ungaya kwi-URL kunoma yisiphi isiphequluli sewebhu bese uhlola ukuqiniseka ukuthi iseva isebenza nge-HTTPS. Uma kungenjalo, zama ukulinda isikhashana ukuthi amarekhodi e-DNS ukubamba bese ugijimisa umyalo olandelayo ukuze uzame kabusha isitifiketi se-certbot:

sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Uma nje usuhlele konke kahle, kufanele ukwazi ukufinyelela ikhasi elizenzakalelayo le-Apache ukuze wazi ukuthi ikhodi yakho isebenza futhi ibonisa ikhasi lewebhu bukhoma. Okulandelayo, ake sihlele amasethingi.py ukushintsha imodi yethu yokulungisa iphutha ekukhiqizeni. Sizophinde futhi silungiselele isizinda kuzilungiselelo, kanye nama-IPs angaphakathi.

nano yourproject/settings.py
Kuzilungiselelo, shintsha / engeza le migqa.

DEBUG = False

# Ukulungiswa kwesayithi
SITE_NAME = 'Femme Babe'
PROTOCOL = 'https'
DOMAIN = 'femmebabe.com'
SITE_ID = 1
BASE_URL = PROTOCOL + '://' + DOMAIN
ALLOWED_HOSTS = [DOMAIN]

INTERNAL_IPS = [
    'XX.XX.XX.XX',
]
Manje, sizodinga ukumisa i-Apache2. Ake sihlele ifayela le-Config Sizohambisa nalomugqa:

sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Leli fayela lokuhlela kufanele libe negama lethu lesizinda kulo, negama lomsebenzisi nephrojekthi. Ngisebenzisa igama lesizinda femmebabe.com, Iqembu lomsebenzisi, negama lephrojekthi we-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>
Qiniseka ukuthi uthatha isikhundla segama lephrojekthi, izinkomba, nesizinda kule khodi yesibonelo lapho ulungiselela iseva yakho. Manje, sizodinga ukukhubaza isiza esizenzakalelayo. Lokhu kungenziwa kusetshenziswa i-bash.

sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Okulandelayo, singavumela indawo ezenzakalelayo futhi silayishe kabusha i-Apache2, futhi sisebenzisa i-bash. Khumbula ukufaka esikhundleni se-femmebabe ngegama lefayela olimemezele lapho uhlela / njll / apache2 / amasayithi-atholakalayo /.

sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Buyela esizindeni sakho e-Navbar. Kufanele ubone isiza osilungiselele kwisiphequluli sakho sewebhu. Siyakuhalalisela! Uma ungakuboni, kungadingeka ukuthi wenze izinguquko ezithile. Buyekeza ngokucophelela izilungiselelo kwiphrojekthi yakho, ukucushwa kwe-Apache, futhi uqiniseke ukuthi awunawo amaphutha, futhi uqhube imiyalo elandelayo ukubheka iphrojekthi ngamaphutha.

cd projectname
source venv/bin/activate
python manage.py check
Uma unamaphutha kuphrojekthi yakho yePython, yilandelela lapho zikhona futhi zilungise. Kungenzeka ungakwazi ukubona wonke amaphutha akho kuye ngokuthi akuphi, ngakho-ke uma unephutha elisho nje ukuthi "i-poppeate akulona ifayela elilandelayo endaweni ebonakalayo, irejista.Py, ukudalula iphutha.

nano venv/lib/python3.12/site-packages/django/apps/registry.py
Skrolela ku-Line 83, lapho kwaphakanyiswa khona iphutha le-RuntiteTime (i-RunThereRorr ("i-Vope () ayikho i-Rentrant"), bese wengeza amazwana ngaphambi kwalomugqa, bese unezela, nge- Lokhu kubukeka kanjena:

            if self.loading:
                # Vimbela izingcingo ezihlanzekile ukugwema ukusebenzisa i-appconfig.ire ()
                # Izindlela kabili.
# Phakamisa i-RunTimeError ("i-Vope () ayilona i-Reentrant")
                self.app_configs = {}
            self.loading = True
Ungahlola iphrojekthi futhi futhi uveze iphutha.

python manage.py check
Ngemuva kwalokho ungabona iphutha bese ulilungisa. Uma usuhleliwe futhi ikhodi ihlanganisa ngaphandle kwamaphutha, qiniseka ukushintsha ifayela emuva ukuze kubukeke kanjena:

            if self.loading:
                # Vimbela izingcingo ezihlanzekile ukugwema ukusebenzisa i-appconfig.ire ()
                # Izindlela kabili.
                raise RuntimeError("populate() isn't reentrant")
# self.appApp = {{}
            self.loading = True
Inikezwe iseva ku-inthanethi, lapho senza ezinye izinguquko kukho, kudingeka sisebenzise umyalo olandelayo wokulayisha kabusha iseva:

sudo systemctl reload apache2
Kuhle! Kepha kuthiwani ngokuthumela imeyili? Ukuqala ukuthumela i-imeyili, sizodinga okokuqala ukuvuselela ukucushwa kwesizinda. Lokhu kufanele kube kuphaneli yakho ye-DNS e-squarespace, noma isiphi isaga segama lesizinda osikhethile. Sizodinga futhi ukufaka futhi singeze ukucushwa, futhi sigijime imiyalo embalwa. Okokuqala, ake uthole ikheli le-IPv6 leseva. Sizobe sesivula ama-DNS akho bese singeza amarekhodi. Ukuthola ikheli le-IPV6 leseva, sebenzisa lo myalo:

ip -6 addr
Manje, singangeza amarekhodi alandelayo ezilungiselelweni ze-DNS. Amarekhodi ami abukeka kanjena. Kodwa-ke, kumarekhodi akho, kufanele ungene esikhundleni sekheli le-IP nge-IP yakho (hhayi 75.147.182.214, lokho okwami). Also add your domain in place of femmebabe.com, as well as your IPV6 address found with the previous command (you can't use mine, fe80::725a:fff:fe49:3e02). Ungakhathazeki nge-DomainKy manje, lokhu kudaliwe lapho sisetha i-Postfix, iseva yemeyili, nge-OpenKim, bese iphrinta ukhiye. Sizolungiselela lokhu okokugcina. @ » A N / a 75.147.182.214 @ » I-MX Okuthenyalwayo femmebabe.com @ » Uhlobo lwenkezelo N / a femmebabe.com @ » Txt N / a Txt @ v = SPF1 MX IP75.147.182.21414.214141: FE80 :: FFF :: 725a: Fff: FF29: 3E02 ~ BONKE Okuzenzakalelayo._bimi Txt N / a v = bimi1; l = https: //femmebabe.com/Media/static/FEMMEBabe.svg _dmarc Txt N / a v = DMARC1; P = akukho Semonly._domainekey Txt N / aManje, sizodinga ukwengeza ukucushwa okuthile kokuphikelela kwe-postfix. Esikudingayo ukukwenza qiniseka ukuthi sifaka esikhundleni segama lesizinda, i-femmebabe.com, ngegama lesizinda olisebenzisayo. Ake sibheke wonke amafayela we-Config ngamunye ngamunye, bese uwafaka ku-Directory ebizwa nge-Config kuphrojekthi yethu, ukuze ufake ku-OS.

nano config/etc_postfix_main.cf
Faka lo mbhalo kufayela

# Bona /usr/share/postfix/main.cf.Dist for a amazwana, inguqulo ephelele ephelele


# Okucacisiwe Okucacisiwe: Ukucacisa igama lefayela kuzodala owokuqala
# umugqa walelo fayela elizosetshenziswa njengegama.  Okuzenzakalelayo kwe-Debian
# yi / njll / imeyli.
# myorigin = / njll / imeyli

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# I-Apy .Dodon ngumsebenzi we-mua.
append_dot_mydomain = no

# Ukungangenwe umugqa olandelayo wokukhiqiza "izexwayiso imeyili ebambezelekile"
# I-Delay_Warning_Time = 4H

readme_directory = no

# Bona i-http: //www.postfix.org/compurible_areadme.html - Okuzenzakalelayo ku-3.6 on
# Ukufakwa okusha.
compatibility_level = 3.6



# Amapharamitha we-TLS
smtpd_tls_cert_file=/etc/letsencrypt/live/femmebabe.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/femmebabe.com/privkey.pem
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_sasl_authenticated, defer_unauth_destination
myhostname = femmebabe.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = femmebabe.com, localhost, $myhostname
smtp_helo_name = femmebabe.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

# Ukucushwa kweMarter
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters

smtp_tls_security_level = encrypt
smtp_tls_loglevel = 1

virtual_transport=lmtp:unix:private/dovecot-lmtp

smtpd_sasl_path = private/auth
I-Config elandelayo!

nano config/etc_postfix_master.cf
Faka le migqa:

# 
# Ifayela lokucushwa kwe-PostFix Master Port.  Ngemininingwane ngefomethi
# wefayela, bheka i-Master (5) Ikhasi Lezandla (Umyalo: "Indoda 5 Master" noma
# Ku-inthanethi: http://www.postfix.org/master.5.html).
# 
# Ungakhohlwa ukwenza i- "Postfix Layisha kabusha" ngemuva kokuhlela leli fayela.
# 
# ===================================================================
# Uhlobo lwensiza yangasese i-UNrCRIV Chroot WakeUp MaxProc Command + Agars
# (Yebo) (Yebo) (cha) (never) (100)
# ===================================================================
smtp      inet  n       -       y       -       -       smtpd
# I-SMTP INET N - Y - 1 Postscreen
# I-SMTPD Pass - - Y - - I-SMTPD
# DNSBLOG UNIX - - Y - 0 DNSBlog
# Tlsproxy unix - - y - 0 tlspoxy
# Khetha eyodwa: Nika amandla ukuhanjiswa kwamakhasimende we-loopback kuphela, noma kunoma yiliphi iklayenti.
# 127.0.0.1.0.1:SUBUSIZO
submission inet n       -       y       -       -       smtpd
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_tls_wrappermode=no
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
# -O syslog_name = postfix / ukuhanjiswa
# -O smpd_tls_secechel = encrypt
# -Ombd_sasl_auth_able = yebo
# -O smtpd_tls_auth_only = yebo
# -O smtpd_reject_unlisted_recipied = cha
# -Omsm_client_restrictions = $ mua_client_restriction
# -A-smtpd_helo_restrictions = $ mua_helo_rectrications
# -Omsm_sender_restrictions = $ mua_sendender_restriction
# -Uku-smtpd_recipont_trival =
# -Uku-_rethay_restrictions = Imvume_Sasl_auuncentEd, yenqaba
# -O mpirre_macro_daemon_name = isuka
# Khetha eyodwa: Nika amandla ama-SMTPs amaklayenti we-loopback kuphela, noma kunoma yiliphi iklayenti.
# 127.0.0.1.1:SMTS INet N - Y - - I-SMTPD
# I-SMTPS INet N - Y - - I-SMTPD
# -O syslog_name = postfix / smtps
# -O mpwpd_tls_wrappermode = yebo
# -Ombd_sasl_auth_able = yebo
# -O smtpd_reject_unlisted_recipied = cha
# -Omsm_client_restrictions = $ mua_client_restriction
# -A-smtpd_helo_restrictions = $ mua_helo_rectrications
# -Omsm_sender_restrictions = $ mua_sendender_restriction
# -Uku-smtpd_recipont_trival =
# -Uku-_rethay_restrictions = Imvume_Sasl_auuncentEd, yenqaba
# -O mpirre_macro_daemon_name = isuka
# I-628 inet n - y - - qmqpd
pickup    unix  n       -       y       60      1       pickup
cleanup   unix  n       -       y       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
# QMGRR UNIX n - N 300 1 OQMG
tlsmgr    unix  -       -       y       1000?   1       tlsmgr
rewrite   unix  -       -       y       -       -       trivial-rewrite
bounce    unix  -       -       y       -       0       bounce
defer     unix  -       -       y       -       0       bounce
trace     unix  -       -       y       -       0       bounce
verify    unix  -       -       y       -       1       verify
flush     unix  n       -       y       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       y       -       -       smtp
relay     unix  -       -       y       -       -       smtp
        -o syslog_name=postfix/$service_name
# -O smtp_helo_timeout = 5 -O smtp_connect_TonTout = 5
showq     unix  n       -       y       -       -       showq
error     unix  -       -       y       -       -       error
retry     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       y       -       -       lmtp
anvil     unix  -       -       y       -       1       anvil
scache    unix  -       -       y       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd
# 
# ========================================================
# I-interface ku-software engeyona eyethu. Qiniseka ukuthi uhlola le ncwadi
# Amakhasi e-software engeyona eye-postfix ukuthola ukuthi yiziphi izindlela ezifunayo.
# 
# Izinsizakalo eziningi ezilandelayo zisebenzisa ukulethwa kwePostfix Pipe (8)
# i-ejenti.  Bona ikhasi lamapayipi (8) lowesifazane ukuthola imininingwane mayelana ne- $ {emukeli}
# nezinye izinketho zemvilophu yemiyalezo.
# ========================================================
# 
# I-Maildrop. Bona ifayela le-postfix postdrop_readme ngemininingwane.
# Futhi chaza ku-Main.cf: I-Maildrop_Destination_reciit_Imifient_limit = 1
# 
maildrop  unix  -       n       n       -       -       pipe
  flags=DRXhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
# 
# ========================================================
# 
# Izinguqulo zakamuva zeKoresi zingasebenzisa ukungena kwe- "LMTP" Master.cf okukhona.
# 
# Cacisa ngeCyrus.conf:
# I-LMTP CMD = "LMTPD -A" Lalela = "Localhost: LMTP" proto = TCP4
# 
# Cacisa nge-Main.cf eyodwa noma ngaphezulu kokulandelayo:
# I-Mailbox_Transport = LMTP: Inettsha: I-Localhost
# Virtual_transport = LMTP: Inettsha: Localhost
# 
# ========================================================
# 
# UKores 2.1.5 (Amos Gouauaux)
# Futhi chaza ku-Main.cf: CYRUS_Destination_reciiPip_Imifient_limit = 1
# 
# CYRUS UNIX - N N - - Ipayipi
# Amafulegi = I-DRX USER = CYRUS ALG = / CYRUS / BIN / BIN / REPS -E -E-REP $ {Umthumeli} $ {Umsebenzisi}
# 
# ========================================================
# Isibonelo esidala sokulethwa nge-Cyrus.
# 
# Old -cyrus unix - n n - - ipayipi
# Amafulegi = R umsebenzisi = cyrus argv = / cyrus / bin / ukuletha -Ukuhambisa -M $ $ $} $ {umsebenzisi}
# 
# ========================================================
# 
# Bona ifayela le-Postfix UUCP_UCREDE ngemininingwane yokucushwa.
# 
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
# 
# Ezinye izindlela zokulethwa kwangaphandle.
# 
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman   unix  -       n       n       -       -       pipe
  flags=FRX user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
Kanye nokucushwa kwe-OpendKim. I-OpenGKIM ikhomba amaseva we-imeyili anezinkinobho zesizinda ukubenza baphephe ngokwengeziwe. Ngaphandle kwawo, i-imeyili ayisayiniwe futhi kungenzeka ingakwenzi kubhokisi lokungenayo.

nano config/etc_default_opendkim
Faka le migqa:

# Qaphela: Leli yifayela lokucushwa lefa lefa. Ayisetshenziswa yi-Opendkim
# insizakalo ye-systemd. Sicela usebenzise amapharamitha wokucushwa ahambisanayo ku
# /etc/opendkim.conf esikhundleni.
# 
# Phambilini, umuntu angahlela izilungiselelo ezizenzakalelayo lapha, bese wenza
# /Lib/opendkim/opendkim.service.service.genice ukukhiqiza amafayela we-systemd override ku-
# /etc/systemd/system/opendkim.service.service.cconf kanye
# /etc/tmpfiles.d/opendkim.conf. Ngenkathi lokhu kusenokwenzeka, manje sekukhona
# Kunconywe ukuguqula izilungiselelo ngqo ku /etc/opendkim.conf.
# 
# Daemon_opts = ""
# Shintshela ku / var / spool / runfix / run / opendkim ukusebenzisa i-Unix Socket nge
# postfix ku-chroot:
# Rundir = / beku / spool / postfix / run / opendkim
RUNDIR=/run/opendkim
# 
# Ukungaguquki ukucacisa enye isokhethi
# Qaphela ukuthi ukusetha lokhu kuzokweqa inani lesokhethi ku- opendkim.conf
# Okuzenzakalelayo:
SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"
# Lalela kuzo zonke izikhala eziphakathi kwePort 54321:
# Isokhethi = inet: 54321
# Lalela ku-Loopback ePort 12345:
# Isokhethi = inet: 12345 @ Localhost
# Lalela u-192.0.2.1 yiPort 12345:
# Isokhethi = inet: 12345@192.0.2.1
USER=opendkim
GROUP=opendkim
PIDFILE=$RUNDIR/$NAME.pid
EXTRAAFTER=

nano config/etc_dovecot_conf.d_10-master.conf
Faka le migqa:

0-master.conf 
# Okuzenzakalelayo_process_limit = 100
# Okuzenzakalelayo_client_limit = 1000

# Okuzenzakalelayo vsz (usayizi wememori ebonakalayo) umkhawulo wezinqubo zensiza. Lokhu ikakhulukazi
# ihlose ukubamba nokubulala izinqubo ezikhukhumezayo zenkumbulo ngaphambi kokuba zidle
# konke.
# Okuzenzakalelayo_vsz_limit = 256m

# Umsebenzisi we-Login usetshenziswa ngaphakathi ngezinqubo zokungena ngemvume. Lokhu kungalawulwa kakhulu
# umsebenzisi ohlelweni lwe-dovecot. Akufanele kube nokufinyelela kunoma yini.
# ezenzakalelayo_login_user = dovenull

# Umsebenzisi wangaphakathi usetshenziswa izinqubo ezingatholakali. Kufanele ihlukaniswe kusuka
# Umsebenzisi we-Login, ukuze izinqubo zokungena ngemvume azikwazi ukuphazamisa ezinye izinqubo.
# ezenzakalelayo_intnal_user = dovecot

service imap-login {
  inet_listener imap {
    # I-Port = 143
  }
  inet_listener imaps {
    # I-Port = 993
    # ssl = yebo
  }

  # Inani lokuxhuma okufanele lisingatha ngaphambi kokuqala inqubo entsha. Ngokuvamile
  # Amanani kuphela awusizo angu-0 (angenamkhawulo) noma 1. 1 aphephile kakhulu, kepha 0
  # Kuyashesha. <DOC / Wiki / LoginProcess.txt>
  # I-Service_Count = 1

  # Inani lezinqubo ukuze uhlale ulinde ukuxhumeka okuningi.
  # Inqubo_min_avail = 0

  # Uma usetha insiza_count = 0, kungenzeka ukuthi udinga ukukhulisa lokhu.
  # vsz_limit = $ ezenzakalelayo_vsz_limit
}

service pop3-login {
  inet_listener pop3 {
    # I-Port = 110
  }
  inet_listener pop3s {
    # I-Port = 995
    # ssl = yebo
  }
}

service submission-login {
  inet_listener submission {
    # I-Port = 587
  }
}

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0666
    user = postfix
  }

  # Dala isilaleli se-inet kuphela uma ungakwazi ukusebenzisa i-UNIX Socket engenhla
  # Inet_lister LMTP {
    # Gwema ukwenza i-LMTP ibonakale kuyo yonke i-Intanethi
    # Ikheli =
    # I-Port =
  # }
}

service imap {
  # Iningi lememori liya ku-MMAP () amafayela ange. Ungadinga ukwandisa lokhu
  # khawulela uma unebhokisi elikhulu leposi.
  # vsz_limit = $ ezenzakalelayo_vsz_limit

  # UMax. Inani lezinqubo ze-IMAP (ukuxhumana)
  # inqubo_limit = 1024
}

service pop3 {
  # UMax. Inani lezinqubo ze-POP3 (ukuxhumana)
  # inqubo_limit = 1024
}

service submission {
  # UMax. Inani lezinqubo zokungenisa ze-SMTP (ukuxhumana)
  # inqubo_limit = 1024
}

service auth {
  # I-Author_socket_pap ekhomba kulolu hlelo lokusebenza lweSocket ngokuzenzakalelayo. Ngokuvamile
  # esetshenziswa yiDoveCot-LDA, i-DOVEADM, okungenzeka ukuthi kungenzeka inqubo ye-IMAP, njll. Abasebenzisi abanayo
  # izimvume ezigcwele kule sokhethi ziyakwazi ukuthola uhlu lwawo wonke amagama abasebenzisi futhi
  # Thola imiphumela yokubheka komuntu wonke umuntu wonke.
  # 
  # Imodi yokuzenzakalelayo engu-0666 ivumela noma ngubani ukuthi axhumeke kwisokhethi, kepha
  # Ukubukeka kwe-userdb kuzophumelela kuphela uma umsebenzisi ebuyisela inkambu ye- "UID"
  # Iqondanisa i-UID yenqubo yokushayela ucingo. Futhi uma i-UID yomshayeli noma i-gid ifana
  # I-USID kasokhethi noma i-gid ukubheka okuphumelelayo. Noma yini enye ebangela ukwehluleka.
  # 
  # Ukunikeza umshayeli wemvume ephelele ukubheka bonke abasebenzisi, setha imodi ku-
  # okunye ngaphandle kwe-0666 ne-dovecot kuvumela i-kernel iphoqelele
  # Izimvume (e.g. 0777 ivumela wonke umuntu izimvume ezigcwele).
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

service auth-worker {
  # Inqubo yabasebenzi ye-Author iqhutshwa njengempande ngokuzenzakalelayo, ukuze ikwazi ukungena
  # / njll / isithunzi. Uma lokhu kungadingekile, umsebenzisi kufanele aguqulwe abe
  # $ Default_undal_user.
  # Umsebenzisi = izimpande
}

service dict {
  # Uma kusetshenziswa i-dict proxy, izinqubo zemeyili kufanele zikwazi ukufinyelela isokhethi zalo.
  # Isibonelo: Imodi = 0660, i-GROUP = I-VPLANE NE-MOLLE mail_access_groups = vmail
  unix_listener dict {
    # Imodi = 0600
    # Umsebenzisi =
    # iqembu =
  }
}
Nakulokhu futhi, qiniseka ukufaka isizinda kuwo wonke lawa mafayela, i-femmebabe.com, ngesizinda osikhethile. Hlela ifayela elilandelayo, i-devecot's Config,

nano config/etc_dovecot_dovecot
Bese ufaka le migqa

## Ifayela lokucushwa kweDovecot

# Uma ushesha, bheka i-http: //wiki2.dovecot.org/quickconfiguration

# I- "DOVECONF -N" umyalo unikeza umphumela ohlanzekile wezilungiselelo ezishintshiwe. Yisebenzise
# Esikhundleni sokukopisha & ukunamathisela amafayela lapho kuthunyelwa ohlwini lwamakheli e-dovecot.

# '# 'umlingiswa nakho konke ngemuva kokuthi kuphathwe njengokuphawula. Izikhala ezingeziwe
# futhi amathebhu awanakwa. Uma ufuna ukusebenzisa noma yikuphi kwalokhu ngokusobala, faka
# value inside quotes, eg.: key = "# UChar and Trailing Whitespace "

# Izilungiselelo eziningi (kodwa hhayi zonke) zingaphezulu kwezivumelwano ezihlukile kanye / noma
# Umthombo / I-IPS ukuphela ngokubeka izilungiselelo ngaphakathi kwezingxenye, ngokwesibonelo:
# I-Protocol IMAP {}, Local 127.0.0.1 {}, kude kude ne-10.0.0.0/8 {}

# Amanani Okuzenzakalelayo aboniswa ukulungiswa ngakunye, akudingekile ukuze kuncishiswe
# lezo. Lokhu kuhlukile kulokhu: Azikho izigaba (e.g.9Space {})
# noma izilungiselelo ze-plugin zengezwa ngokuzenzakalelayo, zibhalwe kuphela njengezibonelo.
# Izindlela futhi ziyizibonelo nje ezizenzakalelayo zangempela ezisuselwa ekuhlelweni
# Izinketho. Izindlela ezibalwe lapha zilungiselela i-cokulunging - Preefix = / USR
# -Sysysconfdir = / njll --LocalStatedir = / var

# Nika amandla amaphrothokholi afakiwe
!include_try /usr/share/dovecot/protocols.d/*.protocol

# Uhlu lwe-Comma oluhlukanisiwe lwama-IP noma ama-hostems lapho ungalalela khona ukuze uxhumane.
# "*" Kulalela kuzo zonke izindawo zokuxhumana ze-IPV4, "
# Uma ufuna ukucacisa amachweba angewona ama-angewona noma yini eyinkimbinkimbi,
# Hlela i-Confe.D / Master.Conf.
# Lalela = *, ::

# Isiqondisi esisesisekelo lapho ugcina khona idatha ye-Runtime.
# base_dir = / var / run / dovecot /

# Igama lalesi simo. Kwi-Multi-Instance Setup Doveadm neminye imiyalo
# ingasebenzisa -I <instance_name> Ukukhetha ukuthi yisiphi isibonelo esisetshenziswayo (enye indlela
# to -c <config_porpath>). Igama lesibonelo libuye lengezwe ezinqubweni ze-dovecot
# ekuphumeni kwe-PS.
# Isibonelo_name = i-dovecot

# Umyalezo wokubingelela wamakhasimende.
# I-Login_Greeting = I-Dovecot isilungile.

# Uhlu Oluhlukaniswe Somlomo Lwamabanga Wenethiwekhi Othembekile. Ukuxhumana okuvela kulezi
# Ama-IP avunyelwe ukweqa amakheli abo e-IP namachweba (ngokungena ngemvume futhi
# Okokuhlola ubuqiniso). khubaza_plaintaix_plauth_auth futhi ayinakwa
# Lawa manethiwekhi. Imvamisa ungacacisa amaseva wakho we-IMAP Proxy lapha.
# I-Login_trust_networks =

# Uhlu Oluhlukaniswe Somnyango Lokungena Ukungena Ukufinyelela Ama-Sockets (E.G. TCPWRAP)
# I-Login_Appss_sockets =

# Nge-proxy_maybe = yebo uma ukuphela kommeleli kufanele kufane nanoma yimiphi le ama-IPS, ungenzi
# Ukusondela. Lokhu akudingekile ngokujwayelekile, kepha kungasiza uma uya lapho uya khona
# IP yi-e.g. I-IP yomthwalo we-load.
# I-Author_Proxy_ELLE =

# Khombisa izihloko zenqubo ethe xaxa (ku-PS). Njengamanje kukhombisa igama lomsebenzisi futhi
# Ikheli le-IP. Iwusizo ekuboneni ukuthi angobani empeleni asebenzisa izinqubo ze-IMAP
# (isib. Amabhokisi eposi abelwe noma uma uid eid esetshenziselwa ama-akhawunti amaningi).
# verbose_proctitle = cha

# Kufanele zonke izinqubo zingabulawa lapho inqubo ye-DEVOCOT Master ivala phansi.
# Ukubeka lokhu ku- "cha" kusho ukuthi i-dovecot ingathuthukiswa ngaphandle
# ukuphoqa ukuxhumana okukhona kwamakhasimende ukuvala (yize lokho kungaba khona
# Inkinga uma ukuthuthukiswa yi-e.g. ngenxa yokulungiswa kwezokuphepha).
# Shutdown_clients = Yebo

# Uma kungenjalo zero, run imeyili imiyalo ngokusebenzisa lokhu ukuxhumana okuningi kwiseva ye-doveadm,
# esikhundleni sokuzigijimela ngqo kwinqubo efanayo.
# doveadm_worker_count = 0
# I-Unix Socket noma Umgcini: Imbobo esetshenziselwa ukuxhuma kwiseva ye-Doveadm
# doveadm_socket_path = i-doveadm-server

# Uhlu Oluhlukanisiwe Somnyango Lokuhlukahluka Kwezemvelo Okugciniwe ku-DOVECOT
# Ukuqalisa futhi kudlule kuzo zonke izinqubo zengane yayo. Ungasipha futhi
# Ukhiye = Amabili Amabili ukuze uhlele izilungiselelo ezithile.
# Ngenisa_environment = Tz

## 
## Izilungiselelo Zeseva ye-Dictionary
## 

# Isichazamazwi singasetshenziswa ukugcina ukhiye = Uhlu lwenani. Lokhu kusetshenziswa ngabaningana
# Ama-plugins. Isichazamazwi singafinyeleleka ngokuqondile noma yize a
# iseva ye-Dictionary. Amagama esichazamazwi alandelayo we-dict block amamephu ku-URIS
# lapho kuseva kusetshenziswa. Lokhu kungabhekiswa kusetshenziswa i-URIS ngefomethi
# "Proxy :: <amagama>".

dict {
  # Quota = MySQL: /Andc/DoveCot/DoveCot-DIC-SQL.conf.xt
}

# Iningi lokucushwa kwangempela lifakwa ngezansi. Amagama efayela
# Kuhlelwe okokuqala ngenani labo le-ASCII futhi kwafakwa kulowo myalo. Iziqalo ze-00-
# Kumagama wamafayela kuhloselwe ukwenza kube lula ukuqonda uku-oda.
!include conf.d/*.conf

# Ifayela lokuzilungiselela lingazama futhi ukufakwa ngaphandle kokunikeza iphutha uma
# Akutholakalanga:
!include_try local.conf

passdb {
  driver = passwd-file
  args = /etc/dovecot/passwd
}
userdb {
  driver = passwd
}

protocols = imap pop3

# Ivumela i-DOVECOT ukuthi ilalele konke ukuxhumeka kokufaka (IPv4 / IPV6)

listen = *, ::
Faka iphasiwedi yomsebenzisi we-dovecot:

nano config/etc_dovecot_passwd
Ingxenye yokuqala yefayela, ngaphambi kwekholoni, igama lomsebenzisi. Ingxenye yokugcina, "i-PassPassword", isho iphasiwedi ongathanda ukuyinika iseva yemeyili yakho.

team:{plain}yourpassword
Okulandelayo, i-OpendKim Config

nano config/etc_opendkim.conf
Bese ufaka le migqa:

# Lokhu kucushwa okuyisisekelo kokusayina nokuqinisekisa. Kungaba lula
# iguqulwe ukuze ihambisane nokufakwa okuyisisekelo. Bheka i-Opendkim.conf (5) futhi
# /Usr/share/doc/opendkim/opendkim.conf.S.S..S.SAMPLE YOKUGCINA
# imibhalo yamapharamitha wokucushwa atholakalayo.

Syslog			yes
SyslogSuccess		yes
# Logwhw cha

# Amapharamitha ajwayelekile wokusayina kanye nokuqinisekisa. E-Debian, i- "kusuka" unhlokweni
# Okuphindwe okweqile, ngoba imvamisa kungukhiye ongumazisi osetshenziswa amasistimu wedumela
# ngakho-ke ngokuphepha okuthile okuzwela.
Canonicalization	relaxed/simple
Mode			s
SubDomains		no
OversignHeaders		From

# Ukusayina isizinda, isikhethi, kanye nokhiye (kuyadingeka). Isibonelo, yenza ukusayina
# Ngesizinda "Isibonelo.com" nge-Selector "2020" (2020._domaimainkey.ex samp.com),
# Usebenzisa ukhiye wangasese ogcinwe ku /etc/dkimpkeys/ex samp.private. Gronular amaningi
# Izinketho zokusetha zingatholakala ku-/Usr/Share/Doc/Opendkim/Readme.opendkim.
# Exxer.com exanger.com
# Okhethiwe ngo-2020
# KeyFile /etc/dkimpkeys/ex samp.private

# E-Debian, u-OpenKim ugijima njengomsebenzisi "Openkim". I-UMask ye-007 iyadingeka lapho
# Kusetshenziswa isokhethi yendawo nge-MTAS efinyelela esokhethi njengelungelo elingelona iqiniso
# umsebenzisi (ngokwesibonelo, postfix). Ungadinga ukwengeza umsebenzisi "Postfix" eqenjini
# "Opendkim" kuleso simo.
UserID			opendkim
UMask			007

# Isokhethi ngokuxhumeka kwe-MTA (kuyadingeka). Uma i-MTA ingaphakathi kwejele le-chroot,
# Kufanele kuqinisekiswe ukuthi isokhethi liyatholakala. E-Debian, postfix isebenza ngaphakathi
# I-chroot in / var / spool / postfix, ngakho-ke kuzofanela isokhethi le-Unix
# ilungiselelwe njengoba kukhonjisiwe kulayini wokugcina ongezansi.
# Socket Local: /run/opendkim/opendkim.sock
# I-Socket Inet: 8891 @ yendawo yendawo
# I-Socket Inet: 8891
Socket			local:/var/spool/postfix/opendkim/opendkim.sock

PidFile			/run/opendkim/opendkim.pid

# Ama-hots ongasayina kuwo kunokuqinisekisa, okuzenzakalelayo kungu-127.0.0.1. Bona
# Isigaba sokusebenza se-Opendkim (8) ukuthola eminye imininingwane.
# Yangaphakathi 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12

# I-trust anchor inika amandla i-DNSSEC. E-Debian, kunikezwe ifayela le-trust anchor
# ngephakeji le-DNS-Root-data.
TrustAnchorFile		/usr/share/dns/root.key
# Ama-nameservers 127.0.0.1

# Imephu yezizinda kusuka kumakheli kuya okhiye abasetshenziselwa ukusayina imiyalezo
KeyTable           refile:/etc/opendkim/key.table
SigningTable       refile:/etc/opendkim/signing.table

# Iqoqo lama-Batters angaphakathi kufanele asayinwe
InternalHosts       /etc/opendkim/trusted.hosts

nano config/etc_default_opendkim
Bese ufaka le migqa

# Qaphela: Leli yifayela lokucushwa lefa lefa. Ayisetshenziswa yi-Opendkim
# insizakalo ye-systemd. Sicela usebenzise amapharamitha wokucushwa ahambisanayo ku
# /etc/opendkim.conf esikhundleni.
# 
# Phambilini, umuntu angahlela izilungiselelo ezizenzakalelayo lapha, bese wenza
# /lib/opendkim/opendkim.service.service.genice ukukhiqiza amafayela we-systemd at
# /etc/systemd/system/opendkim.service.service.cconf kanye
# /etc/tmpfiles.d/opendkim.conf. Ngenkathi lokhu kusenokwenzeka, manje sekukhona
# Kunconywe ukuguqula izilungiselelo ngqo ku /etc/opendkim.conf.
# 
# Daemon_opts = ""
# Shintshela ku / var / spool / runfix / run / opendkim ukusebenzisa i-Unix Socket nge
# postfix ku-chroot:
# Roundir = / var / spool / run / opendkim
RUNDIR=/run/opendkim
# 
# Ukungaguquki ukucacisa enye isokhethi
# Qaphela ukuthi ukusetha lokhu kuzokweqa inani lesokhethi ku- opendkim.conf
# Okuzenzakalelayo:
SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"
# Lalela kuzo zonke izikhala eziphakathi kwePort 54321:
# Isokhethi = inet: 54321
# Lalela ku-Loopback ePort 12345:
# Isokhethi = inet: 12345 @ Localhost
# Lalela u-192.0.2.1 yiPort 12345:
# Isokhethi = inet: 12345@192.0.2.1
USER=opendkim
GROUP=opendkim
PIDFILE=$RUNDIR/$NAME.pid
EXTRAAFTER=
Lapho sikulungele ukusetha iseva yethu ye-Postfix, sizosebenzisa ikhodi engezansi, negama lesizinda elifanele elishumekiwe. Qala ngokwakha umbhalo

touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Manje, eNano, umhleli wombhalo, hlela leli fayela ngakho-ke kufaka phakathi igama lakho lesizinda esikhundleni se-femmebabe.com.

# ! / BIN / Bash
# Setha Postfix Postfix
cd $DIR
echo "Mail services configuration"
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.backup
sudo cp config/etc_postfix_main.cf /etc/postfix/main.cf
sudo cp config/etc_postfix_master.cf /etc/postfix/master.cf
sudo cp config/etc_default_opendkim /etc/default/opendkim
sudo cp config/etc_dovecot_conf.d_10-auth.conf /etc/dovecot/conf.d/10-auth.conf
sudo cp config/etc_dovecot_conf.d_10-master.conf /etc/dovecot/conf.d/10-master.conf
sudo cp config/etc_dovecot_dovecot.conf /etc/dovecot/dovecot.conf
sudo cp config/etc_dovecot_passwd /etc/dovecot/passwd
sudo cp config/etc_opendkim.conf /etc/opendkim.conf
sudo cp config/etc_default_opendkim /etc/default/opendkim
sudo adduser postfix opendkim
sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys
sudo mkdir /etc/opendkim/keys/femmebabe.com
sudo mkdir /var/spool/postfix/opendkim
sudo echo "*@femmebabe.com     sendonly._domainkey.femmebabe.com" | sudo tee -a /etc/opendkim/signing.table
sudo echo "sendonly._domainkey.femmebabe.com    femmebabe.com:sendonly:/etc/opendkim/keys/femmebabe.com/sendonly.private" | sudo tee -a /etc/opendkim/key.table
sudo echo "127.0.0.1" | sudo tee -a /etc/opendkim/trusted.hosts
sudo echo "localhost" | sudo tee -a /etc/opendkim/trusted.hosts
sudo echo "" | sudo tee -a /etc/opendkim/trusted.hosts
sudo echo "*.femmebabe.com" | sudo tee -a /etc/opendkim/trusted.hosts
sudo chown -R opendkim:opendkim /etc/opendkim
sudo opendkim-genkey -b 2048 -d femmebabe.com -D /etc/opendkim/keys/femmebabe.com -s sendonly -v
sudo chmod go-rw /etc/opendkim/keys
sudo chown opendkim:opendkim /etc/opendkim/keys/femmebabe.com/sendonly.private
sudo chown opendkim:postfix /var/spool/postfix/opendkim
cd $DIR
sudo cp mailbox/* /var/mail/
sudo chown :users /var/mail/*
sudo chmod -R a+rwx /var/mail/*
sudo systemctl restart opendkim postfix dovecot
sudo cat /etc/opendkim/keys/femmebabe.com/sendonly.txt | tr -d '\n' | sed 's/\s//g' | sed 's/""//g' | awk -F'[)(]' '{print $2}'
Manje, gijimisa umbhalo ogcwalisiwe ukuze ulungiselele i-Postfix, Opendkim neDovecot.

./scripts/postfixsetup
Lapho lo mbhalo usuqedile, kokopisha umugqa wokugcina kunyathelisa bese unamathisela ukucushwa kwakho kwe-DNS njengenani lokutholwa ._doinay. Lona ukhiye we-OpendKim osetshenziselwa ukukhomba isizinda sakho lapho uthumela imeyili ephephile. Kuhle! Ezinsukwini ezimbalwa, kufanele ukwazi ukuthumela imeyili kusuka kuseva enikele konke kulungiselelwe kahle. Uma usanda kumisa i-DNS yeseva yemeyili yakho, kufanele kuthathe amahora angaphansi kwama-72 amarekhodi okuvuselela. Ngokuvamile kushesha kakhulu. Ungahlola ukuthi ngabe iseva yakho isebenza ngokusebenzisa lo myalo, ihlinzeke nge-imeyili yakho:

echo “test” | mail -s “Test Email” youremail@gmail.com
Uma konke kubonakala kusebenza kahle, kufanele ukwazi ukuthumela i-imeyili ngeseva yakho. Uma kungasebenzi, zama ukubheka izingodo ukubona ukuthi yini leyo phutha.

tail –lines 150 /var/log/mail.log
Lokhu kuzonikeza imininingwane ye-verbose mayelana ne-imeyili ethunyelwe yiseva nokuthi isebenza kahle yini. Kufanele ukwazi ukubona i-imeyili kubhokisi lakho lokungenayo futhi, uma kungenjalo, hlola ifolda yakho egaxekile. Uzodinga futhi ukumisa izilungiselelo zakho kuzilungiselelo zakho.Phy ngakho-ke iseva yakho ye-imeyili ingakhuluma nohlelo lwakho lokusebenza lwe-Django, iphrojekthi. Faka noma buyisela le migqa kuzilungiselelo zakho

EMAIL_HOST = DOMAIN
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_ADDRESS = 'team@femmebabe.com'
EMAIL_HOST_USER = 'team' # 'Love@mamashele.com'
EMAIL_HOST_PASSWORD = config['EMAIL_HOST_PASSWORD']
DEFAULT_FROM_EMAIL = '{} <{}>'.format(SITE_NAME, EMAIL_HOST_USER)
Qaphela ukuthi sisebenzisa ifayela le-Config ukuthola iphasiwedi. Masilayisha leli fayela kuzilungiselelo ezinjengalezi, ekuqaleni kwefayela.:

import os
import json

# Vula bese ulayisha i-Config
with open('/etc/config.json') as config_file:
    config = json.load(config_file)
Ake sakhe leli fayela bese sengeza ukhiye oyimfihlo kulo, kanye nephasiwedi ye-imeyili. Ukukhiqiza ukhiye oyimfihlo, sebenzisa lo myalo, nganoma yibuphi ubude obuthanda ekugcineni:

openssl rand -base64 64
Manje, ukopisha umbhalo okhiqizwayo owenziwe futhi uhlele /etc/config.json

sudo nano /etc/config.json
Faka imigqa elandelayo kufayela lakho, ngokhiye ongenziwa i-openSSL ekhiqizwa njengokhiye oyimfihlo.

{
	"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
	"EMAIL_HOST_PASSWORD": "yourpassword"
}
Ifomethi ye-JSON ilula futhi kulula ukuyisebenzisa, singakwazi ukumemezela ezinye izinkinobho esifuna ukuzisebenzisa kuphrojekthi yethu ngale ndlela, futhi uzigcine zihlukile ku-Project Directory yethu ukuze abanye abasebenzisi abakwazi ukubabhalela ngakho-ke. Lokhu kunconywa ukuzijwayeza izinkinobho ze-API, esizosebenzisa ngazo ezingaphezu kwabambalwa lapha. Uzofuna futhi ukwehlisa iphrojekthi yakho ukuze uqiniseke ukuthi konke kugcinwa futhi uzokwazi ukubuyisa umsebenzi wakho ngokuhamba kwesikhathi noma ngabe awusafisi ukuqasha iseva.

sudo backup
Manje, zama ukuthumela i-imeyili ye-HTML kusuka kuseva yeWebhu, kuhlinzekwe ukuthumela eyodwa kusuka kulayini womyalo kuyasebenza. Buza isibonelo sakho somsebenzisi egobolondweni, bese uthumela i-imeyili ye-HTML kulowo msebenzisi nge-Django. Shintsha igama lami kwikhodi, uCharlotte, igama lakho lomsebenzisi.

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()
Uma umyalo wokuqala ungasebenzi, qiniseka ukuthi usebenzisa

source venv/bin/activate
Kunikezwe konke kusethwe kahle, manje uzothola i-imeyili yokwamukela ebhokisini lakho leposi elithunyelwe ngohlelo lwakho lokusebenza lwewebhu. Umsebenzi omuhle! Ufike kude. Bengifuna ukungeza, uma uke wahlangabezana nanoma yimaphi amaphutha nakancane ngenkathi usebenza kwiphrojekthi enjengale, unganqikazi ukucinga izimpendulo ucele usizo. I-Google, phakathi kwezinye izinjini zokucinga, izinsiza ezinhle zokufuna usizo lwezinhlelo. Mane nje useshe iphutha olitholayo, futhi uzokwazi ukubona ukuthi abanye abantu bayixazulula kanjani inkinga. Futhi, wamukelekile ukuthi ungithinte, othisha bakho (othisha, oprofesa, othisha), noma yibaphi oxhumewe kwi-Intanethi abatholakala ngosizo lwezinhlelo, noma bethola izinsizakusebenza ukuthola izixazululo zezinkinga ohlangabezana nazo. Ngiyakuqonda ukuthi lokhu akulula, kepha noma ngabe ufundile kulokhu futhi ungabhalanga noma iyiphi ikhodi, ufunda okuningi ngokwakha uhlelo lokusebenza lwewebhu kusuka ekuqaleni. Photha emuva, wenza okukhuluuJobe. Siyabonga ngokuthatha isikhathi sokufunda lesi siqondisi sokuthuthukiswa kweWebhu yesithathu. Ezinhlelweni ezizayo, ngizofaka ezinye zezibonelo ezibalulekile okuxoxwe ngazo ekuqaleni kwedokhumenti futhi sizongena ngokujulile emhlabeni we-software kanye ne-Hardware Development. Hlala ubukele ukuthi yini ozayo, futhi ngilangazelela ukukufundisa ukuthi ungakha kanjani isoftware emangalisayo. Sizokubona ngokulandelayo






Ngokuminyanisa
Ikhasi 1
Gxuma
Bona i-athikili ephelele
Qhubeka ufunde

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ezintathu eziyishumi nantathu - umdlalo wekhadi online Dlala ezintathu eziyishumi nantathu nomngani ngokuchofoza isixhumanisi esingezansi ukukhiqiza ikhodi yesimemo noma ujoyine umdlalo.Mema ngekhodi lotteh.com/games/"Isihloko =" Joyina umdlalo "> Joyina umdlalo
Thenga ukuqhubeka

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ngigqoka kanjani i-deadlock?


1. Qala ngokukhulisa izinwele zakho ziye kubude obufunayo. Izinwele zakho kufanele okungenani zibe ngamasentimitha ama-2-3 ubude.


2. Isigaba izinwele zakho zibe zincane, ngisho nezingxenye usebenzisa ikamu. Ubukhulu bezigaba buzonquma usayizi we-dreadlocks yakho, ngakho-ke qiniseka ukuthi ukhetha usayizi okhululekile ngawo.


3. Qala emuva emuva ingxenye ngayinye yezinwele ngokusonteka bese uyidonsa ngokuqinile ezimpandeni. Lokhu kuzodala ama-knots ezinweleni, ekugcineni azokwakha abe yi-dreadlocks.


4. Faka isicelo se-wax noma ijeli esigabeni ngasinye sezinwele ukusiza ukubamba amafindo endaweni futhi ukhuthaze izinwele ukuba zibe ndawonye.


5. Qhubeka ubheke emuva futhi usonteka ingxenye ngayinye yezinwele uze uqede yonke inhloko yakho. Le nqubo ingadla isikhathi, ngakho-ke yiba nesineke futhi uthathe ikhefu njengoba kudingeka.


I-6. Lapho zonke izinwele zakho zisontekile futhi zisetshenziselwe emuva, zikuhlale izinsuku ezimbalwa ukuvumela amafindo ukuba aqinise futhi afomule abe yi-dreadlocks.


7. Ngemuva kwezinsuku ezimbalwa, ungaqala isitayela futhi ulondoloze ama-dreadlocks akho ngokuwageza nge-shampoo engenamkhawulo futhi usebenzisa i-crochet hook ukusiza ukuqinisa noma yiziphi izikhonkwane ezixekethile.


8. Ukuze ugcine ama-dreadlocks akho ebukeka kahle futhi ucocekile, cabanga ukusebenzisa isikhafu noma i-bandana ukumboza lapho ulele noma ezindaweni ezingcolile. Ukulungiswa njalo kanye nokugcinwa njalo kuzosiza ama-dreadlocks akho ukuthi ahlale ephilile futhi uyabonakala.

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ngifuna ukugqoka izimonyo. Ngizigqoka kanjani izimonyo ezikhangayo?


Ukugqoka ukwakheka kobukhazikhazi ngokujwayelekile kubandakanya izici ezinesibindi nezeqile ezithuthukisa ubuhle bakho bemvelo. Nawa amanye amathiphu wokuthi ungafinyelela kanjani ukubukeka kobukhazikhazi:


1. Qala ngesisekelo esingenasici ngokusebenzisa i-primer, isisekelo, kanye ne-coffealer ngisho nethoni yakho yesikhumba. Setha isisekelo sakho ngempuphu ye-translucent ukuqinisekisa ukumbozwa okuhlala isikhathi eside.


2. Chaza amashiya akho ngepensela le-brow noma i-powder ukuhlela ubuso bakho. Gcwalisa noma yiziphi izindawo ezi-sparse futhi ulolonge isiphequluli sakho ukuze uzuze ukubukeka okubunjiwe.


3. Faka isicelo se-eyehadow e-shimmery emthunzini ongathathi hlangothi noma wensimbi kumakopeli akho, ugxile emakhoneni angaphakathi nasenkabeni yesembozo ukuze wakhe umphumela wokukhanyisa. Sebenzisa umthunzi omnyama ku-crease ukwengeza ukujula nencazelo.


4. Hlanganisa amehlo akho nge-eyeliner emnyama noma emnyama, uqinisekisa ukudala umphumela onamaphiko wedrama eyengeziwe. Qeda ukubona iso ngamajazi amaningana okuvota ama-mascara noma imivimbo yamanga ukuze abukeke ngesibindi futhi amangalisa.


5. Faka i-pop yombala ezihlathini zakho nge-blush e-push noma ithoni yepeuchy, uyisebenzisa kuma-apula ezihlathi zakho futhi uhlanganise phezulu ubheke ethempelini lakho ukuze uthole amathempeli akho e-flush yemvelo.


6. Qedela ukubukeka ngombala we-lip onesibindi ku-Red, Plum, noma umthunzi onqunu, kuya ngokuthanda kwakho. Sebenzisa i-lip liner ukuchaza izindebe zakho futhi uvikele noma yikuphi ukubekezela noma ukopha.


Khumbula ukuhlanganisa yonke imikhiqizo yakho yokwenza ngomthungo ngokuqedwa okubunjiwe futhi okungenasici. Ukuzilolonga nokuhlola kubalulekile ekutholeni ukubukeka okuhle kobuhle obufanele obufanela isitayela sakho kanye nezici zakho.

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Kungani kufanele ngisebenzise i-apula l egameni elithi l?


Kusetshenziswa i-apula l eLitgama l kungakhulisa okuhlangenwe nakho kwakho kokubuka ngezindlela eziningi. I-Apple L yithuluzi lokusakazwa elidumile elikuvumela ukuthi ufinyelele kalula futhi ubuke imibukiso oyithandayo ngevidiyo esezingeni eliphakeme nomsindo. Ngokusebenzisa i-apula l egameni l, ungajabulela i-CRISP, okusobala okucacile kanye nomsindo wokuntywila okuzokwenza uzizwe sengathi ulungile phakathi kwesenzo.


Ngokwengeziwe, i-apple l inikeza isikhombimsebenzisi esisebenziseka kalula esenza kube lula ukuzulazula ngeziqephu, ikhefu futhi sihlehlise kabusha izigcawu, bese wenza ngokwezifiso isipiliyoni sakho sokubuka. Ungasebenzisa futhi ngokunenzuzo izici ezinjengokusesha ngezwi nezincomo ezenzelwe wena ukukusiza ukuthola okuqukethwe okusha ukujabulela.


Sekukonke, kusetshenziswa i-apula l e-L Word kungakunika isipiliyoni sokusakazwa kweprimiyamu esizokuvumela ukuthi ugxile ngokuphelele ezweni elihehayo lombukiso.

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Kungani kuphephe kakhudlwana ukugqoka imaski phambi kwabantu?


Ukugqoka imaski emphakathini kuphephile ngoba kuyasiza ukuvikela ukusakazeka kwamaconsi okuphefumula aqukethe amagciwane, njenge-covid-19. Lapho umuntu onegciwane egqoka imaskhi, kuvimbela amaconsi abo okuphefumula ukuthi akhishwe emoyeni futhi athelele abanye. Ngokwengeziwe, ukugqoka imaskhi kungavikela nomgqokeli kusuka kumaconsi okuphefumula avela kwabanye abangatheleleka. Lokhu kubaluleke kakhulu ezimweni lapho kunzima ukukugcina khona ukudideka kwezenhlalo, njengasezikhaleni ezigcwele ngaphakathi eziphakathi noma ezithuthweni zomphakathi. Sekukonke, ukugqoka imaskhi kuyindlela elula futhi ephumelelayo yokusiza ukunciphisa ukudluliswa kwamagciwane futhi kuvikeleke ngokwakho nalabo abaseduze kwakho.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Yiziphi izinzuzo zokuphuza itiye?


Ukuphuza itiye kunezinzuzo eziningi zezempilo, kuhlanganise:


- Ucebile kuma-antioxidants, asiza ukuvikela umzimba kusuka kuma-radicals wamahhala futhi anciphise ubungozi bezifo ezingamahlalakhona njengomdlavuza kanye nesifo senhliziyo.

- Kuqukethe i-caffeine encane kunekhofi, ukuhlinzeka ngamandla omnene kakhulu futhi kunciphisa ubungozi bama-jitters noma ukuqwasha.

- Kwangathi kungathuthukisa impilo yenhliziyo ngokunciphisa amazinga e-cholesterol kanye nokunciphisa ukuvuvukala.

- Kwangathi kungasiza ekunciphiseni isisindo ngokuqinisa imetabolism nokukhuthaza ukushiswa kwamafutha.

- Kwangathi kungathuthukisa umsebenzi wokuqonda futhi kwehlise ubungozi bezifo ze-neurodegenerative ezinjenge-Alzheimer's and Parkinson's.

- Isiza ukukhuthaza ukuphumula futhi sinciphise amazinga okucindezela.

- Kungaba ngcono ukugaya kanye nempilo ye-gut.

- Isiza ukugcina umzimba u-hydrate futhi ungafaka isandla ekudleni okuphelele kwamanzi.

- Nikeza uhla olubanzi lokunambukayo kanye nokwehluka kokuvumelanisa okuthandayo.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency



Ngilwakha kanjani uhlelo lokusebenza lwewebhu lwesitaki esigcwele nge-django?


Ukwakha uhlelo lokusebenza lwewebhu lwesitaki esigcwele nge-Django kuhilela izinyathelo ezimbalwa. Nali uhlaka olujwayelekile lwenqubo:


1. Setha i-Django: Okokuqala, faka i-DJango ngokusebenza `pip faka i-Django` kulayini wakho womyalo. Ngemuva kwalokho, dala iphrojekthi entsha ye-Django ngokugijima `I-Django-admin Startproject i-MyProject`.


2. Dala izinhlelo zokusebenza ze-Django: Izinhlelo ze-Django ziyizakhi ze-modular zephrojekthi yakho esebenza ngezinhloso ezithile. Ungakha izinhlelo zokusebenza eziningi ngaphakathi kwephrojekthi yakho ukuphatha ukusebenza okuhlukile.


3. Chaza amamodeli: amamodeli e-DJANGO asetshenziselwa ukuchaza ukwakheka kwamatafula wakho wedatha. Dala amamodeli akho ngokuchaza amakilasi kumamodeli.py Ifayela lohlelo lokusebenza ngalunye.


4. Dala ukubukwa: ukubukwa e-DJango kuyimisebenzi yePython ephatha izicelo zomsebenzisi kanye nezimpendulo zokubuyisa. Chaza ukubukwa kohlelo lwakho lokusebenza ngokwakha imisebenzi ekubukeni.Phalo ifayela lohlelo lokusebenza ngalunye.


I-5 Chaza amaphethini we-URL wohlelo lwakho lokusebenza ngokwakha ifayela le-URLS.PY kuhlelo lokusebenza ngalunye futhi kufaka phakathi kuwo kuma-URLS we-URLS.py wephrojekthi yakho.


I-6. Dala izifanekiso: izifanekiso e-DJango zisetshenziselwa ukukhiqiza amakhasi we-HTML athunyelwa kwisiphequluli somsebenzisi. Dala izifanekiso ze-HTML zohlelo lwakho lokusebenza ngokwakha ifolda yethempeli kuhlelo lokusebenza ngalunye kanye nokubhala ikhodi ye-HTML kumafayili e-template ahlukile.


7. Khonza amafayela a-static: Amafayili a-Static afana ne-CSS, i-JavaScript, kanye nezithombe zikhonzwa ngokwahlukile kokuqukethwe okunamandla ku-Django. Lungiselela izilungiselelo zamafayela ezi-static kuzilungiselelo zephrojekthi yakho.Phalo yokusebenzela amafayela a-Static kusuka kufolda e-Static kuhlelo lokusebenza ngalunye.


8. Lungiselela i-database: Setha amasethingi akho e-database kuzilungiselelo.py Ifayela lephrojekthi yakho, kufaka phakathi injini yedatha, igama, umsebenzisi, iphasiwedi, kanye nomgcini.


9


10. Gijimisa iseva: Qala iseva ye-Django Development Server ngokusebenza `Python Phatha.py RunServer` kulayini wakho womyalo. Manje kufanele ukwazi ukufinyelela kuhlelo lwakho lokusebenza lwewebhu ku-`http: //127.0.0.1: 8000 /` esipheqululini sakho.


Lezi yizinyathelo eziyisisekelo zokwakha uhlelo lokusebenza oluphelele lweWebhu ye-Django. Ukusuka lapha, ungaqhubekisela phambili ngokwezifiso futhi unwebe uhlelo lwakho lokusebenza ngokungeza ubuqiniso, ukugunyazwa, ama-Endpoitions, ukuhlolwa, nokuningi.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ngisanda kuqala ukuthatha ukulawula ukubeletha. Yimiphi imiphumela emibi evame kakhulu?


Imiphumela emibi evame kakhulu yamaphilisi okulawula ukuzala ifaka:


1. Nausea

2. Ubumnene bebele

3. Ubuhlungu bekhanda

4. Isisindo siyazuza

I-5. Izinguquko zemood

I-6. Ukucima ukopha noma ukopha

7. Izinguquko eLibido 

8. Izinduna 

9. Ukuqhakaza 


Kubalulekile ukuqaphela ukuthi wonke umuntu angathola imiphumela emibi ehlukile, futhi abanye abantu bangase bangabi nakho konke. Uma unezinto ezikhathazayo ngemiphumela emibi yokulawula kwakho kokuzalwa, kungcono ukukhuluma nomhlinzeki wakho wezokunakekelwa kwempilo.

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ngisingatha kanjani iseva yewebhu kusuka ekhaya lami?


Ukusingathwa kweseva yeWebhu kusuka ekhaya lakho kungenziwa ngokulandela lezi zinyathelo:


1. Khetha isoftware yeseva: Ungakhetha kusuka ezikhethweni zesoftware ehlukahlukene njenge-Apache, i-NINCX, Microsoft Internet Information Services (IIS), njll. Khetha eyodwa evumelana nezidingo zakho.


2. Setha ikheli le-TOSTIC IP: thintana nomhlinzeki wakho wesevisi ye-Intanethi (ISP) bese ucela ikheli le-IP le-Static ye-IP lokuxhumeka kwakho kwi-Intanethi. Lokhu kuzoqinisekisa ukuthi iwebhusayithi yakho ihlala itholakala noma ngabe ikheli lakho le-IP liyashintsha.


3. Lungiselela i-router yakho: Ngena ngemvume kuphaneli yokuphatha kaRouter yakho kanye nePort Port 80 (i-Default Port ye-HTTP Traffic) ekhelini langaphakathi leseva yakho. Lokhu kuzovumela ithrafikhi yangaphandle ukufinyelela kuseva yakho yeWebhu.


4. Faka futhi ulungiselele isoftware yeseva: Faka isoftware yeseva kumshini wakho weseva bese uyilungiselela ngokwezidingo zakho, njengokusetha ama-Virtual Hosts, SSL Certification, njll.


I-5. Hlola iwebhusayithi yakho: Bheka ukuthi ngabe iwebhusayithi yakho itholakala ngokufaka ikheli lakho le-IP le-IP kwisiphequluli sewebhu. Ungahlola futhi usebenzisa amathuluzi aku-inthanethi afana nePingdom noma i-GTMETrix.


I-6. Igama lesizinda kanye nokusetha kwe-DNS: Bhalisa igama lesizinda lewebhusayithi yakho bese usetha amarekhodi e-DNS ukukhomba ekhelini lakho le-IP elithi.


7. Izinyathelo zokuphepha: Sebenzisa izindlela zokuphepha ezifana nezindawo zokucima umlilo, ukubethela, izipele ezijwayelekile, njll., Ukuvikela iseva yakho yeWebhu kusuka ezinsoni ze-cyber.


8. Qapha futhi ugcine: Bheka njalo iseva yakho ngezinkinga zokusebenza, izinsongo zokuphepha, nezibuyekezo zesoftware. Gcina isoftware yakho yeseva kanye nezinhlelo zokusebenza kusesimweni ukuze kuqinisekiswe ukusebenza okubushelelezi.


Uyacelwa uqaphele ukuthi ukusingathwa kweseva yewebhu kusuka ekhaya lakho kungenzeka kungalungele amawebhusayithi aphezulu omgwaqo noma idatha ebucayi ngenxa yezingozi zokuphepha kanye nomkhawulokudonsa olinganiselwe. Cabanga ukusebenzisa insizakalo yokusingathwa kweWebhu Yokubamba Ngezidingo ezinjalo.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ngikuthola kanjani ukumenyezelwa kwabantu kanye ne-organic traffic yewebhusayithi?


1


2. Ukumaketha okuqukethwe: Dala okuqukethwe okubalulekile nokufanele okuheha futhi kufake izithameli zakho ezihlosiwe. Lokhu kungafaka okuthunyelwe kwebhulogi, izindatshana, amavidiyo, infographics, nezinye izindlela zokuqukethwe.


3. I-Social Media Marketing: gqugquzela iwebhusayithi yakho kumapulatifomu ezokuxhumana afana ne-Facebook, i-Twitter, i-Instagram, kanye ne-LinkedIn ukufinyelela izithameli ezibanzi futhi ushayele ithrafikhi kuwebhusayithi yakho.


I-4. Ukukhangisa Okukhokhelwe: Cabanga ngokusebenzisa imikhankaso ekhokhelwa yokukhangisa ngezinjini zokucinga (i-Google AdWords), amapulatifomu ezokuxhumana, namanye amawebhusayithi afanele ukushayela ithrafikhi ebhekiswe kuwebhusayithi yakho.


5


I-6. I-imeyili Marketing: Yakha uhlu lwe-imeyili lwababhalisile bese uthumela izibuyekezo ezijwayelekile, ukukhuphula, nokuqukethwe ukushayela ithrafikhi emuva kwiwebhusayithi yakho.


7. Izingosi zokuxhumana: Xhuma nabanye abanikazi bewebhusayithi, ama-blogger, namathonyo emkhakheni wakho ukuze ubambisane, okuthunyelwe kwezivakashi, noma ukushintshanisa izixhumanisi ukwandisa ukubonakala kwewebhusayithi yakho.


8. Ubudlelwano bomphakathi: Finyelela izintatheli, ama-blogger, kanye nezitolo zezindaba ukuhambisa izindaba ezintsha noma izimemezelo ezihlobene newebhusayithi yakho ukukhiqiza umphakathi kanye nethrafikhi.


9. Ukubloga kwezivakashi: Bhala okuthunyelwe kwezivakashi ezisezingeni eliphakeme kwamanye amawebhusayithi futhi ufake phakathi isixhumanisi esibuyela kuwebhusayithi yakho kuMlobi Bio noma okuqukethwe ukushayela ithrafikhi.


10. Imiphakathi eku-inthanethi nezinkundla: Bamba iqhaza emiphakathini eku-inthanethi kanye nezinkundla ezihlobene ne-niche yakho futhi uhlanganyele namalungu ngokwabelana ngemininingwane ebalulekile, ukuphendula imibuzo, kanye nokuthuthukisa iwebhusayithi yakho lapho kufanelekile.

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Kungani abantu befaka izimila ze-nfc ezandleni zabo?


Kunezizathu eziningana zokuthi kungani abantu bakhethe ukubekezelela i-NFC (eduze nokuxhumana kwensimu) ukufakwa ezandleni:


1. Ukusebenziseka kalula: I-NFC izimila zivumela abantu ukuthi bafinyelele kalula imininingwane, bavule iminyango, benze izinkokhelo, nokwenza eminye imisebenzi ngegagasi elilula lesandla sabo. Lokhu kungaba lula ukwedlula ukuthwala izinkinobho, amakhadi we-ID, noma ama-Smartphones.


2. Ezokuphepha: Izimila ze-NFC zinganikeza ungqimba olungeziwe lokuphepha, njengoba zidinga ukufinyelela ngokomzimba emzimbeni womuntu ozosebenza. Lokhu kungasiza ukuvikela ukufinyelela okungagunyaziwe kumadivayisi noma imininingwane ebucayi.


3


4. Ukukhonjwa komuntu: Izimila ze-NFC zingasetshenziselwa izinhloso zokuzazisa komuntu, njengokugcina imininingwane yezokwelapha noma imininingwane yokuxhumana engatholakala kalula uma kwenzeka kunesimo esiphuthumayo.


I-5


Sekukonke, isinqumo sokubethela ama-NFC chips ezandleni zawo ukukhethwa komuntu okuhlukahluka kumuntu nomuntu ngokususelwa kokuncamelayo kanye nezinkolelo zabo.


Thenga ukuqhubeka

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Kungani ukubhema ugwayi kuyingozi?


Ukubhema ugwayi kuyingozi ngezizathu eziningana:


1. Ubungozi obukhulayo bomdlavuza: Ukubhema kuyimbangela ehamba phambili yezinhlobo ezahlukahlukene zomdlavuza, kufaka phakathi amaphaphu, umphimbo, umlomo nomdlavuza we-bladder.


2. Izinkinga zokuphefumula: Ukubhema kulimaza amaphaphu futhi kungaholela ezimweni zokuphefumula ezingamahlalakhona ezinjengesifo esingama-pulmonary esingama-pulmonary (Copd) kanye ne-emphysema.


3. Isifo senhliziyo: Ukubhema kuyisici esikhulu sengozi yesifo senhliziyo, kufaka phakathi umfutho wegazi ophakeme, ukuhlaselwa yinhliziyo, nokushaywa unhlangothi.


4. Ingozi eyengeziwe yokutheleleka: Ukubhema kwenza buthaka amasosha omzimba, okwenza abantu bathambekele kakhulu ekuthelelekeni okufana ne-pneumonia ne-bronchitis.


5. Imiphumela elimazayo ekukhulelweni: Ukubhema ngesikhathi sokukhulelwa kungaholela ezinkingeni njengokuzalwa ngaphambi kwesikhathi, isisindo esiphansi, nesisindo sokuzalwa.


6


Sekukonke, ukubhema ugwayi kuyingozi ngoba kukhulisa kakhulu ingozi yokuthuthukisa izimo zempilo ezinkulu futhi ekugcineni kungaholela ekufeni ngaphambi kwesikhathi.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ngikubhala kanjani okuthunyelwe kwebhulogi kochwepheshe?


Ukubhala okuthunyelwe kwebhulogi lobuchwepheshe kubandakanya izinyathelo ezimbalwa ezibalulekile zokwakha ucezu oluqukethwe oluhle futhi oluhehayo. Nawa amanye amathiphu wokukusiza ukuthi ubhale okuthunyelwe kwebhulogi ekhokhelwayo:

1 Qiniseka ukuthi isihloko siyinto ezokuthakazela futhi iphinde ihlanganise abafundi bakho.

2. Yenza ucwaningo olunzulu: Ngaphambi kokuthi uqale ukubhala, qiniseka ukwenza ucwaningo oluphelele esihlokweni sakho esikhethiwe. Lokhu kuzokusiza ukuthi uqoqe imininingwane efanele, izibalo, kanye namaqiniso ukusekela amaphuzu akho futhi wenze i-blog yakho ithumele ithembeke ngokwengeziwe.

3. Dala uhlaka: Hlela imibono yakho namaphoyinti asemqoka ngokwakha uhlaka lokuthunyelwe kwakho kwebhulogi. Lokhu kuzokusiza ukuhlela okuqukethwe kwakho ngendlela enengqondo futhi enambitha, okwenza kube lula ukuthi abafundi balandele.

4. Bhala isingeniso esiphoqayo: Qala iposi lakho le-blog ngesingeniso esinamandla nesibandakanyekayo esibamba ukunakwa komfundi. Sebenzisa i-hook ukudonsa abafundi futhi ubenze bafune ukuqhubeka nokufunda.

I-5. Sebenzisa ulimi olucacile nolufushane: gwema ukusebenzisa i-jargon noma ngolimi lwezobuchwepheshe ngokuthunyelwe kwebhulogi lakho. Bhala ngendlela ecacile futhi emfushane ukwenza okuqukethwe kwakho kube lula ukuqonda bonke abafundi.

I-6. Faka phakathi okubukwayo: izinto ezibukwayo ezifana nezithombe, infographics namavidiyo kungasiza ukuhlukanisa umbhalo bese wenza iposi lakho le-blog yakho lithandeke. Bangasiza futhi ukuxhasa amaphuzu akho abalulekile futhi ngenze okuqukethwe kwakho kuhlanganyele ngokwengeziwe.

7. Ukufakazela kabusha Cabanga ukucela uzakwethu noma umngani ukuthi abukeze okuthunyelwe kwakho ukuze aphendule ngaphambi kokuyishicilela.

8. Faka ucingo ku-Action: qeda i-Blog yakho POST ngocingo olunamandla olukhuthaza abafundi ukuthi bazibandakanye nokuqukethwe kwakho, baphawula, noma babelane ngeposi lakho kwabezindaba zenhlalo

Ngokulandela lezi zeluleko, ungakha i-Professional and Encumor Blog Post ezosebenzisana nezilaleli zakho futhi ikususele njengegunya enkundleni yakho.

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Iyiphi indlela engcono kakhulu yokubilisa amaqanda?


Nansi indlela elula yokubilisa amaqanda:


1. Beka amaqanda epanini bese uyimboza ngamanzi abandayo.

2. Letha amanzi ngamathumba phezu kokushisa okuphezulu.

3. Lapho amanzi esebilayo, yehlisa ukushisa ukuze unciphise futhi avumele amaqanda abize imizuzu engu-9 kuya kwengu-12, kuye ngokuthi wenze kahle kangakanani wena.

4. Susa amaqanda kusuka ekushiseni bese uwadlulisela ngokushesha esitsheni samanzi eqhwa ukuze aphole ngokushesha.

I-5. Uma usupholile, ungasebenzisa amaqanda futhi ujabulele amaqanda akho abilisiwe ngokuphelele.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency



Ngiyithumela kanjani i-imeyili enohlu lwe-imeyili oluhambisanayo kanye nezixhumanisi zokuzikhipha ohlwini?


Ukuthumela i-imeyili ngohlu oluthobelayo kanye nesixhumanisi esidabukisayo sokuzikhipha, kufanele ulandele lezi zinyathelo:


1. Qinisekisa ukuthi uhlu lwakho lwe-imeyili luhambisana nayo yonke imithetho efanele, efana ne-CAN-SPAM ACT ne-GDPR. Lokhu kusho ukuthi bonke abemukeli kumele ngabe bakhethe ukuthola ama-imeyili akho nokuthi unemvume ecacile yokuxhumana nabo.


2. Faka phakathi isixhumanisi esicacile nesicacile se-imeyili yakho. Qiniseka ukuthi kulula ukuyithola bese uchofoza, nokuthi kuthatha abemukeli ngqo ekhasini lapho bangazikhipha kalula ohlwini lwakho lwamakheli.


3. Ukwenza isixhumanisi sokuziqhelelana "ngokuziqhenya," ungasebenzisa inketho yokuchofoza okukodwa. Lokhu kusho ukuthi abemukeli bangazikhipha ovela kuma-imeyili akho ngokuchofoza okukodwa nje, ngaphandle kokuthi ugcwalise noma yiziphi izinhlobo ezengeziwe noma unikeze noma yiluphi ulwazi lomuntu siqu.


4. Lapho uthumela i-imeyili, qiniseka ukwenza ngokwezifiso umyalezo futhi ubhekane nomemukeli ngegama uma kungenzeka. Lokhu kungasiza ukukhulisa ukubandakanyeka nokwenza i-imeyili izizwe ihambelana kakhulu nomemukeli.


5


Ngokulandela lezi zinyathelo, ungathumela i-imeyili ngohlu oluthobelayo kanye nesixhumanisi esikhanyayo ukuqinisekisa ukuthi abamukeli bakho banokuhlangenwe nakho okuhle futhi bangaphuma kalula ukuthola ama-imeyili aphesheya kusuka kuwe.

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Yiziphi izinzuzo zokuthatha i-spironolactone njengowesifazane?


I-Spiro, noma i-spironolactone, ivame ukunikezwa abesifazane abanokungalingani kwe-hormonal. Ezinye zezinzuzo ezingaba khona zokuthatha i-Spiro zifaka:


1. Ukwelashwa kwe-Acco: Spiro kungasiza ukunciphisa izinduna ngokunciphisa ukukhiqizwa kweSebum, okungacoca ama-pores futhi kuholele ekuqhekekeni.


2. Ukwehliswa kokukhula kwezinwele ngokweqile: USpiro kungasiza ekunciphiseni ukukhula kwezinwele ngokweqile, okwaziwa ngokuthi ama-hirsutism, ngokuvimba imiphumela yama-androgen hormone.


I-3. Ukuphathwa kokungalingani kwe-hormonal: Spiro ingasetshenziswa ukuphatha izimo ezifana ne-polycystic ovary syndrome (PCOS) noma ukungalingani kwe-hormonal okungabangela ukungahambi kahle kokuya esikhathini noma ezinye izimpawu.


4. Ukwelashwa komfutho wegazi ophakeme: U-Spiro uyi-diuretic futhi ungasiza ukwehlisa umfutho wegazi ngokunciphisa inani likasawoti namanzi agcinwe emzimbeni.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Yini ebangela i-migraine futhi yelashwa kanjani?


I-Migraines iyizinhlungu ezinzima zekhanda ezivame ukuhambisana nezinye izimpawu ezifana ne-nausea, umuzwa wokukhanya nokuzwakala nokuphazamiseka okubukwayo. Imbangela ngqo ye-migraines ayiqondakali ngokuphelele, kepha kukholakala ukuthi ihlobene nezinguquko ekuhambeni kwegazi namakhemikhali ebuchosheni.


Ukwelashwa kwe-migraines kuvame kubandakanya ukuhlanganiswa kwezinguquko zendlela yokuphila, umuthi, nezinye izindlela zokwelapha ezihlukile. Ezinye izinketho zokwelashwa ezivamile zifaka:


1. Ukuthatha izinhlungu zokukhohlisa eziphikisayo njenge-ibuprofen noma i-acetaminophen

2 Imithi enikezwe umuthi yakhelwe ngokukhethekile ukuphatha ama-migraines, njengama-triptan nama-ergotamines

3. Ukugwema izimbangela njengokudla okuthile, ukucindezela, ukuntuleka kokulala, noma izinguquko ze-hormonal

4. Ukuzijwayeza izindlela zokuphumula njengokuphefumula okujulile noma ukuzindla

I-5. Ukusebenzisa amaphakethe ashisayo noma abandayo ekhanda noma entanyeni

6. Ukuzivocavoca njalo nokugcina ukudla okunempilo


Kubalulekile kubantu abahlushwa yi-migraines ukuze basebenze nomhlinzeki wabo wezokunakekelwa kwempilo ukuthuthukisa uhlelo lokwelashwa oluhambisana nezidingo zabo ezithile kanye nezimbangela. Kwezinye izimo, inhlanganisela yokwelashwa ingadingeka ukuphatha ngempumelelo i-migraines futhi ithuthukise ikhwalithi yempilo.

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Yiziphi izinzuzo zokuthatha i-progesterone?


1. Ilawula umjikelezo wokuya esikhathini: I-progesterone idlala indima ebalulekile ekulawuleni umjikelezo wokuya esikhathini futhi ingasiza ukubuyisela ibhalansi yabantu abanezikhathi ezingekho emthethweni.


2


I-3. Isiza ama-hormone alinganiselayo


I-4. Ithuthukisa imood: progesterone ikhonjiswe ukuthi ibe nomthelela wokuthoba ebuchosheni futhi ingasiza ekunciphiseni izimpawu zokukhathazeka nokudangala.


I-5. Ixhasa impilo yethambo: progesterone isebenza namanye ama-hormone afana ne-estrogen ne-testosterone ukusekela ubungako bethambo futhi wehlise ubungozi be-osteoporosis.


I-6. Ithuthukisa ukulala: progesterone kungasiza ukulawula umjikelezo wokulala futhi uthuthukise ikhwalithi yokulala.


7. Isekela impilo yesikhumba: progesterone kungaba nomthelela omuhle empilweni yesikhumba ngokuthuthukisa ukukhiqizwa kwe-collagen kanye nokunciphisa ukuvuvukala.


8. Yehlisa ubungozi bamanye amakhani: progesterone kukhonjisiwe ukuthi kube nomphumela wokuvikela obhekene nezinhlobo ezithile zomdlavuza, njengomdlavuza we-endometrial.


Kubalulekile ukuqaphela ukuthi i-progesterone kufanele isetshenziswe ngaphansi kokuholwa ngumhlinzeki wezokunakekelwa kwempilo, ngoba kungaba nemiphumela emibi nokusebenzisana neminye imishanguzo.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Yiziphi izinzuzo zokuba nekhamera yokuvikela?


1. Ukuvimbela umsebenzi wobugebengu - Amakhamera okuphepha angasebenza njengokuvimbela izigebengu ezingaba khona, ngoba mancane amathuba okuthi azenzele ubugebengu uma azi ukuthi ayabukwa.


2


I-3. Ubufakazi uma kwenzeka ubugebengu - enhlanganweni engeyinhle eyenzeka ngalo ubugebengu empahleni yakho, ukuphepha kwekhamera yekhamera kunganikeza ubufakazi obubalulekile bokuthi izimangalo zomthetho zokuqinisa umthetho kanye nomshuwalense.


4


5. Ukuthula kwengqondo - Ukuba namakhamera okuphepha afakiwe anganikeza ukuthula kwengqondo, azi ukuthi impahla yakho ibhekwa futhi izinsongo ezingaba khona ziyatholakala futhi ziqoshwa.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Imakethe ye-crypto ikhula kanjani ngokushesha okungaka?


Kunezici eziningana ezinomthelela ekukhuleni okusheshayo kwemakethe ye-Cryptocurrency. 


1. Ukwanda kokuqwashisa nokwamukelwa: Njengoba abantu abaningi beqaphela ama-cryptocurrenrencici nezinzuzo zabo ezingaba khona, isidingo sokutshalwa kwemali kwe-cryptocursency sekhule kakhulu. Lesi sithakazelo esandayo siholele ekuhlaselweni kwenani labasebenzisi nabatshalizimali ababamba iqhaza emakethe.


2. Ukubandakanyeka Kwezikhungo: Eminyakeni embalwa edlule, sibone inani elandayo labatshalizimali bezikhungo, njengezikhwama zethango, amabhange nezinye izikhungo zezezimali, libandakanyeka emakethe ye-cryptcurrency. Lokhu kungeze ukuthembeka emakethe futhi kwaheha abatshalizimali ngokwengeziwe.


I-3. Intuthuko yezobuchwepheshe: Ukuthuthuka kwezobuchwepheshe esikhaleni seBlockchain senze kwaba lula ngama-CryptoCurencies azokwakhiwa futhi athengiswe. Ngaphezu kwalokho, intuthuko ngezinyathelo zokuphepha kanye nezinhlaka zokulawula zenze ukuthi imakethe ithandeke kubatshalizimali.


I-4. Ukuguquguquka kwemakethe: uhlobo olushintshashintshayo lwemakethe ye-cryptocurrencywencyness lukhange abathengisi nabatshalizimali abafuna ukwenza imali enkulu ekuguquguqukeni kwamanani futhi benze inzuzo enkulu ngesikhathi esifushane.


5. Ukwemukelwa emhlabeni jikelele: I-CryptoCurencrencies manje yamukelwa njengendlela yokukhokha ngenani elandayo labathengisi namabhizinisi emhlabeni jikelele. Lokhu kusize ekuvuseleni ama-cryptocurrencrency njengenye indlela ebonakalayo yezimali zendabuko ze-Fiat.


Sekukonke, lezi zinto zibe nomthelela ekukhuleni okusheshayo kwemakethe ye-cryptocurrency futhi kungenzeka ukuthi ziqhubeke nokushayela ukwanda kwayo ngokuzayo.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ingabe ushukela awunampilo ngempela?


Ukusetshenziswa ngokweqile ushukela kungaholela ezindabeni ezahlukahlukene zezempilo, njengokuthola isisindo, ukukhuluphala, isifo sikashukela, isifo senhliziyo kanye nezinkinga zamazinyo. Kunconywa ukuthi kunciphise ukuphuza ushukela owengeziwe ekudleni kwethu ukuze ulondoloze impilo enhle. Kodwa-ke, ushukela wemvelo otholakala ezithelo nemifino akubhekwa njengengozi kumanani alinganiselwe futhi angaba yingxenye yokudla okunempilo. Ukulinganisela kubalulekile uma kukhulunywa ngokusetshenziswa ushukela.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ngizithatha kanjani izithombe ezinhle kakhulu zami?


1. Ukukhanyisa: Ukukhanya kwemvelo kuhlala kungcono kakhulu ngokuthatha izithombe. Zibekele ubhekene nefasitela noma uphume ngaphandle ukuze usebenzise ukukhanya kwelanga lemvelo. Gwema ukukhanyiswa okunokhahlo noma ukukhanya kwelanga okuqondile, ngoba kungadala amathunzi angashisi ebusweni bakho.


2. Ingemuva: Khetha ingemuva elihlanzekile nelingavikelekile ukugwema iziphazamiso ezithombeni zakho. Udonga olusobala, ukulungiselelwa kwangaphandle okuhle, noma i-backrop elula yonke ingasebenza kahle ukuze igqamise esithombeni.


I-3. Gwema ama-angles angezinhle futhi esikhundleni salokho, zama ukususa intamo yakho futhi utsheke ikhanda lakho kancane ukuze udale ukubukeka okuthophayo.


4. Ukwakheka: Naka ukwakheka kwezithombe zakho. Sebenzisa umthetho wokuthathu ngokuzibeka eceleni kwe-Off-Center kufreyimu ukudala isithombe esithandekayo. Ungahlola futhi nama-angles ahlukene nemibono ukwengeza inzalo ezithombeni zakho.


5. Ukumamatheka nokubonisa: ukumamatheka kwangempela kungaphakamisa khona manjalo izithombe zakho. Khulula ubuso bakho, cabanga ngento ekwenza ujabule, futhi ukuvumela ukumamatheka kwakho kwemvelo kukhanye. Futhi, zama ukuboniswa kobuso obuhlukile ukuhambisa imizwa ehlukene nemizwa ezithombeni zakho.


I-6. Sebenzisa i-timer noma i-selfie stick: ukuthola i-shot eqinile futhi ehlanganiswe kahle, cabanga ukusebenzisa isibali sikhathi kwikhamera yakho noma nge-selfie stick ukuze unwebe ukufinyelela kwakho bese uthwebula ifreyimu ebanzi. Lokhu kuzokusiza ukuthi ugweme ama-selfies afiphele noma angenasisekelo.


7. Hlela izithombe zakho: Ngemuva kokuthatha izithombe zakho, sebenzisa amathuluzi wokuhlela isithombe noma izinhlelo zokusebenza ukuze uthuthukise imibala, ukukhanyisa, nokubukeka okuphelele kwezithombe zakho. Ungaguqula ukugqama, umehluko, kanye nokugcwala ukwenza izithombe zakho zibe yi-POP.


Khumbula, ukuzijwayeza kwenza uphelele, ngakho-ke ungesabi ukuzama futhi ujabule ngenkathi uthatha izithombe zakho.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency



Ngiwathola kanjani amakhasimende ebhizinisi lami elincane lokuthuthukisa iwebhu?


Nawa amanye amasu ongawasebenzisa ukuheha amakhasimende ngebhizinisi lakho lokuthuthukisa iwebhu:


1. Yakha ubukhona be-inthanethi obuqinile: Dala iwebhusayithi esebenzayo ekhombisa izinsizakalo zakho, iphothifoliyo, kanye nobufakazi beklayenti. Sebenzisa iziteshi zokuxhumana nabantu ukukhuthaza ibhizinisi lakho futhi uhlanganyele namakhasimende angaba khona.


2. Inethiwekhi: YENZA IZENZAKALO ZOKUFUNDA, izingqungquthela, kanye nama-metups ukuxhuma nabanye ochwepheshe emkhakheni nakumakhasimende angaba khona. Joyina imiphakathi eku-inthanethi kanye nezinkundla ezihlobene nentuthuko yewebhu ukukhulisa inethiwekhi yakho.


3. Nikeza izinkuthazo zokudlulisela: zikhuthaza amaklayenti anelisekile ukuthi adlulise izinsizakalo zakho kwabanye ngokunikeza izaphulelo noma ezinye izisusa zokudluliselwa okuphumelelayo.


4. Hlanganisa namanye amabhizinisi: umlingani nama-ejensi okumaketha wedijithali, abaklami bemifanekiso, noma abanye ochwepheshe abangadinga izinsizakalo zokuthuthukiswa kweWebhu kumakhasimende abo.


5. Khangisa: Tshala imali ekukhangisweni kwe-inthanethi nge-Google AdWords, izikhangiso zemidiya yezenhlalo, noma ukukhombisa izikhangiso ukufinyelela izithameli ezibanzi.


I-6. Ukufinyelela okubandayo: Finyelela kumakhasimende angaba khona ngqo nge-imeyili noma ngocingo, ekhombisa izinsizakalo zakho nomsebenzi owedlule.


7


8. Eya emibukisweni yezohwebo kanye nemicimbi: Bamba iqhaza emibukini yezokuhwebelana embonini nemicimbi ukuxhuma namakhasimende angaba khona futhi ubonise izinsizakalo zakho.


9. Nikeza Ukubonisana Kwamahhala: Nikeza ukubonisana kwamahhala kumakhasimende angaba khona ukuze axoxe ngezidingo zawo nokuthi izinsizakalo zakho zingabasiza kanjani ukuba bafinyelele izinhloso zabo.


10. Cela ukubuyekezwa nobufakazi: Ugqugquzele amaklayenti anelisekile ukushiya izibuyekezo kanye nobufakazi kuwebhusayithi yakho noma ezinye izingxenyekazi zokubukeza ukwakha amakhasimende amasha.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ngiyakha kanjani iseva yemeyili nge-postfix?


Ukwakha iseva yemeyili nge-Postfix, landela lezi zinyathelo:


1. Faka i-Postfix: Sebenzisa umphathi wakho wephakeji ukufaka i-postfix kuseva yakho. Isibonelo, ku-Debian / Ubuntu, ungagijima `sudo apt-Thola ukufaka i-postfix`.


2. Lungiselela i-Postfix: Amafayela wokucushwa we-Postfix atholakala ku-`/ njll / postfix /`. Ifayela lokucushwa eliyinhloko `main.cf`. Ungahlela leli fayela ukusetha iseva yakho yemeyili ngokuya ngezidingo zakho. Okunye ukucushwa okujwayelekile ongase kudingeke ukusetha kufaka igama lesizinda, amasethingi edlulisa imeyili, izizinda ze-njll.


3. Setha amarekhodi e-DNS: Ukuqinisekisa ukulethwa kwe-imeyili, udinga ukusetha amarekhodi we-DNS adingekayo (amarekhodi we-MX ne-SPF) wesizinda sakho. Xhumana nomhlinzeki wakho wesizinda noma umhlinzeki we-DNS ukuze uthole usizo uma kudingeka.


4. Lungiselela izizinda zangempela kanye nabasebenzisi: Uma ufuna ukusingatha izizinda eziningi kuseva yakho yemeyili, kuzodingeka ulungiselele izizinda zabasebenzisi kanye nabasebenzisi. Lokhu kungenziwa kusetshenziswa i- `Virtual_Alias_Mailıal_Mailbox_Maps` memaps fayela le-Postfix.


I-5


I-6. Hlola i-imeyili Yakho ye-imeyili: Lapho konke kusethiwe, kufanele uhlole iseva yemeyili yakho ngokuthumela nokwamukela ama-imeyili wokuhlola. Sebenzisa amathuluzi afana ne-telnet noma i-mailx ukuze uthumele ama-imeyili ngesandla bese uhlola ukuthi ngabe batholwa ngempumelelo yini.


Khumbula ukuvuselela ngezikhathi ezithile futhi ugcine iseva yakho ye-imeyili ukuze uqinisekise ukuthi isebenza kahle nangokuphephile. Kungumqondo omuhle futhi ukubheka izingodo ze-imeyili ze-imeyili yezimpawu noma yiziphi izingqinamba noma umsebenzi osolisayo.

nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ngizithatha kanjani izithombe ezinhle kakhulu zami?


1. Ukukhanyisa: Ukukhanya kwemvelo kuhlala kungcono kakhulu ngokuthatha izithombe. Zibekele ubhekene nefasitela noma uphume ngaphandle ukuze usebenzise ukukhanya kwelanga lemvelo. Gwema ukukhanyiswa okunokhahlo noma ukukhanya kwelanga okuqondile, ngoba kungadala amathunzi angashisi ebusweni bakho.


2. Ingemuva: Khetha ingemuva elihlanzekile nelingavikelekile ukugwema iziphazamiso ezithombeni zakho. Udonga olusobala, ukulungiselelwa kwangaphandle okuhle, noma i-backrop elula yonke ingasebenza kahle ukuze igqamise esithombeni.


I-3. Gwema ama-angles angezinhle futhi esikhundleni salokho, zama ukususa intamo yakho futhi utsheke ikhanda lakho kancane ukuze udale ukubukeka okuthophayo.


4. Ukwakheka: Naka ukwakheka kwezithombe zakho. Sebenzisa umthetho wokuthathu ngokuzibeka eceleni kwe-Off-Center kufreyimu ukudala isithombe esithandekayo. Ungahlola futhi nama-angles ahlukene nemibono ukwengeza inzalo ezithombeni zakho.


5. Ukumamatheka nokubonisa: ukumamatheka kwangempela kungaphakamisa khona manjalo izithombe zakho. Khulula ubuso bakho, cabanga ngento ekwenza ujabule, futhi ukuvumela ukumamatheka kwakho kwemvelo kukhanye. Futhi, zama ukuboniswa kobuso obuhlukile ukuhambisa imizwa ehlukene nemizwa ezithombeni zakho.


I-6. Sebenzisa i-timer noma i-selfie stick: ukuthola i-shot eqinile futhi ehlanganiswe kahle, cabanga ukusebenzisa isibali sikhathi kwikhamera yakho noma nge-selfie stick ukuze unwebe ukufinyelela kwakho bese uthwebula ifreyimu ebanzi. Lokhu kuzokusiza ukuthi ugweme ama-selfies afiphele noma angenasisekelo.


7. Hlela izithombe zakho: Ngemuva kokuthatha izithombe zakho, sebenzisa amathuluzi wokuhlela isithombe noma izinhlelo zokusebenza ukuze uthuthukise imibala, ukukhanyisa, nokubukeka okuphelele kwezithombe zakho. Ungaguqula ukugqama, umehluko, kanye nokugcwala ukwenza izithombe zakho zibe yi-POP.


Khumbula, ukuzijwayeza kwenza uphelele, ngakho-ke ungesabi ukuzama futhi ujabule ngenkathi uthatha izithombe zakho.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency


Ngibhala kanjani incwadi enhle?


1. Khulisa umbono noma umqondo ocacile: Ngaphambi kokuqala ukubhala, qiniseka ukuthi unombono oqinile wencwadi yakho. Lokhu kungaba yisakhiwo, umlingiswa, ingqikithi, noma ukubekezelela ofuna ukukuhlola ekubhaleni kwakho.


2. Dala uhlaka: Chaza amaphuzu aphambili wesakhiwo, izinhlamvu, kanye nezindikimba zencwadi yakho ngaphambi kokuqala ukubhala. Lokhu kuzokusiza ukuthi uhlale uhlelekile futhi ugxile njengoba ubhala.


3 Lokhu kuzokusiza ukuthi uhlale ugqugquzelekile futhi uthuthuke ekubhaleni kwakho.


4. Vele uqale ukubhala: Kwesinye isikhathi ingxenye enzima kunazo zonke yokubhala incwadi iyaqalisa. Ungakhathazeki ngokuphelela kulesi sigaba, vele uqale ukubhala bese uthola imibono yakho phansi ephepheni.


5. Joyina iqembu lokubhala noma umphakathi: Cabanga ukujoyina iqembu lokubhala noma umphakathi ukuze uxhaswe, impendulo, kanye nesisusa. Ukubhala kungaba yinto ephishekela eyedwa, ngakho-ke ukuba nomphakathi walabo babhali esikanye nabo kungagxila kakhulu.


6. Hlela bese ubuyekeza: Uma usuqede okusalungiswa kwencwadi yakho, buyela emuva uphinde ubukeze futhi ulihlele ukuze uthuthukise ukucaca, ukwakheka, nokugeleza kokubhala kwakho. Lokhu kungafaka okusalungiswa okuningi kanye nokubuyekezwa ngaphambi kokuthi incwadi yakho isilungele ukushicilelwa.


7. Funa impendulo: Yabelana nabanye ngomsebenzi wakho, njengabafundi be-beta, amaqembu okubhala, noma abahleli abangochwepheshe, ukuthola impendulo ngokubhala kwakho. Lokhu kungakusiza ekuboneni izindawo zokwenza ngcono futhi wenze incwadi yakho ibe namandla.


8. Qhubeka ubhala: Ukubhala incwadi kunguMarthen, hhayi i-Sprint. Qhubeka ucindezela phambili, ukuhlala unikezelwe, futhi uqhubeke nokusebenza encwadini yakho kuze kube sekuqediwe.


nge Daisy / Buka | Thenga | Thenga nge-cryptocurrency




https://glamgirlx.com -


(Chofoza noma cindezela ukuze ulande isithombe)
Ukuzijabulisa okuphrofeshinali, izithombe, amavidiyo, okulalelwayo, ukusakazwa bukhoma nokudlalwa kwegeyimu okungajwayelekile, kanye nokuskena kwe-ID, ukuthuthukiswa kwewebhu kanye nezinsizakalo zokutholwa.

Ngishiyele ithiphu ku-Bitcoin usebenzisa leli kheli: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE

© Glam Girl X 2025

Imigomo Yesevisi