Pratik entènèt ki baze sou aprantisaj gwo twou san fon ak sekirite pa egzanp Twazyèm edisyon Charlotte Harper 3 jiyè 2024 Mizajou/konvèti 3 jen, 2025
Avètisman:
Konsiderasyon sekirite nan lojisyèl bilding pou entènèt la se yon pati enpòtan nan plan nenpòt ki pwomotè entènèt la ak ekzekisyon pandan y ap jeni yon pwototip ki se serye, ki estab, ak itil pou rezon pratik. DOM a (Dokiman objè markeup), ak aplikasyon li a nan HTML, JavaScript, ak CSS kòm byen ke lojisyèl backend mete ann aplikasyon Python, C/C ++, Java ak Bash, bay devlopè entènèt libète a ak pouvwa yo kreye yon gran varyete pwojè ki eksprime, bay fasilite nan itilizasyon ak fonksyonalite, epi yo ka itilize yo, epi yo bay yo. Itilizatè fen kap touye tan oswa jwenn yon bagay fè sou entènèt la, anjeneral sou yon aparèy smartphone tactile. Pifò moun pa ta menm konnen ki kote yo kòmanse lè yo vle bati yon sit entènèt nan grate yo, yo ta gen tandans kòmanse sou sit entènèt yon lòt moun nan ak bati yon bagay limite nan fonctionnalités, fyabilite, fasilite nan itilize ak espesyalman kreyativite lè yo te kapab te gen tout dènye zouti yo pwisan nan jete yo nan lòd yo bati yon bagay ki itil san yo pa peze tan pou yo sèvi ak tout moun ki te bay yo. Si ou gen yon kèk minit li nan liv sa a ak aprann sa mwen vle anseye ou, oswa menm pale avè m 'pèsonèlman sou objektif ou epi pou yo jwenn kèk konsèy nan bon direksyon an, epi yo motive yo aprann kòd ak ekri lojisyèl pwòp ou a, pran liv sa a lakay ou epi mete sou kote kèk tan yo aprann bati pwochen enfliyan, pwisan, senp ak aplikasyon entènèt la enpòtan.
Sou mwen: Mwen se yon pwomotè lojisyèl ak yon pakèt domèn eksperyans nan C/C ++, Java, Python, HTML, CSS ak JavaScript. Mwen bati sit entènèt moun vle itilize, vle vizite, e menm jwenn dejwe lè l sèvi avèk jis yo aprann, rkree ak touye tan, ak sa ki pi enpòtan, mwen vann lojisyèl. Si ou te gen yon lide kòm egzakteman ki jan ou te vle yon sit entènèt yo gade ak fonksyone, ou te vle sipòte m 'pou m' ka satisfè pwòp bezwen mwen pandan mwen satisfè ou, epi ou yo vle kouvri depans sa yo nan kouri yon sit entènèt tèt ou, mwen ta bati ou pwochen YouTube a, Tiktok, Twitter, Google, oswa menm yon gwo teknoloji app sekirite sèlman ou ka jwenn aksè. Olye pou yo eseye vann ou tan mwen, mwen ap eseye achte ou: Mwen vle pale ou nan bati yon app (sit entènèt) tèt ou ak enfòmasyon ki deja egziste, epi anseye ou sa ou bezwen yo dwe yon pwomotè lojisyèl endepandan, antreprenè, ki mennen yon karyè siksè nan tou sa jaden ou vle. Epi kite m 'klè, edikasyon mwen ba ou yo pral enfòmèl. Ou ta ka ale nan lekòl la ak aprann tout bagay sa yo ak yon edikasyon fòmèl, oswa menm li liv sa a nan lekòl la, ranpli devwa ou yo, epi pran yon gwo zafè nan edikasyon ou, men mwen pa pral fòmèlman mete ou nan chèz la cho epi mande ou ranpli devwa. Mwen pa pwofesè ou, ou ka panse de mwen tankou yon zanmi ki vle gide ou nan direksyon yon karyè kondwi pa pwòp siksè pèsonèl ou. Apre sa, mwen pa vann ou siksè swa, ou pral bezwen achte l 'ak tan ou. Aprann kòd gen yon koub aprantisaj apik epi yo pa janm te fasil, oswa menm sipoze. Ou bezwen travay osi difisil ke ou kapab epi kontinye eseye ak echwe epi eseye ankò menm lè ou fristre yo nan lòd yo aprann ak bati apps tèt ou. Sa a nan nati a nan kòd tèt li. Kòd se kouri pa yon du ki fèt yo bay mesaj yo erè pwogramè, ak sa yo pral anseye ou ki jan yo kòd, menm si ou yo se tou senpleman kopye erè a nan motè rechèch ou an ak li egzanp lòt moun. Apre sa, mwen dwe di, ou pa bezwen yo dwe trè rich, entelijan, siksè, oswa menm detay oryante oswa òganize yo bati yon app. Odinatè a pran swen òganizasyon sa a pou ou. Ou jis bezwen pèsevere nan jijman an ak erè, kenbe konsantre ak travay di nan sa ou fè, epi ou pral gen yon karyè anpil siksè nan antye nan sa ou fè.
Kiyès mwen ye: Mwen reyalize ke dènye seksyon an te plis sou aprantisaj ak ou pran yon fason soti nan liv sa a. Kiyès mwen ye egzakteman? Sa se yon kesyon konplike. Mwen pa klè sou sa mwen menm, menm jan mwen soufri de kondisyon medikal ki ka fè li difisil pou mwen pou menm kòd oswa ekri liv sa a nan fwa, pandan y ap prezante defi ak sosyalizasyon ak pwoblèm idantite ki fè lavi m 'pi difisil lè li rive entwodwi tèt mwen. Nan ti bout tan, si w ap li liv sa a, ou te pote l 'lakay ou paske ou ranvèrse nan li epi li te panse li te itil, oswa menm si ou jis li sa a byen lwen nan, pou ou mwen se yon moun tankou èspri ki vle wè ou reyisi nan tout bagay ke ou fè. Mwen se yon enjenyè tèt mwen, yon pwomotè lojisyèl, ak yon elèv, epi mwen ekri liv sa a pou lòt elèv ki vle fè lavi yo pi fasil pa gen yon manyèl nan lojisyèl an yo bezwen fè lavi yo pi fasil pa bay egzanp kopi ki anfòm ansanm tankou yon gwo devinèt nan yon travay, itil, gwo, fonksyonèl, limenm, ak angaje app ki ka kondwi pa gen pwoblèm liy lan nan biznis. Lajman, sa a se sa mwen fè: Mwen bati apps ede tèt mwen ak lòt moun reyisi. Mwen se yon otè tou, menm si sa a se premye piblikasyon mwen ke mwen gen entansyon ranpli yo nan lòd yo mete dosye mwen ansanm nan yon dokiman ki itil, epi mwen se yon atis tou. Mwen pral admèt sa a ou, mwen sòt de yon moun etranj. Mwen pa pafè, mwen te kouri ins ak lwa a menm ki mennen m 'kite kolèj ak inivèsite epi kite eta yo nan lòd yo eseye fè yon non pou tèt mwen ak plis siksè. Mwen se yon fanm pa nesans, mwen mete makiyaj, pran foto nan tèt mwen, mete abiye ak lòt fanm rad, epi mwen rete konsyan de tèt mwen kòm yon fi pa nati. Mwen te gen pwoblèm ak lòt moun nan tan lontan an ki mennen nan lit ak ekri ak bilding Webapps, e mwen eskize ke mwen pa te kapab jwenn liv sa a nan men ou pi bonè: ou bezwen sa a. Ou pral vle li ak ekri kòd ki sanble m 'ak travay tankou m' ak fè menm bagay la, men menm pi bon, paske si ou kapab peye achte liv sa a olye pou yo mashing klavye ou tankou mwen fè jis yo kreye yon liv tèt ou mande lajan pou li, ou gen resous yo ou bezwen gen siksè nan lavi ou. Mwen te gen tout kalite pwoblèm ak fanmi k ap grandi, kondisyon sante, doktè, medya yo, ak lwa a, ak kòd mwen pwofondman reflete lit la ki se feminism ak nati fi nan yon mond divize ak fristre. Sepandan, liv sa a se yon bagay mwen pwofondman pran swen sou, ti bebe mwen an, dosye mwen, ak mwayen poul viv mwen, se konsa mwen apresye konsiderasyon ou lè ou pran tèks la lakay yo ak ak anpil atansyon pò sou li yo nan lòd yo aprann nan men m '. Tanpri kenbe nan tèt mwen mwen pa pafè, liv sa a pral gen erè, revizyon, ak edisyon nouvo, epi w ap bezwen panse ak sèvo lojik ou kòm pi bon ou kapab yo nan lòd yo gen yon eksperyans siksè ak ekri mwen. Epitou, konprann ke mwen vle di byen pou ou menm lè ou fè fas a defi lè w ap ekri. Reflechi sou li tankou sa a: Lè ou ka jis lwe yon sistèm òdinatè fè nenpòt bagay ou ka pètèt imajine nan espas ki la dijital, magazen tout enfòmasyon ou rankontre, analize ak òganize li, epi vini nan konprann li, ou pral inevitableman rankontre difikilte ak enfòmasyon ou ap enjere e menm pibliye. Mwen di ou sa paske mwen rankontre menm difikilte yo. Sèvi ak liv sa a nan pwòp risk ou, travay ak kominote ou ak kominote ki disponib nan ou yo bati lojisyèl nan yon anviwònman ki an sekirite, epi yo pa pran bagay sa yo pèsonèlman lè ou fail oswa menm reyisi nan move fason: sa a ki jan mwen te resevwa sa a byen lwen, e poukisa mwen ka pote ou tèks sa a epi ede ou reyisi san yo pa divèrje sou yon chemen ki gen pwoblèm pou tout moun ki gen yon ti global ki gen yon ti kras nan yon global ki gen pwoblèm pou yo te fè yon lòt moun ki gen yon ti tan ki gen pwoblèm pou yo te fè yon lòt moun ki gen yon ti kras nan yon chemen ki te fèt sou tout bagay sa yo ki gen yon sèl ki gen yon ti kras ki gen yon ti kras ki gen pwoblèm pou yo fè yon lòt moun ki gen yon ti tan ki te fèt nan yon chemen ki te fèt sou tout bagay ki te fèt nan yon lòt moun ki gen pwoblèm pou yo te gen yon ti kras. Nou pral travay, entènèt la. Ou pa ta ka trè abitye ak ki moun mwen ye ak jis yon kèk mo, men mwen ankouraje w li sou, ou pral jwenn yo konnen m 'jan ou kontinye li ak konprann m' pandan y ap bati pwojè pwòp ou a ranpli travay ou. Pa pral gen okenn devwa ak liv sa a, osi lontan ke pwofesè ou oswa pwofesè pa bay ou nenpòt ki, men mwen trè ankouraje w bati yon dosye nan pwojè tèt ou jan ou li ansanm, menm jan tou yon pwojè capstone èkspoze ki jan ou ka aplike sa ou te aprann yo. Pwojè Capstone mwen an se baz pou pifò nan sa ou pral li nan liv sa a, kòm li enkòpore kòd nan pwojè anvan m 'yo, kòd mwen te kreye ak aprann yo ekri metodikman nan men, ak nan yon pakèt domèn lide ak konsèy ki te ede m' reyisi nan pwen kote mwen ka vire moute yon app senp ki se konplètman chin an tap ak sanble ak konpòte yo tankou yon app popilè ou ta ka wè zanmi ou oswa fanmi ou, sou entènèt la, sou ou, sou entènèt la, ou bay yo, ou bay yo, ou bay yo, ou bay yon app ou ta ka wè ou, ou ka wè ou, ou ka wè ou.
Ki sa ki liv sa a se: Liv sa a se yon leson patikilye pa egzanp. You can find code here, instructions for how to learn to code, information on debugging code and fixing errors, troubleshooting steps, instructions on how to back up and save your code, re-deploy if anyone breaks your code, secure your code, deploy your code, build interactive websites that are entertaining, engaging, and addictive, and you will get a sense of who I am, why this is important, and how to portray yourself, your app and company image, as well as the Lojisyèl ou bati nan absoli pi bon limyè a yo dwe pi attrayant la ke posib nan itilizatè fen ou a, vizitè sit entènèt ou an. Nan liv sa a, mwen pral demontre yon kantite egzanp nan konsepsyon lojisyèl ak yon konsantre sou entènèt la kòm yon platfòm kòm byen ke sekirite. Nou pral kòmanse eksperyans nan aprantisaj pa bati yon pwojè debaz lè l sèvi avèk koki a UNIX, ak backup ak karakteristik scripting. Lè sa a, nou pral egzaminen yon sit entènèt debaz blog, ajou blog nou an ak foto ak karakteristik videyo kòm byen ke sèvi ak karakteristik sa yo anplwaye solisyon sekirite lè l sèvi avèk lojisyèl gratis, ak sekirite sèvè nou an lè l sèvi avèk yon modil otantifikasyon pluggable (PAM). Nou pral Lè sa a, revize manyen dosye ak pwosesis, eksplore koreksyon videyo, don vwa, optik bar ak rekonesans optik karaktè, nan mitan lòt konsèp. Nan tout wout la nou pral egzaminen APIs ki pral ede nou fè lojisyèl nou an pi itil ak sekirite, ak opsyon gratis ak peye. Nan tout wout la, nou pral eksplore sekirite fizik ak zouti militan tankou zam afe ak konsepsyon minisyon ak manifakti ki gen ladan barik ak konsepsyon repeater, tourèl ak konsepsyon abèy, ak lòt direktè nou pral entegre ak lojisyèl nou an sou rezo a ki deja egziste yo nan lòd yo pwoteje lojisyèl nou yo ak demontre defans pwòp tèt ou ak rezolisyon. Nou pral pran repo sou wout la yo bati jwèt, 2D ak 3D rann motè, ak travay ak pyès ki nan konpitè entegre nan ka etid egzanp nan lojisyèl debaz rann dimansyon ak yon elektwonik vibre masaj jete nan kawotchou silikone respektivman. Nan tout wout la, nou pral anplwaye solisyon aprantisaj machin ki deja disponib pou pi byen sekirite lojisyèl nou an. Nou pral anplwaye zouti stock tou ki disponib pou entènèt la yo nan lòd yo rasyonalize ak sekirite pwosesis la. Liv sa a se yon gid pou siksè ou nan bati yon aplikasyon entènèt ak entegre li ak yon rezo pwofesyonèl nan òdinatè ak entegre sistèm mekanik, ak an jeneral yon gid nan lojisyèl bilding ak pyès ki nan konpitè entegre ki pa gen okenn konesans background oswa eksperyans anvan yo.
Ki sa ki liv sa a se pa: Si ou reyèlman vle gen yon sit entènèt, ou ta ka jis mete kanpe yon magazen ki senp ak vann sa ou bezwen, afiche yon blog, afiche foto oswa videyo, oswa otreman san yo pa janm ekri yon liy sèl nan kòd. Liv sa a se pa sa. Liv sa a pral anseye ou ki jan yo bati lojisyèl ki se pi itil, konplètman chin an tap, fonksyonèl ak sekirite pase nenpòt lojisyèl ou ka deja jwenn, paske li deplwaye lojisyèl an dènye ki se toujou prototip, ka koute chè nan kouri nan yon echèl pi gran konpayi opere nan, epi yo pa fè apèl nan bak, konpayi konplitché mete kanpe fè lajan pou moun ki pa reyèlman fè anyen. Si ou swiv liv sa a byen, ou pral vle ekri kòd, kòd rechèch, bati pwòp apps ou, epi ou pral fè lajan nan sa ou fè. Mwen pral fè lajan nan liv sa a, menm nan premye etap bonè, paske li gen enfòmasyon moun bezwen epi ou vle li, epi yo deja achte lè yo achte oswa itilize apps mwen. Liv sa a pa pral bati yon app pou ou, men li pral pwen ou nan bon direksyon an ak bra ou ak zouti yo ou bezwen yo ak ladrès yo ak konsèy ki pral fasilite siksè pwòp ou a nan lojisyèl bilding pou entènèt la, ak tout liy nan kòd ou pral bezwen ekri kòm yon egzanp, pare yo dwe pieced ansanm nan lojisyèl ou ak sipòtè ou, envite, kliyan, zanmi, fanmi, vizitè, ak antrepriz yo, ak entènèt yo, ak entènèt yo, ak moun ki bay yo, ak moun ki itilize yo, ak moun ki itilize yo, ak moun ki itilize yo, yo te itilize yo, ak moun ki itilize yo, ak moun ki itilize yo, ak moun ki itilize yo, ak moun ki itilize yo.
Ki sa ou pral aprann: Liv sa a pral anseye ou ki jan yo bati ak vann lojisyèl, reyèlman fonksyonèl, lojisyèl itil, medya anrejistreman, karakteristik sekirite tankou rekonesans vizaj, machin lizib zòn optik bar, APIs entènèt otantifye, dosye ak rann videyo ak foto, ak echanj mesaj tankou Bluetooth ak tou pre jaden (NFC) kominikasyon. This book will teach you how to use a networked computer, focusing on debian linux, how to build bash code to make installing and backing up your software a seamless, automated breeze, how to build python code as a backend to serve dynamic messages, style things nicely using CSS styles with Bootstrap, enable user logins and interactivity through networked devices, build interactive media and network with other websites to offer security features like text messages for Verifikasyon oswa lòt rezon, ID optik, imaj ak videyo modération, done microtransactions kenbe lojisyèl ou an sekirite, pwosesis peman, komès cryptocurrency, travay asenkron, ak plis ankò. Ou pral aprann ki jan yo bati pwòp aparèy Bluetooth ou, ak pil, chajè, mikrokontroleur, sikui, motè ak detèktè, lè l sèvi avèk soude, fil ak 3D enprime kòm byen ke materyèl jete. Mwen pral demontre direktè 3D konsepsyon aplike nan manifakti aditif ak zouti ak mouri fè, kidonk, ou yo kapab fabrike pwòp ou entegre, aparèy kenkayri ak pil entegre, chajè, sikwi elektwonik, ak rezilta fonksyonèl. ak rezo yo ak Bluetooth ak entènèt la. Espesyalman, nou pral egzaminen de ka etid, yon masaj vibre ak yon zam afe endijèn, tou de pwograme nan OpenSCAD, ki se disponib kòm yon koòdone grafik oswa sèvis piblik liy lòd epi yo ka entegre nan yon sit entènèt pou rezilta pi vit. Ou pral aprann ki jan yo bati ak deplwaye yon sit entènèt soti nan tè a moute ki pa gen okenn eksperyans anvan, fè li fonksyonèl, sekirite, bèl, itil ak pi enpòtan pratik. Ou pral aprann ki jan yo sèvi ak aprantisaj machin ak vizyon òdinatè fè yon sit ki an sekirite ak plis pratik, videyo dosye ak odyo soti nan sit entènèt ou, fè don vwa ou, fè mizik ak modile odyo yo kreye echantiyon itil, ak ki jan yo kraze nan bri a pa swe lòt sit entènèt yo bati pi bon rezo a posib nan sit entènèt ke ou ka konekte dirèkteman nan ou yo nan lòd yo pataje tout enfòmasyon ki itil ou gen yo ofri, e menm plis enpòtan pou moun ou yo. Liv sa a pral konsantre pi lou sou medya, sekirite ak aprantisaj machin, ki se pi gwo twa eleman yo ki pral ede w bati lojisyèl itil pou entènèt la pa angaje itilizatè yo dwa ak dezenfekte sa yo sa ki mal nan yon fason ki se reyalis, pratik, men sou ak angaje pandan y ap tou otomatik, ak solid. Liv sa a anseye UNIX, espesyalman Debian (Ubuntu), Bash Shell, Python, HTML, CSS, JavaScript, ak yon kantite pakè lojisyèl itil pou Python tankou demann, osi byen ke itil lojisyèl bach tankou GIT ak FFMPEG. Mwen pral tou anseye ou ki jan nan komès cryptocurrency otomatikman, epi pran peman nan cryptocurrency oswa nan kat debi regilye pandan y ap menm peye soti vizitè ou yon pati nan revni ou si ou chwazi pou ou fè sa. Mwen pral anseye ou ki jan fè lajan nan sit entènèt ou nan piblisite kòm byen, ki jan yo pare app ou a pou motè rechèch ak fè li vit, klase nan klasman an premye pou sa ki kliyan ou yo ap fè rechèch jwenn ou, ak plase nan kòm anpil rechèch komen ke posib. Mwen pral anseye ou ki jan yo vann lojisyèl ou, fè piblisite li, fè apèl nan kliyan kap chèche sèvis ou a, epi fè yon non pou tèt ou sou entènèt la nan avni ki deja egziste, yo se chè, ak travay byen. Mwen pral anseye ou ki jan pou konsève pou done ou sou òdinatè nwaj ki travay pou ou ak sove done ou chèr, ki jan pou planifye ak bati yon sit entènèt ki fè sa ki itilizatè ou vle ak sa ou vle, ak ki jan yo kenbe itilizatè ou angaje nan mete sit ou yon tiyo ale sou telefòn yo ak notifikasyon, imèl, mesaj tèks, apèl nan telefòn, ak plis avni yo pote itilizatè yo. Liv sa a pral konsantre sou pratik la nan pibliye ak distribye medya nan gwo kantite, ki soti nan tèks nan foto nan videyo odyo, fè yon enpresyon bon sou itilizatè fen (kliyantèl ou), ak vann tèt ou nan nenpòt fason ke ou fè yo nan lòd yo kreye yon sit entènèt, yon app ki se reprezantan nan ou ak ou sèlman, epi fè ou, lojisyèl ou ak konpayi ou gade bon nan pi bon fason posib. Ou pral aprann tou yon konsèy kèk ak ke trik nouvèl nan men m ', ki soti nan konsèy kodaj, pratik vo anyen tankou makiyaj ak fotografi, modèl ak aji, ak plis ankò, ki pral enpòtan pou pòtrè tèt ou ak konpayi ou nan pi bon limyè a posib lè l sèvi avèk tout zouti ki disponib nan ou pandan y ap distribye kòm anpil kontni jan ou bezwen atravè yon balans ki an sante nan tribin yo pote lojisyèl ou a fruits ki pa gen okenn, oswa travay, oswa travay, oswa travay, oswa travay oswa lajan ou bezwen. Liv sa a rele "PratikWeb ki baze sou gwo twou san fon aprantisaj ak sekirite pa egzanp "pou yon rezon: li kontra ak aprann nan kòd, espesyalman pou entènèt la, espesyalman ak yon konsantre sou sekirite, ki soti nan yon plan pratik, ak egzanp nan k ap travay kòd ki sèvi rezon pratik ki dekri nan tèks la. Eleman nan aprantisaj nan tèks sa a tou englobe aprantisaj machin, kòd la mwen pral montre ou ki jan yo kouri pou entènèt la, ki fè ou vle, FaSement Remesonnement, Facing Handercation, Facing Handerment, Facing Handerment, Facing Handerment, Facten Handerment, Face Handerment, Facings Creaments Machin. Amelyorasyon, captioning imaj, ak lòt travay tankou prediksyon mesures souse soti nan imaj, tankou nati a nan imaj la kòm yon natif natal, òdinatè-transfere imaj, oswa yon kopi optik (yon foto nan yon imaj, oswa foto enprime). Ou nan ak figi ou. ou itilize). Nenpòt ki moun ki bati lojisyèl ki se parfètman an sekirite gen kèk sans de sa sa a implique. Lojisyèl se natirèlman anksyeu paske aparèy yo ak kont nou itilize jwenn aksè nan li yo pa toujou a jete nou yo, yo ta ka nan men yo nan nenpòt moun ki gen entansyon malad pou lojisyèl an ak Se poutèt sa ka poze yon risk nan lojisyèl nan tèt li. Sa a se yon bagay nan konsantre nan liv sa a. Yon òdinatè rezo se pa default sekirite ak yon siy kle long, yo rele ak SSH oswa sekirite kle koki, epi li se otreman pi bon sekirite ak yon sèvè entènèt, paske sèvè wèb la bay aksè a louvri kòm byen ke eta nan zouti yo sekirite atizay kouri sou sèvè a li menm. Sèvè wèb la gen aksè a navigatè entènèt itilizatè a, ki se joui pati ki pi pwisan nan aparèy itilizatè a, paske li nan plas la kote itilizatè a ka jwenn aksè nan lojisyèl rezo. Toolkit sa a ka rann tèks, paj yo ou wè, epi yo ka tou anrejistre imaj, odyo ak videyo (tankou yon foto nan yon figi oswa yon ID eta), ka li ak ekri nan aparèy radyo Bluetooth, epi yo ka li ak ekri nan tou pre jaden transponder, pa gen okenn entènèt ki gen rapò ak ou. Sèvi ak tout zouti yo a jete ou, ak liv sa a ou pral ekipe tèt ou ak konesans la yo bati yon sit entènèt ki an sekirite, ak an jeneral yon sekirite sistèm òdinatè rezo ki travay pou ou, fè òf ou, ak sanble ak santi l
Ki kote yo kòmanse: Ou ap akeyi sote sot pase yo seksyon an mwen kòmanse liv sa a ak, oswa nenpòt ki seksyon, nan kòd la egzak ou bezwen, espesyalman si ou gen eksperyans ak kodaj anvan oswa nenpòt nan zouti yo susmansyone mwen pral dekri an detay nan liv sa a kòm byen ke dokimante ka itilize ak egzanp pratik ladan l '. Si ou pa gen eksperyans nan ekri kòd, mwen trè rekòmande ou li tout liv sa a, epi espesyalman rekòmande ou li seksyon yo anvan yo, asire w ke liv sa a se bon pou ou. Si liv sa a pa bon pou ou, konsidere gifting li nan yon zanmi oswa yon fanmi ki ta ka enterese nan aprann sou devlopman entènèt tèt yo, e menm konsidere prete li retounen lakay yo epi aprann nan men yo ranpli nan twou vid ki genyen yo kote mwen echwe ou kòm yon pwofesè, oswa lòt pwofesè te fè devan m '. Kòmanse kote ou pral, chak pati nan liv sa a pral itil si ou gen entansyon bati yon app itil, epi konsidere ke apps yo pi byen yo bati ak itilizatè a fen nan tèt ou: Konnen kliyan ou yo. Koulye a, ou konnen m ', ou konnen liv sa a, epi ou yo pare yo kòmanse. Pou kòmanse, gen tan pwan yon òdinatè (menm laptop la pi bon mache soti nan yon magazen bwat, Amazon, oswa yon ansyen Desktop travay, ak mete l 'kanpe nan yon fason ki travay pou ou.
Ki jan yo li liv sa a: Tèks make, vle di ke tèks la ki dwe nan yon èd memwa lòd, kote ou pral ekri kòd la ou kouri. Èd memwa a se lou klavye konsantre epi mande pou ti kras pa gen okenn klike, vitès moute workflow ou ak fè bagay sa yo pi fasil sou ou.
Pou kòmanse: Se pou nou plonje nan. Nou pral kòmanse pa bati kòd sou yon machin lokal yo ak kòmanse san yo pa bati yon sit entènèt ki konekte nan entènèt la. Sa a se pi an sekirite yo kòmanse ak, koute pa gen anyen, epi li se fasil pou ou. Tou depan de sistèm opere ou, ap resevwa nan yon koki bach pral yon ti jan diferan. Pou Mac OS, mwen rekòmande enstale yon machin vityèl nan pwen sa a, menm jan ou pral jwenn konpatibilite ki pi ak yon machin vityèl. Divès founisè tankou VirtualBox ak Paralells ka kouri yon machin vityèl pou ou, menm si li se tou posib yo enstale Ubuntu dirèkteman sou machin nan, si ou pito sèvi ak yon anviwònman natif natal ki se rekòmande yo nan lòd yo kreye yon vit, eksperyans senp. Si w ap itilize Linux oswa Windows, ki mwen rekòmande, li ta dwe byen fasil yo kreye yon pwojè. Louvri tèminal ou, ajiste dimensionnement a jan ou wè anfòm, epi kòmanse etap sa yo 2. Si w ap itilize Windows, tanpri swiv etap 1.
Etap 1: - Windows itilizatè sèlman Nan Windows, Open Kòmandman èd memwa kòm administratè ak kalite wsl –install
Etap 2: - Kontinye isit la, oswa sote etap 1 isit la si ou pa lè l sèvi avèk Windows Nan yon tèminal louvri, (ki depann sou eksplwatasyon ou a, yo rele Ubuntu nan Windows, Tèminal nan Mac oswa Linux, oswa yon non ki sanble), kòmanse pa kreye yon pwojè. Nou fè sa ak lòd la MKDIR, ki kreye yon anyè. Si ou bezwen kreye yon anyè nan magazen pwojè ou a, ki rekòmande, sèvi ak lòd la CD chanje nan anyè a ak ak
CD/Path/To/Anyè - chemen an se dosye yo (dosye) ki vin anvan anyè destinasyon ou an, chemen default ou a se ~ oswa/kay/non itilizatè (kote non itilizatè se non itilizatè ou an). Pou chanje anyè a default, tape CD oswa CD ~ MKDIR Egzanp - Ranplase "Egzanp" ak non anyè a
Koulye a, ou gen yon anyè k ap travay pou pwojè ou a. Lè ou kòm li nan tèlman enpòtan yo gen anyè sa a sove nan ka ou bezwen chanje nan yon machin diferan oswa deplwaye kòd la ou ekri pou li a pare pou entènèt la, nou pral bati yon script nan do moute anyè ou nan pwochen etap yo kèk. Men, bati yon script pran yon ti jan nan kòd, ak kòd bezwen yo dwe otomatik yo dwe itil ke posib. Se konsa, kite a bati yon script yo bati Scripts premye. Ann kòmanse pa kreye script la ak fè li ègzèkutabl. Nou pral sèvi ak sudo, chmod ak manyen pou sa a, epi rele script la "ascript".
sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Koulye a, nou te kreye script la, te fè li ègzèkutabl, epi yo pare yo edite li. Nano se yon editè tèks ki pral kite ou edite tèks san yo pa klike, ki se pi fasil pase lè l sèvi avèk yon koòdone itilizatè grafik. Pou edite yon dosye ak Nano, sèvi ak Nano ak Lè sa a, chemen an nan dosye a. Pou fè yon script ki fè yon script, li nan jistis menm jan ak fè script nou an an plas an premye. Nou pral sèvi ak kòd la menm jan ak pi wo a, ranplase non an nan script la, "Accript" ak yon paramèt agiman, $ 1. Sa a pèmèt nou rele script la pa tape tou senpleman SUDO ASCRIPT NEWSCRIPT, nan ki pwen nou ka kreye nenpòt ki nouvo script pa ranplase "newscript" ak non an nan script ou. Kòd la nan Nano ta dwe sanble:
sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
Ak yo fèmen Nano, nou ka kenbe desann kle a kontwòl ak peze X, Lè sa a, y fè don nou ap ekonomize dosye a, ak frape retounen. Koulye a, olye pou yo tape twa kòmandman sa yo edite yon script, nou yo pral kapab tape SUDO ASCRIPT ASCRIPT edite script la ankò. Sa a travay! Ak nenpòt ki nouvo script ka kouri fasil lè w rele li nan koki an. Se pou nou sove travay nou an kounye a: Ann ekri yon script backup pou konsève pou nouvo script nou yo ak Lè sa a, tounen l 'moute nan anyè pwojè nou an, pandan y ap tou fè bak moute script la backup.
sudo ascript backup
Koulye a, nan Nano:
sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Ki kote/chemen/a/anyè se chemen an nan pwojè a ou te kreye ak MKDIR. Pita sou nou pral aprann ki jan yo kopye chemen repete tankou sa a ak yon bouk ak yon lis, ki se mwens kòd, men pou kounye a kite a kenbe li senp epi yo gen yon liy kèk. Kouri sa a script ak backup kòd ou a, sove dosye a nan Nano ak kontwòl+x, y epi retounen, epi tape anba a nan koki ou
backup
Si ou ap pouse nan tout pou yon modpas pandan w ap li liv sa a epi swiv ansanm nan koki a, tanpri antre modpas itilizatè ou kòrèkteman, ou pral gen twa eseye anvan ou bezwen re-kouri lòd la. Ou ka sèvi ak flèch yo leve, li desann nan relanse kòmandman ak edite yo, ou ta dwe bezwen kouri anyen de fwa. Senp laprès leve, li desann tanzantan yo chwazi yon lòd, anvan koreksyon lòd la ak dwa, flèch yo kite ak efase kle kòm byen ke klavye, ak kouri li ak retounen.
Konpliman! Ou jere yo kreye yon script backup awizom ki apiye moute de Scripts koki enpòtan nan anyè k ap travay ou. Nou ta ka deplase bagay sa yo alantou pita kòm pwojè a vin pi gwo, men sa a ap travay pou kounye a. Se pou nou deplase sou fè bak nan nwaj la, nou pral sèvi ak GitHub pou sa a (menm si gen anpil lòt solisyon GIT pou backup yo, yo tout sou menm bagay la Li se enstrimantal nan ekonomize lojisyèl ou, espesyalman jan nou emigre nan sekirite Linux ka ki pafwa kraze lè yon liy sèl nan kòd echwe, kite ou fèmen soti pandan y ap kòd ou pa ta ka apiye moute si ou pa jwenn yon chans nan do li moute otomatikman, ki nou pral kouvri.
Si ou pa deja lè l sèvi avèk yon Ubuntu machin vityèl nan pwen sa a, mwen rekòmande lè l sèvi avèk yon Ubuntu machin vityèl nan pwen sa a paske li pral fè lavi ou pi fasil lè enstale tout nan pakè ki nesesè yo nan lòd yo bati yon sit entènèt k ap travay ak preform operasyon aprantisaj gwo twou san fon sou òdinatè ou. Nou pral deplase kòd la nan yon sèvè entènèt nan fiti prè, men nou vle asire w ke gen omwen yon kouch kèk nan sekirite dèyè sèvè wèb nou an ki rezistan a èskrokri, ak anplwaye yon kantite pakè Linux yo nan lòd yo fè sa. Si ou toujou vle sèvi ak Mac OS, ou se Byenveni nan rechèch pou ak enstale pakè ki nesesè yo sou entènèt, men gen pouvwa pa gen altènativ pou chak pake liv sa a oswa seri pral kouvri.
Se pou nou ajoute yon kòmandman kèk komèt travay nou yo ak script la backup pa kouri lòd la Sudo Accript backup.
# ...
Yon fwa ankò, kontwòl X pou konsève pou.
Koulye a, nou bezwen fè kèk konfigirasyon yon sèl fwa pou pwojè sa a. Paske li byento pral yon pwojè git, nou pa bezwen tape chak lòd chak fwa nou deplwaye soti nan yon repozitwa Git, men nou pral jwenn pann an nan sa a lè nou ekri Scripts deplwaman nou an. Pou kòmanse, kite a asire w ke nou se nan anyè a dwa ak inisyalize repozitwa a GIT ak jenere kle SSH.
cd /path/to/directory
git init
git branch -m master
ssh-keygen
Apre nou tape SSH-Keygen, nouvo kle a ta dwe sove nan katab la lakay anba yon katab rele .SSH. Yo rele li id_rsa.pub. Ann jwenn kle sa a epi kopye li. Pou wè li,
cd ~
cat .ssh/id_rsa.pub
Kopi tèks la ki retounen nan dènye lòd la, epi kreye yon kont ak founisè GIT ou (depreferans GitHub), anvan ou ajoute kle SSH nan kont ou. Yon fwa ou gen yon kont, klike sou meni an anwo dwa ak antre nan anviwònman, anvan ou ajoute kle SSH ou nan SSH ak GPG kle anba aksè nan meni an. Chwazi Ajoute yon kle SSH epi ajoute ou pa kole li nan ak bay li yon tit, anvan ekonomize ak retounen nan GitHub yo kreye yon nouvo repozitwa. Sa a se menm jan pou lòt founisè GIT, ou pral bezwen li dokiman yo. Nan nouvo konfigirasyon repozitwa a, bay repozitwa ou yon non deskriptif epi deside si ou vle pibliye li, epi asire w ke ou konfigirasyon pa gen okenn dosye pou enklizyon ankò. Yon fwa yo kreye repozitwa a, kopye script la ak SSH URL, epi kole li nan lòd sa a.
git remote add git://… (your remote URL)
Koulye a, ou ka deplase tounen nan repozitwa ou a ak CD, ou pral abitye ak sa a. Eseye script backup ou an kounye a ak backup
Gran! Koulye a, nou ka reyèlman jwenn kodaj. Se pou nou enstale Django kounye a ke nou gen yon bon men sou bach ak git. Django pral kite nou otomatikman tounen moute lojisyèl nou an, bach ka fè sa tou men Django ta dwe gen yon aplikasyon ki pi senp pi an sekirite (li ka enfim ak configuré pi fasil).
Enstale lojisyèl nan Ubuntu, nou pral sèvi ak lòd la sudo jis-jwenn. Premyèman, kite a mete ajou ak ajou lojisyèl an nou te deja te gen. Sa a ka fè ak sudo jis-jwenn aktyalizasyon ak sudo jis-jwenn ajou -y. Next, kite a enstale Python ak anviwònman vityèl nou an, kay la nan kòd nou an, ak lòd sa a: sudo apt-jwenn enstale python-se-python3 python3-venv
Sa a se tout sa ou bezwen jwenn ale ak Django an tèm de lojisyèl enstale nan egzanp lan Ubuntu. Pou Windows ak Linux sa a yo ta dwe jistis senp, men pou Mac ou ka vle enstale yon machin vityèl ak Linux sou li lè l sèvi avèk yon anviwònman gratis oswa peye vityèl tankou VirtualBox oswa Paralells Desktop ak rkree etap sa yo pi wo a yo nan lòd yo konfigirasyon yon anviwònman Ubuntu. Ubuntu se kritik nan ka sa a paske li se lojisyèl an sou sit entènèt yo kouri epi li pèmèt yo òganize sit entènèt ak tout nan lojisyèl an susmansyone.
Se pou nou fouye nan Django la.
Nan anyè nou an ankò, ak CD:
python -m venv venv # Kreye anviwònman an vityèl kote kòd ki estoke
source venv/bin/activate # Aktive anviwònman an vityèl
django-admin startproject mysite . # Ki kote MySite se pwojè a mwen kòmanse nan anyè mwen ye kounye a.
Django se jis ap resevwa nou te kòmanse, paske Django ap hosting sèvè wèb la ak ap fè tout sa nou bezwen jwenn yon sit entènèt debaz lokal yo leve, li kouri. Kounye a ke nou gen Django enstale, kite a edit anviwònman yo yon ti jan fè li travay ki jan nou bezwen. Premyèman, kite a kreye yon nouvo app
python manage.py startapp feed
Ou ap remake se premye app a rele Feed. App a ta dwe rele tou sa ou renmen, epi nou pral kreye nouvo apps, men non an nan chak app dwe konsistan chak fwa se app a referans nan kòd la. Pou ajoute yon nouvo app, nou pral toujou edite anviwònman yo.py nan lòt anyè a app a te kreye, yo te rele nan StartProject, apre sa app. Sèvi ak Nano,
nano app/settings.py
Nan anviwònman yo, jwenn enstale_apps epi separe [] nan 3 liy yo. Sèvi ak kat espas sou liy lan sant vid, ajoute 'manje', oswa non an nan app ou. Seksyon sa a nan anviwònman yo.py ta dwe sanble:
INSTALLED_APPS = [
'feed',
]
Anvan nou bliye, se pou nou teste ke Django ap travay. Sèvi ak lòd la Python Manage.py Runserver 0.0.0.0:8000, nou ka kouri sèvè a ak Lè sa a, navige nan yon navigatè entènèt sou òdinatè a kouri kòd la http: // localhost: 8000 ak wè yon egzanp paj (li travay!) Kite sèvè a ak kontwòl C, menm jan ak nenpòt ki lòt lòd.
Koulye a, kite a fouye nan ekri kèk kòd Piton. Django gen twa eleman prensipal yo, tout nan yo kouri pa kòd antyèman. Konpozan yo rele modèl, wè ak modèl, epi chak se nan yon nivo ki pi wo ak pi ba respektivman anvan yo Paj Web la lage nan itilizatè a.
Modèl la se kòd la ki estoke enfòmasyon nan baz done a pou Rekipere, sòt ak rann.
View nan deside ki jan modèl la rann, manipile, ak modifye, prèske chak View pral sèvi ak yon modèl dirèkteman.
Modèl la se kòd la HTML ak kèk klòch siplemantè ak sifle yo rele langaj modèl. Se modèl la rann pa gade nan kote li se plen ak kòd Python ak kontèks tankou modèl ak enfòmasyon (usuall strings ak nonm antye relatif) soti nan gade nan.
Django gen lòt konpozan tou, ki gen ladan men pa limite a:
Anviwònman, ki configured app a jan nou diskite.
URL, ki se modèl ki itilizatè a swiv yo jwenn aksè nan pati espesifik nan aplikasyon an entènèt.
Fòm, ki defini ki jan enfòmasyon ki voye nan sèvè a se okipe ak rann nan baz done a kòm byen ke itilizatè a. Sa yo se fondasyon an nan enfòmasyon sou pwosesis sou bò sèvè, epi yo ka aksepte nenpòt ki kalite enfòmasyon magazen yo òdinatè, pi miyò strings tèks, nimewo, ak vre/fo Booleans (anjeneral kaz).
Modèl, ki se kòd HTML ak langaj modèl ak pon diferans ki genyen ant Python ak HTML, sa vle di enfòmasyon Python ka sèvi kòm kòd HTML ke nenpòt moun ka jwenn aksè epi yo ka jwenn yon sit entènèt ki gen aksè ki gen restriksyon, pandan y ap fè kòd Python aksesib a entènèt la ak itil pou yon varyete de rezon sou yon aparèy aleka ki pa bezwen sèvè a.
Dosye estatik, ki se anjeneral JavaScript ak bibliyotèk li a ki sèvè a sèvi ak yo lye nan ak modèl la.
Dosye medya, ki sèvè a sèvi oswa yo deyò anime, oswa jis ekri nan sèvè a anvan yo te trete ak afiche nan yon lòt sèvè (yon bokit) pou hosting.
Middleware, ki se moso nan kòd ki kouri nan menm tan an kòm chak View ak yo konsidere kòm "enkli" nan gade nan.
Processeurs kontèks, ki pwosesis kontèks la nan chak View ak yo te itilize yo ajoute siplemantè kontèks.
Tès, ki valide ke itilizatè a oswa mande pase sèten kondisyon anvan yo wè a rann.
Konsomatè yo, ki dikte ki jan websockets okipe ak reponn a kominikasyon.
Admin, ki te itilize yo enskri modèl pou yo ka manipile an detay nan paj la admin Django, kote yo ka baz done a dwe administre nan yon koòdone grafik.
Seleri, ki defini travay asenkron pati nan kòd la Django ka kòmanse kouri anvan imedyatman kontinye nan travay la pwochen oswa liy nan kòd.
Django ka gen anpil lòt konpozan, ki nou pral diskite sou an detay isit la. Gen anpil nan fason yo fè Django plis fonksyonèl, ajoute websockets, ki se vit, chanèl kominikasyon senp, seleri, ki ègzekutra travay asenkron, ak yon foul moun nan lòt moso nan lojisyèl pou pwolonje Django, espesyalman nan fonksyon yo gade, kote se pi fò nan kòd la egzekite. View fonksyon yo se kle paske yo anjeneral deklare chak moso nan kòd ki se espesifik nan yon modèl URL espesifik, oswa yon seksyon nan sèvè a.
Premyèman, kite a eksplore fonksyon wè. View fonksyon kòmanse ak enpòtasyon ki endike kòd ki pral itilize nan gade nan, epi yo defini lè l sèvi avèk definisyon fonksyon regilye oswa klas yo. Opinyon ki pi senp yo defini nan definisyon fonksyon def, epi retounen yon HTTPResponse ak yon modèl de baz yo. Ann kòmanse pa defini yon View debaz yo retounen tèks la "Hello World". Sonje ke chak fwa ou ajoute kòd apre yon deklarasyon tankou Def, si, pandan y ap, pou, elatriye, ou pral bezwen ajoute 4 espas pou chak nan definisyon yo anvan ou ta renmen aplike nan fonksyon ou. Nou pral jwenn nan sa ki chak nan sa yo vle di byento.
Soti nan anyè sit nou an, edite dosye a manje/views.py lè l sèvi avèk nano epi ajoute liy sa yo nan fen dosye a.
from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
HTTPResponse Django a reponn ak yon fisèl tèks, deziye ak ouvèti a ak fèmen '. Chak fwa ou pase enfòmasyon nan yon fonksyon oswa klas, tankou demann oswa yon fisèl, ou pral bezwen sèvi ak parantèz (, ouvèti ak fèmen).
Sa a se pa tout sa nou bezwen wè gade nou an ankò. Natirèlman, nou pa te di sèvè a kote gade nan se egzakteman, nou toujou bezwen defini yon chemen pa ki gade nan ta dwe rann. Ann kòmanse pa defini yon chemen debaz nan app/URLs.py, epi nou pral jwenn nan gwoup chemen pita.
Nan app/URLs.py, ajoute yon liy apre deklarasyon sa yo enpòte apre kòmansman an enpòte gade nan nou jis kreye.
from feed import views as feed_views
Koulye a, kite a defini modèl la wè. View modèl gen twa konpozan, eleman nan chemen, ki di sèvè a kote gade nan egziste nan sèvè a (chemen an URL ki itilizatè a kalite nan ba a navigasyon antre nan paj wèb la), eleman nan View kote se gade nan espesifye, ak yon non zanmitay pou gade nan pou li a fasil pou rekipere li a modèl pou fè yon lòt bagay pou fè yon lòt bagay. Li fè sans fè bagay sa a nan fason sa a yo epi yo dwe fleksib, paske codebase ou yo pral yon anviwònman tout tan chanje ki bezwen fleksibilite ak enpwovizasyon yo nan lòd yo dwe valab ak fasil yo travay avèk yo. Men sa ki wè ou pral sanble, ou ka ajoute sa a nan urlpatterns yo = [seksyon nan app/urls.py. Se modèl la wè defini ak twa eleman ki dekri anwo a, ak yon fonksyon yo rele chemen. Modèl URL ou yo se yon lis, se konsa asire w ke ou toujou fini chak atik nan yo ak yon vigil, paske sa a separe chak youn. Chak atik ta dwe tou ale sou yon nouvo liy, yon lòt fwa ankò ak kat espas anvan li, jis tankou app a nan anviwònman.py. Nou pral defini eleman nan premye nan gade nan ak yon fonksyon fisèl vid, yo nan lòd yo kreye yon View ki kouri sou anyè a rasin nan sèvè wèb la. URL.PY ou ta dwe kounye a gade tankou sa a:
from feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
Sa a se baz pou kreye yon sit entènèt ak Django ki se konplètman estatik. Yo nan lòd yo fè yon sit entènèt pi dinamik kote nou ka kòmanse kach enfòmasyon, tankou imaj, videyo, odyo ak plis ankò, nou pral bezwen sèvi ak modèl, ki nou pral eksplore pwochen. Pou kounye a, kite a tcheke kòd nou yo ak kouri sèvè a. Pou tcheke kòd la pou erè, kouri:
python manage.py check
Si gen nenpòt ki mesaj erè, ou ta dwe ak anpil atansyon revize chanjman sa yo ou te fè nan app ou ak wè si gen yon bagay ki bezwen yo dwe fiks, tankou yon espas envalid oswa manke, yon karaktè siplemantè, yon fisèl ki klè, nenpòt ki typo, nenpòt ki karaktè aksidantèlman efase, oswa nenpòt lòt bagay. Lekti nan mesaj la erè (si ou gen youn), ou ta dwe kapab wè chemen an nan yon dosye ou te kreye oswa modifye ansanm ak yon nimewo liy, se konsa gade nan ki dosye ak liy ak wè si ou ka ranje nenpòt ki bagay ki gen la. Si ou te fiks pwoblèm nan, kouri lòd la pi wo a ankò. Lè lojisyèl ou a pare pou kouri ak ap travay, ou pral wè pwodiksyon an "chèk sistèm idantifye pa gen okenn pwoblèm." Koulye a, ou pare yo ale. Kouri sèvè a ak:
python manage.py runserver 0.0.0.0:8000
Koulye a, louvri moute yon navigatè entènèt ak navige nan http: // localhost: 8000. Ou ta dwe wè tèks la tounen nan parantèz la ak quotes nan fonksyon an httpresponse nan gade ou. Sa a se jis yon egzanp debaz, men si ou te fè li byen lwen, ou konprann Basics yo nan ki jan Linux, bach, Piton, ak Django travay. Se pou nou fouye pi fon nan kèk modèl baz done, ak eksplore pouvwa a nan yon klas Piton nan estoke enfòmasyon. Lè sa a, nou pral kòmanse jwenn yon priz sou HTML ak CSS anvan nou fè sit nou an konplètman chin an tap, fleksib ak sekirite lè l sèvi avèk JavaScript ak aprantisaj machin.
Klas yo estoke nan modèl yo.py nan app ou. Sèvi ak Nano, Edit App/Models.py epi ajoute yon nouvo klas. Yon klas defini ak definisyon klas la epi li pase yon superclass ke li eritye soti nan, nan ka sa a modèl.modèl. Non klas la vini apre definisyon klas la, epi apre definisyon klas A: (kolon) yo itilize, anvan yo atribi yo ak definisyon fonksyon mare nan klas la deziye anba a. Klas nou an bezwen yon ID nou ka itilize pou rekipere li epi kenbe li inik, epi li bezwen tou yon jaden tèks nan magazen kèk enfòmasyon. Pita sou nou ka ajoute yon timestamp, dosye, Booleans (vre oswa fo definisyon ki ka ede kòd nou an pran desizyon sou sa ki fè ak modèl la, epi yo ka itilize yo sòt li), yon egzanp mare modèl la nan yon itilizatè louvri sesyon nan sèvè a, ak plis ankò. Ann dekonprese kòd ki anba a:
from django.db import models # Enpòte a ki itilize yo defini klas nou yo ak atribi li yo
class Post(models.Model): # Definisyon klas nou an li menm
id = models.AutoField(primary_key=True) # ID nan modèl nou an, yon kle otomatikman pwodwi ki pral kite nou fè rechèch sou modèl la, kenbe li inik, epi li se itil lè nou bezwen kominike avèk modèl la yon fwa li te kreye.
text = models.TextField(default='') # Atribi nan magazen klas nou an, nan ka sa a, kèk tèks, defayan nan yon fisèl vid.
Fèmen epi sove dosye a jan nou te fè anvan yo fini.
Gen anpil lòt jaden ak opsyon nou pral eksplore lè nou mete ajou klas sa a kòm app nou an evolye, men sa a se nesesite debaz yo nan kreye yon app yo afiche kèk tèks. Sepandan, modèl sa a pa pral travay pou kont li. Jan sa dekri anvan, nou pral bezwen yon View koutim ak koutim modèl URL fè modèl sa a travay, epi nou pral bezwen tou yon fòm ansanm ak yon modèl. Ann eksplore fòm lan an premye.
Pou defini yon fòm, edit app/fòm.py ak nano epi ajoute liy sa yo. Nou pral bezwen de enpòtasyon, klas fòm nou an, osi byen ke modèl la nou te kreye (feed.models.post), yon definisyon klas ki sanble ak modèl la, ak yon jaden ansanm ak yon subklas yo rele meta ki pral defini modèl la fòm lan reyaji ak. Fòm lan kapab genyen tou yon fonksyon inisyalizasyon ki etabli li ki baze sou enfòmasyon nan demann lan, modèl oswa otreman, nou pral eksplore sa a pita.
Fòm modèl yo, se pou itil paske yo ka kreye yon modèl oswa tou edite yon modèl, se konsa nou pral sèvi ak yo pou tou de. Se pou nou defini youn nan fòm.py anba a.
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',)
Sa a se Basics yo nan sa ki yon fòm ak modèl sanble. Ka fòm modèl sa a dwe itilize enstansye oswa edite yon pòs, chanje tèks la li gen ladan. Nou pral gade nan entegre fòm sa a nan yon View pwochen. Premyèman, kite a fè migrasyon yo ak emigre baz done a pou kòd nou an ka kominike avèk modèl la lè li kouri. Pou fè sa, kouri kòmandman sa yo:
python manage.py makemigrations
python manage.py migrate
Sa a pral pran yon minit egzekite, men yon fwa li fè sa, li pral pèmèt ou jwenn aksè nan modèl la nan opinyon yo, middleware, oswa nenpòt lòt kote nan lojisyèl an. Se pou nou kontinye pa fè yon View kote nou ka wè modèl nou an. Edit Feed/views.py epi ajoute kòd sa a, jan yo note sa. Ou pa pral bezwen ajoute anyen apre siy la #, ki kòd se kòmantè ke yo te itilize fè yon don enfòmasyon sou kòd la. Nou pral kòmanse pa enpòte modèl nou an nan opinyon yo, epi ajoute li nan yon kontèks kote nou ka rann li nan yon modèl kòm yon lis pou ekspozisyon. Next, nou pral ajoute yon modèl kote nou ka rann fòm lan ak modèl la ak yon bouton yo kreye yon nouvo objè ki baze sou modèl la ak afiche li nan sèvè a. Sa a son konplike, kidonk kite a jis pran li etap pa etap. Anvan nou fini gade nan, kite la kreye yon modèl ki jis rann modèl la ak asire w ke nou ka wè li pa kreye yon pòs nouvo nan koki an. Men ki jan ki wè ta dwe gade:
posts = Post.objects.all() # Rechèch tout posts yo nan baz done a byen lwen tèlman
Sa a tout sanble trè senp jiskaske nou jwenn anba a. Rann, valè a tounen pa fonksyon an olye pou yo nan yon repons HTTP tankou egzanp lan anvan, toujou pran yon demann kòm opinyon premye li yo, aksepte yon kontèks (nan ka sa a posts yo nan baz done a), ki kapab kounye a dwe rann nan modèl la, epi retounen modèl la defini nan fonksyon an. Modèl la pral gen yon dokiman HTML ak yon ti kras nan yon lang yo rele Jinja2, ki rann enfòmasyon Python nan HTML la.
Pou kòmanse kreye modèl, fè de repèrtwar nan manje.
mkdir feed/templates
mkdir feed/templates/feed
Next, edite yon modèl nan anyè a pi wo a, manje/modèl/manje, epi ajoute kòd la pou egzanp sa a. Se pou nou gade nan modèl la pou egzanp sa a.
Sa a se yon modèl trè senp. Li defini ouvèti ak fèmen Tags HTML, yon tag kalite dokiman, yon tag kò ak yon tit lejand, yon tag kraze ki ajoute yon liy ti atravè ekran an, ak yon pou bouk ki rann chak pòs nan lis la nan posts kòm yon paragraf nan modèl la. Sa a se tout li pran yo rann posts, men pa gen okenn nan baz done a ankò. Ann kreye kèk ak koki a. Nou ka kouri koki a ak manage.py
python manage.py shell
Koulye a, kite a enpòte modèl pòs nou an
from feed.models import Post
Next, nou pral kreye yon pòs senp ak yon fisèl ak sòti koki an. Fisèl la ka anyen, osi lontan ke li nan tèks valab.
Post.objects.create(text='hello world')
exit()
Anfen, nou pral bezwen ajoute yon modèl URL nan manje nou yo. Paske app manje nou yo pral sèvi ak URL miltip ak nou vle kenbe gwosè dosye ti, kite la kreye yon URL lokal.py nan app manje nou yo ki sanble tankou sa a:
from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
Nou pral bezwen tou edite URL yo.PY nan app a baz, kèlkeswa sa nou deside rele li, sa a te anyè a premye nou te kreye. Edit app/app.py epi ajoute sa ki annapre yo nan modèl yo URL
from django.urls import include # Nan tèt la
# ... anvan kòd isit la
Koulye a, lè nou kouri sèvè a ak Python Manage.Py Runserver, nou pral wè paj la nou te kreye paske nou gen modèl la, wè ak modèl kòm byen ke modèl URL, ansanm ak atik nan baz done a. Next, kite a aplike fòm nan nou te kreye epi kòmanse kreye posts pwòp nou yo. Men, anvan nou ekri twòp kòd, kite a fè yon backup lè l sèvi avèk script la nou te ekri pi bonè, backup. Kouri sa a script nan koki a, rete tann yon ti moman, ak tout nan kòd la pral apiye jiska repozitwa GIT nou an.
backup
Aplike fòm lan se relativman senp. Nou pral enpòte fòm nou an, ajoute yon moun kap okipe demann pòs nan gade nan, epi sove pòs la nan baz done a anvan yo redireksyon nan gade nan menm. Nou ka itilize fonksyon an redireksyon nou deja enpòte, ak yon lòt fonksyon yo rele ranvèse jwenn URL la pou modèl la gade. Nou pral rechèch sa a ak fisèl la 'manje: manje' paske namespace a nan modèl la enkli se manje, ak gade nan yo te rele tou manje.
posts = Post.objects.all() # Rechèch tout posts yo nan baz done a byen lwen tèlman
if request.method == 'POST': # Okipe demann lan pòs
form = PostForm(request.POST) # Kreye yon egzanp nan fòm lan epi sove done yo nan li
if form.is_valid(): # Valide fòm lan
form.save() # Sove nouvo objè a
return redirect(reverse('feed:feed')) # Redireksyon nan URL la menm ak yon demann jwenn
'form': PostForm(), # Asire w ke ou pase fòm lan nan kontèks la pou nou ka rann li.
Koulye a, nou pral bezwen mete ajou modèl la nan kont pou nouvo fòm lan. Nou ka fè sa lè l sèvi avèk la
Ann kraze sa a. Gen yon klas nouvo fòm, yon siy, fòm nan tèt li, ak yon bouton soumèt. Trè senp, men lè nou pran yon gade nan li, nou ta ka vle fè li gade pi byen. Li travay, nou ka afiche posts nouvo ak fòm nan epi yo yo kounye a se sove nan baz done a. Gen kèk bagay k ap pase isit la. Nou itilize Tags HTML deklare ke dokiman an se yon dokiman HTML, nou itilize yon tag modèl ({ % ... %}) rann siy la pou fòm lan, ak yon lòt, {{...}} rann fòm lan. Nou menm tou nou gen yon bouk rann tèks la lè l sèvi avèk Tags blòk ak yon tag modèl. Tags blòk yo vrèman enpòtan paske nou ka defini ki jan seksyon nan modèl la yo rann avèk yo, ak Tags modèl yo se baz la nan ki jan nou mete varyab nan kòd nou an.
Koulye a, nou bezwen fè app nou an gade pi byen, paske pou kounye a li sanble vrèman debaz. Nou ka fè sa lè l sèvi avèk CSS, swa aliye, oswa nan klas mare nan chak objè nan dokiman an. CSS se reyèlman bèl paske li di tout bagay sou paj la ki jan li ta dwe gade, epi yo ka fè li gade reyèlman bon. Gen yon bibliyotèk kèk ki ka fè sa, men pèsonèl mwen ale nan se demaraj.
Bootstrap ka telechaje nan sit entènèt yo,getbootstrap.com/. Yon fwa gen, peze bouton an li dokiman yo enstalasyon, ak kopi kòd la soti nan la enkli atravè seksyon CDN. Ou pral bezwen kòd sa a nan tèt dokiman HTML ou, nan yon tag ki rele tèt. Epitou, kite a ale pi devan epi kreye yon modèl baz pou nou pa bezwen rkree lyen sa yo nan chak modèl.
Fè yon nouvo anyè ki rele modèl ak modèl MKDIR, ak Lè sa a, edit modèl/base.html.
Li ta dwe gade tankou sa a:
Asire w ke ou kopye CSS la ak JavaScript, .css yo ak .js dosye, paske nou pral bezwen JavaScript a fè sit nou an plis fonksyonèl nan lavni.
Koulye a, kite a retounen nan koki a bach epi kouri yon lòd rapid. Sonje byen, si ou janm bezwen jwenn aksè nan anviwònman an vityèl, kalite sous VENV/bin/aktive. Sa a pral kite ou enstale pakè Python lokalman nan yon fason ki pèmèt Django jwenn aksè yo. Pou bay fòm nou yo ki te pwodwi pa klas Django Bootstrap, nou pral sèvi ak yon pake Piton yo rele fòm kroustiyan. Nou ka telechaje sa a ak lòd sa a
pip install django-crispy-forms
Yon fwa sa a enstale, ajoute li nan anviwònman yo.py
# ... anvan kòd isit la
Koulye a, tounen nan modèl manje nou an, nou ka retire kèk bagay. Se pou nou retire kòmansman an ak nan fen dokiman an epi ranplase li ak pòsyon tè soti nan modèl baz nou an, lè l sèvi avèk fin ak definisyon an blòk. Epitou, nou pral ajoute yon modèl filtre enpòte ak chaj ak yon filtre modèl nan fòm lan. Anfen, kite a ajoute yon klas demaraj nan bouton an sou fòm nan fè li gade plis tankou yon bouton. Ki ta dwe gade tankou sa a:
Bèl! Sa a byen yon ti jan nan kòd deja. Next, nou ta dwe teste li soti ak asire w ke nou ka wè ke tout bagay sanble bèl, epi tou asire w ke tout bagay ap travay byen. Kouri sèvè a tankou pou chak enstriksyon anvan yo ak asire w ke sit la sanble ak travay byen. Gwo travay! Ou pare pou avanse pou pi nan pwochen etap la, nan ki nou pral ajoute itilizatè login fonctionnalités lè l sèvi avèk URL menm jan an, fòm, opinyon ak modèl. Modèl baz la enpòtan, epi nou pral kontinye modifye li epi fè chanjman jan sa nesesè, men pou kounye a kite a konsantre sou fè sit nou an pi an sekirite, pa pèmèt itilizatè yo ouvri sesyon an ak yon non itilizatè ak paskod, ak evantyèlman menm enfòmasyon ki pi enpòtan ki pral ede kenbe app ou an sekirite ak kont pwòp ou a aksesib sèlman pa ou.
Pou fè sa, nou pral bezwen sèvi ak modèl la itilizatè bati nan Django. Modèl la itilizatè se yon modèl baz done, tankou pòs nou an, ki ka rann yo louvri sesyon yon itilizatè nan sit entènèt la. Nan lavni, anvan nou deplwaye sit la sou entènèt la, nou pral pwolonje modèl sa a ak lòt modèl atribiye nan li, ak bati mezi sekirite adisyonèl pou login la ki rezistan a èskrokri. Nou pral kòmanse lè l sèvi avèk kèk bati nan fòm login ki Django bay. Premyèman, kite a kreye yon nouvo app ke nou pral itilize yo rann modèl yo ak opinyon pou paj la login debaz yo. Nou pral kreye tou lòt apps ki reprezante defi yo login kontinye yo nan lòd yo sekirite app a, ki gen ladan yon Pincode, rekonesans vizaj, tou pre kominikasyon jaden, aparèy ekstèn, otantifikasyon faktè milti, ak rekonesans anprent.
Nou deja pale sou kòmanse yon app. Soti nan anyè nou an, andedan anviwònman an vityèl, pase manager.py agiman sa yo
python manage.py startapp users
Koulye a, nou ta dwe gen yon anyè pou nouvo app a. Ann kòmanse pa kreye yon View nan ki anyè ki koresponn ak login nan itilizatè. Django te bati nan opinyon pou koneksyon itilizatè, men sa yo pa pral apwopriye pou nou paske nou bezwen yon View koutim, ki se de preferans fè ak yon definisyon.
Nan wè sa a, nou pral kòmanse pa tcheke pou yon demann pòs, pas demand.post nan yon loginform enpòte soti nan Django, otantifye kont la itilizatè, ak ouvri sesyon an nan itilizatè a anvan yo redireksyon yo nan app manje nou yo.
Nan itilizatè/views.py, ajoute kòd sa a
username = request.POST['username'] # Jwenn non itilizatè a ak modpas nan demann lan pòs
password = request.POST['password'] # Otantifye itilizatè a
Sa a se tout sa ou bezwen pou yon View login de baz yo. Koulye a, kite a kreye yon fòm pou gade nan pa pwolonje modèl la baz. Nou pral kòmanse pa kreye yon anyè nouvo pou modèl nan katab la itilizatè.
mkdir users/templates
mkdir users/templates/users
Koulye a, nou ta dwe kapab edite itilizatè/modèl/itilizatè/login.html. Pandan ke nou ap nan li, nou pral kreye yon modèl yo ki pèmèt itilizatè a enskri tou.
nano users/templates/users/login.html
Kounye a, nan modèl la,
Sa a se Basics yo nan yon modèl login. Li nan reyèlman jis tankou modèl la lòt nan estrikti, men li sanble yon ti jan diferan lè li nan rann. Nou ka kopye kòd sa a yo bati yon lòt modèl trè menm jan yo rele Register.html, kote nou pral chanje Libellés a epi sèvi ak yon nouvo fòm nou bati. Ann fè modèl la an premye. Edit itilizatè/modèl/itilizatè/register.html epi ajoute kòd sa a:
Koulye a, kite a bati yon fòm pou enskripsyon itilizatè nou yo ak sèk tounen nan opinyon yo anvan nou ajou koneksyon itilizatè nou an ak yon modèl. Nou pral fè fòm sa a debaz yo kòmanse ak, men enkòpore plis detay ak karakteristik sekirite tankou akò ak captcha nan lavni. Edit fòm yo ak nano itilizatè/fòm.py, epi ajoute kòd sa a.
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']
Se konsa, nou gen yon lòt fòm isit la, ki travay san patipri tou senpleman. Li se yon fòm enskri itilizatè ak yon non itilizatè, imèl ak modpas, kòm byen ke yon jaden konfime modpas. Remake byen ke fòm sa a pa pwolonje fòm regilye yo.Form klas la, li nan yon fòm modèl ki vle di li gen yon meta. Yon jaden defini jis menm bagay la tou, ak meta klas la defini modèl la fòm nan koresponn ak rès la nan enfòmasyon ki pral ekri nan fòm lan. Pifò nan sa a deja egziste nan Django a bati nan userCreationForm, se konsa nou pral sèvi ak sa kòm baz la pou klas la (pase nan parantèz la).
Next, nou pral egzaminen gade nan yo enskri yon itilizatè, kounye a ke nou gen yon fòm ak yon modèl. Sa a se yon modèl, jis tankou yon sèl la nan gade nan pòs nouvo. Edit itilizatè/views.py epi ajoute kòd sa a:
# ... enpòtasyon
Sa a se tout sa nou bezwen jwenn yon itilizatè ki anrejistre, men nou ta dwe gen plis enfòmasyon. Nou vle konnen tan an itilizatè a ki anrejistre, ki lè yo te dènye sou sit la, kèk enfòmasyon sou yo, tankou yon biyografi, timezone, elatriye Epitou, nou pral bezwen mete ajou modèl manje nou an, afiche, nan kont pou modèl la itilizatè ak posts atribi nan chak itilizatè. Yo nan lòd yo fè sa, nou pral mete ajou modèl yo.py nan tou de apps. Ann kòmanse pa koreksyon modèl la manje. Li ta dwe gade tankou sa a kounye a:
from django.db import models # ... enpòtasyon
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Ajoute nan liy sa a
Prete atansyon sou dezyèm liy lan ki te ajoute nan dosye a. Sa a se yon kle etranje, ki pral atribi chak pòs nan yon itilizatè sèl pou chak pòs, pou nou ka asire w ke nou sove posts yo sou yon itilizatè-chak-itilizatè baz ak pa gen okenn pòs ka fèt san yo pa atribiye li nan yon itilizatè. Nou defini kle sa a etranje ak klas la li reprezante, yon agiman efase asire posts yo efase ak itilizatè yo, nil ak agiman vid a asire w ke nou ka retire itilizatè a si sa nesesè, ak akomode pou mank nan yon itilizatè sou posts nou deja kreye, ak yon non ki gen rapò, ki nou ka itilize pou fè referans a objè yo Post itilizatè a kreye. Non sa a ki gen rapò, kontrèman ak post.Author, otè a nan Post la, ban nou itilizatè ki afiche pòs nan tèt li. Nou kapab kounye a jwenn posts yo yon itilizatè ki fèt pa kouri user.posts.all (), oswa author.poss.all ().
Koulye a, kite a fè koneksyon nou an pi rezistan. Nou ka deja fè sit nou an anpil mwens vilnerab a èskrokri pa senpleman to limite kantite fwa nou pral pèmèt yon login nan sit la, sa a se byen fasil. Se pou nou tou kòmanse magazen kèk enfòmasyon sou chak itilizatè anvan jan nou kontinye devlope app nou an. Korije Itilizatè/Models.py, ajoute kòd sa a.
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='')
Remake byen ke modèl sa a se jistis menm jan ak modèl la pòs. Nou gen yon enpòte adisyonèl, timezone, ki pral pèmèt nou mete défaut sou jaden yo DateTime, epi nou menm tou nou gen yon karaktè ak textfield tankou pòs la. Sèvi ak tout sa yo timestamps ede nou sekirite sit la ak konprann sèvi ak li yo, ak jaden yo tèks kite nou rann enfòmasyon sou chak itilizatè, oswa otè, sou sit entènèt la. OneToonefield a ta dwe sèlman konsiderasyon an minè, li konpòte li egzakteman menm jan ak yon foreginkey men ak sèlman yon sèl pou chak modèl ki vin apre. Fason sa a, itilizatè a sèlman gen yon sèl pwofil, pandan ke yo ka gen anpil posts.
Koulye a, kite a amelyore login nou yo ak enskri opinyon kont pou pwofil la. Premyèman, edit itilizatè/views.py ak konsantre sou gade nan enskri:
# ... enpòtasyon
Profile.objects.create(user=user) # Asire w ke ou ajoute liy sa a, yo kreye yon pwofil pou itilizatè a
Sa a tou senpleman kreye yon pwofil pou itilizatè a, san yo pa ranpli nan nenpòt nan enfòmasyon an. Koulye a, nou vle asire w ke kont lan itilizatè pa ka louvri sesyon an twò souvan, oswa omwen modpas pa ka eseye twò souvan, kidonk kite a mete ajou gade nan login.
# ... enpòtasyon
if user and user.profile.can_login < timezone.now(): # Remake byen ke nou kounye a tcheke si itilizatè a ka ouvri sesyon an
else: # Si login la pa te reyisi,
user = User.objects.filter(username=username).first() # Sa a se pati a kote nou mete ajou pwofil la itilizatè
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Se konsa, yo pa ka ouvri sesyon an ankò pou kèk segond
Sa a se fondamantal debaz nan sekirite. Asire w ke sit la se pa vilnerab a yon moun tou senpleman ap eseye tout konbinezon modpas posib, oswa menm yon kèk nan yo an menm tan an. Sa a pa pral fwistre nan itilizatè a òdinè ki konnen paskod yo ak jis mòso bwa nan sou yon aparèy kèk, men li pral kenbe anpil robo èskrokri soti nan app a. Remake byen ke nou te ajoute yon deklarasyon SI ak yon varyab, can_login, ki ta dwe yon tan nan tan lontan an, epi mete l 'ak chak login san siksè lè l sèvi avèk non itilizatè a menm. Fason sa a, yon itilizatè move pa yo pral kapab devine yon modpas nenpòt kote tou pre kòm byen vit. Nimewo a nan segonn nan datetime.timedelta a () ka mete ajou tou, ak sit entènèt la pral gen plis fleksib ankò yon ti kras mwens ka itilize ak plis segonn. Mwen rekòmande 15 yo kòmanse avèk yo.
Sonje byen, nou bati yon script backup pou konsève pou travay nou an, kidonk kite a ale pi devan epi tounen moute sa nou gen twò lwen asire w ke nou gen tout bagay sove. Kouri lòd la:
sudo backup
Yon fwa ankò, sa a pral sove travay ou twò lwen. Mwen rekòmande kouri sovgad souvan pou konsève pou travay ou, epi ou ta ka menm vle kouri yon travay backup otomatikman. Ou ka fè sa lè l sèvi avèk yon sèvis piblik UNIX yo rele Cron. Pou aktive sèvis piblik sa a, kouri lòd sa a ak antre nan modpas ou:
sudo crontab -e
Si ou pa te deja chwazi Opsyon 1 pou Nano, editè a tèks ou ta dwe deja abitye avèk, ak woulo liv anba a nan dosye a lè l sèvi avèk kle yo flèch. Ajoute liy sa a:
0 * * * * sudo backup
Cron sèvi ak minit nan fòma, èdtan, jou nan mwa, mwa, jou nan semèn, kote yon * oswa yon nimewo reprezante lè yo kouri lòd la. Sèvi ak yon 0 pou minit la ak * pou rès la nan opsyon yo, nou ka kouri yon lòd nan premye minit nan chak èdtan nan kòmansman an nan minit la. Sa a pèmèt nou tounen moute kòd la otomatikman. Tout nan travay Cron a lè egzekite ak sudo kouri kòm rasin, se konsa nou pa pral bezwen tape nan yon modpas chak èdtan.
Pou fè li pi fasil pou fè bak kòd nou an san ou pa itilize yon modpas, kite a enfim modpas la pou lòd backup nou an. Nou pral fè sa pa egzekite lòd sa a ak k ap antre nan yon modpas:
sudo visudo
Koulye a, kite a woulo liv anba a nan dosye a epi ajoute yon lòt liy:
ALL ALL=NOPASSWD: /bin/backup
Sa a pèmèt nou kouri lòd la "backup" kòm nenpòt ki itilizatè, san yo pa yon modpas. Fòma a pou sa a se fasil, jis prefiks liy lan ak "tout tout = nopasswd:/bin/" epi fini ak lòd la, pou egzanp/bin/backup, ki egziste nan/usr/bin/.
Koulye a, kite a kòmanse travay ak imèl. Imèl se reyèlman enpòtan pou sit entènèt, paske li nan yon fason kenbe yon sit entènèt plis sekirite, verifye itilizatè yo se moun ki reyèl, e menm pwodwi mache oswa sèvis nan kliyan yo. Anpil moun ki souvan entènèt la tcheke imèl yo chak jou, epi resevwa tout kalite imèl maketing sou pwodwi ak sèvis yo enterese pous Gen yon opsyon kèk lè li rive pèmèt imèl sou yon sit entènèt Django, epi w ap akeyi yo chwazi kèlkeswa sa ki travay pi byen pou ou.
Premyèman, ou ka peye pou yon sèvis imel ki pral pèmèt ou voye imèl nan domèn ou epi li mande pou kòd minim. Gen anpil sèvis ki ofri sa a, tankou Google espas travay, SendinBlue, Mailgun, ak plis ankò.
Sinon, ou se byen koupe bati pwòp sèvis imel ou nan sèvè ou nan grate. Mwen rekòmande opsyon sa a, menm si li nan plis kòd epi yo ka mande pou hosting espesyal. Ou pa yo pral kapab kòmanse yon sèvè lapòs nan òdinatè lakay ou gen plis chans, kidonk kite a ale pi devan epi egzaminen konfigirasyon an ak kòd yo voye imèl anvan nou kòmanse yon sèvè nan nwaj la ak kreye sèvè pwòp lapòs nou an.
Premyèman, Edit Settings.py ak lòd sa a:
nano app/settings.py
Ki kote app se non an nan app a ou te kreye ak StartApp.
Ajoute liy sa yo:
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)
Asire w ke ou chanje sa yo lè ou pare yo deplwaye app ou, nou pral revize sa a pita. Anviwònman an imèl_address yo ta dwe imèl la ou ta renmen voye soti nan, ak modpas la (imèl_host_password) yo ta dwe mete nan modpas la ou jenere pou sèvè a. Mwen chaje modpas la nan yon dosye config kenbe li soti nan kòd la lè l sèvi avèk lojik ki anba la a, pi wo a liy sa yo nan anviwònman.py:
import os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
Lè sa a, mwen te mete kanpe yon dosye JSON ak konfigirasyon an nan /etc/config.json lè l sèvi avèk Nano jan sa a.
Edite dosye a:
sudo nano /etc/config.json
Ajoute liy sa yo:
{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
Nou pral kontinye edite dosye a konfigirasyon epi ajoute tout modpas yo ak kle nou pral itilize nan app a. Pou kounye a, kite a byen vit egzaminen ki jan yo voye imèl lè l sèvi avèk Python. Premyèman, kite a kreye yon modèl pou yon imèl verifikasyon nou ka voye voye bay itilizatè nou an, epi mete l 'nan anyè a modèl itilizatè. Modèl sa a pral ekri nan HTML.
nano users/templates/users/verification_email.html
Imèl sa a se jistis senp. Li pran yon kontèks nan yon itilizatè, URL nan baz pou sit la, ak yon ID itilizatè ak siy ki yo te itilize verifye imèl itilizatè a. Asire w ke ou defini URL la baz nan anviwònman.py anvan nou ekri kèk kòd Python rann modèl la. Ale pi devan epi ajoute liy sa yo nan app/settings.py, tou pre nan konmansman an.
SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
Evantyèlman, lè sit ou a pare pou entènèt la epi ou deplwaye li, ou pral vle defini domèn ou kòm non an domèn ou achte yo reprezante sit la. Sa a se non an ke ou pral tape nan Navbar la yo nan lòd yo gen aksè a sit ou. Pou kounye a, ou ka kite domèn vid la oswa itilize yon plasman. Ou pral vle tou chanje sit la_name nan yon non ou vle bay sit ou, nan chwazi ou.
Anvan nou voye imèl, kite a kreye yon dèlko siy pou nou ka gen yon siy aktivasyon kont ki pa janm ekspire. Nou ka fè sa pa bati ak enpòte yon siy aktivasyon kont ki sanble sa ki annapre yo. Edit dosye a:
nano users/tokens.py
Ajoute kòd sa a:
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()
Sa a dèlko debaz siy jenere yon siy nou ka voye voye itilizatè a nan yon URL ak itilizatè a ka itilize yo verifye imèl yo ak aktive kont yo.
Apre sa, kite a wè ki jan yo voye yon imèl. Sèvi ak Nano, edit itilizatè/imèl.py.
nano users/email.py
Voye verifikasyon HTML imèl la pral sanble tankou sa a:
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)
Sa a se jistis senp. Nou enpòte fonksyon yo nou bezwen voye imèl la, rann imèl la ak modèl, ak anviwònman nou an, ak Lè sa a, nou defini imèl la pa non an modèl epi voye li nan itilizatè a lè l sèvi avèk yon fonksyon. Ou ap remake nou pa te defini fonksyon an voye lapòs la, send_html_email, ankò, kidonk kite a ekri sa a anba a kòd la nou deja ajoute nan itilizatè/imèl.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()
Sa a se yon ti jan pi konplèks, epi nou pa pare yo kouri tout nan kòd sa a ankò. Remake nou ap defini yon unsub_link, lyen ki itilizatè a ka itilize yo koupe abònman nan Imèl nou an. Sa a enpòtan, paske itilizatè yo ap bezwen pou kapab patisipe soti nan Imèl nou yo sof si yo vle wè yo, nan nenpòt ki lè. Nou menm tou nou ajoute yon altènatif tèks nan mesaj nou an, ki se mesaj la HTML wete nan Tags HTML. Anfen, nou tcheke si imèl la voye, epi si li pa t ', nou make nan pwofil itilizatè a ke imèl yo pa valab.
Se pou nou deplase tounen nan modèl yo itilizatè pou nou ka fè sa a tout travay. Nou bezwen defini yon fonksyon pou jenere yon lyen pou koupe abònman, epi defini yon jaden Boolean pou make ke imèl itilizatè a pa valab.
Premyèman, ajoute enpòtasyon sa yo nan tèt itilizatè/modèl.py
nano users/models.py
# ...
Next, kite a ajoute fonksyon nan modèl la itilizatè yo fè siy la epi tcheke siy la itilize yo aktive imèl la, kòm byen ke jaden an pou konsève pou si itilizatè a se avèk siksè resevwa lapòs yo. Nan itilizatè/modèl.py ankò, ajoute kòd ki anba la a nan fen modèl la (kòd dantèl)
# ...
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Valab pou 30 jou
Sa a se jistis senp, nou itilize yon timestampsigner, ki se yon zouti debaz chifreman, yo kreye yon siy ki pral ekspire apre yon sèten kantite tan, epi nou menm tou nou itilize yon lòt fonksyon yo tcheke si li valab. Nou itilize marqueur sa yo de fwa, yon fwa yo verifye imèl la, ak yon fwa pou yon lyen koupe abònman.
Kounye a ke nou gen sa yo, dènye a nan travay la nou pral bezwen fè se nan opinyon yo. Nan itilizatè/views.py, kite a ajoute opinyon yo verifye adrès imel la, ak koupe abònman.
nano users/views.py
Premyèman, ajoute enpòtasyon sa yo. Mwen jete nan yon kèk siplemantè pou nou pa pral gen enpòte plis atik ankò pita.
from .email import send_verification_email # Asire w ke ou enpòte imèl la verifikasyon voye fonksyon
Ou ka deja gen kèk nan sa yo enpòtasyon, men li pa fè mal yo repete yo. Ou pral bezwen enpòte imèl la verifikasyon voye fonksyon, osi byen ke kont_aktivasyon_token soti nan users.tokens, nan mitan lòt enpòtasyon yo.
Koulye a, nan pati anba a nan dosye a, ajoute kòd sa a:
# unsubscribe yo
# Sinon redireksyon nan paj Login
# SendWelcomeMail (demann, itilizatè)
Sa a se yon anpil nan kòd. Ann kraze li. Premye fonksyon an, pwòp ak senp, unsubscribes itilizatè a soti nan lis la adrès. Dezyèm fonksyon an aktive imèl yo, epi ou pral remake mwen te ajoute yon fonksyon kòmante, SendWelcomeMail. Ou se Byenveni nan sèvi ak yon modèl imèl ak definisyon fonksyon yo voye yon imèl akeyi, mwen jis pa gen ankò. Fonksyon ki sot pase a mwen jete nan enpòtan, paske Imèl aktivasyon ekspire. Se poutèt sa, nou pral bezwen ranvwaye imèl la deklanchman kèk nan tan an. Nou ka itilize yon fòm debaz pou sa a, epi rele fonksyon an pou voye imèl verifikasyon an. Anvan nou fè sa, kite a asire w ke li ap resevwa voye an plas an premye, pa ajoute yon apèl fonksyon nan gade nan enskri. Ajoute liy sa a jis anvan redireksyon an nan gade nan enskri, Def enskri, nan itilizatè/views.py.
nano users/views.py
# ... (apre) DEF enskri (demann):
# ... (anvan) redireksyon (
Ou pa bezwen ajoute premye liy yo ak dènye nan ki brib kòd, jis asire w ke gade nan enskri voye imèl la verifikasyon bay itilizatè a. Li ta dwe gade tankou sa a:
# ... enpòtasyon
send_verification_email(user) # Asire w ke ou ajoute liy sa a!
Koulye a, nou pral bezwen ajoute yon fòm ranvwaye imèl la aktivasyon. Nan itilizatè/fòm.py, ajoute fòm sa a:
# ... (Enpòtasyon)
Nou pral bezwen tou yon modèl ki koresponn a sa a ranvèse fòm aktivasyon imel. Ann ajoute modèl sa a. Edit dosye a:
nano users/templates/users/resend_activation.html
Apre sa, ajoute kòd sa a nan dosye a.
Wou, sa se anpil! Koulye a, lè nou deplwaye kòd la nan sèvè nou an, nou yo pral kapab voye imèl HTML ak aktive kont itilizatè ak yon klike nan imèl la. Nou menm tou nou ta ka vle voye yon imèl senp akeyi, kidonk kite a wè ki jan fè sa. Retounen nan itilizatè/imèl.py, ajoute kòd sa a:
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)
Epitou, nou pral bezwen yon modèl pou rann tout enfòmasyon sa yo. Sou sit entènèt mwen an, modèl la sanble anba a, men ou se Byenveni nan fòma li sepandan ou renmen.
Remake byen ke nou pa gen fèmen kò oswa HTML Tags, paske nou ajoute sa yo nan lè nou ajoute HTML lyen an unsubscribe. Sa yo enpòtan, men nou pa vle defini yo de fwa.
Se konsa, sa ki nan pwochen? Nou te vini yon fason lontan. Vrèman, nou ta dwe pare pou deplwaye sit la nan yon sèvè. Nou ka ajoute dekoratè a @login_required epi fè opinyon nou an sekirite, pran enskripsyon itilizatè, voye imèl konfòme, ak enfòmasyon kachèt, ki se baz la nan sa ki yon sit entènèt bezwen fè yo rete enpòtan. Nou pral ajoute yon kèk karakteristik plis itil, ak Lè sa a, bati yon baz pou deplwaye kòd nou yo nan yon sèvè aleka, mete kanpe yon sèvè lapòs, konfigirasyon domèn, ak filtè fè sit nou an sekirite ak apwopriye.
Nou pral bezwen tou yon modpas Reyajiste View, kidonk kite a ajoute ke nan reyèlman rapid. Django a bati nan modpas Reyajiste View kase nan kèk fonksyon, men nou pral gade nan ki jan yo ekri pwòp vi nou an, modèl imèl, fòm, ak modèl URL. Men sa ki wè a sanble, nan itilizatè/views.py
# ... enpòtasyon
Fòm sa a bati nan Django, men nou pral bezwen yon modèl pou konfime modpas Reyajiste, itilizatè/modèl/itilizatè/password_reset_confirm.html
Nou menm tou nou gen yon modèl yo voye yon imèl Reyajiste modpas, ak yon fòm ki senp, nan itilizatè/modèl/itilizatè/password_reset.html
Modèl la pou imèl nan tèt li se senp, li se yon dosye debaz HTML rann yon lyen nan Reyajiste modpas la, nan itilizatè/modèl/itilizatè/password_reset_email.html. Django pral otomatikman entèprete dosye sa a.
Nou pral bezwen tou de plis modèl. Premye a se konfime ke te imèl la te voye. Pwen de vi pou sa yo deja nan Django, se konsa nou jis bezwen adrese yo nan URL yo.Py. Modèl sa a sitiye nan itilizatè/modèl/itilizatè/password_reset_done.html
Epi anfen, pou konfime ke reset modpas la konplè, itilizatè/modèl/itilizatè/password_reset_complete.html
Koulye a, nou bezwen modèl URL pou opinyon sa yo. Nan itilizatè/URLS.py, ajoute modèl sa yo URL:
# ... URL anvan isit la
Kat modèl, sa a, se yon anpil! Men koulye a, nou ka asire w ke ou kapab Reyajiste modpas itilizatè a nenpòt ki lè nou bezwen, tout soti nan navigatè a entènèt.
Mwen konprann sa a se yon anpil nan kòd. Si li sanble yon ti kras sou tèt ou, sa a, se ok. Ou pral amelyore, konpreyansyon ou pral amelyore, epi ou pral vin pi plis konpetan ak kòd trè byento. Si ou totalman pèdi, mwen rekòmande vini tounen nan lojisyèl sa a pita sou apre ou fin travay sou yon pwòp tèt ou-ritm aprann kòd kou sou entènèt. Sa yo anjeneral gratis jwenn te kòmanse, epi yo pral gide ou nan tout bagay ou bezwen gen siksè lè ou tounen vin jwenn pwojè sa a. Si ou santi ou tankou ou yo pare yo kontinye, li sou, pwochen, nou pral kouvri deplwaye kòd ou a nan yon sèvè aleka ak mete kanpe yon sèvè lapòs, kòm byen ke otomatize deplwaman ou lè l sèvi avèk bach pou ou ka toujou mete kanpe yon nouvo pwojè ak yon kèk kòmandman senp.
Dènye bagay nou bezwen fè anvan deplwaye nan yon sèvè aleka se fè sit nou an yon ti kras plis sekirite. Ou ap remake ke gade nan login sèlman pran yon non itilizatè ak modpas, ak gen nan pa gen otantifikasyon milti faktè oswa yon sèl kòd tan. Sa a se yon ranje fasil, epi ak kòd la menm, nou ka fè sit nou an voye mesaj tèks e menm dwe reponn a mesaj tèks voye nan sèvè a. Pou kòmanse, nou pral tounen nan modèl yo itilizatè epi ajoute yon siyatè timestamp ki pral reprezante chak login. Nou pral ajoute tou yon inik, wotasyon idantifyan nan modèl la itilizatè ki pral itilize yo ajoute plis sekirite nan login nou an. Korije modèl itilizatè yo, itilizatè/modèl.py, ajoute kòd sa a:
# Asire w ke ou enpòte UUID a, Timestamp Signer ak URL dèlko (ranvèse)
# Ajoute kòd sa a isit la
# Epi ajoute fonksyon sa a
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Valab pou 3 mn
Asire w ke itilizatè ou yo/modèl.py sanble tankou sa a, san konte kòmantè yo (kòd sou liy yo ak #). Kraze sa a desann, li nan senp. Nou gen yon enpòtasyon kèk, yon timestampsigner ki se yon sèvis piblik kriptografik ki ka jenere yon kòd ki an sekirite epi verifye li yo nan lòd yo asire w ke li valab, sèlman yo te itilize yon fwa, epi yo pa pi gran pase yon sèten kantite segonn. Nou menm tou nou itilize yon UUID, ki se yon idantifyan inik ki idantifye itilizatè nou an nan siyen an nan siy la, ak nan URL la kote se siy la voye bay itilizatè a. Nou pral sèvi ak sa a chifreman debaz yo bati yon View otantifikasyon de faktè. Anvan nou fè nenpòt lòt bagay, kite a kouri migrasyon yo pou modèl itilizatè nou yo mete ajou. Nan anyè a ak Manage.py, kouri kòmandman sa yo fè ak ranpli migrasyon yo.
source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
Sa a enpòtan paske chak fwa nou fè chanjman nan modèl yo, nou pral bezwen yo kreye tab yo epi mete ajou baz done a ak défaut anvan nou ka aktyèlman itilize modèl yo.
Next, kite a enprovize gade login nou yo redireksyon nan yon View otantifikasyon segondè. Nan itilizatè/views.py, retire fonksyon an login ak redireksyon nan URL la nou jis pwodwi nan modèl yo itilizatè.
# ... enpòtasyon
if user and user.profile.can_login < timezone.now(): # Remake byen ke nou kounye a tcheke si itilizatè a ka ouvri sesyon an
# Retire fonksyon auth_login ki te isit la
return redirect(user.profile.create_auth_url()) # Remake nou redireksyon nan yon nouvo URL isit la
else: # Si itilizatè a se pa lè l sèvi avèk milti-faktè otantifikasyon, jis louvri sesyon yo nan.
else: # Si login la pa te reyisi,
user = User.objects.filter(username=username).first() # Sa a se pati a kote nou mete ajou pwofil la itilizatè
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Se konsa, yo pa ka ouvri sesyon an ankò pou kèk segond
Se konsa, sa a se trè senp, nou kounye a gen yon fason yo redireksyon nan wè nan otantifikasyon de faktè lè nou kreye li. Nou menm tou nou gen yon fallback nan ka itilizatè a pa te ajoute yon nimewo telefòn. Nou pral ajoute yon View debaz yo ajoute yon nimewo telefòn byento ak ouvri sesyon an ak yon mesaj tèks byento.
Premyèman, nou bezwen yon fason fasil pou voye yon mesaj tèks nan kòd nou an. Pou fè sa, nou ka chwazi nan yon kantite APIs, men youn nan pi fasil nan opinyon mwen se Twilio. Yo ofri tou bon prix pou pi piti pwojè, osi byen ke rabè esansyèl. Kreye yon kont sou Twilio.com, ranpli nan kèk detay sou pwojè ou a, achte yon nimewo telefòn, ak kopye kle API ou nan anviwònman ou.py. Lè sa a, ajoute kòd sa a anba yon nouvo dosye, itilizatè/sms.py.
nano users/sms.py
# Enpòte tout pakè ki nesesè yo
# Kòd sa a voye tèks la ak Twilio
# Yon fonksyon asistan pou jwenn yon nimewo ak anpil chif
# Voye tèks la pou verifye itilizatè a
# Voye yon itilizatè nenpòt tèks ak fonksyon sa a
# Valide kòd la ak fonksyon sa a
# Valide tan an
Asire w ke ou chanje anviwònman ou kòmsadwa, ajoute liy sa yo ak kle ou:
# Asire w ke ou kopye sa yo soti nan tablodbò Twilio ou
AUTH_VALID_MINUTES = 3 # Nimewo a nan minit paj la TFA se aktif yon fwa enstansye
Premyèman, nou pral bezwen fòm pou de opinyon otantifikasyon nou an. Korije itilizatè/fòm.py, ajoute kòd sa a.
# ... enpòtasyon
# Yon fòm pou antre nan nimewo telefòn nou an
# Yon fòm pou otantifye
Next, kite a kreye opinyon yo nan itilizatè/views.py
# ... enpòtasyon
Nou pral bezwen tou modèl pou tou de nan opinyon sa yo. Se pou nou ajoute modèl la MFA premye.
nano users/templates/users/mfa.html
Ajoute kòd sa a HTML nan modèl la
Sa a se trè pwòp tèt ou eksplikasyon. Fòm lan voye swa yon kòd oswa yon kòd vid, epi ou pral avi nan gade nan nou voye kòd la si nou resevwa yon kòd vid. Lè sa a, nou jis gen de bouton soumèt, ak fason sa a nou ka voye voye kòd la ak swa bouton. Next, nou pral ajoute yon fòm senp yo ajoute yon nimewo telefòn.
nano users/templates/users/mfa_onboarding.html
Ajoute HTML sa a:
Fòm sa a se yon anpil pi senp, li jis rann fòm nan nimewo telefòn nou te kreye epi li pèmèt itilizatè a ajoute yon nimewo telefòn.
Sa sanble vrèman bon! Osi lontan ke tout bagay se byen mete kanpe, nou ta dwe kapab voye mesaj, ak louvri sesyon itilizatè a nan ak nimewo telefòn yo le pli vit ke nou ajoute modèl yo URL. Bagay ki sot pase a nou bezwen yo mete kanpe se yon View pwofil pou nou ka asire w ke itilizatè a ka chanje nimewo telefòn yo san yo pa louvri sesyon an. Epitou, evantyèlman nou pral vle ajoute yon "sispann kite fimen" opsyon, se konsa itilizatè a ka tèks "sispann" yo patisipe soti nan mesaj tèks nan lavni.
Se pou nou ajoute yon View pwofil itilizatè yo/views.py. View sa a pral mete ajou biyo itilizatè a, imèl, non itilizatè, ak nimewo telefòn, osi byen ke pèmèt nou pèmèt otantifikasyon milti faktè. Premyèman, nou pral bezwen de plis fòm nan itilizatè/fòm.py
# ... enpòtasyon
Next, nou ka kreye yon View yo sèvi ak tou de nan fòm sa yo. Edit itilizatè/views.py epi ajoute nan gade nan.
# Ajoute enpòtasyon sa yo
Nou pral bezwen tou yon modèl pou sa a wè.
nano users/templates/users/profile.html
Ou ap remake sa a se yon fòm jistis senp, men gen kèk JavaScript nan li ki otomatikman posts sa ki nan fòm nan jan yo mete ajou. Sa a se itil gen, kidonk, ou yo kapab fè edits san yo pa gen peze soumèt chak fwa.
Apre sa, nou bezwen URL ki reprezante tout opinyon sa yo nan itilizatè URL yo. Edit Itilizatè yo/URLS.py epi ajoute kòd sa a:
# ... anvan kòd, enpòtasyon yo
# ... modèl URL nou te deja antre, ajoute pwochen twa liy yo
Kounye a se yon bon moman pou teste pwojè nou an. Men, anvan, kite a kouri yon lòt backup.
backup
Epi kouri sèvè a. Anvan nou deplwaye nan yon sèvè Linux, li nan yon bon lide yo ki ap pèmèt de otantifikasyon faktè sou kont lan. Nou pral fè sa a ale nan URL pwofil nou an,/itilizatè/pwofil/, ak tcheke ti bwat la yo ki ap pèmèt otantifikasyon apre k ap antre nan nimewo telefòn nou an, ak Lè sa a, soumèt fòm lan.
python manage.py runserver localhost:8000
Vizite Paj Web la pa ale nan navigatè entènèt ou an, mwen lè l sèvi avèk Google Chrome nan egzanp sa a, ak k ap antre nan URL la https: // localhost: 8000/kont/pwofil/
Ou pral kapab ouvri sesyon an si sa nesesè ak pèmèt de otantifikasyon faktè.
Pwojè sa a bezwen yon sèvè pou kouri sou li ka vrèman voye lapòs. Men, anvan, nou bezwen yon fason yo wè erè. Ou ap remake ke si ou kouri sèvè a nan mòd debug, ak anviwònman.Debug egal a vre, sèvè a montre erè otomatikman. Pou montre erè san yo pa itilize mòd debug, ki se danjere sou yon sèvè pwodiksyon, nou ta dwe ajoute yon View pou li. Erè ki pi enpòtan nou bezwen pou kapab okipe yo se:
Erè 500 - Yon pwoblèm ak kòd nou an Erè 404 - Yon paj ki pa te jwenn (Broken URL) Erè 403 - Yon pèmisyon refize erè
Se pou nou ajoute yon nouvo app okipe erè sa yo, yo rele erè.
python manage.py startapp errors
Ajoute sa a nan anviwònman yo.py jan nou te fè anvan, nan anviwònman an installed_apps, epi kòmanse pa ajoute referans a kèk opinyon nan app/URLs.py, kote app se non an nan pwojè Django ou.
handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
Sa a se tout sa nou bezwen san konte opinyon erè, modèl ak yon ti kras nan middleware. Ann defini sa yo tankou sa:
# Kreye opinyon ou isit la.
Next, kite a defini middleware a okipe erè sa yo. Nou pral fè sa pa premye ajoute nan middleware_classes nan anviwònman.py, ak non an nan middleware nou an.
# ... anvan middleware
Apre sa, kite a ajoute middleware la.
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.')
Nou ajoute yon fonksyon yo ka resevwa eksepsyon aktyèl la lè l sèvi avèk yon lokal fil, ki ede nou trase nenpòt ki erè nan kòd nou an. An tèm de modèl, nou sèlman bezwen yon sèl, paske nou dinamik defini tit la nan gade nan. Modèl la jis bezwen rann tit la ak "tras", traceback erè nou yo soti nan kontèks la.
nano errors/templates/errors/error.html
Sa a se modèl ki pi senp nou an ankò, men sa a ki jan fasil li se yo wè erè yo nan pwojè nou an. Next, kite a enfim debug nan anviwònman.
nano app/settings.py
Jwenn liy sa a kote li mete vre, epi chanje li nan fo
DEBUG = False
Ale pi devan epi backup app a kounye a. Nou pare pou deplwaye nan yon sèvè Linux aleka, epi kontinye ajoute karakteristik nan la.
sudo backup
Anvan nou afiche kòd sa a nan yon sèvè, nou ta dwe konsidere ke ka gen kèk pwoblèm ak kòd la. Tou depan de ka a, sit ki aksepte enfòmasyon ki afiche sou yo pral gen pwoblèm ak Spam ke yo te afiche ak difikilte pou retire Spam la. Sa a pa ta dwe rive imedyatman, men si li k ap pase, nou pral pita egzaminen ki jan yo otomatikman modere Spam sou sit la epi fè li pi di pou robo jwenn aksè nan sit la, ansanm ak ki jan yo désactiver kont itilizatè, ak verifye idantite yon itilizatè a ak yon eskanè nan ID yo oswa yon eskanè byometrik, tankou yon rekonesans anprent oswa facial.
Gade nan egzanp lan otantifikasyon faktè milti nou egzamine, nan pwodiksyon, bagay sa yo ka diferan. Remake ki jan nou se pousantaj limite koneksyon, ak ekspire marqueur. Si robo yo gen aksè nan yon sit, de otantifikasyon faktè ka pi difisil menm jan yo ka antre nan kòd an menm tan an itilizatè a se. Pou konbat sa a, kite a sèvi ak yon modèl nan modèl yo itilizatè, deklare ki jan nou kominike avèk sit la lè nou otantifye lè l sèvi avèk otantifikasyon milti faktè ak yon nimewo telefòn. Nou pral ajoute tou yon opsyon pou otantifye ak imèl. Kòmanse pa koreksyon modèl yo itilizatè ak Nano.
nano users/models.py
Sa a se sa ki modèl la nou ap ajoute ta dwe sanble. Nou pa bezwen okenn metòd, jis varyab nan magazen yon ID, itilizatè a, timestamp a, ekspirasyon, longè ak tantativ kont nenpòt otantifikasyon faktè milti (yon kòd tankou 123456 voye nan yon telefòn oswa imèl).
# Yon siy debaz itilize yo ouvri sesyon an nan sit entènèt la
Se pou nou tou ajoute yon privilèj nan itilizatè nou an, epi nou pral mete l 'manyèlman pou kounye a, anvan evantyèlman migrasyon nan anwole itilizatè privilejye otomatikman. Nan modèl itilizatè yo, ajoute liy sa a nan pwofil la:
vendor = models.BooleanField(default=False)
Menm jan ak nenpòt ki chanjman nan baz done a, nou bezwen fè migrasyon ak emigre baz done a nenpòt ki lè nou edite yon dosye Models.py nan Django. Sonje byen, fè sa nou itilize sous premye (si li pa te itilize deja depi tèminal la te louvri) ak Lè sa a, Python Manage.py fè migrasyon yo ak emigre.
cd project-directory-you-named # (si sa nesesè)
Pou kounye a, ou ka angaje nenpòt ki kont ou te kreye kòm fournisseurs lè l sèvi avèk koki a.
python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Koulye a, kite a evolye View Multi Otantifikasyon Faktè nou yo sèvi ak sa a siy. Premyèman, nou bezwen modifye sèvis piblik MFA nou yo. Sèvi ak 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
# Otantifye itilizatè a lè l sèvi avèk imèl yo oswa nimewo telefòn yo
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Filtre siy la pa valè a pase nan URL la (yon 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)) # Si sesyon sa a pa te kreye, kreye li
user = User.objects.filter(id=token.user.id).first() # Jwenn itilizatè a soti nan siy la
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Si yo deja otantifye, konekte yo nan
if not user: raise PermissionDenied() # Refize si pa gen okenn itilizatè yo te jwenn
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Tcheke siy otè a
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Log nan itilizatè a si yo pa deja louvri sesyon an
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Mete yon ekspirasyon sou otantifikasyon milti faktè yo
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Redireksyon itilizatè a nan pwochen paj la
if not user.profile.mfa_enabled: # Tcheke si MFA pèmèt
if not check_verification_time(user, token): # Tcheke tan an
user.profile.mfa_enabled = False # Klè nimewo telefòn lan
user.profile.enable_two_factor_authentication = True # Pèmèt MFA
user.profile.phone_number = '+1' # Enfim nimewo telefòn lan
user.profile.save() # Sove pwofil la
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Log itilizatè a nan si MFA yo pa pèmèt
if request.method == 'POST' and not fraud_detect(request, True): # Si demann lan se yon demann pòs
form = TfaForm(request.POST) # Enstansye fòm lan
code = str(form.data.get('code', None)) # Jwenn Kòd la
if code and code != '' and code != None: # Asire w ke li pa vid
token_validated = user.profile.check_auth_token(usertoken) # Tcheke siy otè a
is_verified = check_verification_code(user, token, code) # Tcheke kòd la
if token_validated: # Si tout bagay
if is_verified: # Se nan lòd
user.profile.mfa_enabled = True # Pèmèt MFA (si se pa deja pèmèt)
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Log in nan itilizatè a
for key, value in request.GET.items(): # Bati yon queryString pou pwochen paramèt la (si genyen)
return HttpResponseRedirect(next) # Redireksyon
elif not token_validated: # Si siy la te valab
if p.mfa_attempts > 3: # Si te gen twòp tantativ
if form.data.get('send_email', False): # Voye imèl la (oswa tèks)
# Rann fòm lan (pou jwenn demann)
Lè nou ap ajoute nan kòd sa a, asire w ke ou enpòte fonksyon an voye yon imèl. Nan tèt la nan dosye a, opinyon yo itilizatè (ak lòt enpòtasyon), ajoute
from .mfa import send_verification_email as send_mfa_verification_email
Koulye a, nou bezwen ekri ki fonksyon anvan nenpòt nan sa a pral travay. Li ta dwe pwolonje fonksyon voye imel nou an, epi tou senpleman voye yon imèl bay itilizatè a ak kòd la verifikasyon.
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))
Se konsa, sa a tout travay gwo, kounye a nou gen yon sistèm otantifikasyon faktè milti ki depann yon nimewo telefòn oswa imèl nan ouvri sesyon an. Men, nou bezwen tou yon fason yo retire, oswa omwen kache itilizatè ki pa kolabore ak tèm nou yo. Sa yo ta ka spame, robo oswa nenpòt ki moun ki pa vle di byen pou travay nou an. Pran yon gade nan yon View mwen gen pou siveyans itilizatè sou sit entènèt mwen an:
# enpòtasyon
from .tests import is_superuser_or_vendor # Nou pral bezwen kreye tès sa a
# Jwenn lis itilizatè yo
return render(request, 'users/users.html', { # Retounen itilizatè nan yon modèl
Remake ke kòd sa a sèvi ak yon tès, nou pral bezwen deklare tès sa a nan yon tès.py dosye ak enpòte li. Korije Itilizatè yo/Tests.py, kite a kreye tès la.
def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
Sa a se nan konjonksyon avèk itilizatè yo/itilizatè.html modèl, ki sanble yon bagay tankou sa a:
Remake byen ke modèl la gen ladan yon lòt modèl, itilizatè/user.html. Lè w ap itilize yon modèl ki gen yon subtemplate epi yo pa lè l sèvi avèk fin, li yo yon bon lide yo ajoute yon souliye () Anvan non an nan dosye a pou yon ekstansyon pou, yo nan lòd yo fè distenksyon ant modèl.
Remake byen ke sa a se yon anpil nan Jinja, ou ka pa gen tout nan sa yo varyab defini. Men, sa a se sa ki kòd mwen sanble.
<small># {{user.id}} </small>
Nou bezwen tou yon lòt subtemplate, toggle_active.html. Modèl sa a ta dwe yon fòm ki pèmèt nou aktive si yon itilizatè aktif.
Nou pral bezwen tou ajoute yon View nan aktive aktivite itilizatè, ak apwopriye modèl URL. Pandan ke nou se nan li, kite a ajoute yon View efase yon itilizatè nan ka nou bezwen sa.
# Enpòtasyon
success_url = '/' # Redireksyon an sou URL siksè
def test_func(self): # Teste si itilizatè se superuser epi li gen pèmisyon efase
Pandan ke sa a se pratik lè sa nesesè, efase yon itilizatè pa ta dwe nesesè pi fò nan tan an, nou ka jis aktive vizibilite a nan itilizatè ki vizite sit la si nou bezwen rejte yo.
Modèl yo URL nou te ajoute gade tankou sa a. Avèk Nano, edit itilizatè/URLs.py epi ajoute liy sa yo:
nano users/urls.py
Liy yo ta dwe ale nan lis la nan chemen nan opinyon yo itilizatè, anvan fini an "]" men apre kòmansman an "[".
# ...
# ...
Koulye a, asire w ke ou tounen moute sit la pou ou ka telechaje li sou sèvè wèb la nou pral kontinye ap travay sou. Soti nan liy lan lòd,
sudo backup
Koulye a, se sit nou an apiye moute.
Se konsa, kounye a nou gen yon kèk karakteristik plis itil. Men, sa ki sou gwo foto a isit la? Kòd sa a toujou pa aksesib nan entènèt la, nou pa gen okenn sèvè lapòs ankò, epi nou bezwen elaji app nou yo enkli pwosesis verifikasyon konplè kòm byen ke kouman lis ede nou eksplore sit la, ansanm ak pwotokòl sekirite pou otantifye itilizatè privilejye.
Nou pral jwenn tout bagay sa yo. Bagay ki pi enpòtan pou kounye a pral jis ap resevwa kòd sa a sou entènèt, ki nou ka fè ak jis yon liy kèk nan bach sou yon sèvè Ubuntu. Ou pral bezwen lwe yon sèvè pou sa a menm si, sof si ou gen yon sèvè nan kay la ak yon abònman entènèt biznis ki pèmèt ou louvri pò. Mwen pèsonèlman kouri sit entènèt mwen an sou yon HP Z440 ki enstale nan apatman mwen an, men li la anjeneral pi bon mache pou bezwen debaz yo lwe yon sèvè prive vityèl (VPS).
Kenbe nan tèt ou ke kòd la nou ap kouri kounye a se relativman mens, li pral bezwen yo dwe konsève ak amelyore anvan nou yo pare yo sèvi ak sa nou gen yo bati yon pwodwi. Asire w ke ou dwe fè atansyon sa ou fè ak entènèt la, asire w ke si ou deplwaye sit sa a piblikman sou entènèt la sou yon sèvè Linux, ou gen yon plan yo bloke entèraksyon vle ak sit entènèt ou. Sa a gen anpil chans pa pral yon pwoblèm nan premye, men nou pral gade nan yon varyete de solisyon sa yo konbat sa a, ki gen ladan aprantisaj machin, entèlijans atifisyèl ak vizyon òdinatè. Lè li vin yon pwoblèm, gade pi lwen nan tèks sa a pou yon solisyon.
An tèm de lwe yon VPS, gen yon anpil nan kote ou ka ale. Google Cloud gen VPS serveurs, Ionos, Kamatera, Amazon AWS, ak plis founisè ofri solisyon sèvè nwaj ki pral kostim bezwen nou yo.
Ou ap bezwen klike sou fòm yo epi chwazi yon plan pou kòmanse. Ou ka ale ak yon plan debaz ak nenpòt ki founisè, men asire w ke founisè a pèmèt ou louvri pò pò sèvè voye imèl (sa a yo ta dwe pò 587 ak pò 25), kèk founisè bloke pò sa yo. Se konsa, lwen mwen te gen eksperyans nan pi bon ak Ionos ak Kamatera, tou de nan yo pral pèmèt mwen voye imèl san limit ak prix yo se trè bon mache.
Ou pral konekte nan nouvo sèvè ou sou yon pwotokòl ki rele SSH oswa sekirite koki, ki pèmèt ou adistans koòdone ak sèvè a egzakteman tankou òdinatè pèsonèl ou, ki soti nan òdinatè pèsonèl ou. Lè ou mete kanpe sèvè a, founisè a hosting gen anpil chans pral mande w ajoute yon kle SSH, oswa yo pral ba ou yon non itilizatè ak modpas. Kle a SSH se ki jan ou pral ouvri sesyon an nan sèvè a soti nan liy lan lòd edite kòd la. Sèvi ak opsyon ki anba yo SSH-Keygen yo jenere yon kle SSH.
ssh-keygen
Sove dosye a ak recouvrir li si ou bezwen, li bon yo Thorne kle SSH ou si ou pa gen deja. Koulye a, ou ka itilize lòd sa a yo wè kle SSH ou. Ou pral vle kopye li nan sèvè aleka ou pou ou ka itilize li nan legalized.
cat ~/.ssh/id_rsa.pub
Si ou pa t 'kapab wè yon kle SSH lè tape lòd sa a (yon kòd long nan chif ak lèt kòmanse ak "SSH-RSA AAA"), eseye génération yon kle RSA (yo gen plis sekirite, se konsa mwen konseye yo sèvi ak yo.) Kòd sa a pral jenere yon 4096 ti jan RSA kle SSH.
ssh-keygen -t rsa -b 4096
Kreye yon VPS kouri Ubuntu, sepandan ou planifye fè sa. Yon fwa ou te kreye yon VPS pa klike nan fòm yo sou sit entènèt la founisè (kamatatra.com, ionos.com oswa menm jan an), ou pral vle ouvri sesyon an. Pou fè sa, sèvi ak lòd la SSH ak adrès IP ou (adrès la ki sanble xx.xx.xx.xx). Ou pral bezwen tou yo dwe sansib a non itilizatè a default sou sèvè a nou te kreye, pou egzanp, Ubuntu.
ssh ubuntu@XX.XX.XX.XX
Ou ka mande pou yon modpas, si yo mande w pou yon modpas, antre nan li nan. Nou pa pral sèvi ak non itilizatè a default, kidonk kite a kòmanse pa kreye yon nouvo itilizatè ak ajoute yon kle SSH nan kont yo.
Ann kòmanse pa ajoute yon nouvo dosye sshd_config, ki di sèvè a ki jan yo sèvi ak ssh.
nano sshd_config
# Sa a se SSHD sèvè sistèm nan-lajè dosye konfigirasyon. Wè
# sshd_config (5) pou plis enfòmasyon.
# Sa a te sshd konpile ak chemen =/usr/lokal/sbin:/usr/lokal/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/jwèt
# Estrateji a itilize pou opsyon nan default sshd_config la anbake ak
# OpenSSH se presize opsyon ak valè default yo kote
# Posib, men kite yo kòmante. Opsyon uncommented pase sou desizyon an
# valè default.
# Pò 22
# Addressfamily nenpòt ki
# Koute 0.0.0.0
# Koute ::
# Hostkey/etc/ssh/ssh_host_rsa_key
# Hostkey/etc/ssh/ssh_host_ecdsa_key
# Hostkey/etc/ssh/ssh_host_ed25519_key
# Ciphers ak keying
# ReKeylimit default okenn
# Konjeuran
# Syslogfacility Auth
# Info loglevel
# Otantifikasyon:
# LogingRacetime 2m
# Pèmi
# Strictmodes wi
# MaxAuthtries 6
# Maxsessions 10
# Atann .SSH/Authorized_Keys2 yo dwe respekte pa default nan lavni.
# OtorizePrincipalSfile Okenn
# OtorizeKeysCommand okenn
# OtorizeKeysCommanduser pèsonn
# Pou sa a travay ou pral bezwen tou kle lame nan/elatriye/ssh/ssh_ linning_hosts
# Hostbasedauthentication pa gen okenn
# Chanje nan wi si ou pa fè konfyans ~/.ssh/li te ye
# Hostbasedauthentication
# InyoreUsernoNknyhosts pa gen okenn
# Pa li itilizatè a ~/.rhosts ak ~/.shosts dosye
# Inyorehosts wi
# Pou enfim modpas tèks tunneled klè, chanje nan pa gen isit la!
# PermentEmpTyPasswords pa gen okenn
# Chanje nan Wi yo ki ap pèmèt defi-repons modpas (pran prekosyon pwoblèm ak
# kèk modil Pam ak fil)
# Opsyon kerberos
# Kerberosauthentication pa gen okenn
# Kerberosorlocalpasswd wi
# Kerberosticketcleanup wi
# Kerberosgetafstoken non
# Opsyon GSSAPI
# Gssapiauthentication pa gen okenn
# Gssapicleanupcredentials wi
# Gssapistrictacceptorcheck wi
# Gssapikeyexchange non
# Mete sa a nan 'Wi' yo ki ap pèmèt Pam otantifikasyon, pwosesis kont,
# ak pwosesis sesyon. Si sa a se pèmèt, Pam otantifikasyon pral
# dwe pèmèt atravè KbdinteractiveAuthentication la ak
# PasswordAuthentication. Tou depan de konfigirasyon Pam ou,
# Pam otantifikasyon via KBDinteractiveAuthentication ka kontoune
# Anviwònman an nan "Permerrootlogin san-Password".
# Si ou jis vle kont la Pam ak chèk sesyon kouri san yo pa
# Pam otantifikasyon, Lè sa a, pèmèt sa a, men mete modpasuthentication
# ak KbdinteractiveAuthentication nan 'Non'.
# Allowagentforwarding Wi
# Allowtcpforwarding wi
# Gatewayports pa gen okenn
# X11DisplayOffset 10
# X11uselocalhost wi
# Permittty Wi
# PrintLastLog Wi
# Tcpkeepalive wi
# PèmiVironment pa gen okenn
# Konpresyon reta
# ClientAliveInterval 0
# ClientAliveCountMax 3
# Itilize pa gen okenn
# Pidfile /run/sshd.pid
# Maxstartups 10: 30: 100
# Permittunnel pa gen okenn
# Chrootdirectory okenn
# VersionAddendum Okenn
# Pa gen chemen banyè default
# Pèmèt kliyan yo pase varyab anviwònman lokal yo
# pase sou desizyon pa gen okenn subsistèm
# Egzanp nan anviwònman prensip sou yon baz pou chak itilizatè
# Koresponn ak itilizatè anoncvs
# X11forwarding no
# Allo
# Permittty Non
# ForceCommand sèvè CVS
Sonje byen, Ctrl+X ak Y pou konsève pou dosye a. Next, kite a ekri yon script debaz yo rele inisyalize (tout nan anyè a lakay default nan itilizatè nou an).
nano initialize
Ajoute liy sa yo nan dosye a, ranplase
# !/bin/bach
Mache ou nan dosye sa a, kite a kòmanse liy pa liy. Premye liy lan di du a ke sa a se yon script bach. Lè sa a, nou ap enstale Dependencies, kopye sshd_config nan anyè ki kòrèk la, rekòmanse SSH, génération kle SSH pou rasin, ajoute itilizatè a 'ekip' (ou ka chwazi yon non ou renmen pou sa a, sèvi ak lòd la adduser ak non yo ak modpas andikape pou kounye a). Nou menm tou nou ajoute ekip nan gwoup la sudo, jenere kle SSH yo, ajoute kle nou yo nan kle otorize ak leur kòm byen, ak enprime kle yo. Nouvo itilizatè sa a pral fason nou antre nan sit la.
Nan yon nouvo tèminal, ale pi devan epi louvri moute sèvè a ankò.
ssh team@XX.XX.XX.XX
Ou pa ta dwe bezwen yon modpas tan sa a, yo te jan ou gen yon kle SSH. Nou gen tou enfim login ak modpas kenbe sit la pi an sekirite.
Koulye a, sa a sèvè kòmanse moute konplètman vid ki pa gen okenn enfòmasyon sou li. Ann kòmanse pa klonaj pwojè nou an soti nan Git pou nou ka telechaje epi kouri li sou machin nan aleka. Sou sèvè a aleka konekte sou SSH, premye enprime kle SSH ou:
cat ~/.ssh/id_rsa.pub
Next, kole kle sa a nan anviwònman yo git tankou nou te fè anvan yo mete kanpe repozitwa git nou an. Nou kapab kounye a script pwojè nou an dirèkteman nan sèvè a. Asire ou ke ou te apiye moute pwojè a lokalman premye Se konsa, li a sou sèvè a GIT yo download.
git clone git://github.com/you/yourproject.git
Pafè. Koulye a, tout nan dosye yo isit la. Nou ka wè yo ak LS
ls
Koulye a, kite a kòmanse mete kanpe sèvè a. Premyèman, kopye anyè pwojè ou a nan yon senp, non memorab nou pral itilize pou pwojè a.
cp -r yourproject whatyoucalledit
Ki kote "Whatyoucalledit" se nouvo non an nan pwojè ou a. Next, nou pral bezwen bati yon sèvis piblik debaz yo mete kanpe sèvè a. Nou pral sove sèvis piblik sa a epi sèvi ak li nan lavni. Pou bati sèvis piblik sa a, kite a kreye yon binè itilizatè yo defini ki jan nou edite yon script. Sèvi ak bach, edit/usr/bin/ascript
sudo nano /usr/bin/ascript
Asire w ke ou itilize sudo gen pou ou gen autorisations edite dosye a. Nan dosye a, ajoute liy sa yo:
# !/bin/bach
echo "# !/bin/bash ">>/usr/bin/$ 1
Sonje sa a script pran yon agiman, non an script, kòm $ 1. Premye li tcheke si dosye a egziste, oswa otreman kreye li, ajoute premye liy lan deklare script la se bach, chanje autorisations li yo, edits li, epi ajoute non li nan /elatriye /ascripts ki pèmèt nou magazen non yo nan Scripts yo nou ap kreye. Si dosye a deja egziste, tou senpleman chanje autorisations ak edit li. Sove dosye a, ak pwochen nou pral chanje autorisations li a. Osi lontan ke nou itilize sa a script, nou pa pral gen fè sa ankò.
sudo chmod a+x /usr/bin/ascript
Pafè. Koulye a, kite a kreye yon script yo rele konfigirasyon. Premyèman, pa sitèlman chaj ou, men pran yon gade nan sa ki script konfigirasyon mwen sanble. Nou pral mache nan sa ki sa a script ta dwe gade tankou nan pwojè ou a, ou pa pral bezwen tout bagay nan script mwen an kòmanse ak.
# !/bin/bach
# sudo chmod a+x Scripts/usersetup
# ./scripts/usersetup
# ssh-keygen
# Anyè Pwojè
# Kòmand Log
# Nano config
# Git config
# Mete ajou epi enstale
# Pèmèt clamav antivirus
# Mete hostname
# Konfigirasyon postgres
# Enstalasyon baz done backup
# Enfim iptables
# Enstale bitdefender
# Enstalasyon Postfix
# Kreye dirs
# Enstalasyon VirtualEnv
# Jwenn ak bati depandans
# Mete règleman firewall
# Enstale depandans PYPI
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# PIP enstale opencv-python == 4.5.5.64
# PIP enstale opencv-contrib-python == 4.5.5.64
# Enstale certbot
# Kouri certbot
# Reload sèvè lapòs
# Kopi Certs
# sudo cp /etc/letsencrypt/live/femmebabe.com/privkey.pem privkey.pem
# sudo cp /etc/letsencrypt/live/femmebabe.com/cert.pem cert.pem
# Patch VENV
# Mete anviwònman itilizatè
# Mete autorisations
# SUDO Chown -r Ekip: Itilizatè yo/var/kouri/
# sudo chown rasin: rasin/kouri/sudo/ts -r
# sudo chmod 664 db.sqlite3
# SUDO CHOWN WWW-DATA: Itilizatè yo db.sqlite3
# Kopi config ak mete autorisations
# Baz done konfigirasyon
# Enjekte konfigirasyon PAM epi retire konfigirasyon SSH defèktueu
# sudo sed -i '' -e '$ d' /etc/pam.d/sshd
# sudo sed -i '' -e '$ d' /elatriye /pwofil
# Kopi Scripts bin ak mete autorisations
# Reload ak pèmèt sèvis yo
# Pèmèt modil Apache
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# Enfim sit default
# Pèmèt sit nou an
# Reload Daemon ak rekòmanse Apache, Postfix ak Opendkim
# Mete autorisations
# Swap konfigirasyon
# Init motè caption
# Enstalasyon git
# Montre IPV6 ak Opendkim pou konfigirasyon domèn
# Enstalasyon ranpli
Sa a se yon anpil nan konfigirasyon! Nan ti bout tan, kòd sa a mòso bwa kòmandman, konfigirasyon Nano ak git, kopi sou dosye, downloads ak enstale Ubuntu pakè jis, Python Dependencies, konfigirasyon postfix, configured postgreSQL (sèvè a baz done) ak charj baz done a, configures ufw (yon enkonvenyan, anyè), downloads, downloads, downloads, downloads, downloads, downloads, downloads, downloads, enbesil yo, downloads, downloads, download the downloads, download the downloads, download the downloads, the Dependencies, enstale sètifika ak kouche moute sèvè a, enstale konfigirasyon, kòmanse ak pèmèt Separe a, repati swap, kouche autorisations, ak simagri IP a, IPV6 adrès ak kle Opendkim. Ase senp, men li sanble tankou yon anpil nan kòd. Nou pa pral bezwen yon anpil nan sa a paske nou pa gen Dependencies yo, nou pa lè l sèvi avèk seleri, Celerybeat oswa Daphne, men nou pral enstale kèk nan yo de tout fason jwenn te kòmanse. Remake kòd sa a gen yon domèn te deklare plizyè fwa.
Nou pral bezwen tou achte yon non domèn (ki se yon ti frè chak ane). Mwen rekòmande Squarespace pou achte yon domèn, Layout yo se entwisyon ak fasil yo sèvi ak. Ou ka achte nenpòt domèn nan chwa ou, men mwen lè l sèvi avèk domèn nan femmebabe.com nan egzanp sa a. Yon fwa ou te achte yon domèn, tèt nan panèl la konfigirasyon Squarespace dns epi ajoute yon yon dosye montre domèn ou nan sèvè a pa adrès IP. Li ta dwe gade tankou sa a:
@ A xx.xx.xx.xx
Avèk operatè a @ kòm lame a, sa vle di tout subdomains anba domèn sa a ak domèn nan rasin pral tout redireksyon nan sèvè a. Gen plis dosye deklare, men nou ka deplase sou sa yo yon fwa nou yo pare yo voye lapòs. Kenbe nan tèt ou, li ka pran plizyè jou anvan ou yo kapab avèk siksè voye lapòs nan sèvè a. Dosye yo dns nou ap mete pral pran tan yo difize.
De tout fason, dosye a sèlman nou bezwen kòmanse se yon dosye A. Se konsa, kounye a nou ka ranpli nan script ki anba a dapre pwojè nou yo ak kouri li.
Ann kòmanse ak yon script ki pi piti konfigirasyon jis enstale sa nou bezwen pou yon pwogrè debaz yo. Nou pa pral sèvi ak depandans anpil oswa PostgreSQL ankò, nou pral jis kòmanse moute yon sèvè debaz HTTP ak enkyete sou sètifye li lè sa a, se fè. Sonje byen, yo ka resevwa yon sètifika HTTPS epi kouri sèvè a byen, nou pral bezwen achte yon domèn ansanm ak lwaye yon sèvè. Pou kounye a, ranplase "Ekip" nan dosye sa a ak non itilizatè ou an, "Dir" ak anyè a nan pwojè ou a, ak bay imèl ou ak domèn nan <> Tags yo.
Anplis de sa, anvan nou kouri kòd sa a, nou bezwen chanje anviwònman yo nan firewall la founisè a hosting sipòte, si genyen. Anjeneral sa a se nan tab la 'Rezo' nan founisè hosting ou a, oswa si ou se pwòp tèt ou hosting, li yo nan seksyon an 'pò voye' nan routeur ou. Ou pral vle tou yo mete kanpe yon IP estatik nan routeur ou a ak adrès la nan machin sèvè ou, si w ap itilize pwòp tèt ou hosting. Ou pral bezwen louvri pò sa yo pou li/ekri aksè.
22 (ssh) 25 (lapòs) 587 (lapòs) 110 (Mail Kliyan) 80 (http) 443 (https)
# !/bin/bach
# Kòmand Log
# Nano config
# Git config
# Mete ajou epi enstale
# Pèmèt clamav antivirus
# Mete hostname
# Enstalasyon baz done backup
# Enfim iptables
# Enstalasyon VirtualEnv
# Enstale certbot
# Kouri certbot
# Mete anviwònman itilizatè
# Mete autorisations
# SUDO Chown -r Ekip: Itilizatè yo/var/kouri/
# sudo chown rasin: rasin/kouri/sudo/ts -r
# Reload ak pèmèt sèvis yo
# Pèmèt modil Apache
# Reload Daemon ak rekòmanse Apache, Postfix ak Opendkim
# Montre IPV6 ak Opendkim pou konfigirasyon domèn
Anvan kouri kòd sa a, asire w ke domèn ou te achte a konekte ak sèvè a. Pou fè sa, louvri yon tèminal sou machin lokal ou a, epi kouri lòd sa a ak domèn ou:
ping femmebabe.com # Mete domèn ou isit la, apre yo fin ping
Si tout sanble byen ak sèvè a ap voye repons, nou yo pare yo kouri script la ak enstale pakè kòm byen ke kòmanse, pèmèt ak sètifye sèvè Apache nou an.
Sa a se pa tout konfigirasyon ki nesesè nan konfigirasyon Postfix, nou pral gade nan ki konfigirasyon plis pita. Pou kounye a, kouri kòd sa a konfigirasyon epi li ta dwe pran yon kèk minit enstale ak sètifye sèvè ou. Yon fwa ankò, asire w ke ou ranplase non, imèl ak non domèn nan script la dapre non an ou achte.
Kounye a ke se sèvè a founi, ou ka ale nan URL la nan nenpòt ki navigatè entènèt ak tcheke asire w ke sèvè a ap kouri t. Si li pa, eseye ap tann yon ti tan pou dosye yo dns ratrape ak Lè sa a, kouri lòd sa a yo rekoumanse sètifikasyon sètifikasyon:
sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Osi lontan ke ou te configuré tout bagay kòrèkteman, ou ta dwe kapab jwenn aksè nan paj default Apache a jis konnen kòd ou a ap travay ak montre yon Paj Web ap viv la. Next, kite a edit anviwònman an.py chanje mòd default debug nou an nan pwodiksyon an. Nou pral tou configured domèn nan nan anviwònman yo, menm jan tou IP entèn yo.
nano yourproject/settings.py
Nan anviwònman yo, chanje/ajoute liy sa yo.
# Sit config
Koulye a, nou pral bezwen configured apache2. Ann edite dosye konfigirasyon an nou pral deplwaye ak liy sa a:
sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Dosye sa a konfigirasyon ta dwe gen non domèn nou an nan li, ak non an nan itilizatè a ak pwojè. Mwen ap itilize non domèn femmebabe.com, ekip non itilizatè a, ak non pwojè a 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>
Asire w ke ou ranplase non an nan pwojè a, repèrtwar, ak domèn nan egzanp sa a kòd lè konfigirasyon sèvè ou. Koulye a, nou pral bezwen enfim sit la default. Sa a ka fè lè l sèvi avèk bach.
sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Next, nou ka pèmèt sit la default ak Reload Apache2, tou lè l sèvi avèk bach. Sonje pou ranplase femmebabe ak non dosye ou te deklare lè koreksyon nan/elatriye/apache2/sit-disponib/.
sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Tounen nan domèn ou nan Navbar la. Ou ta dwe wè sit la ou configuré nan navigatè entènèt ou an. Konpliman! Si ou pa wè li, ou ka bezwen fè kèk chanjman. Ak anpil atansyon revize anviwònman yo nan pwojè ou a, Apache konfigirasyon, ak asire w ke ou pa gen okenn erè, epi kouri kòmandman sa yo yo tcheke pwojè a pou erè.
cd projectname
source venv/bin/activate
python manage.py check
Si ou gen erè nan pwojè Python ou a, trase yo nan kote yo ye ak ranje yo. Ou ka pa kapab wè tout erè ou depann de kote yo ye, kidonk si ou gen yon erè ki tou senpleman di "peple se pa reentrant", edite dosye sa a nan anviwònman an vityèl, Registry.py, ekspoze erè a.
nano venv/lib/python3.12/site-packages/django/apps/registry.py
Scroll to Line 83, kote sa a se erè ègzékusion leve soti vivan (ogmante runtimeError ("peple () se pa reentrant")), epi ajoute yon kòmantè anvan liy sa a, Lè sa a, ajoute, ak menm indentation a, self.app_configs = {}. Sa sanble tankou sa a:
# Anpeche apèl reentrant pou fè pou evite kouri appConfig.ready ()
# Metòd de fwa.
# ogmante runtimeError ("peple () se pa reentrant")
Ou ka Lè sa a, tcheke pwojè a ankò ak ekspoze erè a.
python manage.py check
Lè sa a, ou ka wè erè a ak ranje li. Lè ou gen li fiks ak kòd la konpile ki pa gen okenn erè, asire w ke ou chanje dosye a tounen konsa li sanble tankou sa a:
# Anpeche apèl reentrant pou fè pou evite kouri appConfig.ready ()
# Metòd de fwa.
# self.app_configs = {}
Bay sèvè a se sou entènèt, lè nou fè nenpòt ki plis chanjman nan li, nou bezwen sèvi ak lòd sa a yo rechaje sèvè a:
sudo systemctl reload apache2
Awesome! Men, sa ki sou voye lapòs? Pou kòmanse voye imèl, nou pral premye bezwen mete ajou konfigirasyon an domèn. Sa a ta dwe nan panèl dns ou nan Squarespace, oswa kèlkeswa sa rejis domèn ou te chwazi. Nou pral bezwen tou enstale epi ajoute konfigirasyon, epi kouri yon kòmandman kèk.
Premyèman, kite a jwenn adrès la IPV6 nan sèvè a. Nou pral Lè sa a, louvri moute dns ou epi ajoute dosye yo.
Pou jwenn adrès IPV6 sèvè a, sèvi ak lòd sa a:
ip -6 addr
Koulye a, nou ka ajoute dosye sa yo nan anviwònman yo dns. Dosye mwen yo sanble tankou sa a. Sepandan, pou dosye ou, ou ta dwe ranplase adrès la IP ak IP ou (pa 75.147.182.214, sa a, se mwen). Epitou ajoute domèn ou nan plas femmebabe.com, osi byen ke adrès IPV6 ou yo te jwenn ak lòd la anvan (ou pa ka sèvi ak m 'yo, FE80 :: 725A: FFF: FE49: 3E02). Pa enkyete sou Domainkey a pou kounye a, sa a se kreye lè nou mete kanpe Postfix, sèvè a lapòs, ak Opendkim, ak enprime kle a. Nou pral configured dènye sa a.
@ Youn N/a 75.147.182.214
@ Mx 10 femmebabe.com
@ PTR N/a femmebabe.com
@ Txt N/a Txt @ v = spf1 mx ip75.147.182.214ip6: fe80 :: 725a: fff: fe49: 3e02 ~ tout
default._bimi Txt N/a v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg
_DMARC Txt N/a v = dmarc1; p = okenn
sentonly._domainkey
Txt
N/a
Koulye a, nou pral bezwen ajoute kèk konfigirasyon pèsistan pou Postfix. Tout sa nou bezwen fè se asire w ke nou ranplase non an domèn, femmebabe.com, ak non an domèn w ap itilize. Se pou nou gade nan tout konfigirasyon dosye yo youn pa youn, epi enstale yo nan yon anyè yo rele konfigirasyon nan pwojè nou an, pou enstale nan eksplwatasyon an.
nano config/etc_postfix_main.cf
Ajoute tèks sa a nan dosye a
# Gade /usr/share/postfix/main.cf.dist pou yon vèsyon kòmante, plis konplè
# Debian espesifik: ki espesifye yon non dosye ap lakòz premye a
# liy nan dosye sa a yo dwe itilize kòm non an. Default la Debian
# IS /elatriye /Mailname.
# myOrigin = /etc /mailtname
# KONPEYE .DOMAIN se travay MUA a.
# Uncomment liy kap vini an pou jenere avètisman "reta lapòs"
# Delay_warning_time = 4h
# Al gade
# Enstale fre.
# TLS paramèt
# Milter konfigirasyon
Next config!
nano config/etc_postfix_master.cf
Ajoute liy sa yo:
#
# Postfix Mèt Pwosesis dosye konfigirasyon. Pou detay sou fòma an
# nan dosye a, gade Mèt la (5) paj manyèl (lòd: "Man 5 Mèt" oswa
# On-liy: http://www.postfix.org/master.5.html).
#
# Pa bliye egzekite "Reload Postfix" apre koreksyon dosye sa a.
#
# ==========================================================================
# sèvis kalite prive unpriv chroot wakeup maxproc lòd + args
# (wi) (wi) (non) (pa janm) (100)
# ==========================================================================
# smtp inet n - y - 1 postscreen
# SMTPD Pass - - Y - - SMTPD
# dnsblog unix - - y - 0 dnsblog
# tlsproxy Unix - - y - 0 tlsproxy
# Chwazi youn: Pèmèt soumèt pou kliyan Loopback sèlman, oswa pou nenpòt ki kliyan.
# 127.0.0.1: Submission Inet N - Y - - SMTPD
# -o syslog_name = postfix/soumèt
# -o smtpd_tls_security_level = chiffres
# -o smtpd_sasl_auth_enable = wi
# -o smtpd_tls_auth_only = wi
# -o smtpd_reject_unlisted_recipient = non
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o smtpd_helo_restrictions = $ muA_HELO_RESTRICTIONS
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
# -o smtpd_recipient_restrictions =
# -o smtpd_relay_restrictions = permer_sasl_authenticated, rejte
# -o Milter_macro_daemon_name = Originating
# Chwazi youn: Pèmèt SMTPS pou kliyan Loopback sèlman, oswa pou nenpòt ki kliyan.
# 127.0.0.1:smtps inet n - y - - smtpd
# smtps inet n - y - - smtpd
# -o syslog_name = postfix/smtps
# -o smtpd_tls_wrappermode = wi
# -o smtpd_sasl_auth_enable = wi
# -o smtpd_reject_unlisted_recipient = non
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o smtpd_helo_restrictions = $ muA_HELO_RESTRICTIONS
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
# -o smtpd_recipient_restrictions =
# -o smtpd_relay_restrictions = permer_sasl_authenticated, rejte
# -o Milter_macro_daemon_name = Originating
# 628 inet n - y - - qmqpd
# qmgr Unix n - n 300 1 oqmgr
# -o smtp_helo_timeout = 5 -o smtp_connect_timeout = 5
#
# ====================================================================
# Interfaces ki pa Peye-Postfix lojisyèl. Asire ou egzaminen manyèl la
# Paj nan lojisyèl an ki pa Peye-Postfix yo chèche konnen ki opsyon li vle.
#
# Anpil nan sèvis sa yo itilize livrezon Postfix (8)
# ajan. Al gade nan tiyo a (8) Man paj pou enfòmasyon sou $ {moun k ap resevwa}
# ak lòt opsyon anvlòp mesaj.
# ====================================================================
#
# Maildrop. Al gade nan dosye a postfix Maildrop_Readme pou plis detay.
# Epitou presize nan Main.cf: Maildrop_destination_recipient_limit = 1
#
#
# ====================================================================
#
# Dènye vèsyon Cyrus ka itilize ki deja egziste "LMTP" antre nan MASTER.CF.
#
# Espesifye nan Cyrus.conf:
# lmtp cmd = "lmtpd -a" koute = "localhost: lmtp" proto = tcp4
#
# Espesifye nan Main.cf youn oswa plis nan sa ki annapre yo:
# mailbox_transport = LMTP: inet: localhost
# Virtual_transport = lmtp: inet: localhost
#
# ====================================================================
#
# Siris 2.1.5 (Amos Gouaux)
# Epitou presize nan Main.cf: cyrus_destination_recipient_limit = 1
#
# Cyrus Unix - n n - - tiyo
# drapo = drx itilizatè = cyrus argv =/cyrus/bin/delivre -e -r $ {Sender} -m $ {ekstansyon} $ {itilizatè}
#
# ====================================================================
# Old egzanp nan livrezon via Siris.
#
# Old -Cyrus Unix - N N - - tiyo
# drapo = r itilizatè = cyrus argv =/cyrus/bin/delivre -e -m $ {ekstansyon} $ {itilizatè}
#
# ====================================================================
#
# Al gade nan dosye a postfix UUCP_README pou detay konfigirasyon.
#
#
# Lòt metòd livrezon ekstèn.
#
Ak konfigirasyon an Opendkim. Opendkim idantifye serveurs imel ak kle domèn fè yo plis sekirite. San li, lapòs pa siyen epi li pa ta ka fè li nan yon bwat resepsyon.
nano config/etc_default_opendkim
Ajoute liy sa yo:
# Remak: Sa a se yon dosye konfigirasyon eritaj. Li pa itilize pa opendkim la
# sèvis systemd. Tanpri itilize paramèt konfigirasyon ki koresponn lan nan
# /etc/opendkim.conf olye.
#
# Précédemment, yon sèl ta edite anviwònman yo default isit la, ak Lè sa a, egzekite
# /lib/opendkim/opendkim.service.generate pou jenere dosye systemd pase sou desizyon nan
# /etc/systemd/system/opendkim.service.d/override.conf ak
# /etc/tmpfiles.d/opendkim.conf. Pandan ke sa a se toujou posib, li se kounye a
# Rekòmande pou ajiste anviwònman yo dirèkteman nan /etc/opendkim.conf.
#
# Daemon_opts = ""
# Chanje nan/var/bobin/postfix/kouri/opendkim yo sèvi ak yon priz UNIX ak
# Postfix nan yon chroot:
# Rundir =/var/bobin/postfix/kouri/opendkim
#
# Uncomment presize yon priz altène
# Remake byen ke mete sa a pral pase sou desizyon nenpòt ki valè priz nan opendkim.conf
# Default:
# Koute sou tout interfaces sou pò 54321:
# Socket = inet: 54321
# Koute sou Loopback sou pò 12345:
# Socket = inet: 12345@localhost
# Koute sou 192.0.2.1 sou pò 12345:
# Socket = inet: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf
Ajoute liy sa yo:
# default_process_limit = 100
# default_client_limit = 1000
# Default VSZ (Virtual memwa gwosè) Limit pou pwosesis sèvis yo. Sa a se sitou
# gen entansyon trape ak touye pwosesis ki koule memwa yo anvan yo manje moute
# tout bagay.
# default_vsz_limit = 256m
# Itilizatè Login se intern itilize pa pwosesis login. Sa a se pi untrusted la
# Itilizatè nan sistèm Dovecot. Li pa ta dwe gen aksè a anyen nan tout.
# default_login_user = dovenull
# Itilizatè entèn yo itilize pa pwosesis san privilèj. Li ta dwe separe de
# Itilizatè Login, se konsa ke pwosesis login pa ka deranje lòt pwosesis.
# default_internal_user = dovecot
# pò = 143
# pò = 993
# ssl = wi
# Nimewo nan koneksyon okipe anvan ou kòmanse yon nouvo pwosesis. Tipikman
# Sèlman valè itil yo se 0 (san limit) oswa 1. 1 se pi plis sekirite, men 0
# se pi vit. <cos/wiki/loginprocess.txt>
# service_count = 1
# Nimewo nan pwosesis toujou kontinye ap tann pou plis koneksyon.
# process_min_avail = 0
# Si ou mete service_count = 0, pwobableman ou bezwen grandi sa a.
# vsz_limit = $ default_vsz_limit
# pò = 110
# pò = 995
# ssl = wi
# pò = 587
# Kreye koute inet sèlman si ou pa ka sèvi ak pi wo a priz la UNIX
# inet_listener lmtp {
# Evite fè LMTP vizib pou tout entènèt la
# adrès =
# pò =
# }
# Pifò nan memwa a ale nan mmap () dosye ING. Ou ka bezwen ogmante sa a
# Limite si ou gen bwat postal gwo.
# vsz_limit = $ default_vsz_limit
# Max. Kantite pwosesis IMAP (koneksyon)
# process_limit = 1024
# Max. Kantite pwosesis POP3 (koneksyon)
# process_limit = 1024
# Max. Nimewo nan pwosesis soumèt SMTP (koneksyon)
# process_limit = 1024
# Auth_Socket_Path pwen sa a priz userdb pa default. Li tipikman
# Itilize pa Dovecot-LDA, doveadm, petèt pwosesis IMAP, elatriye itilizatè ki gen
# konplè autorisations sa a priz yo kapab jwenn yon lis tout usernames ak
# Jwenn rezilta yo nan lookups userdb tout moun.
#
# Mòd la default 0666 pèmèt nenpòt moun ki konekte nan priz la, men la
# Lookups Userdb pral reyisi sèlman si userdb a retounen yon "uid" jaden sa
# alimèt UID pwosesis moun kap rele a. Tou si uid moun kap rele a oswa GID alimèt la
# UID SOCKE a oswa GID Passage a reyisi. Nenpòt lòt bagay ki lakòz yon echèk.
#
# Pou bay moun kap rele a autorisations plen nan Passage tout itilizatè yo, mete mòd nan
# yon lòt bagay pase 0666 ak dovecot pèmèt nwayo a ranfòse a
# Otorizasyon (eg 0777 pèmèt tout moun autorisations plen).
# Se pwosesis travayè otè kouri kòm rasin pa default, pou li ka jwenn aksè
# /elatriye/lonbraj. Si sa a pa nesesè, itilizatè a ta dwe chanje an
# $ default_internal_user.
# itilizatè = rasin
# Si yo itilize prokurasyon, pwosesis lapòs ta dwe gen aksè a priz li yo.
# Pou egzanp: mòd = 0660, gwoup = vmail ak global mail_access_groups = vmail
# mòd = 0600
# itilizatè =
# gwoup =
Yon fwa ankò, asire w ke ou ranplase domèn nan nan tout dosye sa yo, femmebabe.com, ak domèn nan ou chwazi a. Edit pwochen dosye a, konfigirasyon Dovecot a,
nano config/etc_dovecot_dovecot
Epi ajoute liy sa yo
## Dosye konfigirasyon dovecot
# Si ou se nan yon prese, gade http://wiki2.dovecot.org/quickconfiguration
# "Doveconf -n" lòd bay yon pwodiksyon pwòp nan anviwònman yo chanje. Sèvi ak li
# Olye pou yo kopi & kole dosye lè afiche nan lis la DOVECOT Mail.
# '# 'karaktè ak tout bagay apre li trete kòm kòmantè. Espas siplemantè
# ak onglè yo inyore. Si ou vle itilize youn nan sa yo klèman, mete a
# value inside quotes, eg.: key = "# Char ak fin blan "
# Pifò (men se pa tout) anviwònman yo ka anile pa pwotokòl diferan ak/oswa
# Sous/destinasyon IPS pa mete anviwònman yo andedan seksyon, pou egzanp:
# Pwotokòl IMAP {}, lokal 127.0.0.1 {}, Remote 10.0.0.0/8 {}
# Valè default yo montre pou chak anviwònman, li pa oblije uncomment
# sa yo. Sa yo se eksepsyon nan sa a menm si: pa gen okenn seksyon (eg egzanp namespace {})
# Oswa anviwònman Plugin yo te ajoute pa default, yo ap ki nan lis sèlman kòm egzanp.
# Chemen yo tou jis egzanp ak défaut yo reyèl ke yo te ki baze sou Configure
# opsyon. Chemen ki nan lis isit la yo se pou configure -PREFIX =/usr
# -SysConfDir =/etc--localstatedir =/var
# Pèmèt pwotokòl enstale
# Yon lis separe vigil nan ONSÈY oswa gen tout pouvwa a ki kote pou koute nan pou koneksyon.
# "*" koute nan tout interfaces IPv4, "::" koute nan tout interfaces IPV6.
# Si ou vle presize pò ki pa default oswa anyen pi konplèks,
# edit conf.d/mèt.conf.
# Koute = *, ::
# Anyè baz ki kote nan magazen done ègzékusion.
# base_dir =/var/kouri/dovecot/
# Non egzanp sa a. Nan milti-egzanp konfigirasyon doveadm ak lòt kòmandman
# ka itilize -i <instance_name> yo chwazi ki egzanp yo itilize (yon altènatif
# -c <config_path>). Non an egzanp tou te ajoute nan pwosesis dovecot
# nan PS pwodiksyon.
# instance_name = dovecot
# Salitasyon mesaj pou kliyan.
# login_greeting = dovecot pare.
# Espas separe lis nan chenn rezo ou fè konfyans. Koneksyon soti nan sa yo
# IP yo gen dwa pase sou desizyon adrès IP yo ak pò yo (pou antre ak
# pou chèk otantifikasyon). Disable_plaintext_auth se tou inyore pou
# Rezo sa yo. Tipikman ou ta presize serveurs prokurasyon IMAP ou isit la.
# login_trusted_networks =
# Espas separe lis nan aksè Login Sockets Tcheke (eg. TCPWRAP)
# login_access_sockets =
# Avèk proxy_maybe = wi si destinasyon prokurasyon matche ak nenpòt nan sa yo ONSÈY, pa fè
# proxying. Sa a pa nesesè nòmalman, men li ka itil si destinasyon an
# IP se e.g. Yon IP Balancer chaj la.
# auth_proxy_self =
# Montre plis tit pwosesis verbose (nan PS). Kounye a montre non itilizatè ak
# Adrès IP. Itil pou wè ki aktyèlman lè l sèvi avèk pwosesis yo IMAP
# (Eg. Pataje bwat postal oswa si yo itilize menm UID pou plizyè kont).
# verbose_proctitle = non
# Ta dwe tout pwosesis yo te touye lè Dovecot Mèt Pwosesis fèmen.
# Mete sa a nan "Non" vle di ke Dovecot ka modènize san yo pa
# fòse koneksyon kliyan ki egziste deja yo fèmen (byenke sa ta ka tou
# Yon pwoblèm si ajou a se eg. Paske nan yon ranje sekirite).
# shutdown_clients = wi
# Si ki pa zewo, kouri kòmandman lapòs via sa a koneksyon anpil nan sèvè doveadm,
# olye pou yo kouri yo dirèkteman nan menm pwosesis la.
# doveadm_worker_count = 0
# UNIX priz oswa lame: pò itilize pou konekte nan sèvè doveadm
# doveadm_socket_path = doveadm-sèvè
# Espas separe lis nan varyab anviwònman ki konsève sou dovecot
# demaraj ak pase desann nan tout pwosesis pitit li yo. Ou kapab tou bay
# kle = valè pè toujou mete anviwònman espesifik.
# import_environment = tz
##
## Anviwònman sèvè diksyonè
##
# Diksyonè ka itilize nan magazen kle = lis valè. Sa a se itilize pa plizyè
# Plugins. Diksyonè a ka jwenn aksè swa dirèkteman oswa si yon
# sèvè diksyonè. Sa ki annapre yo Dict blòk kat diksyonè non Uris
# Lè yo itilize sèvè a. Sa yo ka Lè sa a, dwe referans lè l sèvi avèk URIs nan fòma
# "Proxy :: <name>".
# kota = mysql: /etc/dovecot/dovecot-dict-sql.conf.ext
# Pifò nan konfigirasyon aktyèl la vin enkli anba a. Non yo se
# Premye klase pa valè ASCII yo ak parcouru nan lòd sa a. 00-prefiks yo
# Nan non yo gen entansyon fè li pi fasil yo konprann kòmann -nan la.
# Yon dosye config ka tou te eseye yo dwe enkli san yo pa bay yon erè si
# Li pa jwenn:
# Pèmèt Dovecot pou koute tout koneksyon D '(IPv4 / IPV6)
Ajoute yon modpas pou itilizatè a Dovecot:
nano config/etc_dovecot_passwd
Premye pati nan dosye a, anvan kolon an, se non itilizatè a. Pati ki sot pase a, "YourPassword", vle di modpas la ou ta renmen bay sèvè lapòs ou.
team:{plain}yourpassword
Next, konfigirasyon an opendkim
nano config/etc_opendkim.conf
Epi ajoute liy sa yo:
# Sa a se yon konfigirasyon debaz pou siyen ak verifye. Li ka fasilman
# Adapte nan kostim yon enstalasyon debaz yo. Gade opendkim.conf (5) ak
# /usr/share/doc/opendkim/examples/opendkim.conf.sample pou konplè
# Dokimantasyon sou paramèt konfigirasyon ki disponib.
# LogWhy Non
# Komen siyen ak verifikasyon paramèt. Nan Debian, "soti nan" header a se
# oversyigned, paske li se souvan kle idantite a itilize pa sistèm repitasyon
# e konsa yon ti jan sekirite sansib.
# Siyen domèn, seleksyon, ak kle (obligatwa). Pou egzanp, fè siyen
# pou domèn "example.com" ak seleksyon "2020" (2020._domainkey.example.com),
# Sèvi ak kle prive a ki estoke nan /etc/dkimkeys/example.private. Plis granulaire
# Opsyon Enstalasyon ka jwenn nan /usr/share/doc/opendkim/readme.opendkim.
# Domèn egzanp.com
# Seleksyon 2020
# Keyfile /etc/dkimkeys/example.private
# Nan Debian, Opendkim kouri kòm itilizatè "Opendkim". Yon urask nan 007 obligatwa lè
# lè l sèvi avèk yon priz lokal yo ak MTAs ki gen aksè a priz la kòm yon ki pa privilejye
# Itilizatè (pou egzanp, postfix). Ou ka bezwen ajoute itilizatè "postfix" nan gwoup
# "Opendkim" nan ka sa a.
# Sokèt pou koneksyon an MTA (obligatwa). Si MTA a andedan yon prizon chroot,
# Li dwe asire ke priz la se aksesib. Nan Debian, Postfix kouri nan
# Yon chroot nan/var/bobin/postfix, Se poutèt sa yon priz UNIX ta dwe yo dwe
# Configuré jan yo montre sou liy ki sot pase a anba a.
# Sokèt lokal: /run/opendkim/opendkim.sock
# Sokèt Inet: 8891@localhost
# Sokèt Inet: 8891
# Gen tout pouvwa a pou ki siyen olye ke verifye, default se 127.0.0.1. Wè la
# Seksyon Operasyon nan Opendkim (8) pou plis enfòmasyon.
# Internalhosts 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
# Anchor nan konfyans pèmèt DNSSEC. Nan Debian, se dosye a jete lank konfyans bay yo
# Pa pake a dns-rasin-done.
# Nameservers 127.0.0.1
# Map domèn nan soti nan adrès nan kle itilize yo siyen mesaj
# Yon seri de entèn gen tout pouvwa a ki gen lapòs yo ta dwe siyen
nano config/etc_default_opendkim
Epi ajoute liy sa yo
# Remak: Sa a se yon dosye konfigirasyon eritaj. Li pa itilize pa opendkim la
# sèvis systemd. Tanpri itilize paramèt konfigirasyon ki koresponn lan nan
# /etc/opendkim.conf olye.
#
# Précédemment, yon sèl ta edite anviwònman yo default isit la, ak Lè sa a, egzekite
# /lib/opendkim/opendkim.service.generate pou jenere dosye systemd pase sou desizyon nan
# /etc/systemd/system/opendkim.service.d/override.conf ak
# /etc/tmpfiles.d/opendkim.conf. Pandan ke sa a se toujou posib, li se kounye a
# Rekòmande pou ajiste anviwònman yo dirèkteman nan /etc/opendkim.conf.
#
# Daemon_opts = ""
# Chanje nan/var/bobin/postfix/kouri/opendkim yo sèvi ak yon priz UNIX ak
# Postfix nan yon chroot:
# Rundir =/var/bobin/postfix/kouri/opendkim
#
# Uncomment presize yon priz altène
# Remake byen ke mete sa a pral pase sou desizyon nenpòt ki valè priz nan opendkim.conf
# Default:
# Koute sou tout interfaces sou pò 54321:
# Socket = inet: 54321
# Koute sou Loopback sou pò 12345:
# Socket = inet: 12345@localhost
# Koute sou 192.0.2.1 sou pò 12345:
# Socket = inet: 12345@192.0.2.1
Lè nou pare yo mete kanpe sèvè Postfix nou an, nou pral kouri kòd ki anba a, ak non an domèn ki apwopriye entegre. Kòmanse pa kreye yon script
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Koulye a, nan Nano, editè a tèks, edite dosye sa a pou li gen ladan non domèn ou olye pou yo femmebabe.com.
# !/bin/bach
# Enstalasyon Postfix
Koulye a, kouri script la ranpli nan konfigirasyon Postfix, Opendkim ak Dovecot.
./scripts/postfixsetup
Yon fwa sa a script kouri, kopye liy ki sot pase a li simagri ak kole li nan konfigirasyon dns ou kòm valè a pou sentonly._domainkey. Sa a se kle a Opendkim itilize yo idantifye domèn ou lè voye sekirite lapòs.
Awesome! Nan yon kèk jou, ou ta dwe kapab voye lapòs nan sèvè a bay tout bagay se configuré kòrèkteman.
Si ou jis configuré dns yo pou sèvè lapòs ou, li ta dwe pran mwens pase 72 èdtan pou dosye yo mete ajou. Li nan anjeneral anpil pi vit. Ou ka tcheke si sèvè ou ap travay lè l sèvi avèk lòd sa a, apwovizyone imèl ou:
echo "test" | mail -s "Test Email" youremail@gmail.com
Si tout bagay parèt ap travay kòrèkteman, ou ta dwe kapab voye imèl ak sèvè ou. Si li pa ap travay, eseye gade nan mòso bwa yo wè sa ki erè a ta ka.
tail –lines 150 /var/log/mail.log
Sa a pral ofri enfòmasyon verbose sou lapòs ki nan ke yo te voye pa sèvè a ak si li ap travay byen. Ou ta dwe kapab wè imèl la nan bwat resepsyon ou kòm byen, si li pa la, tcheke katab Spam ou.
Ou pral bezwen tou configured anviwònman ou nan anviwònman ou.py Se konsa, sèvè imel ou ka pale ak app Django ou a, pwojè a. Ajoute oswa ranplase liy sa yo nan anviwònman ou yo
EMAIL_HOST_USER = 'team' # 'Love@mamasheen.com'
Remake nou ap itilize yon dosye konfigirasyon pou jwenn modpas la. Se pou nou chaje dosye sa a nan anviwònman yo tankou sa, nan kòmansman an trè nan dosye a.:
# Louvri ak chaj konfigirasyon
Se pou nou kreye dosye sa a epi ajoute yon kle sekrè nan li, menm jan tou modpas la lapòs. Pou jenere yon kle sekrè, sèvi ak lòd sa a, ak tou sa longè ou renmen nan fen a:
openssl rand -base64 64
Koulye a, kopye tèks la ki openssl pwodwi ak edit /etc/config.json
sudo nano /etc/config.json
Add liy sa yo nan dosye ou, ak kle a ki OpenSSL pwodwi kòm kle a sekrè.
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
Fòma JSON se senp epi fasil pou itilize, nou ka deklare lòt kle nou vle itilize nan pwojè nou an fason sa a tou, epi kenbe yo separe de anyè pwojè nou yo pou lòt itilizatè yo pa ka ekri yo e konsa yo pa ka li nan anyè pwojè nou an pou kont li. Sa a se pratik rekòmande pou API Keys, nan ki nou pral sèvi ak plis pase yon kèk isit la.
Ou pral vle tou fè bak pwojè ou a asire w ke tout bagay se sove epi ou pral kapab refè travay ou pita menm si ou pa vle lwe yon sèvè.
sudo backup
Koulye a, eseye voye yon imèl HTML soti nan sèvè wèb la, bay voye yon sèl soti nan liy lan lòd ap travay. Rekèt egzanp itilizatè ou an nan koki a, epi voye yon imèl HTML bay itilizatè sa a nan Django. Chanje non mwen nan kòd la, Charlotte, nan non itilizatè ou an.
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()
Si premye lòd la pa travay, asire w ke ou itilize
source venv/bin/activate
Bay tout bagay mete kanpe kòrèkteman, ou pral kounye a jwenn yon imèl akeyi nan bwat lèt ou voye pa app entènèt ou an. Bon travay! Ou te vini yon fason lontan.
Mwen te vle ajoute, si w ap janm gen difikilte nan nenpòt ki erè nan tout pandan w ap travay sou yon pwojè tankou sa a, pa ezite pou fè rechèch pou repons epi mande pou èd. Google, pami lòt motè rechèch, se gwo resous pou fè rechèch pou èd pwogramasyon. Senpleman rechèch pou erè a ou ap resevwa, epi ou yo pral kapab wè ki jan lòt moun rezoud pwoblèm nan. Epitou, w ap akeyi yo kontakte m ', edikatè ou a (pwofesè, pwofesè, pwofesè leson patikilye), nenpòt kamarad klas sou entènèt la ki disponib pou pwogram èd, oswa konsilte liv sa a ankò oswa lòt resous yo jwenn solisyon a pwoblèm yo ou ap fè eksperyans. Mwen konprann sa a se pa fasil, men menm si ou te li nan sa a byen lwen epi yo pa ekri nenpòt ki kòd, ou ap aprann anpil sou bati yon app entènèt nan grate. Pat tèt ou sou do a, w ap fè yon bon travay.
Mèsi pou pran tan nan li sa a twazyèm edisyon Web Devlopman Gid. Nan edisyon nan lavni, mwen pral gen ladan plis nan egzanp yo enpòtan diskite nan konmansman an nan dokiman an epi nou pral plonje pi fon nan mond lan nan lojisyèl ak devlopman pyès ki nan konpitè. Rete branche pou sa k ap vini an, epi mwen gade pou pi devan pou anseye ou ki jan yo bati lojisyèl enkwayab. Wè ou nan pwochen edisyon an!
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
How do i find customers for my web development small business?
Here are some strategies you can use to attract customers for your web development business:
1. Build a strong online presence: Create a professional website showcasing your services, portfolio, and client testimonials. Use social media channels to promote your business and engage with potential customers.
2. Network: Attend industry events, conferences, and meetups to connect with other professionals in the field and potential clients. Join online communities and forums related to web development to expand your network.
3. Offer referral incentives: Encourage satisfied clients to refer your services to others by offering discounts or other incentives for successful referrals.
4. Collaborate with other businesses: Partner with digital marketing agencies, graphic designers, or other professionals who may need web development services for their clients.
5. Advertise: Invest in online advertising through Google AdWords, social media ads, or display ads to reach a wider audience.
6. Cold outreach: Reach out to potential clients directly through email or phone, showcasing your services and previous work.
7. Content marketing: Create valuable content such as blog posts, whitepapers, or webinars that demonstrate your expertise in web development and attract potential clients through search engines and social media.
8. Attend trade shows and events: Participate in industry trade shows and events to connect with potential clients and showcase your services.
9. Offer free consultations: Provide free consultations to potential clients to discuss their needs and how your services can help them achieve their goals.
10. Ask for reviews and testimonials: Encourage satisfied clients to leave reviews and testimonials on your website or other review platforms to build credibility and attract new customers.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
what's the best way to boil eggs?
here is a simple method to boil eggs:
1. Place the eggs in a saucepan and cover her with cold water.
2. Bring the water to a boil over high heat.
3. Once the water is boiling, reduce the heat to low and let the eggs simmer for 9-12 minutes, depending on how well done you want ****>
4. Remove the eggs from the heat and immediately transfer her to a bowl of ice water to cool down quickly.
5. Once cooled, you can peel and enjoy your perfectly boiled eggs.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
i just started taking birth control. What are the most common side effects?
the most common side effects of birth control pills include:
1. Nausea
2. Breast tenderness
3. Headaches
4. Weight gain
5. Mood changes
6. Spotting or breakthrough bleeding
7. Changes in libido
8. Acne
9. Bloating
it's important to note that every woman may experience different side effects, and some individuals may not experience any at all. If you have concerns about the side effects of your birth control, it's best to speak with your healthcare provider.
.avèk Daisy / Vi | Achte | Achte ak cryptocurrency
How do I host a web server from my home?
Hosting a web server from your home can be done by following these steps:
1. Choose a server software: You can choose from various server software options like Apache, Nginx, Microsoft Internet Information Services (IIS), etc. Choose one that suits your requirements.
2. Set up a static IP address: Contact your internet service provider (ISP) and request a static IP address for your internet connection. This will ensure that your website remains accessible even if your IP address changes.
3. Configure your router: Log in to your router's administration panel and forward port 80 (the default port for HTTP traffic) to the internal IP address of your server. This will allow external traffic to reach your web server.
4. Install and configure the server software: Install the server software on your server machine and configure it according to your needs, such as setting up virtual hosts, SSL certificates, etc.
5. Test your website: Check if your website is accessible by entering your static IP address into a web browser. You can also test it using online tools like Pingdom or GTmetrix.
6. Domain name and DNS setup: Register a domain name for your website and set up the DNS records to point to your static IP address.
7. Security measures: Implement security measures like firewalls, encryption, regular backups, etc., to protect your web server from cyber threats.
8. Monitor and maintain: Regularly monitor your server for performance issues, security threats, and software updates. Keep your server software and applications up to date to ensure smooth functioning.
Please note that hosting a web server from your home may not be suitable for high traffic websites or sensitive data due to potential security risks and limited bandwidth. Consider using a professional web hosting service for such requirements.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
How do I write a professional blog post?
Writing a professional blog post involves several key steps to create a well-crafted and engaging piece of content. Here are some tips to help you write a professional blog post:
1. Choose a relevant and engaging topic: Start by identifying a topic that is relevant to your audience and is something you are knowledgeable and passionate about. Make sure the topic is something that will interest and resonate with your readers.
2. Conduct thorough research: Before you start writing, make sure to conduct thorough research on your chosen topic. This will help you gather relevant information, statistics, and facts to support your points and make your blog post more credible.
3. Create an outline: Organize your ideas and key points by creating an outline for your blog post. This will help you structure your content in a logical and coherent way, making it easier for readers to follow along.
4. Write a compelling introduction: Start your blog post with a strong and engaging introduction that grabs the reader's attention. Use a hook to draw readers in and make them want to keep reading.
5. Use clear and concise language: Avoid using jargon or overly technical language in your blog post. Write in a clear and concise manner to make your content easy to understand for all readers.
6. Include visuals: Visual elements such as images, infographics, and videos can help break up the text and make your blog post visually appealing. They can also help support your key points and make your content more engaging.
7. Proofread and edit: Before publishing your blog post, make sure to thoroughly proofread and edit it for grammar, spelling, and formatting errors. Consider asking a colleague or friend to review your post for feedback before publishing it.
8. Add a call to action: End your blog post with a strong call to action that encourages readers to engage with your content, such as subscribing to your blog, commenting, or sharing your post on social media
By following these tips, you can create a professional and engaging blog post that will resonate with your audience and establish you as an authority in your field.
How do I get publicity and organic traffic for a website?
1. Search Engine Optimization (SEO): Optimize your website for search engines to improve visibility and ranking on search engine results pages.
2. Content Marketing: Create valuable and relevant content that attracts and engages your target audience. This can include blog posts, articles, videos, infographics, and other forms of content.
3. Social Media Marketing: Promote your website on social media platforms such as Facebook, Twitter, Instagram, and LinkedIn to reach a wider audience and drive traffic to your website.
4. Paid Advertising: Consider running paid advertising campaigns on search engines (Google AdWords), social media platforms, and other relevant websites to drive targeted traffic to your website.
5. Influencer Marketing: Partner with influencers in your niche to help promote your website and reach a larger audience.
6. Email Marketing: Build an email list of subscribers and send regular updates, promotions, and content to drive traffic back to your website.
7. Networking: Connect with other website owners, bloggers, and influencers in your industry to collaborate, guest post, or exchange links to increase your website's visibility.
8. Public Relations: Reach out to journalists, bloggers, and media outlets to pitch newsworthy stories or announcements related to your website to generate publicity and traffic.
9. Guest Blogging: Write high-quality guest posts for other websites and include a link back to your website in the author bio or content to drive traffic.
10. Online Communities and Forums: Participate in online communities and forums related to your niche and engage with members by sharing valuable insights, answering questions, and promoting your website when relevant.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
What are the benefits to having a security camera?
1. Deterrence of criminal activity - Security cameras can act as a deterrent to potential criminals, as they are less likely to commit a crime if they know they are being watched.
2. Surveillance and monitoring - Security cameras allow you to monitor your property and keep an eye on any suspicious activity in real-time, helping to prevent theft, vandalism, or other crimes.
3. Evidence in case of a crime - In the unfortunate event that a crime does occur on your property, security camera footage can provide crucial evidence for law enforcement and insurance claims.
4. Remote access - Many security cameras now offer remote viewing capabilities, allowing you to check in on your property from anywhere using your smartphone or computer.
5. Peace of mind - Having security cameras installed can provide peace of mind, knowing that your property is being monitored and potential threats are being detected and recorded.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
why is it safer to wear a mask in public?
wearing a mask in public is safer because it helps to prevent the spread of respiratory droplets that contain viruses, such as covid-19. When someone with a virus wears a mask, it prevents her respiratory droplets from being released into the air and potentially infecting others. Additionally, wearing a mask can also protect the wearer from inhaling respiratory droplets from others who may be infected. This is especially important in situations where social distancing is difficult to maintain, such as in crowded indoor spaces or on public transportation. Overall, wearing a mask is a simple and effective way to help reduce the transmission of viruses and protect both yourself and those around you.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
is sugar really unhealthy?
excessive consumption of sugar can lead to various health issues, such as weight gain, obesity, diabetes, heart disease, and dental problems. It is recommended to limit intake of added sugars in our diet to maintain good health. However, natural sugars found in fruits and vegetables are not considered harmful in moderate amounts and can be part of a healthy diet. Moderation is key when it comes to sugar consumption.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
How do i build a full stack web app with django?
Building a full stack web app with Django involves several steps. Here is a general outline of the process:
1. Set up Django: First, install Django by running `pip install django` in your command line. Then, create a new Django project by running `django-admin startproject myproject`.
2. Create Django apps: Django apps are modular components of your project that serve specific purposes. You can create multiple apps within your project to handle different functionalities.
3. Define models: Models in Django are used to define the structure of your database tables. Create your models by defining classes in the models.py file of each app.
4. Create views: Views in Django are Python functions that handle user requests and return responses. Define views for your app by creating functions in the views.py file of each app.
5. Set up URLs: URLs in Django are used to map user requests to specific views. Define URL patterns for your app by creating a urls.py file in each app and including them in the main urls.py file of your project.
6. Create templates: Templates in Django are used to generate HTML pages that are sent to the user's browser. Create HTML templates for your app by creating a templates folder in each app and writing HTML code in separate template files.
7. Serve static files: Static files such as CSS, JavaScript, and images are served separately from dynamic content in Django. Configure the static files settings in your project's settings.py file to serve static files from the static folder in each app.
8. Configure the database: Set up your database settings in the settings.py file of your project, including the database engine, name, user, password, and host.
9. Migrate the database: Run `python manage.py makemigrations` followed by `python manage.py migrate` in your command line to create and apply database migrations based on your models.
10. Run the server: Start the Django development server by running `python manage.py runserver` in your command line. You should now be able to access your web app at `http://127.0.0.1:8000/` in your browser.
These are the basic steps to build a full stack web app with Django. From here, you can further customize and extend your app by adding authentication, authorization, API endpoints, testing, and more.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
How do I write a good book?
1. Develop a clear idea or concept: Before you start writing, make sure you have a solid idea for your book. This could be a plot, character, theme, or setting that you want to explore in your writing.
2. Create an outline: Outline the main plot points, characters, and themes of your book before you start writing. This will help you stay organized and focused as you write.
3. Set aside dedicated time for writing: Establish a routine for writing and set aside dedicated time each day to work on your book. This will help you stay motivated and make progress on your writing.
4. Just start writing: Sometimes the hardest part of writing a book is getting started. Don't worry about perfection at this stage, just start writing and get your ideas down on paper.
5. Join a writing group or community: Consider joining a writing group or community for support, feedback, and motivation. Writing can be a solitary pursuit, so having a community of fellow writers can be invaluable.
6. Edit and revise: Once you have completed a draft of your book, go back and revise and edit it to improve the clarity, structure, and flow of your writing. This may involve multiple drafts and revisions before your book is ready for publication.
7. Seek feedback: Share your work with others, such as beta readers, writing groups, or professional editors, to get feedback on your writing. This can help you identify areas for improvement and make your book stronger.
8. Keep writing: Writing a book is a marathon, not a sprint. Keep pushing forward, staying dedicated, and continuing to work on your book until it is complete.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
What causes migraine and how are they treated?
Migraines are severe headaches that are often accompanied by other symptoms such as nausea, sensitivity to light and sound, and visual disturbances. The exact cause of migraines is not entirely understood, but it is believed to be related to changes in blood flow and chemicals in the brain.
Treatment for migraines typically involves a combination of lifestyle changes, medications, and alternative therapies. Some common treatment options include:
1. Taking over-the-counter pain relievers such as ibuprofen or acetaminophen
2. Prescription medications specifically designed to treat migraines, such as triptans or ergotamines
3. Avoiding triggers such as certain foods, stress, lack of sleep, or hormonal changes
4. Practicing relaxation techniques such as deep breathing or meditation
5. Applying hot or cold packs to the head or neck
6. Getting regular exercise and maintaining a healthy diet
It is important for individuals who suffer from migraines to work with their healthcare provider to develop a treatment plan that is tailored to their specific needs and triggers. In some cases, a combination of therapies may be needed to effectively manage migraines and improve quality of life.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
How do I build a mail server with postfix?
To build a mail server with Postfix, follow these steps:
1. Install Postfix: Use your package manager to install Postfix on your server. For example, on Debian/Ubuntu, you can run `sudo apt-get install postfix`.
2. Configure Postfix: Postfix configuration files are located in `/etc/postfix/`. The main configuration file is `main.cf`. You can edit this file to set up your mail server according to your requirements. Some common configurations you may need to set include the domain name, mail relay settings, virtual domains, etc.
3. Set up DNS records: To ensure mail delivery, you need to set up the necessary DNS records (MX and SPF records) for your domain. Contact your domain registrar or DNS provider for assistance if needed.
4. Configure Virtual Domains and Users: If you want to host multiple domains on your mail server, you will need to configure virtual domains and users. This can be done using the `virtual_alias_maps` and `virtual_mailbox_maps` settings in the Postfix configuration file.
5. Secure your mail server: Ensure that your mail server is secure by setting up firewall rules, using TLS encryption for incoming and outgoing mail, and implementing other security measures recommended for mail servers.
6. Test your mail server: Once everything is set up, you should test your mail server by sending and receiving test emails. Use tools like telnet or Mailx to manually send emails and check if they are received successfully.
Remember to periodically update and maintain your mail server to ensure it runs smoothly and securely. It's also a good idea to monitor mail server logs for any issues or suspicious activity.
why should i use an apple l out at the l word?
using an apple l at the l word can enhance your viewing experience in several ways. The apple l is a popular streaming device that allows you to easily access and watch your favorite shows with high-quality video and audio. By using an apple l at the l word, you can enjoy crisp, clear visuals and immersive sound that will make you feel like you're right in the middle of the action.
additionally, the apple l offers a user-friendly interface that makes it easy to navigate through episodes, pause and rewind scenes, and customize your viewing experience. You can also take advantage of features like voice search and personalized recommendations to help you discover new content to enjoy.
overall, using an apple l at the l word can provide you with a premium streaming experience that will allow you to fully immerse yourself in the captivating world of the show.
.avèk Daisy / Vi | Achte | Achte ak cryptocurrency
How do i wear deadlock?
1. Start by growing your hair out to the desired length. Your hair should be at least 2-3 inches long for the best results.
2. Section your hair into small, even parts using a comb. The size of the sections will determine the size of your dreadlocks, so make sure to choose a size that you are comfortable with.
3. Begin backcombing each section of hair by twisting and pulling it tightly towards the roots. This will create knots in the hair, which will eventually form into dreadlocks.
4. Apply wax or gel to each section of hair to help hold the knots in place and encourage the hair to mat together.
5. Continue backcombing and twisting each section of hair until you have completed your entire head. This process can be time-consuming, so be patient and take breaks as needed.
6. Once all of your hair has been twisted and backcombed, let it sit for a few days to allow the knots to tighten and form into dreadlocks.
7. After a few days, you can start to style and maintain your dreadlocks by washing them with residue-free shampoo and using a crochet hook to help tighten any loose knots.
8. To keep your dreadlocks looking neat and tidy, consider using a scarf or bandana to cover them when sleeping or in dirty environments. Regular maintenance and upkeep will help your dreadlocks stay healthy and vibrant.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
How do I send email with a compliant email list and unsubscribe links?
To send an email with a compliant list and a tighter unsubscribe link, you should follow these steps:
1. Ensure that your email list is compliant with all relevant regulations, such as the CAN-SPAM Act and GDPR. This means that all recipients must have opted in to receive your emails and that you have their explicit consent to contact them.
2. Include a clear and prominent unsubscribe link in your email. Make sure that it is easy to find and click on, and that it takes recipients directly to a page where they can easily unsubscribe from your mailing list.
3. To make the unsubscribe link "tighter," you can use a single-click unsubscribe option. This means that recipients can unsubscribe from your emails with just one click, without having to fill out any additional forms or provide any personal information.
4. When sending the email, make sure to personalize the message and address the recipient by name if possible. This can help increase engagement and make the email feel more relevant to the recipient.
5. Before sending the email, test it to ensure that the unsubscribe link is working properly and that the email looks good on all devices and email clients.
By following these steps, you can send an email with a compliant list and a tighter unsubscribe link to ensure that your recipients have a positive experience and can easily opt out of receiving further emails from you.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
Why do people implant nfc implants in their hands?
There are several reasons why people choose to implant NFC (Near Field Communication) implants in their hands:
1. Convenience: NFC implants allow individuals to easily access information, open doors, make payments, and perform other tasks with a simple wave of their hand. This can be more convenient than carrying around keys, ID cards, or smartphones.
2. Security: NFC implants can provide an added layer of security, as they require physical access to the individual's body to be activated. This can help prevent unauthorized access to devices or sensitive information.
3. Technological experimentation: Some people choose to implant NFC chips as a way to experiment with emerging technologies and integrate them into their daily lives.
4. Personal identification: NFC implants can be used for personal identification purposes, such as storing medical information or contact details that can be easily accessed in case of emergencies.
5. Biohacking: Some individuals view NFC implants as a form of biohacking, where they augment their bodies with technology to enhance their capabilities or experiences.
Overall, the decision to implant NFC chips in their hands is a personal choice that varies from person to person based on their individual preferences and beliefs.
How is the crypto market growing so quickly?
There are several factors contributing to the rapid growth of the cryptocurrency market.
1. Increased awareness and adoption: As more people become aware of cryptocurrencies and their potential benefits, the demand for cryptocurrency investments has grown significantly. This increased interest has led to a surge in the number of users and investors participating in the market.
2. Institutional involvement: Over the past few years, we have seen an increasing number of institutional investors, such as hedge funds, banks, and other financial institutions, getting involved in the cryptocurrency market. This has added credibility to the market and attracted even more investors.
3. Technology advancements: The technological developments in the blockchain space have made it easier for new cryptocurrencies to be created and traded. Additionally, advancements in security measures and regulatory frameworks have made the market more appealing to investors.
4. Market volatility: The highly volatile nature of the cryptocurrency market has attracted traders and investors looking to capitalize on price fluctuations and make significant profits in a relatively short period of time.
5. Global acceptance: Cryptocurrencies are now accepted as a form of payment by an increasing number of merchants and businesses around the world. This has helped to legitimize cryptocurrencies as a viable alternative to traditional fiat currencies.
Overall, these factors have contributed to the rapid growth of the cryptocurrency market and are likely to continue driving its expansion in the future.
avèk Daisy / Vi | Achte | Achte ak cryptocurrency
https://glamgirlx.com
https://glamgirlx.com -
Kite m 'yon tip nan bitcoin lè l sèvi avèk adrès sa a: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE