Օրինակ, գործնական ցանցի վրա հիմնված խորը ուսուցում եւ անվտանգություն Երրորդ հրատարակություն Charlotte Harper Հուլիսի 3, 2024 Թարմացվել / փոխարկվել է 2025 թվականի հունիսի 3-ին
Նախաբան.
Վեբ կայքի համար ծրագրային ապահովման համար անվտանգության նկատառումները ցանկացած վեբ ծրագրավորողի ծրագրի եւ կատարման կարեւոր մասն են, մինչ ինժեներական նախատիպը, որը կարող է հուսալի, կայուն եւ օգտակար գործնական նպատակներով: DOM (Փաստաթղթի օբյեկտի նշումը), իր ներդրմամբ HTML, JavaScript, CSS, ինչպես նաեւ Python, C / C ++, Java եւ Bash- ն իրականացնող հետադարձ ծրագրաշարեր, վեբ մշակողներին տալիս է ստեղծագործականություն արտահայտող լայն տեսականի, ապահովում է օգտագործման հեշտությունԵվ ֆունկցիոնալությունը, պատկերացրեք խոնարհությունն ու բնավորությունը եւ տրամադրեք օգտագործման հեշտություն, ինչպես նաեւ հարմարավետություն եւ կարեւոր ծառայություններ, որոնք բոլորն էլ գրավիչ են միջին oe ոյի համար, վերջնական օգտագործողը, որը ցանկանում է կատարել մի բան, սմարթֆոնների վրա: Մարդկանց մեծամասնությունը նույնիսկ չգիտեր, թե որտեղ պետք է սկսել, երբ նրանք ցանկանում են զրոյից կայք կառուցել, նրանք հակված կլինեին սկսել մեկ այլ անձի կայքէջում եւ կառուցել ինչ-որ բան, որը սահմանափակ էԵվ հատկապես ստեղծագործականությունը, երբ նրանք կարող էին ունենալ իրենց տրամադրության տակ գտնվող բոլոր վերջին հզոր գործիքները, որպեսզի առանց վատնիի կոճակները չմշակելու ինչ-որ բան օգտագործելու համար: Եթե այս գրքի միջոցով կարդալու եւ սովորեք մի քանի րոպե եւ սովորեք, թե ինչ եմ ուզում սովորեցնել ձեզ, կամ նույնիսկ անձամբ խոսել ձեր հետ ձեր նպատակների մասին եւ որոշակի առաջնորդություն ստանալՆա ճիշտ ուղղություն է եւ դրդում է սովորել կոդավորել եւ գրել ձեր սեփական ծրագիրը, վերցրեք այս գիրքը տուն եւ որոշ ժամանակ մի կողմ թողեք, թե ինչպես եք ցանկանում ձեզ վրա եւ անում է ձեր բոլոր անհրաժեշտությունները
Իմ մասին. Ես ծրագրային մշակող եմ `C / C ++, Java, Python, HTML, CSS եւ JavaScript- ի փորձի լայն տեսականի: Ես կառուցում եմ այնպիսի կայքեր, որոնք ցանկանում են օգտագործել, ցանկանում են այցելել, եւ նույնիսկ կախվածություն ձեռք բերեք, օգտագործելով ժամանակը սովորելու, վերստեղծելու եւ սպանելու համար, ես վաճառում եմ ծրագրակազմ: Եթե գաղափար ունեիք, թե ինչպես եք ուզում, թե ինչպես եք ուզում կայք նայել եւ գործել, դուք պատրաստ եք ինձ աջակցելու, որպեսզի ես կարողանամ բավարարել ձեր սեփական կարիքներըԻնքներդ ձեզ կներկայացնեի YouTube, Tiktok, Twitter, Google- ը կամ նույնիսկ բարձր տեխնոլոգիաների անվտանգության ծրագիրը միայն կարող եք մուտք ունենալ: Փոխանակ փորձելու ձեզ վաճառել իմ ժամանակը, ես փորձում եմ գնել ձերն է. Եվ թույլ տվեք պարզ լինել, կրթությունը, որը ես տալիս եմ ձեզ, ոչ ֆորմալ: ԴուLD Գնալ դպրոց եւ այս ամենը սովորել պաշտոնական կրթությամբ, կամ նույնիսկ կարդալ այս գիրքը դպրոցում, լրացրեք ձեր հանձնարարությունները եւ ձեզանից լավ տեղավորեք: Ես ձեր պրոֆեսորը չեմ, դուք կարող եք մտածել իմ մասին մի ընկերոջ մասին, ով ցանկանում է ձեզ առաջնորդել դեպի ձեր սեփական հաջողություններով առաջնորդվող կարիերան: Եվ ես ձեզ նույնպես հաջողություն չեմ վաճառում, ձեզ հարկավոր է այն գնել ձեր ժամանակով: Կոդի ուսումը կտրուկ էՈւսման կորը եւ երբեք հեշտ չէր, կամ նույնիսկ պետք է լիներ: Դուք պետք է աշխատեք այնքան դժվար, որքան հնարավոր է, եւ շարունակեք փորձել եւ ձախողվել եւ կրկին փորձել, երբ ինքներդ ձեզ հիասթափված եք: Դա ինքնին կոդի բնույթով է: Կոդը գործարկվում է այն կազմողի կողմից, որը նախատեսված է ծրագրավորողի սխալի հաղորդագրությունները տալու համար, եւ դրանք ձեզ կսովորեցնեն, թե ինչպես պետք է կոդավորել ձեր որոնիչի մեջ եւ կարդալով սխալը: Եվ ես պետք է ասեմ, դուՊետք չէ լինել չափազանց հարուստ, խելացի, հաջողակ կամ նույնիսկ մանրամասն կողմնորոշված կամ կազմակերպված, հավելված կառուցելու համար: Համակարգիչը հոգ է տանում ձեզ համար այդ կազմակերպության մասին: Ուղղակի պետք է համառել փորձության եւ սխալի միջոցով, պահպանել ուշադրության կենտրոնում եւ շատ աշխատել ձեր արածի վրա, եւ այն բանի համար, որ դուք կունենաք շատ հաջողակ կարիերա, թե ինչն է ձեզ համար շատ հաջողակ կարիերա
Ով եմ ես Ես գիտակցում եմ, որ վերջին բաժինը ավելի շատ սովորելու մասին էր, եւ ձեր ուղիները այս գրքից: Ով եմ ես ճիշտ: Դա բարդ հարց է: Ես ինքս ինձ անհասկանալի եմ, քանի որ տառապում եմ բժշկական պայմաններից, որոնք ինձ համար կարող են դժվարացնել նույնիսկ այս գիրքը նույնիսկ այս գիրքը, մինչդեռ իմ կյանքը ավելի բարդացնում է: Մի խոսքով, եթե կարդում եք այս գիրքը, այն բերեցիք տուն, քանի որԴուք շրջեցիք դրա միջով եւ մտածեցիք, որ դա օգտակար է, կամ նույնիսկ եթե պարզապես կարդաք այս հեռավորությունը, ձեզ համար ես նման մտածող անհատ եմ, ով ցանկանում է տեսնել ձեզ, որ հաջողության է հասնում այն ամենի մեջ, ինչ ձեզ հաջողվում է տեսնել: Ես ինքս եմ ինժեներ եմ, ծրագրային ապահովման մշակող եւ ուսանող եմ, եւ ես այս գիրքը գրում եմ այն մյուս ուսանողների համար, ովքեր ցանկանում են իրենց կյանքը ավելի հեշտ դարձնել, որպեսզի նրանք ավելի հեշտ են դարձնում իրենց կյանքը, որոնք համապատասխանում են իրենց կյանքը, որոնք համապատասխանում են իրենց կյանքը, որոնք համապատասխանում են մեծ հանելուկի,NCTEAL, համակցված եւ գրավիչ ծրագիր, որը կարող է հաջողություն վարել, անկախ բիզնեսի գծից: Հիմնականում, սա այն է, ինչ ես անում եմ. Ես ծրագրեր եմ կառուցում, օգնելու ինձ եւ այլ մարդկանց հաջողության հասնելու համար: Ես նաեւ հեղինակ եմ, չնայած սա իմ առաջին հրապարակումն է, որ ես մտադիր եմ լրացնել, որպեսզի իմ պորտֆելը միասին դնի օգտակար փաստաթղթի մեջ, եւ ես նույնպես նկարիչ եմ: Ես դա ձեզ ընդունելու եմ, ես մի տեսակ տարօրինակ մարդ եմ: Ես կատարյալ չեմ, ես վարվել եմ օրենքով, նույնիսկ ինձ տանում էին քոլեջներ թողնելու եւԱյն եւ թողնում է պետությունները, որպեսզի փորձեն ավելի մեծ հաջողություններ ունենալ ինքս ինձ համար: Ես ծննդյան կին եմ, ես հագնում եմ դիմահարդարում, լուսանկարում եմ ինքս ինձ, հագնում զգեստներ եւ կանանց այլ հագուստներ, եւ ես ինքս ինձ համար գիտակցում եմ բնության մեջ: Նախկինում խնդիրներ եմ ունեցել այլ մարդկանց հետ, որոնք հանգեցնում են գրելու եւ վեբ գրքերի կառուցման պայքարի, եւ ես ներողություն եմ խնդրում, որ այս գիրքը շուտով չէի կարողացել: Դուք կցանկանաք կարդալ եւ գրել այնպիսի կոդ, որը նման է իմըIke Mine եւ անում է նույն բանը, բայց նույնիսկ ավելի լավ, քանի որ եթե կարողանաք թույլ տալ այս գիրքը գնել ձեր ստեղնաշարը, ինչպես ես պետք է ստեղծեք այն, որ դուք ունեք ձեր կյանքում: Ես ունեի բոլոր տեսակի խնդիրներ ընտանիքի մեծացման, առողջության պայմանների, բժիշկների, լրատվամիջոցների եւ օրենքի հետ, եւ իմ օրենսգիրքը խորապես արտացոլում է ֆեմինիզմը եւ կին բնությունը բաժանված եւ հիասթափված աշխարհում: Այնուամենայնիվ, այս գիրքը մի բան էԵլունքներ, իմ երեխային, իմ պորտֆելը եւ իմ ապրուստը, այնպես որ ես գնահատում եմ ձեր ուշադրությունը, երբ վերցնում եք տեքստը տուն եւ զգուշորեն ծակոտկեն դրա վրա: Խնդրում եմ հիշեք, որ ես կատարյալ չեմ, այս գիրքը կունենա սխալներ, վերանայումներ եւ նոր հրատարակություններ, եւ ձեզ հարկավոր է մտածել ձեր տրամաբանական ուղեղի հետ, հնարավորինս լավ փորձ ունենալու համար: Նաեւ հասկացեք, որ ես լավ եմ նկատի ունենում ձեզ համար նույնիսկ երբ գրելու ժամանակ մարտահրավերների եք բախվում: Մտածեք դրա մասինԵրբ դուք կարող եք պարզապես վարձել համակարգչային համակարգ, որպեսզի հնարավոր լինի որեւէ բան պատկերացնել թվային տարածության մեջ, պահեք ձեր հանդիպած բոլոր տեղեկությունները, վերլուծեք այն, դուք անխուսափելիորեն կհանդիպեք այն տեղեկատվության հետ, դուք անխուսափելիորեն կհանդիպեք ձեր կողմից ընդունված տեղեկատվության հետ: Ես դա ասում եմ ձեզ, քանի որ հանդիպում եմ նույն դժվարություններին: Օգտագործեք այս գիրքը ձեր ռիսկով, աշխատեք ձեր համայնքի եւ համայնքների հետ, որոնք մատչելի են ձեզ համար `անվտանգ պարամետրերի շրջանակներում ծրագրակազմ կառուցելու համար,Մի վերցրեք իրերը անձամբ, երբ ձախողեք կամ նույնիսկ հաջողության հասնեք սխալ ձեւով. Ահա թե ինչպես եմ ես դա դարձնում այս տեքստը եւ կօգնեմ ձեզ, որ մենք կաշխատենք համացանցային մասշտաբով: Գուցե շատ ծանոթ չլինես, թե ում հետ եմ ընդամենը մի քանի բառի, բայց ես խրախուսում եմ քեզԿարդացեք, դուք կիմանաք ինձ, քանի որ դուք շարունակում եք կարդալ եւ հասկանալ ինձ, ձեր աշխատանքը ավարտելու համար ձեր սեփական նախագծերը կառուցելիս: Այս գրքի հետ տնային գործ չի լինի, քանի դեռ ձեր դասախոսները կամ ուսուցիչները ձեզ չեն նշանակում, բայց ես ձեզ շատ խրախուսում եմ կառուցել ծրագրերի պորտֆոլիո, ինչպես կարդում եք ձեր սովորածը: Իմ Capstone նախագիծը հիմք է հանդիսանում այս գրքում կարդալու մեծ մասի համար, ինչպես դաԿորպորատիվ ծածկագիր իմ նախորդ նախագծերից, ես ստեղծել եւ սովորել եմ գրել եւ սովորել գրել մեթոդականորեն եւ գաղափարների լայն տեսականի եւ խորհուրդներ, որոնք ինձ հաջողությամբ ներկայացվում են, դուք կարող եք տեսնել ձեր ընկերոջը, կամ
Ինչ է այս գիրքը. Այս գիրքը օրինակ, օրինակ է: 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Ընկերության պատկեր, ինչպես նաեւ այն ծրագրաշարը, որը դուք կառուցում եք բացարձակ լավագույն լույսի ներքո, որպեսզի հնարավորինս գրավիչ լինի ձեր վերջնական օգտագործողներին, ձեր կայքի այցելուներին: Այս գրքում ես կցուցադրեմ ծրագրային ձեւավորման մի շարք օրինակներ, որոնց վրա կենտրոնանալով համացանցի, որպես հարթակ, ինչպես նաեւ անվտանգություն: Մենք կսովորեցնենք ուսուցման փորձը `կառուցելով հիմնական նախագիծ, օգտագործելով Unix Shell- ը, պահուստային եւ գրությունների հատկություններով: Այնուհետեւ մենք կուսումնասիրենք բլոգի հիմնական կայքը, արդիականացրեք մեր բլոգը լուսանկարով եւ տեսանյութովS, ինչպես նաեւ օգտագործեք այս հատկանիշները `անվճար ծրագրակազմ օգտագործելու համար անվտանգության լուծումներ կատարելու եւ մեր սերվերը ապահովելու համար` օգտագործելով pluggable նույնականացման մոդուլ (PAM): Այնուհետեւ մենք կվերանայենք ֆայլերի բեռնաթափում եւ վերամշակում, ուսումնասիրելու վիդեո խմբագրումը, ձայնային նվիրատվությունը, շտրիխ-սկանավորման եւ օպտիկական բնույթի ճանաչումը, ի թիվս այլ հասկացությունների: Անապարհին մենք կքննարկենք API- ները, որոնք կօգնեն մեզ մեր ծրագրակազմը դարձնել ավելի օգտակար եւ անվտանգ, անվճար եւ վճարովի տարբերակներ: The անապարհին մենք կքննարկենք ֆիզիկական անվտանգությունը եւՌազմական գործիքներ, ինչպիսիք են հրազենը եւ զինամթերքի ձեւավորումը եւ արտադրությունը, ներառյալ բարելի եւ կրկնակի դիզայնը, պտուտահաստոցը եւ անօդաչու դիզայնը եւ այլ տնօրեններ, որոնք մենք կներկայացնենք մեր ծրագրակազմի վրա `մեր ծրագրակազմը պաշտպանելու եւ ինքնապաշտպանության եւ վերամշակման համար: Մենք կվերցնենք կոտրվածքներ, խաղեր, 2D եւ 3D մատուցող շարժիչներ կառուցելու եւ ներկառուցված ապարատների հետ աշխատելու դեպքում, հիմնական ծավալային մատուցման ծրագրաշարի եւ էլեկտրոնային թրթռման օրինակների ուսումնասիրության օրինակներովհամապատասխանաբար սիլիկոնային ռետինով գցեք: Անապարհին մենք նաեւ կօգտագործենք մեքենայական ուսուցման լուծումներ, որոնք արդեն հասանելի կլինեն `մեր ծրագրակազմը ավելի լավ ապահովելու համար: Գործընթացը շտկելու եւ ապահովելու համար մենք կօգտագործենք նաեւ համացանցի համար մատչելի ֆոնդային գործիքներ: Այս գիրքը վեբ դիմումի կառուցման եւ համակարգչային եւ ներկառուցված մեխանիկական համակարգերի մասնագիտական ցանցի միջոցով ինտեգրելու ուղեցույց էաղացած գիտելիքներ կամ նախորդ փորձ:
Ինչ չէ այս գիրքը. Եթե իսկապես ցանկանում եք ունենալ կայք, ապա պարզապես կարող եք ստեղծել պարզ խանութ եւ վաճառել ձեզ անհրաժեշտ, բլոգ, փակցրեք լուսանկարներ կամ տեսանյութեր, կամ այլ կերպ, առանց որեւէ կոդ գրել: Այս գիրքը դա չէ: Այս գիրքը կսովորեցնի ձեզ, թե ինչպես կառուցել ծրագրակազմ, որն ավելի օգտակար, լիովին ներկայացված է, ֆունկցիոնալ եւ անվտանգ է, քան ցանկացած ծրագիր, որը կարող է տեղակայել այն ամենավերջին ծրագրաշարը, կարող է թանկ լինել, որը դեռեւս նախատիպեր էԳործում են եւ չի դիմում հետընթաց, քարոզված ընկերություններ, որոնք ստեղծվել են գումար վաստակել այն մարդկանց համար, ովքեր իրականում ոչինչ չեն անում: Եթե այս գրքին ուշադիր հետեւեք, կցանկանաք գրել կոդ, հետազոտական կոդ, կառուցել ձեր սեփական ծրագրերը, եւ դուք գումար կստանաք ձեր արածից: Այս գրքից գումար կդարձնեմ նույնիսկ վաղ փուլերում, քանի որ այն պարունակում է տեղեկատվություն, մարդիկ պետք են եւ ցանկանում են կարդալ եւ արդեն գնում են, երբ գնում են կամ օգտագործում են իմ ծրագրերը: Այս գիրքը ձեզ համար ծրագիր չի կառուցի, բայց նշելու էԴուք ճիշտ ուղղությամբ եւ զինեք ձեզ անհրաժեշտ գործիքներով եւ հմտություններ եւ խորհուրդներ, որոնք հեշտացնում են ձեր սեփական հաջողությունները համացանցի համար ծրագրային ապահովման համար, որոնց համար անհրաժեշտ է օգտագործել ձեր եւ ձեր համախոհների, հյուրերի, այցելուների, ընտանիքի, այցելուների, հյուրերի, այցելուների, ընտանիքի, այցելուների, հյուրերի, այցելուների, ընտանիքի համար:
Ինչ կսովորեք. Այս գիրքը ձեզ կսովորեցնի, թե ինչպես ստեղծել եւ վաճառել ծրագրակազմ, իրոք ֆունկցիոնալ, օգտակար ծրագրաշար, մեդիա ձայնագրություն, անվտանգության հնարավոր առանձնահատկություններ, ինչպիսիք են դեմքի ընթերցվող գոտու շտրիխ-սկանավորում, վեբ API- ն, տեսանյութեր եւ լուսանկարներ, ինչպիսիք են Bluetooth- ը եւ մոտ դաշտը (NFC) հաղորդակցվելու համար: Այս գիրքը ձեզ կսովորեցնի, թե ինչպես օգտագործել ցանցային համակարգիչ, կենտրոնանալով Debian Linux- ի վրա, ինչպես կառուցել Bash կոդ, ձեր տեղադրումը եւ կրկնօրինակումԾրագրային ապահովում անթերի, ավտոմատացված քամի, ինչպես կառուցել Python կոդը, որպես դինամիկ հաղորդագրություններ ծառայելու համար, որոնք լավ են օգտագործում CSS ոճերը BootsTrap- ի միջոցով, որոնք ցանցային հաղորդագրություններ են, ինչպես եւ այլ նպատակներ, ձեր ծրագրային ապահովման, Cryptocurrency- ի միջոցով Առեւտուր,Ամուր առաջադրանքներ եւ այլն: Դուք կսովորեք, թե ինչպես կառուցել ձեր սեփական Bluetooth սարքերը, մարտկոցներով, լիցքավորիչներով, միկրոկոնտոլներով, սխեմաներով, շարժիչներով եւ ցուցիչներով, օգտագործելով զոդում, մետաղալարեր եւ 3D տպագիր, ինչպես նաեւ ձուլված նյութեր: Ես կցուցադրեմ 3D դիզայնի տնօրեններ, որոնք կիրառվել են հավելանյութերի արտադրության եւ գործիքների վրա եւ մեռնելու համար, այնպես որ դուք ի վիճակի եք արտադրել ձեր ներդրված, ապարատային սարքերը ինտեգրված մարտկոցներով, լիցքավորիչներով, էլեկտրոնային սխեմաներով: եւ դրանք Bluetooth- ով եւE վեբ: Մասնավորապես, մենք կուսումնասիրենք երկու դեպքի ուսումնասիրություն, թրթռող մերսող եւ տնական հրազեն, ինչպես ծրագրավորված է OpenSCAD- ում, որը հասանելի է գրաֆիկական ինտերֆեյսի կամ հրամանի տողի կոմունալ եւ կարող է ինտեգրվել համացանցում, արագ արդյունքների համար: Դուք կսովորեք, թե ինչպես ստեղծել եւ տեղակայել կայք գետնից, առանց նախնական փորձի, այն դարձնել ֆունկցիոնալ, անվտանգ, գեղեցիկ, օգտակար եւ ամենակարեւորը: Դուք կսովորեք, թե ինչպես օգտագործել մեքենայի ուսուցման եւ համակարգչային տեսլականը `աԿայքի անվտանգ եւ գործնական, ձայնագրեք վիդեո եւ աուդիո ձեր վեբ կայք, նվիրեք ձեր ձայնը, պատրաստեք երաժշտություն եւ մոդուլային աուդիո `օգտակար նմուշներ ստեղծելու համար, որպեսզի կարողանաք ուղղակիորեն կապել ձեր առաջարկած բոլոր օգտակար տեղեկությունները: Այս գիրքը կենտրոնացած կլինի առավելագույնը լրատվամիջոցների, անվտանգության եւ մեքենայի վրաRning, որոնք հիմնական երեք բաղադրիչներն են, որոնք կօգնեն ձեզ ստեղծել օգտակար ծրագիր վեբի համար, ներգրավելով ճիշտ օգտագործողներին եւ սխալներին անջատելով, եւ գործնական, ձեռքերը, եւ ամուր է: Այս գիրքը ուսուցանում է Unix, մասնավորապես Debian (Ubuntu), Bash Shell, Python, HTML, CSS, JavaScript եւ Python- ի նման մի շարք ծրագրային փաթեթներ, ինչպիսիք են GIT- ը եւ FFMPEG- ը, ինչպես Git- ը եւ FFMPEG- ը: Ես ձեզ նաեւ կսովորեցնեմ, թե ինչպեսԱռեւտրի CryptOcurrency- ը ինքնաբերաբար եւ վճարումներ կատարեք Cryptocurrency- ում կամ կանոնավոր դեբետային քարտերից, մինչդեռ նույնիսկ ձեր այցելուները վճարում եք ձեր եկամուտների բաժինը: Ես ձեզ կսովորեցնեմ, թե ինչպես կարելի է գումար վաստակել ձեր կայքից `ինչպես գովազդի միջոցով, ինչպես պատրաստ լինել ձեր ծրագիրը որոնիչների համար եւ առաջին վարկանիշում դասակարգվել է այն, ինչ հնարավոր է շատ ընդհանուր որոնումներ կգտնեք: Ես կսովորեցնեմ ձեզ, թե ինչպես վաճառել ձերFTWARE, գովազդեք այն, դիմեք ձեր ծառայությունները փնտրող հաճախորդներին եւ ինքներդ ձեզ համար անվանեք ինտերնետի միջոցով, որոնք արդեն գոյություն ունեն, ավելի էժան են: Ես կսովորեցնեմ ձեզ, թե ինչպես կարելի է պահպանել ձեր տվյալները ամպային համակարգիչների վրա, որոնք աշխատում են ձեզ համար եւ ավելի էժան են պահում ձեր տվյալները, թե ինչն է ցանկանում ձեր օգտագործողները եւ ինչ եք ուզումD ավելի շատ պողոտաներ, ձեր օգտագործողներին ձեր տրամադրության տակ բերելու ձեր տրամադրության տակ գտնվող կոճակի կտտոցի հետեւում, միայն ձեզ համար ապահովված կոճակի մեջ: Այս գիրքը կկենտրոնանա մեծ քանակությամբ լրատվամիջոցներ հրապարակելու եւ բաշխելու գործնականությունըՀնարավոր լավագույն միջոցը: Դուք նաեւ կսովորեք մի քանի խորհուրդներ եւ հնարքներ, կոդավորման խորհուրդներից, դիմահարդարման եւ լուսանկարչության նման գործնական ունայնությունից, մոդելավորելը եւ գործելը եւ ավելին, ձեր ծրագրակազմը ավելի մեծ ջանքեր գործադրելու համար, քան անհրաժեշտ է: Այս գիրքը կոչվում էԳործնական ցանցի վրա հիմնված խորը ուսուցում եւ անվտանգություն. Պատճառով զբաղվում է այն մասին, որ դուք կներկայացնի ծածկագրերը, մասնավորապես, ցանցի համար, որը կարող է իրականացնել համակարգչային տեսլական, պատկերային ճանաչում, պատկերT, բանաձեւի բարելավում, պատկերի վերնագիր եւ պատկերների համար նախատեսված այլ առաջադրանքներ, ինչպիսիք են պատկերները, ինչպիսիք են պատկերի բնույթը `որպես վավերական, համակարգչային փոխանցված պատկեր կամ օպտիկական պատճեն (պատկերի լուսանկար կամ տպագիր լուսանկար): Մեքենաների ուսումը շատ կարեւոր է, երբ խոսքը վերաբերում է վեբ անվտանգությանը եւ ծրագրային ապահովման անվտանգությանը, քանի որ այն կարող է առաջանալ առաջադրանքներ, որոնք այլապես անհնար էր: Ձեր համակարգիչը կարող է մուտք գործել ձեզ գաղտնաբառով, բայց դա կարող է ավելի անվտանգ լինել այն, եթե այն մուտք է գործում ձեր հետԴուք կարող եք սերվերի համակարգիչ պատրաստել այս անվտանգ, համակարգիչ, որը սովորաբար ձեզ հարցնում է օգտվողի անուն եւ գաղտնաբառ եւ մուտք գործելու համար, միգուցե յուրաքանչյուր նոր մուտքի կամ նոր IP ծրագրի համար հաստատման, հիմնովին ապահովված, եւ հզոր ծրագրաշարը, դա կարող է բավարար լինել: Ձեր ծրագրակազմը շատ սերտորեն կապելով ուրիշի ծրագրակազմին, ինչպես էլփոստի ծառայությունը կամ տեքստային հաղորդագրությունների ծառայությունը, բավարար չէ ձեր ծրագրակազմը անվտանգ դարձնելու համար, կամ որեւէ մեկը (ձեր օգտագործած ցանկացած վայր): Յուրաքանչյուրըo Ստեղծում է համակարգչային անվտանգություն, որն անթույլատրելի անվտանգ է, ինչ-որ իմաստ ունի, թե ինչ է դա ենթադրում: Ծրագրակազմը բնածին անապահով է, քանի որ այն սարքերը եւ հաշիվները, որոնք մենք օգտագործում ենք այն հասանելիությունը, միշտ չէ, որ մեր տրամադրության տակ են, նրանք կարող են ինքնուրույն անձի համար ռիսկի դիմել: Սա այս գրքի ուշադրության կենտրոնում է: Ցանցային համակարգիչը լռելյայն ապահովված է երկար ստեղնաշարի նշանով, զանգված եւ SSH կամ անվտանգ shell ստեղնով եւ այլապես լավագույնն ապահովված էՎեբ սերվերի, քանի որ վեբ սերվերը ապահովում է բաց հասանելիությունը, ինչպես նաեւ ինքնուրույն պահվող արվեստի անվտանգության գործիքների վիճակը: Վեբսերվերը մուտք ունի օգտագործողի վեբ զննարկիչ, որը, հավանաբար, օգտագործողի սարքի ամենահզոր մասն է, քանի որ այն այն վայրն է, որտեղ օգտագործողը կարող է մուտք գործել ցանցային ծրագրակազմ: Այս գործիքակազմը կարող է տեքստ տրամադրել, ձեր տեսած վեբ-էջերը եւ կարող են նաեւ արձանագրել պատկերներ, աուդիո եւ վիդեո (ինչպես դեմքի կամ պետության նույնականացման լուսանկար), կարող է կարդալ եւ գրել Bluetooth ռադիոEvics, եւ կարող եք կարդալ եւ գրել մոտ դաշտի տրանսֆորմատորների պիտակներ, էժան բանալիների քարտեր, ֆոբ, կպչուն պիտակներ, օղակներ եւ նույնիսկ chip իմպլանտներ, որոնք կարող են կարդալ եւ գրվել վեբ կայքի կողմից կապված վեբ սերվերի կողմից առաջացած եւ վավերացված տվյալների միջոցով: Օգտագործելով ձեր տրամադրության տակ գտնվող բոլոր գործիքները, այս գրքով դուք կվերազատեք ինքներդ ձեզ `անվտանգ կայք կառուցելու գիտելիքներով, եւ ընդհանուր ցանցի անվտանգ համակարգչային համակարգ, որն աշխատում է ձեզ համար, կատարում եւ զգում է
Որտեղ սկսել. Դուք ողջունում եք բաց թողնել այն հատվածը, որը ես սկսում եմ այս գիրքը կամ ցանկացած բաժնում, որը անհրաժեշտ է ձեզ անհրաժեշտ ճշգրիտ կոդին, մանավանդ, որ այս գրքում կամ դրա գործնական օրինակներն ունեն: Եթե գրելու կոդ չունեք, ես բարձր խորհուրդ եմ տալիս կարդալ այս ամբողջ գիրքը, եւ հատկապես խորհուրդ եք տալիս կարդալ նախորդ բաժիններըճիշտ է ձեզ համար: Եթե այս գիրքը ճիշտ չէ ձեզ համար, ապա հաշվի առեք այն ընկերոջը կամ հարազատին, ով կարող է հետաքրքրվել իրենց կողմից վեբ զարգացման մասին սովորելուն եւ նրանցից ստացվող այլ ուսուցիչներ: Սկսեք այնտեղ, որտեղ դուք կցանկանաք, այս գրքի յուրաքանչյուր մասը օգտակար կլինի, եթե մտադիր եք օգտակար ծրագիր կառուցել, եւ հաշվի առեք, որ լավագույն ծրագրերը տեղադրված են ձեր հաճախորդին: ԱյժմԻմացեք ինձ, դուք գիտեք այս գիրքը, եւ դուք պատրաստ եք սկսելու: Սկսելու համար համակարգիչը գրավել (նույնիսկ տուփի խանութի ամենաէժան նոութբուքը, Amazon- ը կամ հին աշխատասեղանը աշխատում է եւ այն սահմանում է այնպես, որ աշխատի
Ինչպես կարդալ այս գիրքը. Տեքստը կարեւորեց, նշում է, որ տեքստը պատկանում է հրամանի հուշումին, որտեղ դուք կգրեք ձեր գործարկած ծածկագիրը: Հրամանի հուշումը խիստ ստեղնաշար է կենտրոնացած եւ քիչ կտտացնում է սեղմում, արագացնելով ձեր աշխատանքային հոսքը եւ ձեզ վրա ավելի հեշտացնելը:
Սկսել. Եկեք սուզվենք: Մենք կսկսենք տեղական մեքենայի վրա ծածկագիր կառուցել եւ սկսել առանց ինտերնետին միացված կայք կառուցելու: Սա ավելի անվտանգ է սկսել, ոչինչ չի ծախսում եւ ձեզ համար հեշտ է: Կախված ձեր գործառնական համակարգից, բաշի կեղեւի մեջ մտնելը մի փոքր այլ կլինի: Mac OS- ի համար խորհուրդ եմ տալիս այս պահին վիրտուալ մեքենա տեղադրել, քանի որ դուք կստանաք առավելագույն համատեղելիությունը վիրտուալ մեքենայի հետ: Տարբեր պրովայդերներ, ինչպիսիք են վիրտուալ տուփը եւ Պարալելսը կարող են գործարկելՎիրտուալ մեքենա ձեզ համար, չնայած հնարավոր է նաեւ Ubuntu տեղադրել ուղղակիորեն մեքենայի վրա, եթե նախընտրում եք օգտագործել հայրենի միջավայր, որը առաջարկվում է արագ, պարզ փորձի ստեղծման համար: Եթե դուք օգտագործում եք Linux կամ Windows, որը ես խորհուրդ եմ տալիս, պետք է լինի բավականին հեշտ նախագիծ ստեղծելը: Բացեք ձեր տերմինալը, կարգավորեք չափը, երբ տեսնեք տեղավորումը եւ սկսեք հետեւել քայլ 2-ին: Եթե Windows- ը օգտագործում եք, խնդրում ենք հետեւել քայլին
Քայլ 1. - Միայն Windows- ի օգտվողները Windows- ում բաց հրամանի հուշում, որպես ադմինիստրատոր եւ տեսակը WSL -Install
Քայլ 2. - Շարունակեք այստեղ, կամ բաց թողեք այստեղ, եթե չօգտագործեք Windows- ը Բաց տերմինալում (կախված ձեր ՕՀ-ից, որը կոչվում է Ubuntu Windows- ում, Terminal Mac- ում կամ Linux- ում կամ նման անուն), սկսեք նախագիծ ստեղծել: Մենք դա անում ենք Mkdir հրամանի հետ, որը գրացուցակ է ստեղծում: Եթե Ձեզ անհրաժեշտ է ստեղծել գրացուցակ, ձեր նախագիծը պահելու համար, որը առաջարկվում է, օգտագործեք CD հրամանը, գրացուցակին փոխելու համար եւ եւ
CD / PATH / TO / տեղեկատու. Ուղին այն թղթապանակներն են (ֆայլերը), որոնք նախորդում են ձեր նպատակակետային գրացուցակը, ձեր լռելյայն ուղին ~ կամ / տուն / օգտվողի անուն (որտեղ օգտագործողի անունն է): Փոխվել լռելյայն գրացուցակում, մուտքագրեք CD կամ CD MKDIR օրինակ - «Օրինակ» -ը փոխարինել գրացուցակի անունով
Այժմ դուք ունեք աշխատանքային գրացուցակ ձեր նախագծի համար: Լինելով այնքան կարեւոր, որ այս գրացուցակը պահվի, եթե անհրաժեշտ է անցնել այլ մեքենայի կամ տեղակայել ձեր գրած կոդը, որպեսզի այն պատրաստ լինի համացանցում: Բայց սցենարի կառուցումը մի քիչ կոդ է պահանջում, եւ ծածկագիրը պետք է ավտոմատացված լինի հնարավորինս օգտակար լինելու համար: Այսպիսով, եկեք սցենար կառուցենք `առաջին հերթին սցենարներ կառուցելու համար: Սկսենք սցենարը ստեղծելուց եւ գործադիր դարձնելով:Մենք կօգտագործենք սուդո, chmod եւ շոշափենք դրա համար եւ կզանգահարենք սցենարը
sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Այժմ մենք ստեղծել ենք սցենարը, այն գործարկվել է, եւ պատրաստ ենք խմբագրել այն: Nano- ն տեքստային խմբագիր է, որը թույլ կտա ձեզ խմբագրել տեքստը առանց կտտացման, ինչը շատ ավելի հեշտ է, քան գրաֆիկական ինտերֆեյսի օգտագործումը: Նանոյի հետ ֆայլը խմբագրելու համար օգտագործեք Nano- ն, ապա ֆայլի ուղին: Սցենար պատրաստելու համար, որը պատրաստում է սցենար, առաջին հերթին մեր սցենարը դարձնում է: Մենք կօգտագործենք նույն ծածկագիրը, ինչպես վերեւում, փոխարինելով սցենարի անունը, «Ascript» փաստարկային պարամետրով, 1 դոլար: Սա մեզ թույլ է տալիս զանգահարելՍցենարը `մուտքագրելով Sudo Ascript- ի լրագիրը, որի պահին մենք կարող ենք ստեղծել ցանկացած նոր սցենար` փոխարինելով «Newscript» - ը ձեր սցենարի անունով: Նանոյի ծածկագիրը պետք է նայի
sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
Նանոն փակելու համար մենք կարող ենք ներքեւ պահել հսկիչ ստեղնը եւ սեղմել X, ապա y- ին `մենք նշում ենք, որ մենք խնայում ենք ֆայլը: Այժմ սցենարը խմբագրելու այս երեք հրամաններ մուտքագրելու փոխարեն, մենք կկարողանանք մուտքագրել Sudo Ascript Ascript- ը, կրկին գրությունը խմբագրելու համար: Այս գործում է: Եվ ցանկացած նոր սցենար կարող է հեշտությամբ գործարկել `զանգահարելով այն կճեպի մեջ: Եկեք պահենք մեր աշխատանքը հիմա. Եկեք գրենք կրկնօրինակի սցենար, մեր նոր սցենարը պահպանելու համար, այնուհետեւ այն հետադարձելու մեր ծրագրի գրացուցակում, միաժամանակ կրկնօրինակում եք պահուստային սցենարը:
sudo ascript backup
Հիմա, Նանոյում.
sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Որտեղ / ուղի / to / գրացուցակն է MKDIR- ի հետ ստեղծած նախագծի ուղին: Ավելի ուշ մենք կսովորենք, թե ինչպես կարելի է այսպիսի կրկնել այն ուղիները, որոնք կարող են լինել հանգույցով եւ ցուցակից, ինչը պակաս կոդ է, բայց այժմ մի քանի տող ունենք: Այս սցենարը գործարկելու եւ ձեր ծածկագիրը պահելու համար ֆայլը պահեք Nano- ում `հսկիչ + X, Y եւ վերադարձրեք եւ մուտքագրեք ներքեւում ձեր կեղեւի մեջ
backup
Եթե այս գիրքը կարդալը եւ Shell- ի հետ միասին հետեւելով գաղտնաբառով գաղտնաբառով գաղտնաբառ, խնդրում ենք մուտքագրեք ձեր օգտվողի գաղտնաբառը ճիշտ, դուք կունենաք երեք անգամ փորձարկել: Կարող եք օգտագործել վերեւ եւ ներքեւ նետերը Rerun հրամաններ վերափոխելու եւ դրանք խմբագրելու համար, պետք է երկու անգամ որեւէ բան գործարկեք: Պարզ սեղմեք վերեւ եւ ներքեւ ընդմիջմամբ, հրամանը ընտրելու համար, նախքան հրամանը ճիշտը խմբագրելը, ձախ սլաքներով եւ ջնջեք ստեղնաշարի, ինչպես նաեւ ստեղնաշարի միջոցով:
Շնորհավորում ենք Դուք հասցրել եք ստեղծել ավելի զարմանալի պահուստային սցենար, որը կրկնօրինակում է ձեր աշխատանքային գրացուցակում երկու կարեւոր shell սցենարներ: Մենք կարող ենք գործերը ավելի ուշ տեղափոխել, քանի որ նախագիծն ավելի է մեծանում, բայց այս առայժմ սա աշխատում է: Եկեք անցնենք ամպի մեջ սատարելու համար, մենք դրա համար կօգտագործենք Github- ը (չնայած կրկնօրինակի համար կան բազմաթիվ GIT լուծումներ, դրանք բոլորը նույնն են, երբ դրանք թույլ են տալիս պահպանել ձեր համակարգչային համակարգը, մինչդեռ դրանք դարձնում են սերվերի վրա:հնարավորություն տալով ներբեռնել ձեր ծրագրաշարի ամբողջ պատճենները գաղտնաբառի կամ բանալու հետեւում: Դա օգտակար է ձեր ծրագրաշարը խնայելու համար, մանավանդ, երբ մենք գաղթում ենք Linux- ի դեպքերը, որոնք երբեմն կոտրվում են, երբ կոդի մեկ տող ձախողվում է, մինչդեռ ձեր ծածկագիրը կարող է ինքնաբերաբար չկատարել
Եթե այս պահին դուք արդեն չեք օգտագործում Ubuntu վիրտուալ մեքենա, ես այս պահին ընդունում եմ Ubuntu վիրտուալ մեքենայի օգտագործումը, քանի որ այն կդարձնի ձեր կյանքը `ձեր համակարգչում կառուցելու համար անհրաժեշտ բոլոր փաթեթները տեղադրելու համար: Մենք մոտ ապագայում ծածկագիրը կտեղափոխենք վեբ սերվերին, բայց մենք ուզում ենք համոզվել, որ մեր վեբ սերվերի հետեւում կա առնվազն մի քանի շերտեր, որոնք դիմացկուն են ֆիշինգի դիմացԴա անելու համար Linux փաթեթների քանակը: Եթե դուք դեռ ցանկանում եք օգտագործել Mac OS, ողջունում եք որոնել եւ տեղադրել անհրաժեշտ փաթեթներ առցանց, բայց այս գրքի կամ շարքի յուրաքանչյուր փաթեթի համար այլընտրանք չի կարող լինել
Եկեք ավելացնենք մի քանի հրամաններ, որպեսզի մեր աշխատանքը կատարեն պահուստային սցենարի միջոցով, գործադրելով հրամանը Sudo Ascript Backup:
# ...
Կրկին վերահսկեք x փրկելու համար:
Այժմ մենք պետք է այս նախագծի համար մեկ անգամ կազմաձեւենք: Քանի որ շուտով դա կլինի GIT նախագիծ, մենք պետք չէ ամեն անգամ մուտքագրել յուրաքանչյուր հրաման, ամեն անգամ, երբ տեղակայվում ենք Git- ի պահեստից, բայց մենք կկարողանանք կախել մեր տեղակայման սցենարները: Սկսելու համար, եկեք համոզվենք, որ մենք ճիշտ գրացուցակում ենք եւ նախաստորագրում ենք GIT պահոցը եւ առաջացնում SSH ստեղներ:
cd /path/to/directory
git init
git branch -m master
ssh-keygen
SSH-Keygen մուտքագրելուց հետո նոր բանալին պետք է պահվի տան թղթապանակում, որը կոչվում է :SSH: Այն կոչվում է ID_RSA.pub: Եկեք գտնենք այս բանալին եւ պատճենենք այն: Տեսնել այն,
cd ~
cat .ssh/id_rsa.pub
Պատճենեք այն տեքստը, որը վերադարձվում է վերջին հրամանի միջոցով եւ ստեղծել հաշիվ ձեր Git մատակարարի հետ (իդեալական github), նախքան SSH ստեղնը ձեր հաշվի ավելացումը: Հաշիվ ունենալուց հետո կտտացրեք վերին աջ ընտրացանկը եւ մուտքագրեք պարամետրեր, նախքան ձեր SSH ստեղնը SSH եւ GPG ստեղներով ավելացնել ցանկի ներքո: Ընտրեք Ավելացնել SSH ստեղնը եւ ավելացնել ձերոները `այն տեղադրելով եւ տիտղոս տալուց առաջ, նախքան Github- ը պահելը եւ վերադառնանք նոր պահեստ: Սա նման է այլ GIT պրովայդերների, ձեզ հարկավոր կլինիկարդալ իրենց փաստաթղթերը: Նոր պահեստային կազմաձեւում տվեք ձեր պահեստային նկարագրիչ անուն եւ որոշեք, արդյոք ցանկանում եք այն հրապարակել եւ համոզվեք, որ կազմաձեւեք ֆայլեր: Պահեստը ստեղծելուց հետո պատճենեք կլոնը SSH URL- ով եւ տեղադրեք հետեւյալը
git remote add git://… (your remote URL)
Այժմ դուք կարող եք վերադառնալ ձեր պահեստին CD- ով, դուք ծանոթ կլինեք դրան: Փորձեք ձեր պահուստային սցենարը այժմ պահուստով
Հիանալի Այժմ մենք իսկապես կարող ենք կոդավորում: Եկեք տեղադրենք django- ն, երբ մենք լավ հասկացանք բաշի եւ git- ի վրա: Django- ն ինքնաբերաբար կթողարկի մեր ծրագրակազմը, Bash- ը նույնպես կարող է դա անել, բայց django- ն պետք է ունենա ավելի պարզ ավելի անվտանգ իրականացում (այն կարող է ավելի հեշտությամբ կարգավորել եւ կազմաձեւվել):
Ubuntu- ում ծրագրակազմ տեղադրելու համար մենք կօգտագործենք SUDO APT-GAT- ի հրամանը: Նախ, եկեք թարմացնենք եւ արդիականացնենք մեր արդեն ունեցած ծրագրակազմը: Դա կարելի է անել Sudo Apt-Get- ի թարմացման եւ Sudo Apt-Get- ի արդիականացման միջոցով: Հաջորդը, եկեք տեղադրենք Python- ը եւ մեր վիրտուալ միջավայրը, մեր օրենսգրքի տունը հետեւյալ հրամանով. Sudo Apt-Get Տեղադրեք Python-Is-Python3 Python3-Venv
Սա այն ամենն է, ինչ դուք պետք է գնաք Django- ի հետ, Ubuntu- ի օրինակով ծրագրային ապահովման տեղադրումների առումով: Windows- ի եւ Linux- ի համար սա պետք է լինի բավականին պարզ, բայց Mac- ի համար գուցե ցանկանաք վիրտուալ մեքենա եւ linux տեղադրել անվճար կամ վճարովի վիրտուալ միջավայր `վիրտուալ տուփի կամ Paralells աշխատասեղանի նման: Ubuntu- ն այս դեպքում կրիտիկական է, քանի որ այն ծրագրաշարն է, որը վարել է կայքերը, եւ այն հնարավորություն է տալիս նրանց հյուրընկալել կայքերվերոհիշյալ բոլորը
Եկեք փորենք Dj անգոյի մեջ:
Նորից մեր գրացուցակում, CD- ով.
python -m venv venv # Ստեղծում է վիրտուալ միջավայրը, որտեղ ծածկագիրը պահվում է
source venv/bin/activate # Ակտիվացնում է վիրտուալ միջավայրը
django-admin startproject mysite . # Որտեղ իմ ներկայիս գրացուցակում ես սկսում եմ նախագիծը:
Dj անգոն պարզապես սկսում է մեզ սկսել, քանի որ angoango- ն հյուրընկալում է վեբ սերվերին եւ անում է այն ամենը, ինչ մենք պետք է ստանանք հիմնական տեղական կայք եւ վազք: Այժմ, երբ մենք տեղադրեցինք ang ango, եկեք մի փոքր խմբագրենք կարգավորումները, որպեսզի այն աշխատի, թե ինչպես մեզ անհրաժեշտ է: Նախ, եկեք ստեղծենք նոր ծրագիր
python manage.py startapp feed
Դուք կնկատեք, որ առաջին ծրագիրը կոչվում է հոսք: Հավելվածը պետք է կոչվի այն ամենը, ինչ ցանկանում եք, եւ մենք կստեղծենք նոր ծրագրեր, բայց յուրաքանչյուր ծրագրի անվանումը պետք է լինի հետեւողականորեն յուրաքանչյուր անգամ, երբ ծրագիրը վկայակոչվի: Նոր ծրագիր ավելացնելու համար մենք միշտ խմբագրելու ենք պարամետրերը: Օգտագործելով Nano,
nano app/settings.py
Կարգավորումներում գտեք տեղադրված_Apps- ը եւ առանձնացրեք [3 տող: Օգտագործելով չորս տարածքներ դատարկ կենտրոնի գծի վրա, ավելացնել «Կերակր» կամ ձեր ծրագրի անվանումը: Պարամետրերի այս բաժինը: ՀՊԸ-ն պետք է լինի.
INSTALLED_APPS = [
'feed',
]
Մոռանալուց առաջ եկեք փորձենք, որ ang ango- ն աշխատում է: Օգտագործելով հրամանի Python Կառավարումը:
Այժմ, եկեք փորենք որոշ Python կոդ: Django- ն ունի երեք հիմնական բաղադրիչ, բոլորն ամբողջությամբ աշխատում են կոդով: Բաղադրիչները կոչվում են մոդել, դիտում եւ ձեւանմուշ, եւ յուրաքանչյուրը համապատասխանաբար ավելի բարձր եւ ցածր մակարդակի վրա է, նախքան վեբ-էջը առաքվում է օգտագործողին:
Մոդելը այն կոդն է, որը պահում է տվյալների բազայում տեղեկատվություն որոնման, տեսակավորման եւ մատուցման համար:
Տեսարանը որոշում է, թե ինչպես է մոդելը մատուցվում, շահարկում եւ փոփոխում, գրեթե յուրաքանչյուր տեսակ էլ ուղղակիորեն կօգտագործի մոդելը:
Կաղապարը HTML կոդն է `որոշ լրացուցիչ զանգեր եւ սուլիչներ, որոնք կոչվում են կաղապարի լեզու: Կաղապարը մատուցվում է այն տեսակետին, որտեղ այն լցված է Python կոդով եւ համատեքստով, ինչպիսիք են մոդելներն ու տեղեկատվությունը (USUALL տողեր եւ ամբողջական տեղեր):
Dj անգոն նույնպես այլ բաղադրիչներ ունի, ներառյալ, բայց չի սահմանափակվում.
Կարգավորումներ, որոնք կազմաձեւում են ծրագիրը, ինչպես մենք քննարկեցինք:
URL- ները, որոնք նախշերով են, որոնք օգտագործողը հետեւում է, ցանցի դիմումի հատուկ մասեր ստանալու համար:
Ձեւաթղթեր, որոնք սահմանում են, թե ինչպես են տեղեկությունները, որոնք ուղարկվում են սերվերին, վարվում եւ մատուցվում են տվյալների բազայում, ինչպես նաեւ օգտագործողին: Սրանք սերվերի կողմից տեղեկատվության մշակման հիմքն են եւ կարող են ընդունել ցանկացած տեսակի տեղեկատվություն համակարգչային խանութներ, առավելապես տեքստի տողեր, համարներ եւ ճշմարիտ / կեղծ բուլյաններ (սովորաբար տուփ):
Կաղապարները, որոնք HTML կոդ եւ ձեւանմուշ լեզու են եւ կամուրջ են python- ի եւ HTML- ի միջեւ, նկատի ունենալով Python- ի տեղեկատվությունը, որը կարող է լինել HTML կոդ, որը կարող է ապահովել վեբ-կայք, որը պետք է լինի տարբեր նպատակների համար, որը պետք է լինի տարբեր նպատակների համար:
Ստատիկ ֆայլեր, որոնք սովորաբար JavaScript- ի եւ IT- ի գրադարաններն են, որոնք սերվերը մատուցում եւ կապված են ձեւանմուշի հետ:
Լրատվամիջոցների ֆայլեր, որոնք սերվերը ծառայում կամ արտաքին հյուրընկալվում են, կամ պարզապես գրված է սերվերին, նախքան վերամշակումը եւ տեղադրվում է մեկ այլ սերվեր (դույլ):
Middleware, որը ծածկագրերի կտոր է, որը գործարկվում է միեւնույն ժամանակ, ինչպես յուրաքանչյուր տեսակետ եւ համարվում են «ներառված» տեսանկյունից:
Համատեքստի պրոցեսորներ, որոնք մշակում են յուրաքանչյուր դիտման համատեքստը եւ օգտագործվում են լրացուցիչ համատեքստ ավելացնելու համար:
Թեստեր, որոնք վավերացնում են, որ օգտագործողը կամ հարցումը անցնում է որոշակի պահանջներ, նախքան տեսարանը մատուցելը:
Սպառողները, որոնք թելադրում են, թե ինչպես են վեբ-խաղերը բռնում եւ արձագանքում հաղորդակցությանը:
Ադմինիստրատոր, որն օգտագործվում է մոդելները գրանցելու համար, որպեսզի դրանք մանրամասնորեն շահարկվեն Django ադմինիստրատորի էջում, որտեղ տվյալների բազան կարող է իրականացվել գրաֆիկական ինտերֆեյսի միջոցով:
Նեխուրը, որը սահմանում է ասինխրոն առաջադրանքներ Django ծածկագրի մասերը կարող են սկսվել առաջ անցնել առաջ հաջորդ առաջադրանքի կամ կոդի շարքը:
Django- ն կարող է ունենալ շատ այլ բաղադրիչներ, որոնք մենք մանրամասն կքննարկենք այստեղ: Django ավելի ֆունկցիոնալ պատրաստելու շատ եղանակներ կան, ավելացնելով ցանցեր, որոնք արագ, արագացված հաղորդակցման ալիքներ են, նեխուր, որոնք իրականացվում են ապարատի գործառույթների մեծ մասի համար: Դիտելու գործառույթները առանցքային են, քանի որ նրանք սովորաբար հայտարարում են կոդերի յուրաքանչյուր կտոր, որը հատուկ է հատուկ URL օրինակին,կամ մի հատված
Նախ, եկեք ուսումնասիրենք դիտման գործառույթները: View գործառույթները սկսվում են ներմուծումից, որոնք նշում են կոդը, որոնք կօգտագործվեն տեսանկյունից եւ սահմանվում են կանոնավոր գործառույթի սահմանումներ կամ դասեր: Ամենապարզ տեսակետները սահմանվում են գործառույթի սահմանմամբ Def- ի եւ HTTPResponse- ի միջոցով `հիմնական ձեւանմուշով: Եկեք սկսենք սահմանել հիմնական տեսակետը «Բարեւ աշխարհ» տեքստը վերադարձնելու համար: Հիշեք, որ ամեն անգամ Def- ի նման հայտարարությունից հետո կոդ ավելացնելուց հետո, եթե, մինչդեռ, եւ այլն, ձեզ հարկավոր է ավելացնել 4 տարածքներ յուրաքանչյուրի համարՆախորդ սահմանումներ, որոնք կցանկանայիք դիմել ձեր գործառույթին: Մենք կստանանք դրանցից յուրաքանչյուրը
Մեր կայքի գրացուցակից խմբագրեք Feed / Views.py ֆայլը, օգտագործելով Nano եւ ֆայլի վերջում ավելացնել հետեւյալ տողերը:
from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
Django- ի HTTPResponse- ը պատասխանում է տեքստային լարով, որը նշվում է բացման եւ փակման հետ: Ամեն անգամ, երբ տեղեկատվություն եք փոխանցում գործառույթի կամ դասի, ինչպես պահանջը կամ լարը, ձեզ հարկավոր է օգտագործել փակագծեր (, բացում եւ փակման):
Դա այն ամենը չէ, ինչ մենք դեռ պետք է տեսնենք մեր տեսակետը: Իհարկե, մենք չենք ասել սերվերին, որտեղ տեսքը ճիշտ է, մենք դեռ պետք է սահմանենք մի ուղի, որով պետք է տեսքը մատուցի: Եկեք սկսենք սահմանել հիմնական ուղին ծրագրի / urls.py- ում, եւ ավելի ուշ կվերանանք ուղի խմբերի:
Հավելվածում / urls.py- ում ներմուծման հայտարարություններից հետո մի տող ավելացրեք այն տեսանկյունից, որը մենք պարզապես ստեղծեցինք:
from feed import views as feed_views
Հիմա եկեք սահմանենք դիտման ձեւը: Դիտեք նախշերը ունեն երեք բաղադրիչ, ուղու բաղադրիչը, որը պատմում է սերվերին, որտեղ տեսքը կա, որ տեսարանը տեղադրվի, որպեսզի այն լինի, եթե անհրաժեշտ է, ապա անհրաժեշտ է, որ անհրաժեշտ է տեղավորել եւ ավելի շատ տեղ զբաղեցնելՏրամաբանական անվանումը: Իմաստ է այս ձեւերը անել եւ ճկուն լինել, քանի որ ձեր օրենսգիրբարդը կլինի անընդհատ փոփոխվող միջավայր, որն անհրաժեշտ է ճկունություն եւ իմպրովիզացիա, որպեսզի արժեքավոր եւ հեշտ լինի աշխատել: Ահա թե ինչ տեսք կունենա ձեր տեսակետը, կարող եք սա ավելացնել Urlpatterns- ին = [հավելվածի բաժին / urls.py: Տեսքի ձեւը սահմանվում է վերը նկարագրված երեք բաղադրիչներով եւ գործառույթ, որը կոչվում է ուղի: Ձեր URL- ի նախշերը ցուցակ են, այնպես որ համոզվեք, որ միշտ վերջացնեք յուրաքանչյուր իրը նրանց հետomma, քանի որ սա առանձնացնում է յուրաքանչյուրը: Յուրաքանչյուր կետ պետք է գնա նաեւ նոր գծի, մեկ անգամ եւս չորս տարածքով `դրա առջեւ, ինչպես հավելվածը պարամետրերում: Տեսքի առաջին բաղադրիչը կբերենք դատարկ լարային գործառույթով, որպեսզի ստեղծենք այնպիսի տեսակետ, որն աշխատում է վեբ սերվերի արմատային գրացուցակում: Ձեր urls.py- ն այժմ պետք է նման լինի
from feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
Սա հիմք է հանդիսանում Dj անգոյի հետ կայք ստեղծելու համար, որը լիովին ստատիկ է: Որպեսզի ավելի դինամիկ կայք ստեղծվի, որտեղ մենք կարող ենք սկսել պահոցային տեղեկատվություն, ինչպես պատկերները, տեսանյութերը, աուդիո եւ այլն, մենք պետք է օգտագործենք մոդելներ, որոնք մենք կքննարկենք հաջորդը: Հիմա եկեք ստուգենք մեր ծածկագիրը եւ գործարկենք սերվերը: Սխալների համար ծածկագիրը ստուգելու համար վազեք.
python manage.py check
Եթե կա սխալի հաղորդագրություններ, ապա պետք է ուշադիր վերանայեք ձեր ծրագրին կատարած փոփոխությունները եւ տեսեք, թե արդյոք կա որեւէ բան, ինչպես նաեւ արտառոց կամ տարածքի պակաս, որեւէ այլ կերպար, ցանկացած այլ կերպար: Կարդալու սխալի հաղորդագրության միջոցով (եթե ունեք մեկը), դուք պետք է կարողանաք տեսնել ձեր ստեղծած ֆայլի ուղին, որը ստեղծեցիք կամ խմբագրվել է գծի համարի հետ միասին, այնպես որ կարող եք որեւէ բան շտկելԴա այնտեղ է: Եթե դուք ֆիքսել եք խնդիրը, կրկին գործարկեք վերը նշված հրամանը: Երբ ձեր ծրագիրը պատրաստ է գործարկել եւ աշխատել, կտեսնեք, որ արդյունքը «համակարգի ստուգում չի հայտնաբերվել»: Հիմա պատրաստ եք գնալ: Գործարկել սերվերը
python manage.py runserver 0.0.0.0:8000
Այժմ բացեք վեբ զննարկիչը եւ նավարկեք http: // localhost: 8000: Դուք պետք է տեսնեք, որ ձեր կարծիքով HTTPRESPONSE- ի գործառույթի փակագծերում վերադարձված տեքստը: Սա ընդամենը հիմնական օրինակ է, բայց եթե դուք դա արել եք այսքան հեռու, հասկանում եք այն հիմունքները, թե ինչպես են Linux- ը, Bash- ը, Python- ը եւ Django աշխատանքը: Եկեք ավելի խորը փորենք տվյալների բազայի որոշ մոդելավորում եւ ուսումնասիրենք Python դասի ուժը տեղեկատվության պահպանման գործում: Այնուհետեւ մենք կսկսենք բռնել HTML- ի եւ CSS- ի վրա, նախքան մեր կայքը լիարժեք դարձնելըՀատուկ, ճկուն եւ անվտանգ, օգտագործելով JavaScript եւ Machine
Դասերը պահվում են ձեր ծրագրի մոդելներում: Օգտագործելով Nano, խմբագրել ծրագիրը / մոդելները եւ ավելացնել նոր դաս: Դասը սահմանվում է դասի սահմանման միջոցով եւ անցնում է գերծանրքաշային կարոտ, որը այն ժառանգում է, այս դեպքում մոդելներում: Դասի անվանումը գալիս է դասի սահմանումից հետո, եւ դասի որոշումից հետո. Մեր դասի համար անհրաժեշտ է նույնականացման համար, որը մենք կարող ենք օգտագործել այն ստանալու եւ այն եզակի պահելու համար, եւ դա նույնպեսՈրոշ տեղեկություններ պահելու համար անհրաժեշտ է տեքստային դաշտ: Ավելի ուշ մենք կարող ենք ավելացնել ժամանակացույց, ֆայլեր, բուլյաններ (իրական կամ կեղծ սահմանումներ, որոնք կարող են օգնել մեր ծածկագրին որոշումներ կայացնել այն մասին, թե ինչ անել մոդելի հետ, եւ ավելին: Եկեք բացենք ծածկագիրը
from django.db import models # Ներմուծումը, որն օգտագործվում է մեր դասը սահմանելու եւ դրա հատկանիշների սահմանման համար
class Post(models.Model): # Մեր դասի սահմանումը ինքնին
id = models.AutoField(primary_key=True) # Մեր մոդելի ID- ն, ինքնաբերաբար առաջացած բանալին, որը մեզ թույլ կտա հարցնել մոդելը, այն եզակի պահեք եւ այն է, երբ այն ստեղծվելուց հետո անհրաժեշտ է շփվել մոդելի հետ:
text = models.TextField(default='') # Մեր դասի խանութները վերագրում են այս դեպքում, որոշ տեքստ, լռելյայն դատարկ տողի համար:
Փակել եւ պահպանել ֆայլը, ինչպես նախկինում ավարտեցինք:
Կան բազմաթիվ այլ ոլորտներ եւ տարբերակներ, որոնք մենք կքննարկենք, երբ մեր ծրագիրը թարմացնենք, քանի որ մեր ծրագիրը զարգանում է որոշակի տեքստը տեղադրելու համար ծրագիր ստեղծելու հիմնական անհրաժեշտությունները: Այնուամենայնիվ, այս մոդելը միայնակ չի աշխատի: Ինչպես նախկինում նկարագրված է, այս մոդելի աշխատանքը կատարելու համար մեզ հարկավոր կլինի սովորական տեսք եւ պատվերով URL օրինակ: Եկեք նախ ուսումնասիրենք ձեւը:
Ձեւաթուղթը սահմանելու համար, խմբագրել ծրագիրը / Forms.Py- ը Nano- ի հետ եւ ավելացնել հետեւյալ տողերը: Մեզ անհրաժեշտ կլինի երկու ներմուծում, մեր ձեւերի դասը, ինչպես նաեւ մեր ստեղծած մոդելը (Feed.models. Ձեւաթուղթը կարող է ունենալ նաեւ նախաստորագրման գործառույթ, որը այն սահմանում է `հիմնվելով խնդրանքով, մոդելային կամ այլ կերպ, մենք դա կքննարկենք ավելի ուշ:
Մոդելի ձեւերն այնքան օգտակար են, քանի որ նրանք կարող են ստեղծել մոդել կամ նաեւ խմբագրել մոդել, ուստի մենք դրանք կօգտագործենք երկուսի համար: Եկեք մի ձեւաթղթեր սահմանենք ստորեւ:
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',)
Սա է այն հիմքերը, թե ինչպիսին է ձեւը եւ մոդելը: Այս մոդելի ձեւը կարող է օգտագործվել գրառումը պահելու կամ խմբագրելու համար, որը պարունակում է իր պարունակող տեքստը: Հաջորդը կանդրադառնանք այս ձեւի ինտեգրմանը: Նախ, եկեք ստեղծենք գաղթը եւ գործուղվենք տվյալների բազան, որպեսզի մեր ծածկագիրը կարողանա շփվել մոդելի հետ, երբ այն անցնի: Դա անելու համար գործարկեք հետեւյալ հրամանները.
python manage.py makemigrations
python manage.py migrate
Դա կկատարի մեկ րոպե, կատարելու համար, բայց երբ դա տեղի ունենա, դա թույլ կտա մուտք գործել մոդել, տեսանկյուններին, միջին ցուցանիշներում կամ ցանկացած այլ ծրագրի մեջ: Եկեք շարունակենք կարծիք հայտնելով, թե որտեղ կարող ենք տեսնել մեր մոդելը: Խմբագրել Feed / Views.py եւ ավելացնել հետեւյալ ծածկագիրը, ինչպես նշված է: Ձեզ հարկավոր չէ որեւէ բան ավելացնել # նշանից հետո, այդ ծածկագիրը մեկնաբանություններ են, որոնք օգտագործվում են կոդի մասին տեղեկատվությունը նշելու համար: Մենք կսկսենք մեր մոդելը ներմուծելով տեսակետներում եւ ավելացնել այն համատեքստում, որտեղ մենք կարող ենք այն մատուցել աԿաղապար, որպես ցուցակի ցուցակ: Հաջորդը, մենք կավելացնենք այն ձեւանմուշ, որտեղ մենք կարող ենք ձեւը եւ մոդելը կոճակով դնել `մոդելի հիման վրա նոր առարկա ստեղծելու եւ սերվերին տեղադրելու համար: Սա բարդ է թվում, այնպես որ եկեք քայլ առ քայլ քայլենք: Նախքան տեսքը ավարտենք, եկեք ստեղծենք ձեւանմուշ, որը պարզապես դիմում է մոդելը եւ համոզվեք, որ մենք դա կարող ենք տեսնել, կճեպի նոր գրառում ստեղծելով: Ահա, թե ինչպես պետք է այդ տեսակետը
posts = Post.objects.all() # Հարցրեք տվյալների բազայում առայժմ բոլոր հաղորդագրությունները
Այս ամենը բավականին պարզ է թվում, մինչեւ հասնենք ներքեւ: Նախորդ օրինակի նման HTTP- ի արձագանքման փոխարեն գործառույթով վերադարձված արժեքը մատուցում է, միշտ պահանջվում է որպես դրա առաջին ներդրումը (այս դեպքում տվյալների բազայում տեղադրված գրառումները: Կաղապարը կլինի HTML փաստաթուղթ, որը մի քիչ լեզու է, որը կոչվում է Jinja2, որը Python- ի տեղեկատվությունը ներկայացնում է HTML:
Կաղապարների ստեղծման համար սկսեք երկու գրացուցակ կերակրման մեջ:
mkdir feed/templates
mkdir feed/templates/feed
Հաջորդը, խմբագրեք ձեւանմուշը վերը նշված գրացուցակում, կերակրեք / ձեւանմուշներ / կերեր եւ ավելացրեք կոդ այս օրինակի համար: Եկեք նայենք այս օրինակի ձեւանմուշին:
Սա շատ պարզ ձեւանմուշ է: Այն սահմանում է HTML պիտակների բացումը եւ փակումը, փաստաթղթի տիպի պիտակը, մարմնի պիտակը, լեգենդ վերնագրով, ընդմիջման պիտակը, որն ավելացնում է մի փոքր գիծ էկրանի վրա, որը յուրաքանչյուր գրառում է կատարում, որը գտնվում է գրառումների ցանկում: Սա այն ամենն է, ինչ անհրաժեշտ է գրառումներ տալու համար, բայց տվյալների բազայում դեռ չկա: Եկեք մի քանիսը ստեղծենք shell- ով: Մենք կարող ենք վարել Shell- ը կառավարիչով
python manage.py shell
Հիմա եկեք ներմուծենք մեր փոստային մոդելը
from feed.models import Post
Հաջորդը, մենք կստեղծենք մի պարզ հաղորդագրություն `լարով եւ կսեղմենք կեղեւից: Լարը կարող է լինել որեւէ բան, քանի որ այն վավեր տեքստ է:
Post.objects.create(text='hello world')
exit()
Վերջապես, մեզ հարկավոր է ավելացնել URL- ի օրինակ մեր կերակրմանը: Քանի որ մեր Feed հավելվածը կօգտագործի բազմաթիվ URL- ներ, եւ մենք ցանկանում ենք փոքր-ինչ պահել ֆայլերի չափսերը փոքր, եկեք ստեղծենք տեղական URL.py մեր Feed հավելվածում, որը նման է.
from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
Մենք պետք է նաեւ գրավել urls.py- ը բազային հավելվածում, ինչ էլ որոշեցինք այն անվանել, սա այն առաջին գրացուցակը, որը մենք ստեղծեցինք: Խմբագրել ծրագիրը / app.py եւ ավելացնել հետեւյալը URL նախշերով
from django.urls import include # Վերեւում
# ... Նախորդ կոդն այստեղ
Այժմ, երբ մենք գործարկվում ենք սերվերը Python- ի կառավարմամբ: Հաջորդը, եկեք իրականացնենք մեր ստեղծած ձեւը եւ սկսենք ստեղծել մեր սեփական հաղորդագրությունները: Բայց նախքան շատ կոդ գրելուց առաջ եկեք կրկնօրինակենք, օգտագործելով ավելի վաղ գրված սցենարը, կրկնօրինակում: Վազեք այս սցենարը կեղեւի մեջ, սպասեք մի քանի վայրկյան, եւ բոլոր ծածկագրերը կաջակցվեն մեր GIT պահեստին:
backup
Ձեւի իրագործումը համեմատաբար պարզ է: Մենք ներմուծելու ենք մեր ձեւը, դիտելու համար ավելացրեք գրառման դիմում, եւ պահեք գրառումը տվյալների բազայում, նախքան նույն տեսակետին վերահղումը: Մենք կարող ենք օգտագործել մեր ներմուծված վերահղման գործառույթը, եւ մեկ այլ գործառույթ, որը կոչվում է հակադարձ, URL- ն դիտելու օրինակին ստանալու համար: Մենք դա կհրապարակենք լարային «կերակրման» հետ, քանի որ ներառված օրինակի անվանումն է կերակրում, եւ տեսարանը կոչվում է նաեւ կերակրման:
posts = Post.objects.all() # Հարցրեք տվյալների բազայում առայժմ բոլոր հաղորդագրությունները
if request.method == 'POST': # Կարգավորել փոստի պահանջը
form = PostForm(request.POST) # Ստեղծեք ձեւի օրինակ եւ պահեք տվյալները դրան
if form.is_valid(): # Վավերացրեք ձեւը
form.save() # Պահպանեք նոր օբյեկտը
return redirect(reverse('feed:feed')) # Վերահղեք նույն URL- ին `ստանալու պահանջով
'form': PostForm(), # Համոզվեք, որ ձեւը փոխանցեք համատեքստում, որպեսզի մենք կարողանանք դա մատուցել:
Այժմ մենք պետք է թարմացնենք նոր ձեւի համար հաշվի առնելու ձեւանմուշը: Մենք դա կարող ենք անել, օգտագործելով
Եկեք կոտրենք սա: Գոյություն ունի նոր ձեւի դաս, նշան, ձեւը ինքնին եւ ներկայացման կոճակը: Շատ պարզ է, բայց երբ մենք նայում ենք դրան, գուցե ցանկանանք ավելի լավ տեսք ունենալ: Այն աշխատում է, մենք կարող ենք նոր հաղորդագրություններ փակցնել ձեւի հետ, եւ դրանք այժմ պահպանվում են տվյալների բազայում: Այստեղ կան մի քանի բաներ: Մենք օգտագործում ենք HTML պիտակներ, հայտարարելու, որ փաստաթուղթը HTML փաստաթուղթ է, մենք օգտագործում ենք ձեւանմուշի պիտակ ({% ...%), ձեւի համար նշանը ստանալու համար: Մենք ունենք նաեւ հանգույցՏեքստը մատուցելու համար բլոկային պիտակներ եւ ձեւանմուշ: Բլոկի պիտակները իսկապես կարեւոր են, քանի որ մենք կարող ենք սահմանել, թե ինչպես են ձեւանմուշների բաժինները նրանց հետ, եւ կաղապարի պիտակները հիմք են հանդիսանում մեր մեջ փոփոխականներ
Այժմ մենք պետք է մեր ծրագիրը ավելի լավը դարձնենք, քանի որ այժմ այն իսկապես հիմնական է թվում: Մենք դա կարող ենք անել, օգտագործելով CSS, կամ ներխուժում, կամ փաստաթղթում յուրաքանչյուր օբյեկտի հետ կապված դասարաններում: CSS- ն իսկապես հաճելի է, քանի որ այն ամեն ինչ ասում է էջում, թե ինչպես պետք է այն նայեք, եւ կարող է այն իսկապես լավ տեսք առաջացնել: Կան մի քանի գրադարաններ, որոնք կարող են դա անել, բայց իմ անձնականը գնում է Bootstrap:
Bootstrap- ը կարելի է ներբեռնել իրենց կայքից,getbootstrap.com/Մի շարք Մի անգամ այնտեղ սեղմեք կոճակը `տեղադրման փաստաթղթերը կարդալու համար եւ կոդը պատճենեք ներառված CDN բաժնի միջոցով: Ձեզ հարկավոր կլինի այս ծածկագիրը ձեր HTML փաստաթղթի վերեւում, մի պիտակում, որը կոչվում է գլուխ: Բացի այդ, եկեք առաջ գնանք եւ ստեղծենք բազային ձեւանմուշ, որպեսզի յուրաքանչյուր ձեւանմուշում վերանայենք այդ հղումները:
Կատարեք նոր գրացուցակ, որը կոչվում է MKDIR ձեւանմուշներով ձեւանմուշներ, այնուհետեւ խմբագրել կաղապարներ / Base.html:
Այն պետք է լինի այսպիսին.
Համոզվեք, որ պատճենեք CSS- ը եւ JavaScript- ը, The.css- ը եւ .js ֆայլերը, քանի որ մեզ հարկավոր կլինի JavaScript- ը `ապագայում մեր կայքը ավելի ֆունկցիոնալ դարձնելու համար:
Հիմա եկեք վերադառնանք Bash Shell- ին եւ արագ հրամայենք: Հիշեք, որ եթե երբեւէ անհրաժեշտ է մուտք գործել վիրտուալ միջավայր, տիպի VESV / BIN / Activate: Սա թույլ կտա ձեզ տեղադրել Python փաթեթներ տեղական ձեւով, որը թույլ է տալիս Django- ին մուտք գործել դրանք: Django Bootstrap- ի դասերի ստեղծած մեր ձեւերը տալու համար մենք կօգտագործենք Python փաթեթ, որը կոչվում է փխրուն ձեւեր: Մենք կարող ենք դա ներբեռնել հետեւյալ հրամանով
pip install django-crispy-forms
Երբ դա տեղադրվի, ավելացրեք այն պարամետրերը:
# ... Նախորդ կոդն այստեղ
Այժմ, մեր կերակրման ձեւանմուշում, մենք կարող ենք որոշ բաներ հեռացնել: Եկեք հեռացնենք փաստաթղթի սկիզբն ու ավարտը եւ այն փոխարինենք մեր բազային ձեւանմուշից ժառանգությամբ, օգտագործելով ընդլայնում եւ բլոկի սահմանում: Բացի այդ, մենք կավելացնենք կաղապարի ֆիլտրի ներմուծում բեռնվածքով եւ ձեւանմուշի զտիչով: Վերջապես, եկեք ավելացնենք Bootstrap Class- ը ձեւի վրա, որպեսզի այն ավելի շատ նման լինի կոճակի: Դա պետք է այսպիսին լինի.
Գեղեցիկ Դա արդեն բավականին քիչ կոդ է: Հաջորդը, մենք պետք է փորձարկենք այն եւ համոզվենք, որ մենք կարող ենք տեսնել, որ ամեն ինչ գեղեցիկ է թվում, եւ նաեւ համոզվեք, որ ամեն ինչ ճիշտ է աշխատում: Գործարկեք սերվերը նախորդ հրահանգների համաձայն եւ համոզվեք, որ կայքը լավ տեսք ունի եւ աշխատում է: Հիանալի աշխատանք: Դուք պատրաստ եք անցնել հաջորդ քայլին, որում մենք կավելացնենք օգտվողի մուտքի ֆունկցիոնալությունը, օգտագործելով նմանատիպ URL- ներ, ձեւեր, տեսակետներ եւ կաղապարներ: Հիմքի ձեւանմուշը կարեւոր է, եւ մենք կշարունակենք փոփոխել այն եւ փոփոխություններ կատարելԱնհրաժեշտության դեպքում, բայց այժմ եկեք կենտրոնանանք մեր կայքը ավելի անվտանգ դարձնելու վրա, օգտագործողներին հնարավորություն տալով մուտք գործել օգտվողի անունով եւ գաղտնաբառով, եւ, ի վերջո, ձեր ծրագիրը եւ ձեր սեփական հաշիվը հասանելի է միայն
Դա անելու համար մենք պետք է օգտագործենք Dj անգոյի մեջ ներկառուցված օգտագործողի մոդելը: Օգտագործողի մոդելը տվյալների բազայի մոդել է, ինչպես մեր գրառումը, որը կարող է տրվել օգտագործողին կայքում մուտք գործելու համար: Ապագայում, նախքան կայքը ինտերնետը տեղակայելը, մենք կխթանենք այս մոդելը դրանում վերագրվող այլ մոդելներով եւ կստեղծենք անվտանգության լրացուցիչ միջոցներ, որոնք դիմացկուն են ֆիշինգի համար: Մենք կսկսենք օգտագործել մի քանի կառուցված մուտքի ձեւերով, որոնք ապահովում է Django- ն: Նախ, եկեք ստեղծենք նոր ծրագիր, որին մենք կօգտագործենքՏեղադրեք ձեւանմուշներն ու տեսակետները հիմնական մուտքի էջի համար: Մենք կստեղծենք նաեւ այլ ծրագրեր, որպեսզի ներկայացնեն մուտքի շարունակական մարտահրավերները `ծրագիրը ապահովելու համար, ներառյալ PINCODE, դեմքի ճանաչումը, դաշտային հաղորդակցման, արտաքին սարքեր, բազմաբնույթ գործոն վավերացման եւ մատնահետքերի
Մենք արդեն խոսեցինք ծրագիր սկսելու մասին: Մեր գրացուցակից, վիրտուալ միջավայրի ներսում, փոխանցեք Կառավարեք այս փաստարկները
python manage.py startapp users
Այժմ մենք պետք է ունենանք գրացուցակ նոր ծրագրի համար: Եկեք սկսենք ստեղծել այն գրացուցակում, որը համապատասխանում է օգտագործողի մուտքին: Django- ն իրերի մուտքի համար է կառուցել տեսություններ, բայց դրանք մեզ համար հարմար չեն, քանի որ մեզ անհրաժեշտ է սովորական տեսակետ, որը նախընտրելի է կատարել սահմանման միջոցով:
Այս տեսակետից մենք կսկսենք ստուգել փոստային պահանջը, փոխանցել հարցումը: Խոստում գտնվող Loginform- ին ներմուծված Loginform- ին, վավերացրեք օգտագործողի հաշիվը եւ մուտքագրեք օգտագործող, նախքան դրանք վերահղումը մեր թարմացմամբ:
Օգտագործողների մեջ / դիտումներ .PY, ավելացրեք հետեւյալ ծածկագիրը
username = request.POST['username'] # Ստացեք օգտվողի անունը եւ գաղտնաբառը գրառման պահանջից
password = request.POST['password'] # Վավերացնել օգտագործողին
Սա ձեզ անհրաժեշտ է հիմնական մուտքի դիտման համար: Հիմա եկեք ստեղծենք տեսադաշտի ձեւ, երկարացնելով բազային ձեւանմուշը: Մենք կսկսենք ստեղծել օգտվողների թղթապանակում ձեւանմուշների նոր գրացուցակ:
mkdir users/templates
mkdir users/templates/users
Այժմ մենք պետք է կարողանանք խմբագրել օգտվողներին / ձեւանմուշներին / օգտվողներին / Login.html: Մինչ մենք դրանում ենք, մենք կստեղծենք ձեւանմուշ, որպեսզի օգտագործողին նույնպես գրանցվի:
nano users/templates/users/login.html
Հիմա, ձեւանմուշում,
Սա մուտքի ձեւանմուշի հիմունքներն են: Դա իսկապես նման է կառուցվածքի մյուս ձեւանմուշին, բայց այն մի փոքր տարբերվում է, երբ այն մատուցվում է: Մենք կարող ենք պատճենել այս ծածկագիրը `եւս մեկ նմանատիպ ձեւանմուշ կառուցելու համար, որը կոչվում է Register.html, որտեղ մենք կփոխենք ձեւակերպումը եւ կօգտագործենք մեր կառուցած նոր ձեւ: Եկեք նախ պատրաստվենք ձեւանմուշը: Խմբագրել օգտվողներին / կաղապարներ / օգտվողներ / Գրանցվել եւ ավելացնել հետեւյալ ծածկագիրը.
Այժմ, եկեք ձեւավորենք մեր օգտվողի գրանցման եւ շրջապատի տեսարաններին, նախքան մեր օգտագործողի մուտքերը թարմացնենք մոդելի միջոցով: Մենք այս ձեւը կդարձնենք սկսելու համար, բայց ներառելու ենք ավելի շատ մանրամասներ եւ անվտանգության առանձնահատկություններ, ինչպիսիք են համաձայնագրերը եւ CAPTCHA- ն ապագայում: Խմբագրեք ձեւերը Nano օգտագործողների / ձեւերի հետ եւ ավելացրեք հետեւյալ ծածկագիրը:
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']
Այսպիսով, մենք ունենք մեկ այլ ձեւ այստեղ, որն իրականում գործում է բավականին պարզ: Դա օգտագործողի գրանցման ձեւ է `օգտվողի անունով, էլ. Փոստով եւ գաղտնաբառով, ինչպես նաեւ հաստատեք գաղտնաբառի դաշտը: Նկատի ունեցեք, որ այս ձեւը չի տարածվում կանոնավոր ձեւերով: Մեկ դաշտը սահմանվում է նույնը, եւ դասի մետան սահմանում է ձեւը ձեւը համապատասխանում է մնացած տեղեկություններին, որոնք գրվելու են ձեւին: Դրա մեծ մասը արդեն գոյություն ունի Dj անգոյի կառուցված օգտագործողի ձեւով, այնպես որ մենքկօգտագործի դա որպես դասի հիմք (փոխանցվեց
Հաջորդը, մենք կքննարկենք օգտագործողին գրանցելու տեսքը, հիմա, երբ մենք ունենք ձեւ եւ ձեւանմուշ: Սա Modelform է, ինչպես մեկը, նոր գրառման տեսքում: Խմբագրել օգտվողներին / Դիտումներ.py եւ ավելացնել հետեւյալ ծածկագիրը.
# ... Ներմուծում
Սա այն ամենն է, ինչ մենք պետք է գրանցված օգտվողներ ստանանք, բայց մենք պետք է ավելի շատ տեղեկություններ ունենանք: Մենք ուզում ենք իմանալ այն ժամանակը, երբ գրանցվել են օգտագործողը, նրանք վերջին անգամ տեղում էին, նրանց մասին որոշ տեղեկություններ, ինչպես կենսագրությունը, ժամանակի մոդելը եւ այլընտրանքային հաղորդագրությունները: Դա անելու համար մենք կթարմացնենք մոդելները: Հատված ենք երկու ծրագրերում: Սկսենք խմբագրելով կերերի մոդելը: Այժմ դա պետք է նման լինի.
from django.db import models # ... Ներմուծում
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Ավելացնել այս տողում
Ուշադրություն դարձրեք ֆայլին ավելացված երկրորդ տողի վրա: Սա օտարերկրյա բանալին է, որը յուրաքանչյուր գրառումը կվերափոխի մեկ փոստով մեկ փոստով, այնպես որ մենք կարող ենք համոզվել, որ մենք պահում ենք օգտագործողի կողմից օգտագործողի վրա պահվող հաղորդագրությունները եւ ոչ մի գրառումը չի կարող կատարել: Մենք սահմանում ենք այս արտաքին բանալին այն դասի հետ, որը ներկայացնում է, ջնջել փաստարկը, որպեսզի գրառումները ջնջվեն օգտագործողների հետ, զրոյական եւ դատարկ փաստարկներ, որպեսզի անհրաժեշտության դեպքում կարողանանք հեռացնել օգտագործողը եւ անհրաժեշտության դեպքում տեղավորել օգտագործողըՄեր արդեն ստեղծած գրառումների եւ հարակից անուն, որը մենք կարող ենք օգտագործել, որպեսզի օգտագործողը ստեղծում է փոստային օբյեկտներին: Այս կապակցված անունը, ի տարբերություն փոստի, գրառման հեղինակի, մեզ տալիս է մեզ օգտագործողին, ով փակցրեց ինքնուրույն գրառումը: Այժմ մենք կարող ենք գրառումները ձեռք բերել օգտագործող օգտագործող օգտագործող օգտագործող. Posts.all (), կամ
Հիմա եկեք մեր մուտքը ավելի դիմացկուն դարձնենք: Մենք արդեն կարող ենք մեր կայքը շատ ավելի քիչ խոցելի դարձնել, պարզապես տոկոսադրույքով սահմանափակելով այն ժամանակների քանակը, որը մենք թույլ կտանք մուտք գործել կայք, սա բավականին հեշտ է: Եկեք նաեւ սկսենք նախքան յուրաքանչյուր օգտագործողի մասին որոշ տեղեկություններ պահենք, քանի որ մենք շարունակում ենք զարգացնել մեր ծրագիրը: Օգտագործողների / մոդելների խմբագրում, ավելացրեք հետեւյալ ծածկագիրը:
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='')
Նկատի ունեցեք, որ այս մոդելը բավականին նման է փոստային մոդելի: Մենք ունենք լրացուցիչ ներմուծում, ժամային ժամանակ, ինչը թույլ կտա մեզ կանխադրված կանխավճարներ սահմանել DateTime դաշտերում, եւ մենք ունենք նաեւ գրառման նման կերպարվեստ եւ տեքստային դաշտ: Այս ժամանակային բոլոր ժամանակների օգտագործումը օգնում է մեզ ապահովել կայքը եւ հասկանալ դրա օգտագործումը, եւ տեքստի դաշտերը թույլ են տալիս տեղեկատվություն տրամադրել յուրաքանչյուր օգտագործողի կամ հեղինակի մասին: Onetoonefield- ը պետք է լինի միակ աննշան քննարկումը, այն իրեն պահում է նույնը, ինչ կանխատեսում է, բայցմիայն մեկ հաջորդ մոդելի հետ: Այս եղանակով, օգտագործողը ունի միայն մեկ պրոֆիլ, մինչդեռ նրանք կարող են ունենալ շատերը
Այժմ, եկեք բարելավենք մեր մուտքը եւ գրանցենք դիտումներ պրոֆիլը հաշվի առնելու համար: Նախ, խմբագրեք օգտագործողներին / Դիտումներ.
# ... Ներմուծում
Profile.objects.create(user=user) # Համոզվեք, որ ավելացրեք այս գիծը, օգտագործողի համար պրոֆիլ ստեղծելու համար
Սա պարզապես ստեղծում է պրոֆիլ օգտագործողի համար, առանց որեւէ տեղեկատվության լրացնելու: Հիմա մենք ուզում ենք համոզվել, որ օգտագործողի հաշիվը չի կարող մուտք գործել շատ հաճախ, կամ գոնե գաղտնաբառերը հնարավոր չէ շատ հաճախ փորձել, այնպես որ եկեք թարմացնենք մուտքի տեսքը:
# ... Ներմուծում
if user and user.profile.can_login < timezone.now(): # Նկատի ունեցեք, որ մենք հիմա ստուգում ենք, արդյոք օգտագործողը կարող է մուտք գործել
else: # Եթե մուտքը հաջող չլիներ,
user = User.objects.filter(username=username).first() # Սա այն մասն է, որտեղ մենք թարմացնում ենք օգտվողների պրոֆիլը
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Այսպիսով, նրանք այլեւս չեն կարող մուտք գործել մի քանի վայրկյան
Սա անվտանգության հիմնական հիմքն է: Համոզվեք, որ կայքը խոցելի չէ որեւէ մեկի համար, պարզապես փորձելով գաղտնաբառի հնարավոր համադրություն կամ դրանցից նույնիսկ մի քանիսը միեւնույն ժամանակ: Սա չի հիասթափեցնի սովորական օգտագործողի համար, ով գիտի նրանց գաղտնաբառը եւ պարզապես մուտքագրվում է մի քանի սարքերի վրա, բայց այն կպահպանի բազմաթիվ ֆիշինգ ռոբոտներ հավելվածից: Նկատի ունեցեք, որ մենք ավելացրել ենք, եթե փոփոխականի դեպքում հայտարարություն ավելացնենք, դա պետք է լինի անցյալի ժամանակ եւ թարմացվի յուրաքանչյուր անհաջող մուտքի միջոցովնույն օգտվողի անունը: Այս եղանակով, չարամիտ օգտագործողը չի կարողանա գուշակել գաղտնաբառի ցանկացած վայրում: DateTime.timedelta () վայրկյանների քանակը նույնպես կարող է թարմացվել, եւ կայքը կլինի ավելի դիմացկուն, բայց մի փոքր ավելի քիչ օգտագործելի ավելի քիչ վայրկյաններով: Ես 15-ը խորհուրդ եմ տալիս սկսել
Հիշեք, որ մենք կառուցեցինք պահուստային սցենար, մեր աշխատանքը փրկելու համար, այնպես որ եկեք առաջ գնանք եւ կրկնօրինակենք այն, ինչ մենք մինչ այժմ ունենք, որպեսզի համոզվենք, որ ամեն ինչ փրկված է: Գործարկել հրամանը.
sudo backup
Եվս մեկ անգամ, սա մինչ այժմ կփրկի ձեր աշխատանքը: Ձեր աշխատանքը պահպանելու համար խորհուրդ եմ տալիս հաճախակի պահուստավորում կատարել, եւ դուք նույնիսկ կարող եք ինքնաբերաբար գործարկել պահուստային աշխատանք: Դուք կարող եք դա անել, օգտագործելով Cron անունով Unix ծրագիրը: Այս ծրագիրը ակտիվացնելու համար գործարկեք հետեւյալ հրամանը եւ մուտքագրեք ձեր գաղտնաբառը.
sudo crontab -e
Եթե դուք արդեն չեք ընտրել Nano- ի համար 1 տարբերակ, տեքստի խմբագրիչը Դուք արդեն պետք է ծանոթ լինեք եւ ոլորեք դեպի ֆայլի ներքեւի մասում, օգտագործելով սլաքների ստեղները: Ավելացնել հետեւյալ տողը.
0 * * * * sudo backup
Cron- ն օգտագործում է ձեւաչափի րոպեը, ժամը, ամսվա օրը, ամիսը, շաբաթը, շաբաթը, որտեղ * կամ մի շարք ներկայացնում է, երբ հրամանը վարելը: Օգտագործելով 0-ը րոպեի ընթացքում եւ * Ընտրանքների մնացած մասի համար, մենք կարող ենք հրամայել առաջադրվել ամեն ժամ առաջին րոպեին `րոպեի սկզբին: Սա մեզ թույլ է տալիս ինքնաբերաբար կրկնօրինակել ծածկագիրը: Ամբողջ Cron- ի գործերը, երբ Սուդոի հետ կատարվում են որպես արմատ, ուստի մենք պետք չէ ամեն ժամ գաղտնաբառ մուտքագրել:
Որպեսզի ավելի հեշտ լինի կրկնօրինակել մեր ծածկագիրը, առանց գաղտնաբառ օգտագործելու, եկեք անջատենք գաղտնաբառը մեր պահուստային հրամանի համար: Մենք դա կանենք, կատարելով հետեւյալ հրամանը եւ գաղտնաբառ մուտք գործելը.
sudo visudo
Այժմ, եկեք ոլորունների ներքեւի մասում եւ եւս մեկ տող ավելացնենք.
ALL ALL=NOPASSWD: /bin/backup
Սա թույլ է տալիս մեզ գործարկել «կրկնօրինակում» հրամանը, որպես ցանկացած օգտագործող, առանց գաղտնաբառի: Դրա համար ձեւաչափը հեշտ է, պարզապես նախածանցի նախածանցը «բոլորի համար = nopasswd.
Հիմա եկեք սկսենք աշխատել էլ. Էլ. Փոստը իսկապես կարեւոր է կայքերի համար, քանի որ դա կայք ավելի անվտանգ պահելու միջոց է, ստուգեք օգտագործողները իրական մարդիկ են, եւ նույնիսկ հաճախորդներին շուկայական ապրանքներ կամ ծառայություններ: Շատերը, ովքեր հաճախակիանում են ինտերնետը ամեն օր ստուգում են իրենց էլ. Փոստը եւ ստանում են բոլոր տեսակի շուկայավարման էլ.
Նախ, դուք կարող եք վճարել էլփոստի ծառայության համար, որը հնարավորություն կտա ձեզ ուղարկել էլ-նամակ ձեր տիրույթից եւ պահանջում է նվազագույն կոդ: Կան բազմաթիվ ծառայություններ, որոնք առաջարկում են սա, ինչպիսիք են Google Workspace- ը, SendinBlue- ը, Mailgun- ը եւ այլն:
Հակառակ դեպքում, դուք շատ լավ եք ձեր սերվերում ձեր սերվերում կառուցել ձեր սերվերում: Ես խորհուրդ եմ տալիս այս տարբերակը, չնայած դա ավելի շատ կոդ է եւ կարող է հատուկ հոստինգ պահանջել: Դուք չեք կարողանա ամենայն հավանականությամբ սկսել փոստի սերվերը ձեր տնային համակարգչից, այնպես որ եկեք առաջ գնանք եւ ուսումնասիրենք կազմաձեւերը եւ կոդը էլեկտրոնային փոստով ուղարկելու համար:
Նախ, խմբագրեք պարամետրերը. Հատված է հետեւյալ հրամանով.
nano app/settings.py
Այն դեպքում, երբ ծրագիրը ձեր ստեղծած հավելվածի անունն է:
Ավելացնել հետեւյալ տողերը.
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)
Համոզվեք, որ դրանք փոխեք, երբ պատրաստ եք տեղակայել ձեր ծրագիրը, մենք դա կվերանայենք ավելի ուշ: Email_Address պարամետրը պետք է լինի այն էլ-նամակը, որից կցանկանայիք ուղարկել, եւ գաղտնաբառը (էլ. Ես բեռնում եմ գաղտնաբառը կազմաձեւման ֆայլից `այն ծածկագրից դուրս պահելու համար` օգտագործելով հետեւյալ տրամաբանությունը, այս տողերից վերեւ.
import os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
Այնուհետեւ ես դաստիարակել եմ JSON ֆայլ `Config- ի հետ Config- ը` Nano- ի միջոցով, օգտագործելով հետեւյալը.
Ֆայլը խմբագրելու համար.
sudo nano /etc/config.json
Ավելացնել հետեւյալ տողերը.
{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
Մենք կշարունակենք խմբագրել կազմաձեւման ֆայլը եւ ավելացնել բոլոր գաղտնաբառերն ու բանալիները, որոնք մենք կօգտագործենք հավելվածում: Հիմա եկեք արագ ուսումնասիրենք, թե ինչպես ուղարկել էլփոստը, օգտագործելով Python: Նախ, եկեք ստեղծենք ստուգման էլփոստի ձեւանմուշ, որը մենք կարող ենք ուղարկել մեր օգտատերերին եւ այն դրել օգտագործողի կաղապարների գրացուցակում: Այս ձեւանմուշը գրվելու է HTML- ում:
nano users/templates/users/verification_email.html
Այս էլ. Փոստը բավականին պարզ է: Այն տեւում է օգտագործողի համատեքստ, կայքի հիմնական URL- ի եւ օգտագործողի ID- ի եւ նշանի համար, որոնք օգտագործվում են օգտագործողի էլ. Համոզվեք, որ սահմանեք բազայի URL- ն պարամետրերում: Առաջ գնացեք եւ հետեւյալ տողերը ավելացրեք հավելվածի / պարամետրերի վրա:
SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
Ի վերջո, երբ ձեր կայքը պատրաստ է ինտերնետին, եւ տեղակայում եք այն, դուք կցանկանաք սահմանել ձեր տիրույթը որպես դոմեյն անուն, որը գնում եք, կայքը ներկայացնելու համար: Սա այն անունն է, որը դուք մուտքագրեք Navbar- ը `ձեր կայքը մուտք գործելու համար: Առայժմ կարող եք թողնել դոմենը դատարկ կամ օգտագործել տեղապահ: Դուք նաեւ կցանկանաք փոխել կայքը_ անունը մի անունով, որը ցանկանում եք տալ ձեր կայքը, ձեր ընտրության համար:
Նախքան էլ-նամակ ուղարկենք, եկեք ստեղծենք նշանների գեներատոր, որպեսզի կարողանանք հաշվի ակտիվացման նշան ունենալ, որը երբեք չի լրանում: Մենք դա կարող ենք անել, կառուցելով եւ ներմուծելով հաշվի ակտիվացման նշան, որը նման է հետեւյալը: Խմբագրել ֆայլը.
nano users/tokens.py
Ավելացնել հետեւյալ ծածկագիրը.
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()
Նշման այս հիմնական գեներատորը ստեղծում է նշան, որը մենք կարող ենք օգտագործողին ուղարկել URL- ում, եւ օգտագործողը կարող է օգտագործել իրենց էլ. Փոստը ստուգելու եւ դրանց հաշիվը ակտիվացնելու համար:
Հաջորդը, տեսնենք, թե ինչպես ուղարկել էլ. Օգտագործելով Nano, Խմբագրել օգտվողներին / էլ.
nano users/email.py
Ստուգման HTML էլ. Փոստ ուղարկելը այսպիսին կլինի.
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)
Սա բավականին պարզ է: Մենք ներմուծում ենք այն գործառույթները, որոնք մենք պետք է ուղարկենք էլ. Փոստը, որպեսզի ուղարկենք ձեւանմուշներով եւ մեր պարամետրերով, ապա մենք կներկայացնենք էլփոստը ձեւանմուշի անունով: Դուք կնկատեք, որ մենք չեք սահմանել գործառույթը փոստը ուղարկելու համար, Send_HTML_Email, բայց, այնպես որ եկեք սա գրենք այն կոդից ցածր, որը մենք արդեն ավելացրել ենք օգտվողներին / էլ.
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()
Սա մի փոքր ավելի բարդ է, եւ մենք դեռ պատրաստ չենք այս ամբողջ օրենսգրքով գործարկել: Ուշադրություն դարձնենք, որ մենք սահմանում ենք ապամոնտաժում, օգտագործողը կարող է օգտագործել մեր էլեկտրոնային հասցեներից բաժանորդագրվելու համար: Սա կարեւոր է, քանի որ օգտվողները պետք է կարողանան դուրս գալ մեր էլ-նամակից, քանի դեռ ցանկանում են տեսնել դրանք, ցանկացած պահի: Մենք նաեւ մեր հաղորդագրության համար տեքստի այլընտրանք ենք ավելացնում, որն է HTML հաղորդագրությունը `HTML պիտակներից: Վերջապես, մենք ստուգում ենք, թե էլ. Փոստը ուղարկվում է, եւ եթե այն չլիներ, մենք նշում ենք օգտագործողի պրոֆիլում, որ դրանց էլ-նամակը չէ
Եկեք վերադառնանք օգտագործողի մոդելներին, որպեսզի կարողանանք կատարել այս բոլոր աշխատանքը: Մենք պետք է սահմանենք մի գործառույթ `բաժանորդագրվելու եւ բուլյան դաշտը սահմանելու համար, որպեսզի նշվի, որ օգտագործողի էլ-նամակը վավեր չէ:
Նախ, օգտագործողների վերեւում ավելացրեք հետեւյալ ներմուծումը / Models.py
nano users/models.py
# ...
Հաջորդը, եկեք օգտագործողի մոդելի գործառույթները ավելացնենք նշանը պատրաստելու համար եւ նշենք նշանը, որն օգտագործվում է էլփոստը, ինչպես նաեւ դաշտը `օգտագործողը հաջողությամբ ստանում է իրենց փոստը: Օգտագործողների / մոդելների մեջ կրկին մոդելի ավարտին ավելացրեք հետեւյալ ծածկագիրը (շեղված կոդ)
# ...
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Ուժի մեջ է 30 օր
Սա բավականին պարզ է, մենք օգտագործում ենք ժամանակացույցի, որը հիմնական գաղտնագրման գործիք է, նշան ստեղծելու համար, որը կավարտվի որոշակի ժամանակից հետո, եւ այն վավեր է, եթե այն վավեր է: Մենք օգտագործում ենք այս նշանները երկու անգամ, մեկ անգամ էլփոստը ստուգելու համար, եւ մեկ անգամ `բաժանորդագրվելու հղման համար:
Այժմ, երբ մենք ունենք դրանք, վերջին աշխատանքները, որոնք մենք պետք է անենք, տեսակետներում է: Օգտագործողների ներսում / Views.py, եկեք ավելացնենք կարծիքներ `էլեկտրոնային հասցեն ստուգելու եւ բաժանորդագրվելու համար:
nano users/views.py
Նախ, ավելացրեք հետեւյալ ներմուծումը: Ես նետեցի մի քանի լրացուցիչ, այնպես որ մենք ստիպված չենք լինի ավելի ուշ ավելի շատ իրեր ներմուծել:
from .email import send_verification_email # Համոզվեք, որ ներմուծեք հաստատման էլփոստի ուղարկման գործառույթը
Դուք արդեն կարող եք ունենալ այս ներմուծումներից մի քանիսը, բայց դա չի խանգարում կրկնել դրանք: Դուք պետք է անհրաժեշտ լինի ներմուծել էլփոստի ուղարկման գործառույթը, ինչպես նաեւ հաշիվներ_Առակցման_Կատվեք օգտագործողների կողմից :Թոկեններ, ի թիվս այլ ներմուծման:
Այժմ, ֆայլի ներքեւի մասում ավելացնել հետեւյալ ծածկագիրը.
# բաժանորդագրվեք դրանք
# Հակառակ դեպքում վերահղեք մուտք դեպի մուտք
# Sendwelotremail (հարցում, օգտվող)
Սա շատ կոդ է: Եկեք կոտրենք այն: Առաջին գործառույթը, մաքուր եւ պարզ, օգտագործողին փոստային առաքման ցուցակից: Երկրորդ գործառույթը ակտիվացնում է իրենց էլ. Փոստը, եւ դուք կնկատեք, ես ավելացրեցի մեկնաբանված գործառույթ, SendweloteMail: Ողջույնի էլ-նամակ ուղարկելու համար ողջունում եք օգտագործել էլփոստի ձեւանմուշ եւ գործառույթների բնորոշում, ես պարզապես չեմ եղել: Վերջին գործառույթը, որ ես նետեցի, կարեւոր է, քանի որ ակտիվացման էլ. Փոստերն ավարտվում են: Հետեւաբար, մենք պետք է վերափոխենք ակտիվացման էլփոստը որոշ ժամանակ: ՄենքԿարող է դրա համար հիմնական ձեւ օգտագործել եւ զանգահարել գործառույթ `հաստատման էլ-նամակը ուղարկելու համար: Նախքան մենք դա անենք, եկեք համոզվենք, որ այն ուղարկվում է առաջին տեղում, ավելացնելով ֆունկցիա, գրանցամատյանին: Ավելացնել այս գիծը գրանցամատյանների տեսանկյունից վերափոխելուց առաջ, Def Register- ում
nano users/views.py
# ... (Հետո) Def Register (Հայց).
# ... (Նախկինում) վերահղում (
Անհրաժեշտ չէ այդ կոդի Snippet- ի առաջին եւ վերջին տողերը ավելացնել, պարզապես համոզվեք, որ գրանցամատյանները ստուգման էլ-նամակը օգտվողը ուղարկում են օգտագործողին: Այն պետք է լինի այսպիսին.
# ... Ներմուծում
send_verification_email(user) # Համոզվեք, որ ավելացրեք այս տողը:
Այժմ մենք պետք է լրացրու էլեկտրոնային փոստը վերափոխենք ձեւ: Օգտագործողների մեջ / Forms.py, ավելացրեք հետեւյալ ձեւը.
# ... (Ներմուծում)
Մեզ անհրաժեշտ կլինի նաեւ այս վերափոխման էլփոստի ակտիվացման ձեւին համապատասխան ձեւանմուշ: Եկեք ավելացնենք այս ձեւանմուշը: Խմբագրել ֆայլը.
nano users/templates/users/resend_activation.html
Հաջորդը, ֆայլին ավելացրեք հետեւյալ ծածկագիրը:
Whew, դա շատ է: Այժմ, երբ մենք տեղադրում ենք կոդը մեր սերվերին, մենք կկարողանանք ուղարկել HTML էլ. Փոստով եւ ակտիվացնել օգտվողի հաշիվները էլփոստով կտտոցով: Մենք նաեւ գուցե ցանկանանք ուղարկել մի պարզ ողջույնի էլ. Փոստ, այնպես որ եկեք տեսնենք, թե ինչպես դա անել: Վերադառնալ օգտվողների / էլ. Փոստի մեջ, ավելացնել հետեւյալ ծածկագիրը.
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)
Նաեւ մեզ անհրաժեշտ կլինի ձեւանմուշ `այս բոլոր տեղեկությունները մատուցելու համար: Իմ կայքում ձեւանմուշը ստորեւ է թվում, բայց ողջունում եք ձեւափոխել այն, բայց ձեզ դուր է գալիս:
Նկատի ունեցեք, որ մենք չունենք փակող մարմին կամ HTML պիտակներ, քանի որ դրանք ավելացնում ենք այն ժամանակ, երբ ավելացնում ենք HTML բաժանորդագրման հղումը: Սրանք կարեւոր են, բայց մենք չենք ուզում երկու անգամ սահմանել դրանք:
Ուրեմն ինչ է հաջորդը: Մենք երկար ճանապարհ ենք անցել: Իսկապես, մենք պետք է պատրաստ լինենք տեղ տեղակայելու սերվերին: Մենք կարող ենք ավելացնել @login_required դեկորատորը եւ կատարել մեր տեսակետները անվտանգ, օգտվել օգտվողի գրանցամատյաններին, ուղարկել համապատասխան էլփոստի եւ քեշի տեղեկատվություն, ինչը հիմք է հանդիսանում, թե ինչ է պետք կայքը `համապատասխանելու համար: Մենք կավելացնենք եւս մի քանի օգտակար հատկություններ, այնուհետեւ հիմք կդառնանք հեռավոր սերվերին մեր ծածկագիրը տեղակայելու համար, տեղադրելով փոստային սերվեր, տիրույթի կազմաձեւեր եւ զտիչներ, մեր կայքը անվտանգ դարձնելու համար
Մեզ անհրաժեշտ կլինի նաեւ գաղտնաբառի վերականգնման դիտում, այնպես որ եկեք դա իսկապես արագ ավելացնենք: Django- ի կողմից ներկառուցված գաղտնաբառի վերականգնման տեսքը կոտրված է որոշ գործառույթների մեջ, բայց մենք կանդրադառնանք ինչպես գրել մեր սեփական տեսակետը, էլփոստի ձեւանմուշը, ձեւերը եւ URL նախշերը գրել: Ահա, թե ինչպիսին է տեսակետը օգտվողների մեջ / Դիտումներ
# ... Ներմուծում
Այս ձեւը ներկառուցված է Dj անգոյի մեջ, բայց մեզ անհրաժեշտ կլինի ձեւանմուշ, գաղտնաբառի վերափոխում հաստատելու համար, օգտվողները / կաղապարներ / օգտվողներ / Գաղտնաբառ_reset_confirm.html
Մենք ունենք նաեւ ձեւանմուշ, գաղտնաբառի վերափոխման էլ-նամակ ուղարկելու համար, պարզ ձեւով, օգտագործողների / ձեւանմուշների մեջ / օգտվողներ / գաղտնաբառ_Այս
Էլ.փոստի ձեւանմուշը ինքնին պարզ է, դա հիմնական HTML ֆայլ է, որը հղում է գաղտնաբառը վերականգնելու համար, օգտագործողների / ձեւանմուշների / գաղտնաբառի / գաղտնաբառի համար_ Reset_Email.html: Django- ն ինքնաբերաբար կմեկնաբանի այս ֆայլը:
Ձեզ նույնպես պետք է եւս երկու ձեւանմուշ: Առաջինը `հաստատել, որ էլ-նամակը ուղարկվել է: Տեսարանները դրանց համար արդեն django- ում են, ուստի մենք պարզապես պետք է դրանք ուղղենք URLS- ում: Այս ձեւանմուշը տեղակայված է օգտվողների / կաղապարների / օգտվողների / գաղտնաբառի վրա_ Reset_done.html
Եվ վերջապես, հաստատելու համար, որ գաղտնաբառի վերագործարկումը ավարտված է, օգտվողները / կաղապարներ / օգտվողներ / Գաղտնաբառ_reset_complete.html
Այժմ այս տեսակետների համար մեզ անհրաժեշտ են URL նախշեր: Օգտագործողների մեջ / urls.py, ավելացրեք URL- ի հետեւյալ ձեւերը.
# ... Նախորդ URL- ներն այստեղ
Չորս ձեւանմուշներ, դա շատ է: Բայց հիմա մենք կարող ենք վստահ լինել, որ կարողանանք վերականգնել օգտագործողի գաղտնաբառը ցանկացած պահի, որը մենք պետք է, բոլորը վեբ զննարկիչից:
Ես հասկանում եմ, որ սա շատ կոդ է: Եթե ձեր գլխին մի փոքր թվում է, լավ է: Դուք կբարելավեք, ձեր հասկացողությունը կբարելավվի, եւ դուք շատ շուտով կդառնաք շատ ավելի իրավասու կոդերի հետ: Եթե ամբողջովին կորած եք, ես խորհուրդ եմ տալիս հետագայում վերադառնալ այս ծրագրաշար, ավելի ուշ ինքնազբաղված սովորել դասընթացի վրա աշխատելուց հետո: Սրանք սովորաբար ազատ են սկսելու համար, եւ ձեզ կուղեկցեն այն ամենի միջով, որը դուք պետք է հաջողակ լինեք, երբ վերադառնաք այս նախագիծ: Եթե զգում ես, որ դու եսՊատրաստ է շարունակել, կարդալ, հաջորդը, մենք ծածկում ենք ձեր ծածկագիրը հեռավոր սերվերին տեղակայելու եւ փոստի սերվեր տեղադրելու, ինչպես նաեւ ձեր տեղակայման ավտոմատացումը, որպեսզի կարողանաք մի քանի պարզ ստեղծել
Վերջին բանը, որ մենք պետք է անենք, նախքան հեռավոր սերվերը տեղակայելը մեր կայքը մի փոքր ավելի անվտանգ դարձրեք: Դուք կնկատեք, որ մուտքի տեսքը միայն օգտագործողի անուն եւ գաղտնաբառ է վերցնում, եւ չկա որեւէ գործոնային վավերացում կամ մեկանգամյա կոդ: Սա հեշտ շտկում է, եւ նույն կոդով մենք կարող ենք մեր կայքը ուղարկել տեքստային հաղորդագրություններ եւ նույնիսկ պատասխանատու լինել սերվերին ուղարկված տեքստային հաղորդագրություններին: Սկսելու համար մենք կվերադառնանք օգտագործողի մոդելների մեջ եւ կավելացնենք ժամանակացույցի ստորագրող, որը կներկայացնի յուրաքանչյուր մուտք: Մենք կցանկանանքՆաեւ ավելացրեք եզակի, պտտվող նույնականացուցիչ օգտագործողի մոդելը, որը կօգտագործվի մեր մուտքի լրացուցիչ անվտանգություն ավելացնելու համար: Օգտագործողի մոդելների, օգտվողների / մոդելների խմբագրում, ավելացրեք հետեւյալը
# Համոզվեք, որ ներմուծեք UUID, Timestamp Signer եւ URL գեներատորը (հակադարձ)
# Այս ծածկագիրը ավելացրեք այստեղ
# Եւ ավելացնել այս գործառույթը
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Ուժի մեջ է 3 րոպե
Համոզվեք, որ ձեր օգտագործողները / մոդելները: Դա խախտելով ներքեւ, դա պարզ է: Մենք ունենք մի քանի ներմուծում, տեւողությամբ տողային գործիք, որը կարող է ստեղծել անվտանգ կոդ եւ հաստատել այն, որպեսզի համոզվեք, որ այն վավեր է, եւ միայն մեկ վայրկյանում ավելի մեծ է: Մենք օգտագործում ենք նաեւ UUID, որը եզակի նույնացուցիչ է, որը նույնացնում է մեր օգտագործողին նշանի ստորագրման մեջ եւ այն URL- ն, որտեղ նշանը ուղարկվում էօգտագործողը: Մենք կօգտագործենք այս հիմնական գաղտնագրությունը `երկու գործոնի վավերացման դիտում կառուցելու համար: Նախքան որեւէ այլ բան անելը, եկեք գործարկենք միգրացիան, որպեսզի մեր օգտվողի մոդելները թարմացվեն: Կառավարման միջոցով գրացուցակում գործարկեք հետեւյալ հրամանը `կատարելու եւ լրացնելու համար
source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
Սա կարեւոր է, քանի որ բոլոր ժամանակ մոդելներում փոփոխություններ ենք կատարում, մենք պետք է ստեղծենք սեղանները եւ թարմացնենք տվյալների բազան, նախքան մենք կարող ենք օգտագործել մոդելները:
Հաջորդը, եկեք իմպրովիզացնենք մեր մուտքի տեսքը `երկրորդական վավերացման դիտում վերահղելու համար: Օգտագործողների մեջ / views.py, հեռացրեք մուտքի գործառույթը եւ վերահղեք դեպի URL- ն, որը մենք պարզապես առաջացրել ենք օգտագործողի մոդելներում:
# ... Ներմուծում
if user and user.profile.can_login < timezone.now(): # Նկատի ունեցեք, որ մենք հիմա ստուգում ենք, արդյոք օգտագործողը կարող է մուտք գործել
# Հեռացրեք Auth_Login գործառույթը, որը եղել է այստեղ
return redirect(user.profile.create_auth_url()) # Նշենք, որ մենք այստեղ վերահղում ենք նոր URL- ին
else: # Եթե օգտագործողը չի օգտագործում բազմաֆունկցիոնալ վավերացում, պարզապես մուտքագրեք դրանք:
else: # Եթե մուտքը հաջող չլիներ,
user = User.objects.filter(username=username).first() # Սա այն մասն է, որտեղ մենք թարմացնում ենք օգտվողների պրոֆիլը
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Այսպիսով, նրանք այլեւս չեն կարող մուտք գործել մի քանի վայրկյան
Այնպես որ, սա բավականին պարզ է, մենք այժմ ունենք երկու գործոնի վավերացման դիտում վերահղելու միջոց: Մենք ունենք նաեւ ընկալման դեպքում, եթե օգտագործողը հեռախոսահամար չի ավելացրել: Մենք կավելացնենք հիմնական տեսակետ, շուտով հեռախոսի համարը ավելացնելու եւ անմիջապես մուտք գործելու տեքստային հաղորդագրությամբ:
Նախ, մեզ անհրաժեշտ է տեքստային հաղորդագրություն ուղարկել մեր կոդից: Դա անելու համար մենք կարող ենք ընտրել մի շարք API- ներից, բայց իմ կարծիքով ամենահեշտը Twilio- ն է: Նրանք նաեւ առաջարկում են լավ գնագոյացում փոքր նախագծերի, ինչպես նաեւ զանգվածային զեղչերի համար: Ստեղծեք հաշիվ Twilio.com- ում, լրացրեք որոշ մանրամասներ ձեր նախագծի վերաբերյալ, գնեք հեռախոսահամար եւ պատճենեք ձեր API ստեղները ձեր պարամետրերին: Այնուհետեւ ավելացրեք այս ծածկագիրը նոր ֆայլի, օգտագործողների / sms.py- ի ներքո:
nano users/sms.py
# Ներմուծեք բոլոր անհրաժեշտ փաթեթները
# Այս ծածկագիրը տեքստը ուղարկում է Twilio- ի հետ
# Helper գործառույթ `այսքան թվանշաններով մի շարք ստանալու համար
# Ուղարկեք տեքստը `օգտագործողին ստուգելու համար
# Օգտագործողին ուղարկեք ցանկացած տեքստ այս գործառույթով
# Կոդը վավերացրեք այս գործառույթի հետ
# Վավերացրեք ժամանակը
Համոզվեք, որ պատշաճ կերպով փոխեք ձեր պարամետրերը, ավելացնելով այս տողերը ձեր ստեղներով.
# Համոզվեք, որ դրանք պատճենեք ձեր Twilio վահանակից
AUTH_VALID_MINUTES = 3 # TFA էջի րոպեների քանակը մեկ անգամ ակտիվորեն ակտիվ է
Նախ, մեզ անհրաժեշտ կլինի ձեւեր մեր երկու գործոնի վավերացման դիտումների համար: Օգտագործողների / ձեւերի խմբագրում, ավելացրեք հետեւյալ ծածկագիրը:
# ... Ներմուծում
# Մեր հեռախոսի համարը մուտքագրելու ձեւ
# Վավերացման ձեւ
Հաջորդը, եկեք տեսարանները ստեղծենք օգտվողների մեջ / Դիտումներ
# ... Ներմուծում
Այս երկու տեսակետների համար մեզ նույնպես պետք կլինի կաղապարներ: Եկեք նախ ավելացնենք ԱԳՆ-ի ձեւանմուշը:
nano users/templates/users/mfa.html
Այս HTML կոդը ավելացնել ձեւանմուշին
Սա բավականին ինքնաբացատրելի է: Ձեւը ուղարկում է կամ ծածկագիր կամ դատարկ կոդ, եւ նկատի կունենաք այն տեսակետը, որը մենք ուղարկում ենք կոդ, եթե մենք ստանում ենք դատարկ կոդ: Այնուհետեւ մենք պարզապես ունենք երկու ներկայացման կոճակ, եւ այս կերպ մենք կարող ենք կոդով ուղարկել կոդով: Հաջորդը, մենք կավելացնենք պարզ ձեւ, հեռախոսի համարը ավելացնելու համար:
nano users/templates/users/mfa_onboarding.html
Ավելացնել հետեւյալ HTML.
Այս ձեւը շատ ավելի պարզ է, այն պարզապես մատուցում է մեր ստեղծած հեռախոսահամարը եւ թույլ է տալիս օգտագործողին ավելացնել հեռախոսահամար:
Սա իսկապես լավ է թվում: Քանի դեռ ամեն ինչ պատշաճ կերպով տեղադրված է, մենք պետք է կարողանանք հաղորդագրություններ ուղարկել եւ օգտագործողին մուտք գործել իրենց հեռախոսահամարով `URL- ի նախշերը ավելացնելուն պես: Վերջին բանը, որը մենք պետք է տեղադրենք, պրոֆիլի տեսակետ է, ուստի մենք կարող ենք համոզվել, որ օգտագործողը կարող է փոխել իրենց հեռախոսահամարը, առանց մուտք գործելու:
Եկեք ավելացնենք պրոֆիլի տեսարան օգտագործողներին / Դիտումներ: Այս տեսակետը կթարմացնի օգտագործողի կենսագրությունը, էլ. Փոստը, օգտագործողի անունը եւ հեռախոսահամարը, ինչպես նաեւ թույլ կտա մեզ հնարավորություն տալ բազմաբնույթ գործոնային վավերացում: Նախ, մեզ հարկավոր կլինի ավելի շատ երկու ձեւ, օգտագործողների մեջ / Forms.py
# ... Ներմուծում
Հաջորդը, մենք կարող ենք ստեղծել այս երկու ձեւերը օգտագործելու համար: Խմբագրել օգտվողներին / դիտումներ.Կատարել եւ ավելացնել տեսադաշտը:
# Ավելացնել այս ներմուծում
Այս տեսակետի համար մեզ նույնպես պետք է ձեւանմուշ:
nano users/templates/users/profile.html
Դուք կնկատեք, որ սա բավականին պարզ ձեւ է, բայց դրա մեջ ունի որոշակի JavaScript, որը ինքնաբերաբար տեղադրվում է ձեւի բովանդակությունը, քանի որ դրանք թարմացվում են: Սա օգտակար է ունենալու համար, այնպես որ դուք ի վիճակի եք կատարել խմբագրումներ, առանց ամեն անգամ սեղմելու ներկայացման:
Հաջորդը, մեզ անհրաժեշտ են URL- ներ, որոնք ներկայացնում են այս բոլոր տեսակետները օգտվողների մեջ URL Patters- ում: Խմբագրել օգտվողներին / urls.py եւ ավելացնել այս ծածկագիրը.
# ... Նախորդ կոդ, ներմուծում
# ... URL նախշերը, որոնք մենք նախկինում մտանք, ավելացնել հաջորդ երեք տողերը
Հիմա լավ ժամանակ է `փորձելու մեր նախագիծը: Բայց նախ, եկեք գործարկենք եւս մեկ կրկնօրինակում:
backup
Եւ գործարկել սերվերը: Նախքան Linux սերվերի տեղակայումը, լավ գաղափար է հաշվի առնելու համար երկու գործոնային վավերացում: Մենք դա կանենք մեր պրոֆիլի URL- ի, / օգտվողների / պրոֆիլի / պրոֆիլ / եւ ստուգում եք տուփը `մեր հեռախոսահամարը մուտքագրելուց հետո վավերացմանը միացնելու համար, այնուհետեւ ներկայացնելը:
python manage.py runserver localhost:8000
Այցելեք վեբ էջ, գնալով ձեր վեբ զննարկիչին, այս օրինակում ես օգտագործում եմ Google Chrome- ը եւ մուտքագրելով URL HTTPS: // localhost: 8000 հաշիվ / պրոֆիլ /
Անհրաժեշտության դեպքում դուք կկարողանաք մուտք գործել եւ հնարավորություն տալ երկու գործոնային վավերացում:
Այս նախագծին պետք է սերվեր, որպեսզի գործարկվի, որպեսզի այն իսկապես փոստ ուղարկի: Բայց նախ, մեզ հարկավոր է սխալներ տեսնելու միջոց: Դուք կնկատեք, որ եթե գործարկեք սերվերը կարգաբերման ռեժիմում, պարամետրերով: Սխալներ ցույց տալու համար առանց դեբեռի ռեժիմ օգտագործելու, ինչը արտադրանքի սերվերի անապահով է, մենք պետք է տեսադաշտ ավելացնենք դրա համար: Ամենակարեւոր սխալները, որոնք մենք պետք է կարողանանք կարգավորել, հետեւյալն է.
Սխալ 500 - մեր կոդի խնդիր Սխալ 404 - էջ, որը չի գտնվել (կոտրված URL) Սխալ 403 - Թույլտվությունը մերժեց սխալը
Եկեք ավելացնենք նոր ծրագիր, այս սխալները կարգավորելու համար, որոնք կոչվում են սխալներ:
python manage.py startapp errors
Ավելացնել սա պարամետրերին
handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
Սա այն է, ինչ մեզ անհրաժեշտ է, բացի սխալի տեսարաններից, ձեւանմուշներից եւ մի փոքր միջին ցուցակից: Եկեք սվիտենք դրանք, ինչպես այսպես.
# Ստեղծեք ձեր հայացքները այստեղ:
Հաջորդը, եկեք սահմանենք միջին ցուցանիշը `այս սխալները կարգավորելու համար: Մենք դա կանենք, առաջին հերթին ավելացնելով MiddleWare_ Classes- ը պարամետրերում:
# ... Նախորդ միջնադիր
Հաջորդը, եկեք ավելացնենք միջին ցուցանիշը:
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.')
Մենք ավելացնում ենք գործառույթ, ներկայիս բացառությունը ստանալու համար, օգտագործելով Threading Local, որն օգնում է մեզ հետեւել մեր կոդի ցանկացած սխալ: Կաղապարների առումով մեզ պետք է միայն մեկը, որովհետեւ մենք դինամիկ կերպով սահմանում ենք այդ տեսակետը: Կաղապարը պարզապես պետք է տիտղոս լինի եւ «հետքը», մեր սխալի հետադարձումը համատեքստից:
nano errors/templates/errors/error.html
Սա մեր ամենապարզ ձեւանմուշն է, բայց դա հեշտ է մեր նախագծի սխալները տեսնելը: Հաջորդը, եկեք անջատենք կարգաբերումը կարգավորումներում:
nano app/settings.py
Գտեք այս տողը, որտեղ այն ճշմարիտ է, եւ փոխեք այն կեղծ
DEBUG = False
Այժմ առաջ գնացեք եւ կրկնօրինակեք ծրագիրը: Մենք պատրաստ ենք տեղակայել հեռավոր Linux սերվերի եւ շարունակել հնարավորություններ ավելացնել այնտեղից:
sudo backup
Այս ծածկագիրը սերվերին փակցնելուց առաջ պետք է հաշվի առնենք, որ ծածկագրին կարող են լինել որոշ խնդիրներ: Կախված գործից, նրանց համար տեղադրված տեղեկատվությունը ընդունող կայքեր կունենան SPAM- ի հետ կապված եւ սպամը հեռացնելու դժվարությամբ: Սա չպետք է տեղի ունենա անմիջապես, բայց եթե դա տեղի ունենա, մենք հետագայում կքննարկենք, թե ինչպես ինքնաբերաբար չափել սպամը կայքում եւ դարձնել ռոբոտների համար կայք մուտք գործելու եւ օգտագործողի ինքնությունը ստուգելու համարիրենց ID- ի կամ կենսաչափական սկանավորման միջոցով, մատնահետքի կամ դեմքի նման
Նայելով բազմակողմանի վավերացման օրինակին, որը մենք ուսումնասիրեցինք, արտադրության մեջ, իրերը կարող են տարբեր լինել: Ուշադրություն դարձրեք, թե ինչպես ենք մենք սահմանափակում մուտքերը եւ լրանում ենք նշաններ: Եթե ռոբոտները մուտք են գործում կայք, ապա երկու գործոնային վավերացում կարող է ավելի բարդ լինել, քանի որ դրանք կարող են մուտքագրել կոդեր, միեւնույն ժամանակ օգտագործողն է: Դրա դեմ պայքարելու համար օգտագործենք մոդել օգտագործողի մոդելներում, հայտարարելով, թե ինչպես ենք շփվում կայքի հետ, երբ մենք վավերացնում ենք հեռախոսահամարով օգտագործելով բազմաբնույթ գործոնային վավերացում: Մենք նույնպես կավելացնենքԷլ. Փոստով վավերացնելու տարբերակ: Սկսեք խմբագրել օգտվողի մոդելները
nano users/models.py
Սա այն է, ինչ մենք ավելացնում ենք մոդելը, նման է: Մեզ պետք չէ որեւէ մեթոդ, պարզապես փոփոխականներ `ID- ն, օգտագործողը, ժամանակացույցը, ժամկետը, երկարությունը եւ փորձերը` ցանկացած բազմամյա գործոնային վավերացման դեմ (ուղարկված հեռախոսի կամ էլ. Փոստով ուղարկված կոդ):
# Հիմնական նշանը, որն օգտագործվում է կայք մուտք գործելու համար
Եկեք նաեւ արտոնություն ավելացնենք մեր օգտագործողին, եւ մենք այն ձեռքով կդրենք այժմ, նախքան ի վերջո, արտոնյալ օգտագործողներին ինքնաբերաբար ընդգրկելու համար: Օգտագործողի մոդելներում ավելացնել այս տողը պրոֆիլում.
vendor = models.BooleanField(default=False)
Ինչպես տվյալների բազայում ցանկացած փոփոխություն, մենք պետք է միգրացիաներ պատրաստենք եւ տվյալների բազան ցանկացած պահի խմբագրենք: Հիշեք, որ դա անելու համար մենք առաջին հերթին օգտագործում ենք աղբյուրը (եթե այն արդեն չի օգտագործվել, քանի որ տերմինալը բացվել է), իսկ հետո Python- ը կառավարում է:
cd project-directory-you-named # (անհրաժեշտության դեպքում)
Առայժմ կարող եք ստեղծել ցանկացած հաշիվ, որը ստեղծել եք որպես վաճառողներ `օգտագործելով կեղեւը:
python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Հիմա եկեք զարգացնենք մեր բազմակողմանի վավերացման տեսակետը `այս նշանը օգտագործելու համար: Նախ, մենք պետք է փոփոխենք մեր ԱԳՆ օգնականների կոմունալ ծառայություններ: Օգտագործելով 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
# Վավերացրեք օգտագործողին `օգտագործելով իրենց էլփոստը կամ հեռախոսահամարը
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Զտեք նշանը URL- ում անցած արժեքով (UUID)
if not token: token = MFAToken.objects.create(user=User.objects.filter(profile__uuid=username).first(), uid=username, expires=timezone.now() + datetime.timedelta(seconds=115)) # Եթե այս նստաշրջանը չի ստեղծվել, ստեղծեք այն
user = User.objects.filter(id=token.user.id).first() # Ստացեք օգտագործողին նշանից
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Եթե դրանք արդեն իսկ վավերացված են, մուտքագրեք դրանք
if not user: raise PermissionDenied() # Ժխտել, եթե օգտագործող չի գտնվել
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Ստուգեք Auth Token- ը
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Մուտք գործեք օգտագործող, եթե դրանք արդեն մուտք չեն գործում
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Ժամկետը սահմանեք նրանց բազմակի գործոնային վավերացման վրա
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Վերափոխեք օգտագործողին հաջորդ էջին
if not user.profile.mfa_enabled: # Ստուգեք, արդյոք MFA- ն միացված է
if not check_verification_time(user, token): # Ստուգեք ժամանակը
user.profile.mfa_enabled = False # Մաքրել հեռախոսի համարը
user.profile.enable_two_factor_authentication = True # Միացնել ԱԳՆ-ն
user.profile.phone_number = '+1' # Անջատեք հեռախոսի համարը
user.profile.save() # Պահպանեք պրոֆիլը
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Մուտք գործեք օգտագործողին, եթե նրանց ԱԳՆ-ն միացված չէ
if request.method == 'POST' and not fraud_detect(request, True): # Եթե հարցումը փոստային պահանջ է
form = TfaForm(request.POST) # Ակնթարթային ձեւը
code = str(form.data.get('code', None)) # Ստացեք ծածկագիրը
if code and code != '' and code != None: # Համոզվեք, որ դա դատարկ չէ
token_validated = user.profile.check_auth_token(usertoken) # Ստուգեք Auth Token- ը
is_verified = check_verification_code(user, token, code) # Ստուգեք ծածկագիրը
if token_validated: # Եթե ամեն ինչ
if is_verified: # Կարգին է
user.profile.mfa_enabled = True # Միացնել ԱԳՆ-ն (եթե արդեն միացված չէ)
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Մուտք գործեք օգտվող
for key, value in request.GET.items(): # Կառուցեք Querystring հաջորդ պարամետրի համար (առկայության դեպքում)
return HttpResponseRedirect(next) # Վերահրել
elif not token_validated: # Եթե նշանը անվավեր էր
if p.mfa_attempts > 3: # Եթե շատ փորձեր լինեին
if form.data.get('send_email', False): # Ուղարկեք էլ. Փոստը (կամ տեքստը)
# Ձեւաթուղթը մատուցեք (դիմումների համար)
Երբ մենք ավելացնում ենք այս կոդը, համոզվեք, որ գործառույթը ներմուծեք էլ. Ֆայլի վերեւում, օգտագործողի դիտումները (այլ ներմուծմամբ), ավելացնել
from .mfa import send_verification_email as send_mfa_verification_email
Այժմ մենք պետք է գրենք այդ գործառույթը, նախքան այս ամենը աշխատի: Այն պետք է երկարացնի մեր ուղարկած էլփոստի գործառույթը եւ պարզապես էլեկտրոնային փոստ ուղարկեք օգտագործողին `հաստատման կոդով:
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))
Այսպիսով, այս ամենը հիանալի է գործում, այժմ մենք ունենք բազմակի գործոնային վավերացման համակարգ, որը մուտք գործելու համար անհրաժեշտ է հեռախոսահամարից կամ էլ. Դրանք կարող են լինել սպամներ, ռոբոտներ կամ յուրաքանչյուր ոք, ով լավ չի նշանակում մեր աշխատանքի համար: Դիտեք այնպիսի տեսարան, որին ես ունեմ օգտվողների մոնիտորինգի իմ կայքում.
# ներմուծում
from .tests import is_superuser_or_vendor # Մենք պետք է ստեղծենք այս թեստը
# Ստացեք օգտվողների ցուցակ
return render(request, 'users/users.html', { # Վերադարձեք օգտվողներին ձեւանմուշով
Նկատի ունեցեք, որ այս ծածկագիրը փորձարկում է, մենք պետք է այս թեստը հայտարարեն փորձարկումներում: Խմբագրելով օգտվողներին / փորձարկումներին, թողեք փորձությունը:
def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
Սա օգտվողների / Users.html ձեւանմուշի հետ համատեղ է, որը նման բան է թվում.
Նկատի ունեցեք, որ ձեւանմուշը ներառում է մեկ այլ ձեւանմուշ, օգտագործողներ /user.html: Կաղապարից օգտագործելիս, որն ունի ենթահողեր եւ երկարաձգում չօգտագործելը, լավ գաղափար է `ընդգծելու համար () նախքան ֆայլի անվանումը `երկարաձգելու համար, ձեւանմուշները տարբերելու համար:
Նկատի ունեցեք, որ սա շատ Jinja է, գուցե սահմանված այս բոլոր փոփոխականները չունեք: Բայց սա այն է, ինչ նման է իմ ծածկագիրը:
<small># {{user.id}} </ small>
Մեզ նույնպես պետք է եւս մեկ ենթահող, Toggle_active.html: Այս ձեւանմուշը պետք է լինի մի ձեւ, որը թույլ է տալիս մեզ փոխել, արդյոք օգտագործողը ակտիվ է:
Մենք նաեւ պետք է նպատակ ունենանք օգտվել օգտագործողի գործունեությանը եւ համապատասխան URL նախշերով: Մինչ մենք գտնվում ենք դրանում, եկեք տեսանք օգտագործողին ջնջելու համար, եթե դա անհրաժեշտ լինի:
# Ներմուծում
success_url = '/' # Հեղինակային URL- ի վերահղումը
def test_func(self): # Թեստ, եթե օգտագործողը գերադասիչ է եւ ունի ջնջելու թույլտվություն
Թեեւ դա գործնական է, երբ անհրաժեշտ է, օգտագործողին ջնջելը չպետք է անհրաժեշտ լինի անհրաժեշտության դեպքում, մենք պարզապես կարող ենք փոխել այն օգտվողների տեսանելիությունը, ովքեր այցելում են տեղում:
URL- ի նախշերը, որոնք մենք ավելացանք, այսպիսին է: Nano- ի հետ, խմբագրեք օգտագործողներին / urls.py եւ ավելացրեք այս տողերը.
nano users/urls.py
Տողերը պետք է անցնեն օգտագործողի դիտումների ուղիների ցանկում, մինչեւ վերջ «]« Բայց սկզբից հետո »:
# ...
# ...
Այժմ համոզվեք, որ կայքը կրկնօրինակեք, որպեսզի այն կարողանաք ներբեռնել վեբ սերվերում, մենք կշարունակենք աշխատել: Հրամանի տողից,
sudo backup
Այժմ մեր կայքը կրկնօրինակում է:
Այսպիսով, հիմա մենք ունենք եւս մի քանի օգտակար հատկություններ: Բայց ինչ կասեք այստեղ մեծ պատկերի մասին: Այս ծածկագիրը դեռեւս հասանելի չէ ինտերնետից, մենք դեռ չունենք փոստ սերվեր, եւ մենք պետք է ընդլայնել մեր ծրագիրը, ներառելու համար հաստատման համապարփակ գործընթացը, ինչպես նաեւ անվտանգ արձանագրություններ, արտոնյալ օգտագործողների համար:
Մենք հասնելու ենք այս ամենին: Առայժմ ամենակարեւորը պարզապես կստանա այս ծածկագիրը առցանց, որը մենք կարող ենք անել մի քանի տող բաշի հետ Ubuntu սերվերի վրա: Դրա համար անհրաժեշտ է սերվեր վարձել, քանի դեռ տանը սերվեր չունեք եւ բիզնեսի ինտերնետ բաժանորդագրություն, որը թույլ է տալիս նավահանգիստներ բացել: Ես անձամբ վարում եմ իմ կայքը HP Z440- ում, որը տեղադրված է իմ բնակարանում, բայց սովորաբար շատ ավելի էժան է `հիմնական կարիքների վարձակալելու համար վիրտուալ մասնավոր սերվեր (VPS):
Հիշեք, որ այժմ գործարկած ծածկագիրը համեմատաբար բարակ է, այն պետք է պահպանվի եւ բարելավվի, նախքան մենք պատրաստ ենք օգտագործել այն, ինչ մենք պետք է օգտագործենք ապրանք: Համոզվեք, որ զգույշ եղեք, թե ինչ եք անում ինտերնետի հետ, համոզվեք, որ այս կայքը հրապարակայնորեն տեղակայեք Linux սերվերի համացանցում, դուք ունեք ծրագիր, ձեր կայքի հետ անցանկալի փոխազդեցությունները արգելափակելու համար: Սա, ամենայն հավանականությամբ, խնդիր չի դառնա, բայց մենք կանդրադառնանք այսպիսի պայքարի տարբեր լուծումների, ներառյալ մեքենայական ուսումը,Արհեստական հետախուզություն եւ համակարգչային տեսլական: Երբ խնդիր է դառնում, այս տեքստում ավելի հեռու նայեք ա
VPS վարձակալելու առումով կան շատ տեղեր, որոնք կարող եք գնալ: Google Cloud- ը ունի VPS սերվերներ, Ionos, Kamatera, Amazon AWS, եւ ավելի շատ մատակարարներ առաջարկում են ամպային սերվերի լուծումներ, որոնք համապատասխանելու են մեր կարիքներին:
Դուք պետք է սեղմեք նրանց ձեւերը եւ ընտրեք սկսելու ծրագիր: Կարող եք գնալ հիմնական պլանի հետ ցանկացած մատակարարի հետ, բայց համոզվեք, որ մատակարարը թույլ է տալիս բացել Port Mail Server PORGOR- ը `էլեկտրոնային փոստ ուղարկելու համար (սա պետք է լինի 587 եւ նավահանգիստը 25): Մինչ այժմ ես լավագույն փորձը ունեցել եմ Իոնոսի եւ Կամաթատրայի հետ, երկուսն էլ թույլ կտան ինձ անսահմանափակ էլփոստ ուղարկել, եւ նրանց գները բավականին էժան են:
Դուք կապվելու եք ձեր նոր սերվերին, SSH կամ Secure Shell կոչվող արձանագրության վրա, որը թույլ է տալիս հեռակա միջերեսը սերվերի հետ, ինչպես ձեր անձնական համակարգիչը, ձեր անձնական համակարգչից: Երբ սերվերը տեղադրեք, հոստինգի մատակարարը, ամենայն հավանականությամբ, կխնդրի ձեզ ավելացնել SSH ստեղնը, կամ դրանք ձեզ անուն եւ գաղտնաբառ կտան: SSH ստեղնը այն է, թե ինչպես եք մուտք գործելու սերվեր, հրամանի տողից `կոդը խմբագրելու համար: Օգտագործեք SSH ստեղնը ստեղծելու համար ստորեւ նշված SSH-Keygen ընտրանքները:
ssh-keygen
Պահպանեք ֆայլը եւ վերաշարադրեք այն, եթե անհրաժեշտ է, լավ է պտտել ձեր SSH ստեղները, եթե արդեն չունեք: Այժմ ձեր SSH ստեղնը տեսնելու համար կարող եք օգտագործել հետեւյալ հրամանը: Դուք կցանկանաք այն պատճենել ձեր հեռավոր սերվերին, որպեսզի կարողանաք օգտագործել այն հաստատելու համար:
cat ~/.ssh/id_rsa.pub
Եթե չկարողացաք տեսնել SSH ստեղնը, երբ այդ հրամանը մուտքագրեք (թվանշանների երկար տող), սկսած «SSH-RSA AAA» - ից), փորձեք RSA ստեղն առաջացնել (դրանք ավելի անվտանգ են): Հետեւյալ ծածկագիրը կստեղծի 4096 բիթ SSH ստեղն:
ssh-keygen -t rsa -b 4096
Ստեղծեք Ubuntu- ի վ.-ի VPS, բայց դուք նախատեսում եք դա անել: Դուք ստեղծել եք VPS, կտտացնելով պրովայդերների կայքի ձեւերը (kamatera.com, ionos.com կամ նման), դուք կցանկանաք մուտք գործել: Դա անելու համար օգտագործեք SSH հրամանը ձեր IP հասցեով (հասցեն, որը նման է XX.xx.xxxxx): Դուք նաեւ պետք է զգայուն լինեք մեր ստեղծած սերվերի վրա ստանդարտ օգտագործողի համար, օրինակ, Ubuntu:
ssh ubuntu@XX.XX.XX.XX
Ձեզ կարող է գաղտնաբառ խնդրել, եթե գաղտնաբառ խնդրեք, մուտքագրեք այն: Մենք չենք օգտագործի լռելյայն օգտվողի անունը, այնպես որ եկեք սկսենք նոր օգտվող ստեղծել եւ իրենց հաշվին SSH բանալին ավելացնելը:
Եկեք սկսենք ավելացնել նոր SSHD_Config ֆայլ, որը սերվերին ասում է, թե ինչպես օգտագործել SSH:
nano sshd_config
# Սա SSHD սերվերի համակարգի լայն կազմաձեւման ֆայլն է: Տեսնել
# SSHD_CONFIG (5) Լրացուցիչ տեղեկությունների համար:
# Այս SSHD- ն կազմվել է ճանապարհով = / usr / տեղական / sbin: / usr / տեղական / bin: / usr / sbin: / usr / bin: / sbin: / usr /
# Լռելյայն sshd_config- ի ընտրանքների համար օգտագործվող ռազմավարությունը առաքվեց
# Openssh- ը իր լռելյայն արժեքով տարբերակներ նշելուն է, որտեղ
# Հնարավոր է, բայց թողեք դրանք մեկնաբանված: Անզիջում տարբերակները գերակայում են
# Լռելյայն արժեք:
# 22 նավահանգիստ
# Հասցեֆիլիի ցանկացած
# Լսողական տիտղոս 0.0.0.0
# Լսողական դահլիճ ::
# Hostkey / et այլն / SSH / SSH_HOST_RSA_KY
# Hostkey / etc / ssh / ssh_host_ecdsa_key
# Hostkey / et այլն / SSH / SSH_HOST_ED25519_KEY
# Ծածկոցներ եւ բանալին
# Re Beylimit- ը լռելյայն ոչ մեկը
# Անտառահատություն
# Sylslogfacility Auth
# Loglevel Info
# Նույնականացում.
# LogingRaceTime 2M
# Permitrootlogin արգելքի գաղտնաբառ
# Խիստմերներ այո
# Maxauthtries 6
# Maxsessions 10
# Ակնկալում եք .Սշ / լիազորված_KEYS2, որպեսզի հետագայում անտեսվի լռելյայն:
# Լիազորող պրոցեսներֆիլ ոչ մեկը
# Լիազորվածքեր
# Լիազորվածքի այգին ոչ ոք
# Դրա համար ձեզ հարկավոր է նաեւ հյուրընկալող ստեղներ / եւ այլն / SSH / SSH_KNOWN_HOSTS
# Հոսթաբասեդաուտացիա ոչ
# Փոխեք այո, եթե չվստահեք ~ / .ssh / Deal_hosts համար
# Հոսթաբասեդաուտացիա
# Ignoreusernownhosts ոչ
# Մի կարդացեք օգտագործողի ~ / .Ռուսոնս եւ ~ /
# Ignorerhosts այո
# Թունելավորված պարզ տեքստային գաղտնաբառերը անջատելու համար այստեղ փոփոխություն, ոչ այստեղ:
# PermitempyPasswords ոչ
# Փոխեք այո, մարտահրավերների արձագանքման գաղտնաբառերը միացնելու համար (զգուշացեք խնդիրներ հետ
# Փամերի որոշ մոդուլներ եւ թելեր)
# Kerberos Ընտրանքներ
# Kerberosauthentication ոչ
# Kerberosorlocalpasswd այո
# Kerberosticketcleanup այո
# Kerberosgetafstoken no
# GSSAPI ընտրանքներ
# Gssapiautication ոչ
# Gssapicleanuprecrecreentials այո
# Gssapistrictacceptorcheck այո
# Gssapikeyexchange ոչ
# Սահմանեք սա «Այո» -ին `PAM- ի վավերացմանը, հաշվի վերամշակումը,
# եւ նստաշրջանի վերամշակում: Եթե դա միացված է, PAM վավերացման կամք
# թույլատրվում է kbdinteractiveAuthauticautcatice- ի միջոցով եւ
# Գաղտնաբառ Կախված ձեր PAM կազմաձեւից,
# PAM- ի վավերացումը KBDinteractiveAuthentication- ի միջոցով կարող է շրջանցել
# «Permitrootlogin առանց գաղտնաբառի» կարգավորումը:
# Եթե պարզապես ուզում եք, որ PAM հաշիվն ու նստաշրջանը ստուգում են առանց
# PAM վավերացում, ապա միացրեք սա, բայց սահմանեք գաղտնաբառաստեղծություն
# եւ kbdinteractiveAuthauticaution- ը «ոչ» -ին:
# Թույլատրող այո
# DEMPTCPFORWARDING ԱՅՈ
# GatewayPorts ոչ
# X11DISPLAYOFFSET 10
# X11uselocalhost այո
# Permittty Այո
# Printlastlog այո
# Tcpeepalive այո
# Թույլտվություն չկա
# Սեղմումը հետաձգվեց
# ClientaliveInterVAL 0
# ClientalivecountMax 3
# Օգտագործվում է ոչ
# Pidfile /run/sshd.pid
# MaxStartups 10: 30: 100
# Permittunnel ոչ
# ChrootDirectory ոչ մեկը
# Versionaddumdum Ոչ մեկը
# Լռելյայն դրոշի ուղի չկա
# Թույլ տվեք հաճախորդին անցնել տեղանքի շրջակա միջավայրի փոփոխականներին
# Բացառեք առանց ենթահամակարգերի լռելյայն
# Յուրաքանչյուր օգտագործողի հիման վրա գերակշռող պարամետրերի օրինակ
# Match օգտվողի Anoncvs
# X111forwarding Ոչ
# PermtcPfForwarding Ոչ
# Permittty no
# FORCECOMMAND CVS սերվեր
Հիշեք, որ Ctrl + X- ը եւ Y- ը ֆայլը պահպանելու համար: Հաջորդը, եկեք գրենք հիմնական սցենար, որը կոչվում է նախնական (մեր օգտագործողի լռելյայն տնային տեղեկատուում):
nano initialize
Այս տողերը ավելացրեք ֆայլին, փոխարինելով
# ! / BIN / BASH
Քայլել ձեզ այս ֆայլի միջոցով, եկեք սկսենք տողից: Առաջին տողը կազմողին ասում է, որ սա բաշի սցենար է: Այնուհետեւ մենք տեղադրում ենք կախվածություններ, պատճենելով sshd_config- ը ճիշտ գրացուցակին, վերագործարկելով SSH- ը `արմատավորելու համար SSH ստեղներ, ավելացնելով« Թիմը »: Մենք նաեւ հավաքական ենք ավելացնում Sudo Group- ին, առաջացնում ենք նրանց SSH ստեղնը, ավելացրեք մեր բանալին լիազորված ստեղների եւ նրանց համար, եւՏպեք դրանց բանալին: Այս նոր օգտագործողը կլինի, թե ինչպես ենք մուտք գործում
Նոր տերմինալում առաջ գնացեք եւ կրկին բացեք սերվերը:
ssh team@XX.XX.XX.XX
Այս անգամ ձեզ հարկավոր չէ գաղտնաբառ, երբ դուք ունեք SSH ստեղն: Մենք արդեն հաշմանդամություն ունենք գաղտնաբառով, կայքը ավելի անվտանգ պահելու համար:
Այժմ այս սերվերը սկսում է ամբողջովին դատարկ, դրա մասին որեւէ տեղեկություն չունենալով: Սկսենք մեր նախագիծը կլոնավորել git- ից, որպեսզի կարողանանք ներբեռնել եւ գործարկել այն հեռավոր մեքենայի վրա: Հեռավոր սերվերի վրա `կապված SSH- ի վրա, նախ տպեք ձեր SSH ստեղնը.
cat ~/.ssh/id_rsa.pub
Հաջորդը, այս բանալին տեղադրեք GIT պարամետրերի մեջ, ինչպիսին մենք նախկինում արեցինք մեր Git պահեստը: Այժմ մենք կարող ենք մեր նախագիծը ուղղակիորեն քերել սերվերին: Համոզվեք, որ դուք նախապես կրկնօրինակում եք նախագիծը, այնպես որ այն ներբեռնելու համար GIT սերվերի վրա է:
git clone git://github.com/you/yourproject.git
Կատարյալ: Այժմ բոլոր ֆայլերը այստեղ են: Մենք դրանք կարող ենք տեսնել ls- ով
ls
Հիմա սկսենք սերվերը ստեղծել: Նախ, պատճենեք ձեր նախագծի գրացուցակը մի պարզ, հիշարժան անունով, որը մենք կօգտագործենք նախագծի համար:
cp -r yourproject whatyoucalledit
Որտեղ «WhatouCalledit» - ը ձեր նախագծի նոր անունն է: Հաջորդը, մենք պետք է կառուցենք հիմնական գործիք, սերվերը տեղադրելու համար: Մենք կփրկենք այս ծրագիրը եւ կօգտագործենք այն ապագայում: Այս ծրագիրը կառուցելու համար եկեք ստեղծենք օգտագործող երկուական, որպեսզի որոշենք, թե ինչպես ենք մենք խմբագրում սցենարը: Օգտագործելով Bash, Խմբագրել / USR / BIN / AScript
sudo nano /usr/bin/ascript
Համոզվեք, որ օգտագործեք Sudo այնտեղ, որպեսզի ֆայլը խմբագրելու թույլտվություններ ունեք: Ֆայլում ավելացրեք այս տողերը.
# ! / BIN / BASH
echo "# ! / BIN / BASH ">> / USR / BIN / $ 1
Հիշեք, որ այս սցենարը փաստարկ է անում, սցենարի անվանումը, որպես $ 1: Նախ ստուգում է, արդյոք ֆայլը գոյություն ունի, կամ այլ կերպ այն ստեղծում է, ավելացնում է սցենարը `բաշը հայտարարելու համար, փոփոխում է դրա թույլտվությունները: Եթե ֆայլն արդեն գոյություն ունի, պարզապես փոխեք թույլտվությունները եւ խմբագրեք այն: Պահպանեք ֆայլը, իսկ հաջորդը մենք կփոխենք դա թույլտվություններ: Քանի դեռ մենք օգտագործում ենք այս սցենարը, մենք ստիպված չենք լինի դա կրկին անել:
sudo chmod a+x /usr/bin/ascript
Կատարյալ: Հիմա եկեք ստեղծենք սցենար, որը կոչվում է կարգավորիչ: Նախ, չթողնել ձեզ, բայց դիտեք, թե ինչպիսին է իմ տեղադրման սցենարը: Մենք քայլելու ենք, թե ինչպիսին պետք է լինի այս սցենարը ձեր նախագծի մեջ, ձեզ հարկավոր չէ ամեն ինչ իմ սցենարով սկսել:
# ! / BIN / BASH
# sudo chmod a + x սցենարներ / Usersetup
# ./scripts/usersetup
# SSH-KEYGEN
# Ծրագրի տեղեկատու
# Գրանցման հրամաններ
# Նանո կազմաձեւ
# Git config
# Թարմացրեք եւ տեղադրեք
# Միացնել Clamav AntiVirus- ը
# Սահմանեք հյուրընկալողի անունը
# Կարգավորվող փոստեր
# Տեղադրեք տվյալների բազայի կրկնօրինակում
# Անջատեք iptables
# Տեղադրեք BitDefender- ը
# Կարգավորել Postfix
# Ստեղծեք դիրքեր
# Setup Virtualenv
# Ստացեք եւ կկառուցի կախվածություններ
# Սահմանեք firewall- ի կանոնները
# Տեղադրեք Pypi կախվածությունները
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# Խողովակների տեղադրում OpenCV-Python == 4.5.5.64
# Խողովակների տեղադրում OpenCV-Contrib-Python == 4.5.5.64
# Տեղադրեք Certbot
# Գործարկել Certbot
# Վերբեռնեք փոստի սերվերը
# Պատճենել 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
# Սահմանեք օգտվողի պարամետրերը
# Սահմանել թույլտվությունները
# Sudo Chown -r թիմ. Օգտագործողներ / VAR / RUC /
# Sudo Chown Root: Root / RUN / SUDO / TS-R
# sudo chmod 664 db.sqlite3
# sudo chown www-data. Օգտագործողներ db.sqlite3
# Պատճենեք կազմաձեւումը եւ սահմանեք թույլտվությունները
# Սահմանել տվյալների շտեմարան
# Ներարկեք PAM կազմաձեւեք եւ հեռացրեք անսարք SSH կազմաձեւումը
# sudo sed -i '' -e '$ d' /etc/pam.d/sshd
# sudo sed -i '' $ d '/ et այլն / պրոֆիլ
# Պատճենեք BIN սցենարները եւ սահմանեք թույլտվություններ
# Վերբեռնեք եւ միացրեք ծառայություններ
# Միացնել Apache Modules- ը
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# Անջատեք կանխադրված կայքը
# Միացնել մեր կայքը
# Վերբեռնեք Daemon- ը եւ վերագործարկեք Apache, Postfix- ը եւ Opendkim- ը
# Սահմանել թույլտվությունները
# Փոխանակման կազմաձեւում
# Հնարավորության շարժիչ
# Կարգավորեք git
# Show ույց տալ IPv6- ը եւ Opendkim- ը տիրույթի կազմաձեւման համար
# Կարգավորումը ավարտված է
Դա շատ կարգավորում է: Մի խոսքով, այս ծածկագրի տեղեկամատյանները պատվիրում են, կազմաձեւում են նանոն եւ GIT- ը, պատճենները, ներլցումներ եւ տեղադրում են Ubuntu Apt փաթեթները, Python- ի կախվածությունները Վկայագրերը եւ սերվերը հավաքում են, տեղադրվում են կազմաձեւում, սկսում եւ հնարավորություն է տալիս խստացնել, բաշխել փոխանակում,Կարգավորում է թույլտվությունները եւ տպում IP, IPV6 հասցեն եւ Opendkim ստեղնը: Բավականին պարզ, բայց այն կարծես շատ կոդ է: Դրանից շատ բան մեզ հարկավոր չէ, քանի որ մենք չունենք կախվածություններ, մենք չենք օգտագործում նեխուր, նեխուր բաբախում կամ Daphne, բայց դրանցից մի քանիսը կտեղադրենք: Ուշադրություն դարձրեք, որ այս ծածկագիրը ունի մի քանի դոմեն
Մենք պետք է նաեւ գնի դոմենի անուն (որը փոքր տարեկան վճար է): Ես խորհուրդ եմ տալիս Squarespace- ը տիրույթ գնելու համար, դրանց դասավորությունը ինտուիտիվ է եւ հեշտ օգտագործման համար: Կարող եք գնել ձեր ընտրած ցանկացած տիրույթ, բայց ես այս օրինակում օգտագործում եմ տիրույթ Femmebabe.com- ը: Դոմեյն գնելուց հետո գլուխը դեպի Squarespace DNS կազմաձեւման վահանակ եւ ավելացրեք գրառում, որը ձեր տիրույթը սերվերին է ներկայացնում IP հասցեով: Այն պետք է լինի այսպիսին.
@ A xx.xx.xxxxxx
@ Օպերատորի հետ որպես հյուրընկալող, այս տիրույթի ներքո գտնվող բոլոր ենթադոմեյններն ու արմատային տիրույթը բոլորը կուղղորդեն սերվերին: Հայտարարելու համար ավելի շատ գրառումներ կան, բայց մենք կարող ենք տեղափոխվել դրան, երբ պատրաստ ենք փոստ ուղարկել: Հիշեք, որ այն կարող է տեւել մի քանի օր առաջ, երբ կարողանաք հաջողությամբ ուղարկել նամակից: DNS գրառումները, որոնք մենք դնում ենք, ժամանակ կպահանջվի տարածելու համար:
Համենայն դեպս, միակ գրառումը, որը մենք պետք է սկսենք, ռեկորդ է: Այսպիսով, այժմ մենք կարող ենք լրացնել հետեւյալ սցենարը մեր նախագծի համաձայն եւ գործարկել այն:
Սկսենք ավելի փոքր տեղադրման սցենարով `պարզապես տեղադրելու համար այն, ինչ մեզ անհրաժեշտ է հիմնական առաջընթացի համար: Մենք դեռ չենք կօգտագործի այդքան կախվածություններ կամ postgreesql, մենք պարզապես կսկսենք հիմնական HTTP սերվեր եւ անհանգստանալու է այն հաստատելու համար, երբ դա արվել է: Հիշեք, որ HTTPS վկայագիր ստանալու եւ սերվերը ապահով գործարկելու համար մենք պետք է տիրույթ գնենք սերվեր վարձով: Առայժմ այս ֆայլում փոխարինեք «Թիմը» ձեր օգտվողի անունով, «Dir» - ի ձեր նախագծի գրացուցակի միջոցով եւ ձեր էլ. Փոստն ու տիրույթը մատակարարեք<>
Բացի այդ, նախքան այս ծածկագիրը գործարկելը, մենք պետք է փոխենք պարամետրերը Firewall- ին, հյուրընկալող մատակարարը աջակցում է, եթե այդպիսիք կան: Սովորաբար սա ձեր հոստինգի մատակարարի «ցանցերի» ներդիրում է, կամ եթե դուք ինքնակառավարում եք, այն ձեր երթուղիչի «նավահանգստի փոխանցման» հատվածում: Դուք նաեւ կցանկանաք ստեղծել ստատիկ IP ձեր երթուղիչի միջոցով ձեր սերվերի մեքենայի հասցեին, եթե դուք օգտագործում եք ինքնակառավարման հոստինգ: Դուք պետք է բացեք հետեւյալ նավահանգիստները `կարդալու / գրելու մուտքի համար:
22 (SSH) 25 (փոստ) 587 (փոստ) 110 (փոստ հաճախորդ) 80 (http) 443 (HTTPS)
# ! / BIN / BASH
# Գրանցման հրամաններ
# Նանո կազմաձեւ
# Git config
# Թարմացրեք եւ տեղադրեք
# Միացնել Clamav AntiVirus- ը
# Սահմանեք հյուրընկալողի անունը
# Տեղադրեք տվյալների բազայի կրկնօրինակում
# Անջատեք iptables
# Setup Virtualenv
# Տեղադրեք Certbot
# Գործարկել Certbot
# Սահմանեք օգտվողի պարամետրերը
# Սահմանել թույլտվությունները
# Sudo Chown -r թիմ. Օգտագործողներ / VAR / RUC /
# Sudo Chown Root: Root / RUN / SUDO / TS-R
# Վերբեռնեք եւ միացրեք ծառայություններ
# Միացնել Apache Modules- ը
# Վերբեռնեք Daemon- ը եւ վերագործարկեք Apache, Postfix- ը եւ Opendkim- ը
# Show ույց տալ IPv6- ը եւ Opendkim- ը տիրույթի կազմաձեւման համար
Այս ծածկագիրը վարելուց առաջ համոզվեք, որ ձեր գնած տիրույթը միացված է սերվերին: Դա անելու համար բացեք տերմինալը ձեր տեղական մեքենայի վրա եւ գործադրեք այս հրամանը ձեր տիրույթով.
ping femmebabe.com # Տեղադրեք ձեր տիրույթը այստեղ, պինգից հետո
Եթե ամեն ինչ լավ է թվում, եւ սերվերը պատասխաններ է ուղարկում, մենք պատրաստ ենք գործարկել սցենարը եւ տեղադրել փաթեթներ, ինչպես նաեւ սկսել եւ հաստատել մեր Apache սերվերը:
Այս բոլոր կազմաձեւման համար սա բոլորովին այն կարգաբերումը չէ, մենք ավելի ուշ կանդրադառնանք այդ կարգաբերմանը: Առայժմ գործարկեք այս կարգաբերման կոդը եւ ձեր սերվերը տեղադրելու եւ հաստատելու համար պետք է տեւել մի քանի րոպե: Եվս մեկ անգամ համոզվեք, որ մուտքագրեք անունը, էլփոստի եւ դոմենի անունը սցենարի մեջ, ըստ ձեր գնած անվանման:
Այժմ, երբ սերվերը տրամադրվում է, ցանկացած վեբ զննարկչի մեջ կարող եք գնալ URL եւ ստուգել, որպեսզի սերվերը վարում է HTTPS: Եթե դա այդպես չէ, փորձեք մի փոքր սպասել, որպեսզի DNS գրառումները հասնեն, ապա գործարկեք հետեւյալ հրամանը `վկայագրերի հավաստագրումը փորձելու համար.
sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Քանի դեռ ճիշտ եք կազմաձեւել ամեն ինչ, դուք պետք է կարողանաք մուտք գործել Apache- ի լռելյայն էջը պարզապես իմանալու համար, որ ձեր ծածկագիրը աշխատում է եւ ուղիղ ինտերնետային էջ է աշխատում: Հաջորդը, եկեք խմբագրենք պարամետրերը: Մենք կկազմակերպենք նաեւ դոմենը պարամետրերում, ինչպես նաեւ ներքին IPS:
nano yourproject/settings.py
Կարգավորումներում փոխեք / ավելացրեք այս տողերը:
# Կայքի կազմաձեւում
Այժմ մենք պետք է կազմաձեւենք Apache2- ը: Եկեք խմբագրեք կազմաձեւման ֆայլը, որը մենք տեղակայելու ենք այս տողով.
sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Այս կազմաձեւային ֆայլը պետք է ունենա մեր տիրույթի անունը դրա մեջ եւ օգտագործողի եւ նախագծի անվանումը: Ես օգտագործում եմ տիրույթի անունը Femmebabe.com, Մականունի թիմը եւ 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>
Համոզվեք, որ ձեր սերվերը կազմաձեւելիս այս օրինակի կոդով փոխարինեք նախագծի, գրացուցակների եւ տիրապետության անվանումը: Այժմ մենք պետք է անջատենք կանխադրված կայքը: Դա կարելի է անել Bash- ի միջոցով:
sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
Հաջորդը, մենք կարող ենք հնարավորություն տալ կանխադրված կայքը եւ վերբեռնել Apache2- ը, ինչպես նաեւ օգտագործելով Bash: Մի մոռացեք փոխարինել Femmebabe- ին ձեր հայտարարած ֆայլի անունով, երբ խմբագրում եք / եւ այլն / կայքեր-կայքեր:
sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Վերադառնալ ձեր տիրույթ NAVBAR- ում: Դուք պետք է տեսնեք ձեր կազմաձեւված կայքը ձեր վեբ զննարկիչում: Շնորհավորում ենք Եթե դա չես տեսնում, գուցե անհրաժեշտ լինի որոշակի փոփոխություններ կատարել: Զգուշորեն վերանայեք ձեր նախագծի պարամետրերը, Apache կազմաձեւումը եւ համոզվեք, որ սխալներ չունեք եւ գործարկեք հետեւյալ հրամաններ `սխալների համար ստուգելու համար:
cd projectname
source venv/bin/activate
python manage.py check
Եթե ձեր Python նախագծի մեջ սխալներ ունեք, հետեւեք նրանց, թե որտեղ են դրանք եւ շտկեք դրանք: Գուցե դուք չեք կարողանա տեսնել ձեր բոլոր սխալները, կախված այն բանից, թե որտեղ են նրանք, այնպես որ, եթե սխալ եք ասում, ապա «բնակչությունը չի վերաթողարկում», սխալը բացահայտելու համար:
nano venv/lib/python3.12/site-packages/django/apps/registry.py
Ոլորեք դեպի 83 տող, որտեղ այս գործարկման սխալը բարձրացվում է (RuntyTimeError- ը բարձրացնելը («Բարձրացնել (բնակեցված () վերաթողարկված չէ») եւ այս տողի առջեւ մեկնաբանություն ավելացնել, ապա ավելացնելով նույն}: Սա այսպիսին է.
# Կանխել Reentrant զանգերը `խուսափելու AppConfig.Ready ()
# մեթոդներ երկու անգամ:
# RuntingTimeError- ը («բնակչությունը () վերաթողարկումը չէ»)
Դրանից հետո կարող եք նորից ստուգել նախագիծը եւ բացահայտել սխալը:
python manage.py check
Այնուհետեւ կարող եք տեսնել սխալը եւ շտկել այն: Երբ այն ֆիքսված եք, եւ կոդը չի կարող սխալվել, համոզվեք, որ ֆայլը փոխեք, այնպես որ դա այսպիսին է.
# Կանխել Reentrant զանգերը `խուսափելու AppConfig.Ready ()
# մեթոդներ երկու անգամ:
# self.app_configs = {
Եթե սերվերը առցանց փոփոխություն կատարենք, ապա մենք պետք է օգտագործենք հետեւյալ հրամանը, սերվերը վերբեռնելու համար.
sudo systemctl reload apache2
Հիանալի! Բայց ինչ կասեք փոստ ուղարկելու մասին: Էլ.փոստ ուղարկելու համար մենք նախ պետք է թարմացնենք տիրույթի կազմաձեւը: Սա պետք է լինի ձեր DNS վահանակում Squarespace- ում, կամ ցանկացած դոմենի անվան գրանցամատյան, որը դուք ընտրել եք: Մենք պետք է նաեւ տեղադրենք եւ կավելացնեն կազմաձեւեր եւ գործարկենք մի քանի հրաման:
Նախ, եկեք ստանանք սերվերի IPv6 հասցեն: Այնուհետեւ մենք կբացի ձեր DNS- ը եւ կավելացնենք գրառումները:
Սերվերի IPv6 հասցեն ստանալու համար օգտագործեք այս հրամանը.
ip -6 addr
Այժմ մենք կարող ենք ավելացնել հետեւյալ գրառումները DNS պարամետրերին: Իմ գրառումները նման են: Այնուամենայնիվ, ձեր գրառումների համար դուք պետք է IP հասցեն փոխարինեք ձեր IP- ով (ոչ թե 75.147.182.214, դա իմն է): Նաեւ ավելացրեք ձեր տիրույթը Femmebe.com- ի տեղում, ինչպես նաեւ նախորդ հրամանի հայտնաբերված ձեր IPV6 հասցեն (դուք չեք կարող օգտագործել ականը, FE80 :: 725A: FFF: 3E02): Մի անհանգստացեք Domainkey- ի համար այժմ, սա ստեղծվում է, երբ մենք տեղադրենք Postfix- ը, փոստի սերվերը, OpendKim- ի միջոցով եւ տպեք բանալին: Մենք կցանկանանքկազմաձեւել սա
@ Էունք N / a 75.147.182.214
@ Մս 10 տարեկան Femmebabe.com
@ PTR N / a Femmebabe.com
@ Տրտմոն N / a TXT @ v = SPF1 MX IP75.147.182.214IP6: FF80 :: 725a: FFF: FF49: 3E02 ~ Բոլորը
Լռելյայն ._բիմի Տրտմոն N / a v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg
_dmarc Տրտմոն N / a v = dmarc1; p = Ոչ մեկը
sendonly._domainkey
Տրտմոն
N / a
Այժմ մենք պետք է ավելացնենք Postfix- ի համար մշտական կազմաձեւ: Այն ամենը, ինչ մենք պետք է անենք, համոզվեք, որ մենք փոխարինում ենք տիրույթի անունը, Femmebabe.com, ձեր տիրույթի անունով: Եկեք դիտենք բոլոր կազմաձեւերը մեկ առ մեկ եւ տեղադրենք դրանք մեր նախագծում կազմաձեւված գրացուցակում, տեղադրել ՕՀ-ին:
nano config/etc_postfix_main.cf
Այս տեքստը ավելացրեք ֆայլին
# Տես / Desr/Share/postfix/main.cf.dist մեկնաբանության, ավելի ամբողջական վարկածի համար
# Debian- ի հատուկ. Ֆայլի անունը նշելը առաջինը կհանգեցնի
# այդ ֆայլի գիծը, որպես անուն: Debian Default- ը
# է / եւ այլն / փոստ:
# myorigin = / etc / mailname
# Հավելված. Domain- ը Mua- ի գործն է:
# Անհասկանալի է հաջորդ տողը `« հետաձգված փոստ »նախազգուշացումներ ստեղծելու համար
# ուշացում_ warning_time = 4H
# Տես http://www.postfix.org/compatibility_readme.html - լռելյայն մինչեւ 3.6
# թարմ տեղադրումներ:
# TLS պարամետրեր
# Milter- ի կազմաձեւում
Հաջորդ կազմաձեւը:
nano config/etc_postfix_master.cf
Ավելացնել այս տողերը.
#
# Postfix Master գործընթացի կազմաձեւման ֆայլ: Ձեւաչափի վերաբերյալ մանրամասների համար
# ֆայլի, տես Վարպետի (5) ձեռնարկի էջը (հրամանը. «Մարդ 5 վարպետ» կամ
# Առցանց, http://www.postfix.org/master.5.html):
#
# Մի մոռացեք այս ֆայլը խմբագրելուց հետո իրականացնել «Postfix» - ը:
#
# ========================================================================================================================?
# Ծառայության տեսակը Մասնավոր անկանխ Chroot արթնանում է MaxProc հրամանը + args
# (այո) (այո) (ոչ) (երբեք) (100)
# ========================================================================================================================?
# smtp inet n - y - 1 postcreen
# SMTPD PASS - - Y - - SMTPD
# dnsblog Unix - - Y - 0 DNSBlog
# Tlsproxy Unix - - Y - 0 TLSProxy
# Ընտրեք մեկը. Միացնել միայն Loopback հաճախորդների համար միայն կամ ցանկացած հաճախորդի համար:
# 127.0.0.1:Submission Inet N - Y - - SMTPD
# -Ով syslog_name = Postfix / ներկայացում
# -Ով smtpd_tls_securance_level = գաղտնագրում
# -Ով smtpd_sasl_auth_enable = այո
# -Ով smtpd_tls_auth_only = այո
# -Ով smtpd_reject_unlisted_recipient = ոչ
# -Ով smtpd_client_restricts = $ mua_client_restrictions
# -Ով smtpd_helo_restricts = $ mua_helo_restricts
# -Ով smtpd_sender_restresctions = $ mua_sender_restrictions
# -Ով smtpd_recipient_restricts =
# -Ով smtpd_relay_restrictions = permit_sasl_Authenticated, մերժեք
# -Ով Milter_macro_daemon_name = ծագում
# Ընտրեք մեկը. Միացրեք SMTP- ները միայն Loopback հաճախորդների համար կամ ցանկացած հաճախորդի համար:
# 127.0.0.0.1:SMTPS Inet N - Y - - SMTPD
# smtps inet n - y - - smtpd
# -Ոս syslog_name = Postfix / SMTPS
# -Ով smtpd_tls_wrappermode = այո
# -Ով smtpd_sasl_auth_enable = այո
# -Ով smtpd_reject_unlisted_recipient = ոչ
# -Ով smtpd_client_restricts = $ mua_client_restrictions
# -Ով smtpd_helo_restricts = $ mua_helo_restricts
# -Ով smtpd_sender_restresctions = $ mua_sender_restrictions
# -Ով smtpd_recipient_restricts =
# -Ով smtpd_relay_restrictions = permit_sasl_Authenticated, մերժեք
# -Ով Milter_macro_daemon_name = ծագում
# 628 inet n - y - Y - - QMQPD
# Qmgr Unix N - N 300 1 OQMGR
# -Ով smtp_helo_timeout = 5 -O smtp_connect_timeout = 5
#
# ==============================================================================================================================?
# Ինտերֆեյսեր ոչ-փոստային ծրագրային ապահովման: Համոզվեք, որ ուսումնասիրեք ձեռնարկը
# Ոչ հետվիրֆիքս ծրագրային էջերի էջեր, պարզելու, թե ինչ տարբերակներ է ուզում:
#
# Հետեւյալ ծառայություններից օգտվում են Postfix խողովակը (8) առաքում
# Գործակալ: Տես Խողովակը (8) Մարդու էջը `$ {ստացողի մասին տեղեկությունների համար
# եւ այլ հաղորդագրությունների ծրարի ընտրանքներ:
# ==============================================================================================================================?
#
# փոստատար: Մանրամասների համար տես Postfix MailDrop_Readme ֆայլը:
# Նշեք նաեւ Main.cf- ում. MailDrop_destination_recipient_limit = 1
#
#
# ==============================================================================================================================?
#
# Cyrus- ի վերջին տարբերակները կարող են օգտագործել «LMTP» Master.cf մուտքը:
#
# Նշեք Cyrus.conf- ում.
# LMTP CMD = "LMTPD -A" Լսեք = "Localhost: LMTP" Proto = TCP4
#
# Նշեք Main.CF- ում հետեւյալներից մեկը կամ մի քանիսը.
# MailBox_Transport = LMTP: Inet: Localhost
# Virtual_transport = lmtp: inet: localhost
#
# ==============================================================================================================================?
#
# Cyrus 2.1.5 (Amos Gouaux)
# Նշեք նաեւ Main.cf- ում. Cyrus_Destination_recipient_limit = 1
#
# Cyrus Unix - N N - խողովակ
# Դրոշներ = DRX օգտագործող = Cyrus argv = / cyrus / bin / devel -e -r $ {ուղարկող} -M $ {Extension} $ {օգտվող
#
# ==============================================================================================================================?
# Առաքման հին օրինակը Կյուրոսով:
#
# Old-Cyrus Unix - N N - խողովակ
# Դրոշներ = r user = Cyrus argv = / cyrus / bin / draint -M $ {ընդլայնում} $ {օգտվող
#
# ==============================================================================================================================?
#
# Տեսեք Postfix UUMP_README ֆայլը կազմաձեւման մանրամասների համար:
#
#
# Արտաքին առաքման այլ մեթոդներ:
#
Եւ Opendkim կազմաձեւումը: Opendkim- ը նույնացնում է էլփոստի սերվերներին տիրույթի ստեղներով `դրանք ավելի անվտանգ դարձնելու համար: Առանց դրա, փոստը չի ստորագրվում եւ չի կարող այն դարձնել մուտքի արկղ:
nano config/etc_default_opendkim
Ավելացնել այս տողերը.
# Նշում. Սա ժառանգության կազմաձեւման ֆայլ է: Այն չի օգտագործվում OpendKim- ի կողմից
# Համակարգային ծառայություն: Խնդրում ենք օգտագործել համապատասխան կազմաձեւման պարամետրերը
# /etc/opendkim.conf փոխարենը:
#
# Նախկինում մեկը այստեղ կդիմի լռելյայն պարամետրերը, այնուհետեւ կկատարի
# /lib/opendkim/opendkim.service.Generate համակարգ SystemD գերակշռող ֆայլեր
# /etc/systemd/system/system/opendkim.service.d/override.conf եւ
# /etc/tmpfiles.d/opendkim.conf. Չնայած դա դեռ հնարավոր է, հիմա է
# Առաջարկվում է կարգաբերել կարգավորումները անմիջապես /etc/opendkim.conf- ում:
#
# Daemon_opts = ""
# Փոխեք / VAR / Spool / Postfix / Run / Opendkim, Unix վարդակից օգտագործելու համար
# Postfix- ը chroot- ում.
# Rundir = / var / spool / Postfix / Run / Opendkim
#
# Այլընտրանքային վարդակից նշելու համար անխուսափելի է
# Նկատի ունեցեք, որ դա սահմանում է Opendkim.conf- ում ցանկացած վարդակից արժեքը
# Լռելյայն.
# Լսեք բոլոր ինտերֆեյսերը 54321 նավահանգստում.
# Վարդակ = inet: 54321
# Լսեք Loopback- ը 12345 նավահանգստում.
# Socket = inet: 12345 @ localhost
# Լսեք 192.0.2.1-ին `12345 նավահանգիստ.
# Վարդակ = inet: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf
Ավելացնել այս տողերը.
# Default_Process_limit = 100
# Default_Client_limit = 1000
# Լռելյայն VSZ (վիրտուալ հիշողության չափ) սահմանափակ սպասարկման գործընթացների համար: Հիմնականում սա է
# Նախատեսված էր բռնել եւ սպանել գործընթացները, որոնք արտահոսում են հիշողությունը նախքան ուտելը
# Ամեն ինչ:
# Default_VSZ_Limit = 256 մ
# Մուտքի օգտագործողը ներքին օգտագործվում է մուտքի գործընթացների միջոցով: Սա առավել անվստահելի է
# օգտագործող Dovecot համակարգում: Այն չպետք է ընդհանրապես որեւէ բան ունենալ:
# Default_login_user = DOVERULL
# Ներքին օգտագործողը օգտագործվում է անարդյունավետ գործընթացների միջոցով: Այն պետք է առանձնացված լինի
# Մուտք Օգտագործող, այնպես որ մուտքի գործընթացները չեն կարող խանգարել այլ գործընթացներ:
# Default_internal_user = Dovecot
# Port = 143
# Port = 993
# SSL = այո
# Նոր գործընթաց սկսելը կարգավորելու համար կապերի քանակը: Սովորաբար
# Միակ օգտակար արժեքները 0-ն են (անսահմանափակ) կամ 1: 1-ը ավելի անվտանգ է, բայց 0
# ավելի արագ է: <doc / wiki / loginprocess.txt>
# Service_count = 1
# Գործընթացների քանակը միշտ շարունակելու համար ավելի շատ կապեր սպասել:
# process_min_avail = 0
# Եթե Service_Count = 0 եք սահմանում, հավանաբար պետք է դա աճեցնել:
# vsz_limit = $ default_vsz_limit
# Port = 110
# Port = 995
# SSL = այո
# Port = 587
# Ստեղծեք Inet ունկնդիր միայն այն դեպքում, եթե չկարողանաք օգտագործել վերը նշված Unix վարդակից
# inet_listener lmtp {
# Խուսափեք LMTP- ի տեսանելի դարձնել ամբողջ ինտերնետի համար
# Հասցե =
# PORT =
# Կամացած
# Հիշողության մեծ մասը գնում է MMAP () ֆայլեր: Գուցե հարկ լինի դա ավելացնել
# Սահմանափակեք, եթե ունեք հսկայական փոստարկղեր:
# vsz_limit = $ default_vsz_limit
# Մաքս. IMAP գործընթացների քանակը (կապեր)
# process_limit = 1024
# Մաքս. POP3 գործընթացների քանակը (կապեր)
# process_limit = 1024
# Մաքս. SMTP ներկայացման գործընթացների քանակը (կապեր)
# process_limit = 1024
# Auth_Socket_Path միավորներ այս Userdb վարդակից `լռելյայն: Սովորաբար դա է
# Օգտագործվում է Dovecot-LDA- ի, Doveadm- ի, հնարավոր է IMAP գործընթացների եւ այլն օգտագործողների կողմից
# Այս վարդակից լիարժեք թույլտվությունները կարող են ձեռք բերել բոլոր օգտվողի անունների ցուցակը եւ
# Ստացեք բոլորի օգտվողների որոնումների արդյունքները:
#
# Լռելյայն 0666 ռեժիմը թույլ է տալիս որեւէ մեկին միանալ վարդակից, բայց
# Userdb- ի որոնումները հաջողության կհասնեն միայն այն դեպքում, եթե օգտագործողը վերադարձնի «UID» դաշտը
# համապատասխանում է զանգահարողի գործընթացի UID- ին: Նաեւ եթե զանգահարողի UID- ը կամ GID- ը համընկնում են
# Վարդակից uID կամ GID- ը որոնումը հաջողվում է: Ուրիշ ամեն ինչ ձախողում է առաջացնում:
#
# Զանգահարողի ամբողջական թույլտվությունները տալ բոլոր օգտագործողներին փնտրելու համար, սահմանեք ռեժիմը
# 0666-ից եւ Dovecot- ից մեկ այլ բան թույլ է տալիս միջուկը պարտադրել
# Թույլտվություններ (օրինակ 0777-ը թույլ է տալիս բոլորին լիարժեք թույլտվություններ):
# Auth Worker- ի գործընթացը լռելյայն գործարկվում է որպես արմատ, որպեսզի այն կարողանա մուտք գործել
# / եւ այլն / ստվեր: Եթե դա անհրաժեշտ չէ, օգտագործողը պետք է փոխվի
# $ default_internal_user.
# Օգտագործող = արմատ
# Եթե օգտագործվում է Dict Proxy- ն, փոստի գործընթացները պետք է ունենան իր վարդակից:
# Օրինակ, MODE = 0660, GRUP = VMail եւ Global Mail_access_groups = VMail
# MODE = 0600
# Օգտագործող =
# Խումբ =
Եվս մեկ անգամ համոզվեք, որ տիրույթը փոխարինեք այս բոլոր ֆայլերում, Femmebabe.com- ի բոլոր այն տիրույթով, որը ձեր ընտրած տիրույթն է: Խմբագրել հաջորդ ֆայլը, Dovecot- ի կազմաձեւումը,
nano config/etc_dovecot_dovecot
Եւ ավելացնել այս տողերը
## Dovecot կազմաձեւման ֆայլ
# Եթե շտապում եք, տես http://wiki2.dovecot.org/quickConfiguration
# «DoveConf -N» հրամանը տալիս է փոփոխված պարամետրերի մաքուր արտադրանք: Օգտագործեք այն
# DoveCot փոստային փոստային ցուցակում տեղադրելու ժամանակ ֆայլերը պատճենելու եւ տեղադրելու փոխարեն:
# '# «Նիշերը եւ դրա ամեն ինչից հետո դիտվում է որպես մեկնաբանություններ: Լրացուցիչ տարածքներ
# եւ ներդիրները անտեսվում են: Եթե ցանկանում եք օգտագործել դրանցից որեւէ մեկը բացահայտորեն, դրեք
# value inside quotes, eg.: key = "# char and trailing whitespace "
# Առավելագույնը (բայց ոչ բոլոր) պարամետրերը կարող են շրջանցվել տարբեր արձանագրությունների եւ / կամ
# Աղբյուրը / նպատակակետ IP- ները `պարամետրերը տեղադրելով հատվածներում, օրինակ.
# Արձանագրության IMAP {}, տեղական 127.0.0.1 {}, հեռավոր 10.0.0.0/8 {
# Լռելյայն արժեքները ցուցադրվում են յուրաքանչյուր պարամետրի համար, դա չի պահանջվում անզգուշությամբ
# Նրանք: Սրանք բացառություններ են դրան, չնայած. Ոչ մի բաժին (օրինակ `անունների տարածք {})
# Կամ Plugin- ի պարամետրերը լռելյայն ավելացվում են, դրանք թվարկված են միայն որպես օրինակներ:
# Ուղիները նույնպես օրինակ են, որոնք իրականացվում են կարգաբերման իրական կանխադրվածների հետ
# Ընտրանքներ: Այստեղ թվարկված ուղիները կարգաբերման համար են `Prefix = / USR
# --Sysconfdir = / etc --LocalStatedir = / var
# Միացնել տեղադրված արձանագրությունները
# Ստորակետը բաժանում է IPS- ի կամ հյուրընկալողների ցուցակը, որտեղ լսել կապերի համար:
# «*» լսում է IPv4 բոլոր ինտերֆեյսերը, «::» -ը լսում է IPv6 բոլոր միջերեսները:
# Եթե ցանկանում եք նշել ոչ լռելյայն նավահանգիստները կամ որեւէ այլ բարդ բան,
# Խմբագրել Conf.D / Master.conf.
# Լսեք = *, ::
# Բազային գրացուցակ, որտեղ պետք է պահեք գործարկման տվյալները:
# Base_dir = / var / run / Dovecot /
# Այս օրինակի անվանումը: Բազմամշակման կարգի Doveadm- ում եւ այլ հրամաններով
# կարող է օգտագործել -i <instance_name> ընտրել, թե որ օրինակն է օգտագործվում (այլընտրանք
# to -c <config_path>): Անունը նաեւ ավելացվում է Dovecot գործընթացներին
# PS ելքի մեջ:
# օրինակ_ անուն = Dovecot
# Ողջույնի ուղերձ հաճախորդների համար:
# Login_Greeting = Dovecot պատրաստ:
# Վստահելի ցանցի միջակայքերի առանձնացված ցուցակը: Կապեր դրանցից
# IP- ներին թույլատրվում է գերակայել իրենց IP հասցեներն ու նավահանգիստները (անտառահատումների եւ
# վավերացման ստուգումների համար): Անջատեք_ splaintext_Auth- ը նույնպես անտեսվում է
# Այս ցանցերը: Սովորաբար դուք պետք է նշեք ձեր IMAP Proxy սերվերները այստեղ:
# Login_Trusted_networks =
# Տիեզերական առանձնացված ցուցակը մուտքի մուտքի ստուգման վարդակների (E.G. TCPRAP)
# login_access_sockets =
# Proxy_Maybe- ի միջոցով = Այո, եթե վստահված անձը համապատասխանում է այս IPS- ի որեւէ մեկին, մի արեք
# Վստահված: Դա նորմալ չէ, բայց կարող է օգտակար լինել, եթե նպատակակետը
# IP- ն է. բեռի հավասարակշռության IP:
# auth_proxy_ self =
# Show ույց տալ ավելի շատ բանավոր գործընթացների վերնագրեր (PS): Ներկայումս ցույց է տալիս օգտվողի անունը եւ
# IP հասցե: Օգտակար է այն տեսնելու համար, թե ովքեր իրականում օգտագործում են IMAP գործընթացները
# (օրինակ, ընդհանուր փոստարկղերը կամ եթե նույն UID- ը օգտագործվում է բազմաթիվ հաշիվների համար):
# verbose_proctitle = ոչ
# Եթե բոլոր գործընթացները սպանվեն, երբ Dovecot- ի վարպետ գործընթացը անջատվում է:
# Սա «ոչ» -ին սահմանելը նշանակում է, որ Dovecot- ը կարող է արդիականացվել առանց
# Հաճախորդների առկա կապերը փակելու համար (չնայած դա կարող էր լինել նաեւ
# խնդիր, եթե արդիականացումը E.G է: անվտանգության ամրագրման պատճառով):
# shutdown_clients = այո
# Եթե ոչ զրոյական, ուղարկեք փոստի հրամաններ այս բազմաթիվ կապերի միջոցով DOVEAKM սերվերի հետ,
# Փոխարենը դրանք ուղղակիորեն նույն գործընթացում վարելու փոխարեն:
# doveadm_worker_count = 0
# Unix վարդակից կամ հյուրընկալող. Պորտը օգտագործվում է DoveAdm սերվերին միանալու համար
# doveadm_socket_path = doveadm-server
# Տիեզերական առանձնացված շրջակա միջավայրի փոփոխականների ցուցակը, որոնք պահպանվում են Dovecot- ում
# գործարկման եւ փոխանցվել է իր բոլոր երեխաների գործընթացներին: Կարող եք նաեւ տալ
# Հիմնական = արժեքի զույգեր, որոնք միշտ հատուկ պարամետրեր են սահմանում:
# Import_Enlinvirent = Tz
##
## Բառարան Հայերէն սերվերի պարամետրեր
##
# Բառարանը կարող է օգտագործվել բանալին պահելու համար = արժեքի ցուցակները: Սա օգտագործվում է մի քանիսի կողմից
# Լրացուցիչներ Բառարանին կարելի է մուտք ունենալ ուղղակիորեն կամ չնայած ա
# Բառարան սերվերը: Հետեւյալ աղանդավոր բլոկների քարտեզների բառարանները Ուրիս անուններ են
# երբ սերվերը օգտագործվում է: Դրանից հետո դրանք կարող են վկայակոչվել, օգտագործելով uris ձեւաչափով
# «Proxy :: <name>»:
# Quota = mysql: /etc/dovecot/dovecot-dict-sql.conf.ext
# Իրական կազմաձեւի մեծ մասը ընդգրկվում է ստորեւ: Անուններն են
# Նախ դասավորված են իրենց ASCII արժեքով եւ վերլուծվել այդ կարգով: 00-նախածանց
# Անիմաստ անունները նպատակ ունեն ավելի հեշտացնել `հասկանալ պատվերը:
# Կազմաձեւման ֆայլը կարող է նաեւ փորձել ներառվել առանց սխալ տալու
# Այն չի գտնվել.
# Dovecot- ը թույլ է տալիս լսել բոլոր մուտքային կապերը (IPv4 / IPv6)
Dovecot օգտագործողի համար գաղտնաբառ ավելացրեք.
nano config/etc_dovecot_passwd
Ֆայլի առաջին մասը, նախքան աղիքը, օգտագործողի անունն է: Վերջին մասը, «YourPassword» - ը, նշում է գաղտնաբառը, որը կցանկանայիք տալ ձեր փոստային սերվերը:
team:{plain}yourpassword
Հաջորդը, Opendkim կազմաձեւումը
nano config/etc_opendkim.conf
Եւ ավելացնել այս տողերը.
# Սա հիմնական կազմաձեւում է ստորագրելու եւ հաստատելու համար: Դա հեշտությամբ կարող է լինել
# հարմարեցված է հիմնական տեղադրման համար: Տես Opendkim.conf (5) եւ
# /usr/Share/doc/opendkim/examples/opendkim.conf.sample ամբողջական
# Առկա կազմաձեւման պարամետրերի փաստաթղթավորում:
# Log Ինչու ոչ
# Ընդհանուր ստորագրման եւ ստուգման պարամետրեր: Debian- ում «ից» վերնագիրն է
# Վերստուգված, քանի որ այն հաճախ ինքնության բանալին է, որն օգտագործվում է հեղինակության համակարգերի կողմից
# եւ դրանով իսկ անվտանգության որոշ զգայուն:
# Դոմեյն, ընտրիչ եւ բանալին (պարտադիր): Օրինակ, կատարեք ստորագրումը
# «Օրինակ.
# Օգտագործելով մասնավոր բանալին, որը պահվում է /etc/dkimkeys/example- ում: Ավելի հատիկավոր
# Կարգավորվող ընտրանքներ կարելի է գտնել / DeShare/doc/opendkim/readme.opendkim:
# Դոմեյն օրինակ
# Ընտրիչ 2020
# Keyfile /etc/dkimkeys/example.private
# Debian- ում Opendkim- ը աշխատում է որպես «Opendkim» օգտվող: 007-ի umask- ը պահանջվում է, երբ
# օգտագործելով տեղական վարդակ, MTA- ով, որոնք մուտք են գործում վարդակից, որպես ոչ արտոնյալ
# օգտագործող (օրինակ, Postfix): ԳԿ-ին գուցե անհրաժեշտ է ավելացնել «Postfix» - ը
# «Opendkim» այդ դեպքում:
# Վարդակ MTA կապի համար (պարտադիր է): Եթե MTA- ն գտնվում է Chroot բանտում,
# Պետք է ապահովվի, որ վարդակը հասանելի է: Debian- ում Postfix- ը գործում է
# chroot / var / spool / postfix, հետեւաբար պետք է լինի Unix վարդակից
# կազմաձեւված, ինչպես ցույց է տրված ստորեւ նշված վերջին տողում:
# Socket Local: /Run/opendkim/opendkim.sock
# Socket Inet: 8891 @ localhost
# Socket Inet: 8891
# Հաղորդավարներ, որոնց համար պետք է ստորագրել, այլ ոչ թե հաստատել, լռելյայն 127.0.0.1. Տեսեք
# Լրացուցիչ տեղեկությունների համար Opendkim (8) շահագործման բաժին:
# Itorhosts 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
# Վստահության խարիսխը հնարավորություն է տալիս DNSSEC- ին: Debian- ում տրամադրվում է վստահության խարիսխի ֆայլը
# փաթեթով DNS-ROT-տվյալներով:
# Nameservers 127.0.0.1
# Քարտեզի տիրույթները հասցեներից մինչեւ ստեղներ, որոնք օգտագործվում են հաղորդագրություններ ստորագրելու համար
# Ներքին հաղորդավարների մի շարք, որոնց փոստը պետք է ստորագրվի
nano config/etc_default_opendkim
Եւ ավելացնել այս տողերը
# Նշում. Սա ժառանգության կազմաձեւման ֆայլ է: Այն չի օգտագործվում OpendKim- ի կողմից
# Համակարգային ծառայություն: Խնդրում ենք օգտագործել համապատասխան կազմաձեւման պարամետրերը
# /etc/opendkim.conf փոխարենը:
#
# Նախկինում մեկը այստեղ կդիմի լռելյայն պարամետրերը, այնուհետեւ կկատարի
# /lib/opendkim/opendkim.service.Generate համակարգ SystemD գերակշռող ֆայլեր
# /etc/systemd/system/system/opendkim.service.d/override.conf եւ
# /etc/tmpfiles.d/opendkim.conf. Չնայած դա դեռ հնարավոր է, հիմա է
# Առաջարկվում է կարգաբերել կարգավորումները անմիջապես /etc/opendkim.conf- ում:
#
# Daemon_opts = ""
# Փոխեք / VAR / Spool / Postfix / Run / Opendkim, Unix վարդակից օգտագործելու համար
# Postfix- ը chroot- ում.
# Rundir = / var / spool / Postfix / Run / Opendkim
#
# Այլընտրանքային վարդակից նշելու համար անխուսափելի է
# Նկատի ունեցեք, որ դա սահմանում է Opendkim.conf- ում ցանկացած վարդակից արժեքը
# Լռելյայն.
# Լսեք բոլոր ինտերֆեյսերը 54321 նավահանգստում.
# Վարդակ = inet: 54321
# Լսեք Loopback- ը 12345 նավահանգստում.
# Socket = inet: 12345 @ localhost
# Լսեք 192.0.2.1-ին `12345 նավահանգիստ.
# Վարդակ = inet: 12345@192.0.2.1
Երբ մենք պատրաստ ենք ստեղծել մեր Postfix սերվերը, մենք գործարկելու ենք ստորեւ նշված ծածկագիրը, համապատասխան դոմենի անունով ներդրված: Սկսեք սցենար ստեղծելով
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
Այժմ, Նանոյում, տեքստի խմբագրիչը, խմբագրեք այս ֆայլը, այնպես որ այն ներառում է ձեր տիրույթի անունը Femmebabe.com- ի փոխարեն:
# ! / BIN / BASH
# Կարգավորել Postfix
Այժմ գործարկեք ավարտված սցենարը `հետֆիքսը, Opendkim- ը եւ Dovecot- ը կազմաձեւելու համար:
./scripts/postfixsetup
Այս սցենարը գործարկելուց հետո պատճենեք վերջին տողը, որը այն տպում եւ տեղադրեք այն ձեր DNS կազմաձեւման մեջ, որպես արժեքի համար արժեք :_domaindkey: Սա Opendkim բանալին է, որն օգտագործվում է ձեր տիրույթը `անվտանգ փոստ ուղարկելիս նույնացնելու համար:
Հիանալի! Մի քանի օրվա ընթացքում դուք պետք է կարողանաք փոստ ուղարկել սերվերից, եթե ամեն ինչ ճիշտ կազմաձեւված լինի:
Եթե դուք պարզապես կազմաձեւեք DNS- ը ձեր փոստի սերվերի համար, ապա գրառումների համար անհրաժեշտ է օգտագործել ավելի քան 72 ժամ: Դա սովորաբար շատ ավելի արագ է: Կարող եք ստուգել, թե արդյոք ձեր սերվերը աշխատում է այս հրամանի միջոցով, մատակարարում է ձեր էլ.
echo "test" | mail -s "Test Email" youremail@gmail.com
Եթե ամեն ինչ ճիշտ է աշխատում, ապա պետք է կարողանաք էլ-նամակ ուղարկել ձեր սերվերի հետ: Եթե դա չի աշխատում, փորձեք փնտրել տեղեկամատյանները, տեսնելու, թե որն է սխալը:
tail –lines 150 /var/log/mail.log
Սա կառաջարկի բայերի տեղեկատվություն այն փոստի մասին, որոնք ուղարկվում են սերվերի կողմից եւ արդյոք դա ճիշտ է աշխատում: Դուք պետք է կարողանաք տեսնել էլփոստը ձեր մուտքի արկղում, եթե այնտեղ չկա, ստուգեք ձեր սպամի թղթապանակը:
Դուք նաեւ պետք է կարգաբերեք ձեր պարամետրերը ձեր պարամետրերում: Այսպիսով, ձեր էլ. Փոստի սերվերը կարող է խոսել ձեր Django հավելվածի հետ, նախագիծը: Այս տողերը ավելացրեք կամ փոխարինեք ձեր պարամետրերում
EMAIL_HOST_USER = 'team' # 'Love@mamasheen.com'
Ուշադրություն դարձրեք, որ մենք օգտագործում ենք Config ֆայլ, գաղտնաբառ ստանալու համար: Եկեք բեռնենք այս ֆայլը պարամետրերում, այնպես որ, ֆայլի հենց սկզբում:
# Բացեք եւ բեռնեք կազմաձեւումը
Եկեք ստեղծենք այս ֆայլը եւ դրա համար ավելացնեմ գաղտնի բանալին, ինչպես նաեւ փոստի գաղտնաբառը: Գաղտնի բանալին ստեղծելու համար օգտագործեք այս հրամանը, այն ամենի հետ, ինչ ձեզ դուր է գալիս վերջում:
openssl rand -base64 64
Այժմ պատճենեք այն տեքստը, որը ստեղծվել է OpenSSL- ի եւ խմբագրման / Edit / Edc/config.json
sudo nano /etc/config.json
Ձեր ֆայլին ավելացրեք հետեւյալ տողերը, այն ստեղնը, որը OpenSSL- ն առաջացել է որպես գաղտնի բանալին:
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
JSON ձեւաչափը պարզ է եւ հեշտ օգտագործման համար, մենք կարող ենք հայտարարել այլ բանալիներ, որոնք մենք ցանկանում ենք օգտագործել մեր նախագծում այսպես եւ դրանք միանգամից չեն կարող գրել մեր նախագծային գրացուցակից: Սա առաջարկվում է API ստեղների համար, որոնցից մենք այստեղ կօգտագործենք ավելի քան մի քանիսը:
Դուք նաեւ կցանկանաք կրկնօրինակել ձեր նախագիծը `համոզվելու համար, որ ամեն ինչ փրկված է, եւ դուք կկարողանաք վերականգնել ձեր աշխատանքը ավելի ուշ, նույնիսկ եթե այլեւս չեք ցանկանում սերվեր վարձել:
sudo backup
Այժմ փորձեք HTML էլփոստով ուղարկել վեբ սերվերից, տրամադրելով հրամանի տողից մեկը ուղարկելը: Հարցրեք ձեր օգտագործողի օրինակը Shell- ում եւ HTML էլ. Փոստ ուղարկեք այդ օգտագործողին Dj անգոյի միջոցով: Փոխեք իմ անունը կոդով, Charlotte, ձեր օգտվողի անունով:
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()
Եթե առաջին հրամանը չի աշխատում, համոզվեք, որ օգտագործեք
source venv/bin/activate
Եթե ամեն ինչ ճիշտ տեղադրվի, ապա այժմ դուք կստանաք ողջունելի էլփոստ ձեր փոստարկղում ուղարկված ձեր վեբ հավելվածի միջոցով: Լավ աշխատանք: Դուք երկար ճանապարհ եք եկել:
Ես ուզում էի ավելացնել, եթե դուք երբեւէ պայքարում եք որեւէ սխալի հետ այսպիսի նախագծի վրա աշխատելիս, մի հապաղեք որոնել պատասխաններ եւ օգնություն խնդրեք: Google- ը, ի թիվս այլ որոնիչների, հիանալի ռեսուրսներ են `ծրագրավորման օգնությունը որոնելու համար: Պարզապես որոնեք ձեր ստացման սխալը, եւ դուք կկարողանաք տեսնել, թե ինչպես են այլ մարդիկ լուծում խնդիրը: Նաեւ ողջունում եք կապվել ինձ հետ, ձեր ուսուցիչները (ուսուցիչներ, դասախոսներ, դաստիարակներ), ինտերնետի ցանկացած հասակակիցներ, որոնք մատչելի են ծրագրավորման համարՕգնեք կամ կրկին խորհրդակցեք այս գրքի կամ այլ ռեսուրսների հետ `լուծումներ գտնելու ձեր փորձի համար: Ես հասկանում եմ, որ դա հեշտ չէ, բայց նույնիսկ եթե կարդացել եք այս հեռավորության վրա եւ չեք գրում որեւէ կոդ, դուք շատ եք սովորում զրոյից վեբ հավելվածի կառուցման մասին: Ինքներդ ձեզ հետեւի մասում, դուք հիանալի եք անում
Շնորհակալ եմ այս երրորդ հրատարակության վեբ զարգացման ուղեցույցը կարդալու համար: Հետագա հրատարակություններում ես կներառեմ փաստաթղթի սկզբում քննարկված կարեւորագույն օրինակներ, եւ մենք շատ ավելի խոր ենք սուզվելու ծրագրակազմի եւ ապարատների զարգացման աշխարհում: Մնացեք, թե ինչ է գալու, եւ ես անհամբերությամբ սպասում եմ ձեզ սովորեցնելու, թե ինչպես կառուցել անհավատալի ծրագրաշար: Տեսեք ձեզ հաջորդ հրատարակության մեջ:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչպես է այդքան արագ աճում ծպտյալ շուկան:
Կան մի քանի գործոններ, որոնք նպաստում են Cryptocurrency շուկայի արագ աճին:
1. Բարձրացված իրազեկության եւ որդեգրման. Քանի որ ավելի շատ մարդիկ տեղյակ են ծպտյալ արարողությունների եւ դրանց հավանական առավելությունների մասին, զգալիորեն աճել է Cryptocurrency ներդրումների պահանջարկը: Այս աճող տոկոսադրույքը հանգեցրել է շուկայում մասնակցող օգտվողների եւ ներդրողների թվի աճի:
2. Ինստիտուցիոնալ ներգրավվածություն. Վերջին մի քանի տարիների ընթացքում մենք տեսանք ինստիտուցիոնալ ներդրողների աճող թվաքանակ, ինչպիսիք են ցանկապատի ֆոնդերը, բանկերը եւ այլ ֆինանսական հաստատությունները, ներգրավվելով Cryptocurrency շուկայում: Սա վստահություն է առաջացրել շուկայում եւ ավելի շատ ներդրողներ ներգրավել:
3. Տեխնոլոգիական առաջխաղացում. BlockChain տարածության տեխնոլոգիական զարգացումներն ավելի դյուրին են դարձրել ստեղծվել եւ վաճառվել նոր ծպտյալ ճարտարապետական միջոցների համար: Բացի այդ, անվտանգության միջոցառումների եւ կարգավորող շրջանակներում առաջխաղացումներն ավելի շատ գրավիչ են դարձրել ներդրողներին:
4. Շուկայական անկայունություն. Cryptocurrency Market- ի բարձր անկայուն բնույթը ներգրավեց առեւտրականներին եւ ներդրողներին, որոնք ցանկանում են մեծապես կարճ ժամանակահատվածում կապիտալացնել թանկացման համար:
5. Գլոբալ ընդունում. Cryptocures- ն այժմ ընդունվում է որպես վճարման ձեւ `աշխարհի վաճառականների եւ բիզնեսի աճող թվով: Սա օգնեց լեգիտիմացնել Cryptocures- ը որպես կենսաֆաբրական ավանդական արտարժույթների կենսունակ այլընտրանք:
Ընդհանուր առմամբ, այս գործոնները նպաստել են Cryptocurrency շուկայի արագ աճին եւ, ամենայն հավանականությամբ, կշարունակեն ապագայում վարել դրա ընդլայնումը:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչպես ստանալ հրապարակայնություն եւ օրգանական երթեւեկություն կայքի համար:
1. Որոնիչների օպտիմիզացում (SEO). Օպտիմիզացրեք ձեր կայքը որոնիչների համար `բարելավելու համար տեսանելիությունը եւ դասակարգումը որոնման արդյունքների էջերի վրա:
2. Բովանդակության շուկայավարություն. Ստեղծեք արժեքավոր եւ համապատասխան բովանդակություն, որը գրավում եւ ներգրավում է ձեր թիրախային լսարանը: Սա կարող է ներառել բլոգային հաղորդագրություններ, հոդվածներ, տեսանյութեր, ինֆոգրաֆիկա եւ բովանդակության այլ ձեւեր:
3. Սոցիալական մեդիա շուկայավարում. Նպաստել ձեր կայքը սոցիալական մեդիա հարթակներում, ինչպիսիք են Facebook- ը, Twitter- ը, Instagram- ը եւ LinkedI- ը `ավելի լայն լսարան հասնելու եւ ձեր վեբ կայք վարելու համար:
4. Վճարովի գովազդ. Հաշվի առեք աշխատող գովազդային արշավները որոնիչների վրա (Google Adwords), սոցիալական մեդիա պլատֆորմներ եւ այլ համապատասխան կայքեր `ուղղված ձեր վեբ կայք:
5. Նպերի շուկայավարում. Գործընկերն է ձեր խորշի ազդեցության տակ, որպեսզի օգնի խթանել ձեր վեբ կայքը եւ հասնել ավելի մեծ հանդիսատեսի:
6. էլ. Փոստի շուկայավարում. Կառուցեք բաժանորդների էլփոստի ցուցակը եւ ուղարկեք կանոնավոր թարմացումներ, գովազդներ եւ բովանդակություն, ձեր կայքէջը դեպի ձեր կայք վարելու համար:
7. Network անցում. Միացեք կայքի այլ սեփականատերերի, բլոգերների եւ ձեր արդյունաբերության վրա ազդողների հետ `համագործակցելու, հյուրի փակցնելու կամ փոխանակման հղումներ` ձեր կայքի տեսանելիությունը բարձրացնելու համար:
8. Հասարակայնության հետ կապեր. Հասկացնեք լրագրողներին, բլոգերներին եւ լրատվամիջոցներին `լուրերի եւ երթեւեկության առաջացման համար ձեր վեբ կայքի հետ կապված հայտարարություններ անելու համար:
9: Հյուրատետր բլոգեր. Գրեք բարձրորակ հյուրերի գրառումներ այլ կայքերի համար եւ ներառեք հղում դեպի ձեր կայք հեղինակի բիո կամ բովանդակություն, երթեւեկություն վարելու համար:
10. Առցանց համայնքները եւ ֆորումները.
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչու են մարդիկ իրենց ձեռքերում ներխուժում NFC իմպլանտներ:
Կան մի քանի պատճառներ, թե ինչու են մարդիկ ընտրում իրենց ձեռքերում ներխուժող NFC (մոտ դաշտային հաղորդակցության) իմպլանտներ.
1. Հարմարավետություն. NFC իմպլանտները թույլ են տալիս անհատներին հեշտությամբ մուտք գործել տեղեկատվություն, բաց դռներ, վճարումներ կատարել եւ կատարել այլ առաջադրանքներ `ձեռքի պարզ ալիքով: Սա կարող է ավելի հարմար լինել, քան բանալիների, նույնականացման քարտերի կամ սմարթֆոնների շուրջը տեղափոխելը:
2. Անվտանգություն. NFC իմպլանտանտները կարող են ապահովել անվտանգության ավելացված շերտ, քանի որ դրանք ակտիվացված են անհատի մարմնին: Սա կարող է օգնել կանխել չարտոնված մուտքը սարքեր կամ զգայուն տեղեկատվություն:
3. Տեխնոլոգիական փորձարկում. Որոշ մարդիկ ընտրում են ներխուժել NFC չիպսեր, որպես զարգացող տեխնոլոգիաների փորձեր կատարելու միջոց եւ դրանք ինտեգրվել իրենց առօրյա կյանքում:
4. Անձնական նույնականացում. NFC իմպլանտանտները կարող են օգտագործվել անձնական նույնականացման նպատակներով, ինչպիսիք են բժշկական տեղեկատվության պահպանում կամ կոնտակտային տվյալներ, որոնք հեշտությամբ կարելի է մուտք գործել արտակարգ իրավիճակների դեպքում:
5. Բիոֆակինգ. Որոշ անհատներ NFC- ի իմպլանտները դիտում են որպես կենսամակարդակի ձեւ, որտեղ նրանք իրենց մարմինները ուժեղացնում են իրենց հնարավորությունները կամ փորձը:
Ընդհանուր առմամբ, նրանց ձեռքերում NFC չիպսեր իմպլանտի որոշումը անձնական ընտրություն է, որը տատանվում է անձից անձի կողմից `հիմնվելով նրանց անհատական նախասիրությունների եւ հավատալիքների վրա:
Շաքարն իսկապես անառողջ է:
Շաքարի չափից ավել սպառումը կարող է հանգեցնել առողջության տարբեր հարցերի, ինչպիսիք են քաշի ավելացումը, ճարպակալումը, շաքարախտը, սրտի հիվանդությունները եւ ատամնաբուժական խնդիրները: Առաջարկվում է սահմանափակել ավելացված շաքարերի ընդունումը մեր սննդակարգում `լավ առողջությունը պահպանելու համար: Այնուամենայնիվ, մրգերի եւ բանջարեղենի մեջ հայտնաբերված բնական շաքարները չեն համարվում վնասակար չափավոր քանակի եւ կարող են լինել առողջ սննդակարգի մի մասը: Չափավորումը բանալին է, երբ խոսքը վերաբերում է շաքարի սպառմանը:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչպես եմ հաճախորդներ գտնում իմ վեբ զարգացման փոքր բիզնեսի համար:
Ահա որոշ ռազմավարություններ, որոնք կարող եք օգտագործել հաճախորդներին ձեր վեբ զարգացման բիզնեսի գրավելու համար.
1. Կառուցեք ուժեղ առցանց ներկայություն. Ստեղծեք պրոֆեսիոնալ կայք, որը ցույց է տալիս ձեր ծառայությունները, պորտֆելը եւ հաճախորդի ցուցմունքները: Օգտագործեք սոցիալական մեդիա ալիքները `ձեր բիզնեսը խթանելու եւ հավանական հաճախորդների հետ ներգրավվելու համար:
2. Network անց. Մասնակցեք արդյունաբերության միջոցառումների, գիտաժողովների եւ հանդիպումների, ոլորտի եւ հավանական հաճախորդների հետ կապվելու այլ մասնագետների հետ կապվելու համար: Միացեք առցանց համայնքներին եւ ֆորումների հետ կապված վեբ զարգացմանը `ձեր ցանցը ընդլայնելու համար:
3. Առաջարկեք հղումների խթաններ. Խրախուսեք բավարարված հաճախորդներին ձեր ծառայությունները հղել ուրիշներին `առաջարկելով զեղչեր կամ հաջող ուղղորդումների այլ խթաններ:
4. Համագործակցեք այլ բիզնեսի հետ. Գործընկեր թվային շուկայավարման գործակալությունների, գրաֆիկական դիզայներների կամ այլ մասնագետների հետ, ովքեր իրենց հաճախորդների համար կարող են անհրաժեշտ վեբ զարգացման ծառայություններ ունենալ:
5. Գովազդ. Ներդրումներ կատարեք առցանց գովազդի մեջ Google AdWords- ի, սոցիալական մեդիայի գովազդների միջոցով կամ ցուցադրեք գովազդներ `ավելի լայն լսարան հասնելու համար:
6. Սառը տարածքներ. Հասնել հնարավոր հաճախորդներին ուղղակիորեն էլփոստի կամ հեռախոսի միջոցով, ցուցադրելով ձեր ծառայությունները եւ նախորդ աշխատանքը:
7. Բովանդակության շուկայավարում. Ստեղծեք արժեքավոր բովանդակություն, ինչպիսիք են բլոգային հաղորդագրությունները, սպիտակպաններ կամ վեբինարներ, որոնք ցույց են տալիս ձեր փորձը վեբ-մշակում եւ ներգրավում են հնարավոր հաճախորդներին որոնիչների եւ սոցիալական լրատվամիջոցների միջոցով:
8: Մասնակցեք առեւտրի ցուցահանդեսներին եւ իրադարձություններին. Մասնակցեք արդյունաբերության առեւտրի ցուցահանդեսներին եւ իրադարձություններին `հնարավոր հաճախորդների հետ կապվելու եւ ձեր ծառայությունները ցուցաբերելու համար:
9: Առաջարկեք անվճար խորհրդատվություններ. Անվճար խորհրդակցություններ տրամադրեք հնարավոր հաճախորդներին `քննարկելու իրենց կարիքները եւ ինչպես կարող են օգնել նրանց հասնել իրենց նպատակներին:
10: Հարցրեք ակնարկներ եւ ցուցմունքներ. Խրախուսեք բավարարված հաճախորդներին ձեր կայքում կամ վերանայման այլ կերպարանքների վերանայում եւ ցուցմունքներ թողնելու համար:
Ինչպես գրել պրոֆեսիոնալ բլոգի գրառում:
Մասնագիտական բլոգի գրառումը գրելը ներառում է մի քանի հիմնական քայլեր `լավ պատրաստված եւ ներգրավված բովանդակություն ստեղծելու համար: Ահա մի քանի խորհուրդներ, որոնք կօգնեն ձեզ գրել պրոֆեսիոնալ բլոգի գրառումը.
1. Ընտրեք համապատասխան եւ գրավիչ թեմա. Սկսեք պարզել ձեր լսարանի համար կարեւոր թեմա եւ մի բան եք, որի մասին դուք բանիմաց եւ կրքոտ եք: Համոզվեք, որ թեման մի բան է, որը կհետաքրքրի եւ կվերադառնա ձեր ընթերցողների հետ:
2. Կատարել մանրակրկիտ ուսումնասիրություն. Նախքան գրելուց առաջ համոզվեք, որ մանրակրկիտ ուսումնասիրություն կատարեք ձեր ընտրած թեմայի վերաբերյալ: Սա կօգնի ձեզ հավաքել համապատասխան տեղեկատվություն, վիճակագրություն եւ փաստեր `ձեր միավորներին աջակցելու եւ ձեր բլոգն ավելի հավաստի դարձնելու համար:
3. Ստեղծեք ուրվագիծ. Կազմակերպեք ձեր գաղափարներն ու հիմնական կետերը `ստեղծելով ուրվագիծ ձեր բլոգի գրառման համար: Սա կօգնի ձեզ կառուցել ձեր բովանդակությունը տրամաբանական եւ համահունչ եղանակով, ընթերցողներին ավելի հեշտ դարձնելով:
4. Գրեք համոզիչ ներդրումը. Սկսեք ձեր բլոգի գրառումը `ուժեղ եւ ներգրավված ներդրմամբ, որը գրավում է ընթերցողի ուշադրությունը: Օգտագործեք կարթ, ընթերցողներին ներս մտնելու եւ նրանց ստիպելու համար ցանկություն ունենալ:
5. Օգտագործեք հստակ եւ հակիրճ լեզու. Խուսափեք ձեր բլոգի գրառման մեջ ժարգոն կամ չափազանց տեխնիկական լեզու օգտագործելուց: Գրեք հստակ եւ հակիրճ ձեւով `ձեր բովանդակությունը հեշտացնելու համար հեշտ է հասկանալ բոլոր ընթերցողների համար:
6. Ներառեք վիզուալներ. Տեսողական տարրեր, ինչպիսիք են պատկերները, ինֆոգրաֆիկան եւ տեսանյութերը կարող են օգնել տրոհել տեքստը եւ ձեր բլոգի գրառումը տեսողականորեն դիմում: Նրանք կարող են նաեւ օգնել աջակցել ձեր հիմնական կետերը եւ ձեր բովանդակությունը ավելի շատ ներգրավվել:
7. Պարբերդ եւ խմբագրեք. Ձեր բլոգի գրառումը հրապարակելուց առաջ համոզվեք, որ մանրակրկիտորեն շտկեք եւ խմբագրեք այն քերականության, ուղղագրության եւ ձեւաչափի սխալների համար: Մտածեք խնդրել գործընկերոջը կամ ընկերոջը վերանայել ձեր հաղորդագրությունը հետադարձ կապի համար `նախքան այն հրապարակելը:
8. Ավելացնել գործողության կոչ.
Հետեւելով այս խորհուրդներին, կարող եք ստեղծել պրոֆեսիոնալ եւ ներգրավված բլոգի գրառում, որը կվերականգնվի ձեր լսարանի հետ եւ ձեզ կստեղծի որպես ձեր դաշտում լիազորություն:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչպես կարող եմ փոստային սերվեր կառուցել հետֆիքսով:
Postfix- ով փոստային սերվեր կառուցելու համար հետեւեք այս քայլերին.
1. Տեղադրեք Postfix. Օգտագործեք ձեր փաթեթի մենեջերը `ձեր սերվերում տեղադրելու համար: Օրինակ, Debian / Ubuntu- ի վրա դուք կարող եք գործարկել `Sudo Apt-Get Տեղադրեք Postfix`:
2-ը: Կարգավորեք Postfix. Postfix- ի կազմաձեւման ֆայլերը տեղակայված են «/ այլն / Postfix»: Հիմնական կազմաձեւման ֆայլը `Main.cf`: Կարող եք խմբագրել այս ֆայլը `ձեր փոստի սերվերը տեղադրելու համար` ձեր պահանջների համաձայն: Որոշ ընդհանուր կազմաձեւեր, որոնք ձեզ հարկավոր է, ներառեք դոմենի անունը, փոստի փոխանցման պարամետրերը, վիրտուալ տիրույթները եւ այլն:
3: Ստեղծեք DNS գրառումներ. Փոստի առաքումը ապահովելու համար անհրաժեշտ է ստեղծել անհրաժեշտ DNS գրառումներ (MX եւ SPF գրառումներ) ձեր տիրույթի համար: Անհրաժեշտության դեպքում դիմեք ձեր տիրույթի գրանցամատյանին կամ DNS մատակարարին:
4. Կարգավորեք վիրտուալ տիրույթներն ու օգտագործողները. Եթե ցանկանում եք հյուրընկալել բազմաթիվ տիրույթներ ձեր փոստային սերվերի վրա, ձեզ հարկավոր է կարգավորել վիրտուալ տիրույթներն ու օգտագործողները: Դա կարող է իրականացվել `օգտագործելով« Virtual_Alias_Maps »- ը եւ« Virtual_MailBox_Maps »պարամետրերը` Postfix- ի կազմաձեւման ֆայլում:
5. Ապահովեք ձեր փոստի սերվերը. Ապահովեք, որ ձեր փոստային սերվերը ապահով լինի `տեղադրելով firewall- ի կանոններ, օգտագործելով TLS կոդավորումը մուտքային եւ ելքային փոստի համար, եւ ուղարկեք փոստային սերվերների համար առաջարկվող այլ անվտանգության միջոցներ:
6. Փորձեք ձեր փոստի սերվերը. Ամեն ինչ տեղադրելը, դուք պետք է փորձարկեք ձեր փոստի սերվերը `ուղարկելով եւ ստանալով փորձարկման էլ-նամակներ: Օգտագործեք գործիքներ, ինչպիսիք են Telnet- ը կամ MailX- ը `էլեկտրոնային հասցեները ձեռքով ուղարկելու համար եւ ստուգեք, արդյոք դրանք հաջողությամբ ստացվում են:
Մի մոռացեք պարբերաբար թարմացնել եւ պահպանել ձեր փոստի սերվերը `ապահովելու համար, որ այն սահուն եւ անվտանգ է անցնում: Դա նաեւ լավ գաղափար է դիտել փոստի սերվերի տեղեկամատյանները ցանկացած հարցի կամ կասկածելի գործունեության համար:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Որն է ձվերը եռացնելու լավագույն միջոցը:
Ահա ձվերը եռացնելու մի պարզ մեթոդ.
1. Ձվերը մի կաթսայի մեջ տեղադրեք եւ ծածկեք դրանք սառը ջրով:
2-ը. The ուրը բերեք եռացրած բարձր ջերմության վրա:
3: Երբ ջուրը եռում է, նվազեցրեք ջերմությունը ցածր եւ թույլ տվեք ձվերը եփ գալ 9-12 րոպե, կախված նրանից, թե որքան լավ եք ուզում:
4. Ձվերը հանեք ջերմությունից եւ անմիջապես տեղափոխեք դրանք մի բաժակ սառցե ջրի մեջ `արագ սառչելու համար:
5. Մի անգամ սառչելուց հետո կարող եք կլպել եւ վայելել ձեր կատարյալ խաշած ձվերը:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչպես գրել լավ գիրք:
1: Մշակել հստակ գաղափար կամ հայեցակարգ. Նախքան գրելուց առաջ համոզվեք, որ ամուր գաղափար ունեք ձեր գրքի համար: Սա կարող է լինել սյուժե, կերպար, թեմա կամ պարամետր, որը ցանկանում եք ուսումնասիրել ձեր գրածը:
2. Ստեղծեք ուրվագիծ. Նախագծեք ձեր գրքի հիմնական սյուժեի եւ թեմաները նախքան գրելը: Սա կօգնի ձեզ մնալ կազմակերպված եւ կենտրոնացած մնալ, երբ գրեք:
3. Գրելու համար սահմանեք նվիրված ժամանակ. Ստեղծեք առօրյան գրելու եւ մի կողմ թողեք նվիրված ժամանակը ձեր գրքի վրա աշխատելու համար: Սա կօգնի ձեզ մոտիվացված մնալ եւ առաջընթաց գրանցել ձեր գրածում:
4. Պարզապես սկսեք գրել. Երբեմն գիրք գրելու ամենադժվար մասը սկսվում է: Մի անհանգստացեք այս փուլում կատարելության մասին, պարզապես սկսեք գրել եւ ձեր գաղափարները թղթի վրա ներքեւ ստանալ:
5. Միացեք գրավոր խմբին կամ համայնքին. Մտածեք գրավոր խմբին կամ համայնքին միանալ աջակցության, հետադարձ կապի եւ մոտիվացիայի համար: Գրելը կարող է լինել մենակ հետապնդում, այնպես որ գրողների համայնք ունենալը կարող է անգնահատելի լինել:
6. Խմբագրել եւ վերանայել. Ձեր գրքի նախագիծը լրացնելուց հետո վերադառնաք եւ վերանայեք եւ խմբագրեք այն ձեր գրելու հստակությունը, կառուցվածքը եւ հոսքը բարելավելու համար: Սա կարող է ներառել բազմաթիվ նախագծեր եւ վերանայումներ, նախքան ձեր գիրքը պատրաստ լինի հրապարակման:
7. Փնտրեք հետադարձ կապ. Կիսվեք ձեր աշխատանքը ուրիշների հետ, ինչպիսիք են բետա ընթերցողները, գրելու խմբեր կամ մասնագիտական խմբագիրներ, ձեր գրելու վերաբերյալ արձագանք ստանալու համար: Սա կարող է օգնել ձեզ բացահայտել բարելավման ոլորտները եւ ձեր գիրքը ավելի ուժեղ դարձնել:
8. Գրեք գրել. Գիրք գրելը մարաթոն է, ոչ թե սպրինտ: Շարունակեք առաջ մղել, մնալով նվիրված եւ շարունակելով աշխատել ձեր գրքի վրա, մինչեւ այն ավարտվի:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչպես ուղարկել էլփոստի էլփոստի ցուցակի եւ բաժանորդագրման հղումներով:
Էլ.փոստը էլեկտրոնային փոստով ուղարկելու համար եւ ավելի ամուր բաժանորդագրվելու հղում, դուք պետք է հետեւեք այս քայլերին.
1. Համոզվեք, որ ձեր էլ. Փոստի ցուցակը համապատասխանում է բոլոր համապատասխան կանոնակարգերին, ինչպիսիք են Can-SPAM Act- ը եւ GDPR- ն: Սա նշանակում է, որ բոլոր ստացողները պետք է ընտրեին ձեր էլ-նամակները ստանալու համար, եւ որ դուք ունեք նրանց բացահայտ համաձայնությունը նրանց հետ կապվելու համար:
2-ը: Ներառեք պարզ եւ նշանավոր բաժանորդագրման հղում ձեր էլ. Համոզվեք, որ հեշտ է գտնել եւ կտտացնել, եւ որ այն ստացողներին ուղղակիորեն տանում է դեպի մի էջ, որտեղ նրանք կարող են հեշտությամբ բաժանորդագրվել ձեր փոստային ցուցակից:
3. Արդյոք բաժանորդագրման հղումը «խստացրեք», կարող եք օգտագործել մեկ կտտոցով բաժանորդագրման տարբերակ: Սա նշանակում է, որ ստացողները կարող են բաժանորդագրվել ձեր էլ-նամակներից ընդամենը մեկ կտտոցով, առանց որեւէ լրացուցիչ ձեւակերպելու կամ որեւէ անձնական տեղեկատվություն տրամադրելու:
4. Էլ. Փոստը ուղարկելիս համոզվեք, որ հնարավորության դեպքում անհատականացրեք հաղորդագրությունը եւ ստացողին դիմեք: Սա կարող է օգնել ներգրավվածության բարձրացմանը եւ էլեկտրոնային փոստին ավելի արդիական դարձնել ստացողին:
5. Էլ. Փոստը ուղարկելուց առաջ փորձարկեք այն, որպեսզի բաժանորդագրվի հղումը պատշաճ կերպով աշխատի, եւ որ էլ. Փոստը լավ է թվում բոլոր սարքերում եւ էլփոստի հաճախորդների վրա:
Հետեւելով այս քայլերին, կարող եք էլեկտրոնային փոստով ուղարկել համապատասխան ցուցակի եւ ավելի ամուր բաժանորդագրման հղում `ձեր ստացողները դրական փորձ ունենալու համար եւ կարող եք հեշտությամբ հրաժարվել ձեզնից հետագա էլ-նամակներ ստանալուց:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչպես եմ փակուղի հագնել:
1: Սկսեք ձեր մազերը աճեցնելով ցանկալի երկարությամբ: Ձեր մազերը պետք է լինեն առնվազն 2-3 դյույմ, լավագույն արդյունքների համար:
2-ը: Ձեր մազերը բաժանել փոքր, նույնիսկ մասերի, օգտագործելով սանր: Բաժինների չափը կորոշի ձեր dreadlocks- ի չափը, այնպես որ համոզվեք, որ ընտրեք չափը, որի հետ հարմարավետ եք:
3. Սկսեք հետեւել մազերի յուրաքանչյուր հատվածը `թեքելով եւ ամուր քաշելով այն դեպի արմատները: Սա մազերի մեջ կստեղծի հանգույցներ, որոնք, ի վերջո, ձեւավորվելու են dreadlocks- ի մեջ:
4. Կիրառեք մոմ կամ գել մազերի յուրաքանչյուր բաժին, որպեսզի օգնեք հանգույցները տեղում պահել եւ մազերը խրախուսել միասին:
5: Շարունակեք հետեւել եւ շրջել մազերի յուրաքանչյուր հատվածը, մինչեւ դուք ավարտեք ձեր ամբողջ գլուխը: Այս գործընթացը կարող է ժամանակատար լինել, այնպես որ համբերատար եղեք եւ անհրաժեշտության դեպքում ընդմիջումներ կատարեք:
6. Ձեր մազերը թեքվելուց հետո մի քանի օր թող նստեք, որպեսզի հանգույցները թույլ տան խստացնել եւ ձեւավորել dreadlocks- ի մեջ:
7. Մի քանի օր հետո կարող եք սկսել ոճը եւ պահպանել ձեր dreadlocks- ը `լվանալով դրանք մնացորդային շամպունով եւ օգտագործելով կոճղեղենի կեռիկ:
8: Ձեր dreadlocks- ը կոկիկ եւ կոկիկ տեսք ունենալու համար հաշվի առեք, որ օգտագործեք շարֆ կամ բանդաա, դրանք ծածկելու համար, երբ քնում են կամ կեղտոտ միջավայրում: Պարբերաբար սպասարկումը եւ պահպանումը կօգնեն ձեր dreadlocks- ին մնալ առողջ եւ կենսունակ:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչու պետք է խնձոր օգտագործեմ l բառի վրա:
L բառի Apple L- ի օգտագործումը կարող է ուժեղացնել ձեր դիտման փորձը մի քանի եղանակներով: Apple L- ը հանրաճանաչ հոսքային սարք է, որը թույլ է տալիս հեշտությամբ մուտք գործել եւ դիտել ձեր նախընտրած շոուները բարձրորակ տեսանյութով եւ աուդիոյով: Օգտագործելով Apple L բառը l բառի վրա, կարող եք վայելել փխրուն, պարզ վիզուալներ եւ ընկղմվող ձայն, որը ձեզ կզգա այնպես, ինչպես ճիշտ եք զգում:
Բացի այդ, Apple L- ն առաջարկում է օգտագործողի համար հարմար ինտերֆեյս, որը հեշտացնում է դրվագների, դադար տալ եւ վերափոխել տեսարանները եւ հարմարեցնել ձեր դիտման փորձը: Կարող եք օգտվել նաեւ ձայնային որոնման եւ անհատականացված առաջարկությունների նման առանձնահատկություններից `օգնելու ձեզ գտնել նոր բովանդակություն վայելելու համար:
Ընդհանուր առմամբ, L բառի Apple L- ի օգտագործումը կարող է ձեզ տրամադրել պրեմիում հոսքային փորձ, որը թույլ կտա ձեզ լիովին ընկղմվել շոուի գրավիչ աշխարհում:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչու է ավելի անվտանգ դիմակ հագնելը հանրության մեջ:
Հասարակության մեջ դիմակ հագնելը ավելի անվտանգ է, քանի որ այն օգնում է կանխել շնչառական կաթիլների տարածումը, որոնք պարունակում են վիրուսներ, ինչպիսիք են սովիմը 19: Երբ վիրուսով ինչ-որ մեկը դիմակ է հագնում, դա խանգարում է նրանց շնչառական կաթիլներին ազատվել օդում եւ պոտենցիալ վարակել ուրիշներին: Բացի այդ, դիմակ կրելը կարող է նաեւ պաշտպանել կրողին շնչառական կաթիլներ ներշնչել այն մյուսներից, ովքեր կարող են վարակվել: Սա հատկապես կարեւոր է այն իրավիճակներում, երբ սոցիալական հեռավորությունը դժվար է պահպանել, ինչպիսիք են մարդաշատ փակ տարածքներում կամ հասարակական տրանսպորտում: Ընդհանուր առմամբ, դիմակ հագնելը պարզ եւ արդյունավետ միջոց է `վիրուսների փոխանցումը նվազեցնելու եւ ձեզ եւ ձեր շրջապատողներին պաշտպանելու համար:
Ինչպես կարող եմ լիարժեք դարակաշար կառուցել Dj անգոյի հետ:
Dj անգոյի հետ լիարժեք կեռի վեբ հավելված կառուցելը ներառում է մի քանի քայլեր: Ահա գործընթացի ընդհանուր ուրվագիծը.
1: Նախադրեք Dj անգո. Նախ տեղադրեք Dj անգոն `ձեր հրամանի տողում գործարկելով« Խողովակ: Այնուհետեւ ստեղծեք նոր Django նախագիծ `գործարկելով« Django-admin Startscoject MyProject »:
2. Ստեղծեք Django ծրագրեր. Django ծրագրերը ձեր նախագծի մոդուլային բաղադրիչներն են, որոնք մատուցում են հատուկ նպատակներ: Դուք կարող եք ստեղծել բազմաթիվ ծրագրեր ձեր նախագծի մեջ `տարբեր գործառույթներ վարելու համար:
3. Սահմանեք մոդելները. Django- ի մոդելները օգտագործվում են ձեր տվյալների բազայի սեղանների կառուցվածքը սահմանելու համար: Ստեղծեք ձեր մոդելները `սահմանելով դասերը յուրաքանչյուր ծրագրի մոդելներում:
4. Ստեղծեք տեսակետներ. Դիտումներ Dj անգոյում կան Python գործառույթները, որոնք կարգավորում են օգտագործողի պահանջները եւ վերադարձնում պատասխանները: Սահմանեք ձեր ծրագրի տեսակետները `ստեղծելով գործառույթներ` յուրաքանչյուր ծրագրի տեսանկյունից:
5. Կարգավորեք URL- ները. Dj անգոյում URL- ները օգտագործվում են օգտագործողի հարցումները հատուկ դիտումների քարտեզագրման համար: Սահմանեք URL- ի նախշերը ձեր ծրագրի համար `յուրաքանչյուր ծրագրի մեջ ստեղծելով URLS.Py ֆայլ եւ ներառյալ դրանք ձեր նախագծի հիմնական URL.py ֆայլում:
6. Ստեղծեք ձեւանմուշներ. Django- ի ձեւանմուշները օգտագործվում են HTML էջեր ստեղծելու համար, որոնք ուղարկվում են օգտագործողի զննարկիչին: Ստեղծեք HTML ձեւանմուշներ ձեր ծրագրի համար `ստեղծելով յուրաքանչյուր ծրագրի մեջ ձեւանմուշների թղթապանակ եւ գրեք HTML կոդ առանձին ձեւանմուշ ֆայլերում:
7: Ծառայել ստատիկ ֆայլեր. Ստատիկ ֆայլեր, ինչպիսիք են CSS- ը, JavaScript- ը եւ պատկերները `Dj անգոյի դինամիկ բովանդակությունից առանձին: Կազմաձեւեք ստատիկ ֆայլերի պարամետրերը ձեր նախագծի պարամետրերում:
8. Կարգավորեք տվյալների բազան. Ստեղծեք ձեր տվյալների բազայի պարամետրերը պարամետրերում: Ձեր նախագծի պարամետրերը, ներառյալ տվյալների բազայի շարժիչը, անունը, օգտագործողը, գաղտնաբառը եւ հյուրընկալողը:
9. Տեղադրեք տվյալների բազան.
10: Գործարկեք սերվերը. Սկսեք Django զարգացման սերվերը `ձեր հրամանի տողում« Python Rankserver »գործարկմամբ: Այժմ դուք պետք է կարողանաք մուտք գործել ձեր վեբ հավելվածը `http: //127.0.0.1: 8000 / z.
Սրանք հիմնական քայլերն են `Dj անգոյի հետ լիարժեք դաշնային հավելված կառուցելու համար: Այստեղից կարող եք հետագայում միացնել եւ երկարացնել ձեր ծրագիրը `ավելացնելով վավերացում, թույլտվություն, API վերջնակետներ, փորձարկում եւ այլն:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչն է առաջացնում միգրեն եւ ինչպես են վերաբերվում:
Միգրեն ծանր գլխացավանքներ են, որոնք հաճախ ուղեկցվում են այլ ախտանիշներով, ինչպիսիք են սրտխառնոցը, լույսի եւ ձայնի նկատմամբ զգայունությունը եւ տեսողական անկարգությունները: Միգրենի ճշգրիտ պատճառը ամբողջովին չի հասկացվում, բայց ենթադրվում է, որ կապված է ուղեղի արյան հոսքի եւ քիմիական նյութերի փոփոխությունների հետ:
Միգրենի բուժումը սովորաբար ներառում է կենսակերպի փոփոխությունների, դեղամիջոցների եւ այլընտրանքային թերապիաների համադրություն: Բուժման որոշ ընդհանուր տարբերակներ ներառում են.
1. Վերցնելով գերակշռող ցավազրկողներ, ինչպիսիք են Իբուպրոֆենը կամ ացետամինոֆենը
2-ը: Դեղատոմսերի դեղամիջոցները, որոնք հատուկ նախագծված են միգրենների բուժման համար, ինչպիսիք են Triptans- ը եւ Ergotamines- ը
3. Խուսափելով հրահրողներից, ինչպիսիք են որոշ կերակուրներ, սթրես, քնի պակաս կամ հորմոնալ փոփոխություններ
4. Հանգստացնող տեխնիկայի գործնականում, ինչպիսիք են խորը շնչառությունը կամ խորհրդածությունը
5. Կիրառելով տաք կամ սառը տուփերը գլխին կամ պարանոցին
6. Կանոնավոր վարժություն ստանալը եւ առողջ սննդակարգը պահպանելը
Այն կարեւոր է այն անհատների համար, ովքեր տառապում են միգրեններից, աշխատելու իրենց առողջապահական մատակարարի հետ աշխատելու համար `մշակելու բուժման պլան, որը հարմարեցված է նրանց հատուկ կարիքներին եւ առաջացնում: Որոշ դեպքերում կարող է անհրաժեշտ լինել թերապիաների համադրություն `միգրենները արդյունավետ կառավարելու եւ կյանքի որակը բարելավելու համար:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Որոնք են անվտանգության տեսախցիկ ունենալու առավելությունները:
1. Քրեական գործունեության զսպումը. Անվտանգության տեսախցիկները կարող են հանդես գալ հնարավոր հանցագործների համար, քանի որ դրանք ավելի քիչ հավանական են, որ նրանք դիտում են:
2. Վերահսկողության եւ մոնիտորինգի - անվտանգության տեսախցիկները թույլ են տալիս վերահսկել ձեր գույքը եւ իրական ժամանակում հետեւել ցանկացած կասկածելի գործունեության, օգնելով կանխել գողությունը, վանդալիզմը կամ այլ հանցագործությունները:
3. Հանցագործության դեպքում ապացույցներ `դժբախտ իրադարձության դեպքում, հանցագործություն է առաջանում ձեր գույքի վրա, անվտանգության տեսախցիկի կադրերը կարող են կարեւոր նշանակություն տալ իրավապահների եւ ապահովագրության պահանջների համար:
4. Հեռակառավարություն. Անվտանգության շատ տեսախցիկներն այժմ առաջարկում են հեռավոր դիտման հնարավորություններ, ինչը թույլ է տալիս մուտք գործել ձեր սեփական գույքը `օգտագործելով ցանկացած վայրից, օգտագործելով ձեր սմարթֆոնը կամ համակարգիչը:
5. Մտքի խաղաղություն. Անվտանգության տեսախցիկներ ունենալը կարող է մտքի խաղաղություն ապահովել, իմանալով, որ ձեր գույքը վերահսկվում է եւ հայտնաբերվում եւ արձանագրվում է հնարավոր սպառնալիքները:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ես պարզապես սկսեցի ծննդաբերել: Որոնք են ամենատարածված կողմնակի բարդությունները:
Ծնելիության հաբերի ամենատարածված կողմնակի ազդեցությունները ներառում են.
1. Սրտխառնոց
2-ը: Կրծքագեղձի քնքշություն
3. Գլխացավեր
4. Քաշի ավելացում
5. տրամադրության փոփոխություններ
6. Խնկող կամ բեկումնային արյունահոսություն
7. Փոփոխություններ Լիբիդոյի մեջ
8: Պզուկներ
9-ը: Բլուցում
Կարեւոր է նշել, որ յուրաքանչյուր անձ կարող է զգալ տարբեր կողմնակի բարդություններ, եւ որոշ անհատներ կարող են ընդհանրապես չզգալ: Եթե մտահոգություններ ունեք ձեր ծննդյան հսկողության կողմնակի ազդեցությունների վերաբերյալ, ապա ավելի լավ է խոսել ձեր առողջապահական մատակարարի հետ:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
Ինչպես կարող եմ հյուրընկալել վեբ սերվերը իմ տնից:
Ձեր տնից վեբ սերվերի հյուրընկալելը կարող է իրականացվել հետեւյալ քայլերին հետեւելով.
1. Ընտրեք սերվերի ծրագրակազմ. Դուք կարող եք ընտրել տարբեր սերվերի ծրագրային ընտրանքներ, ինչպիսիք են Apache, Nginx, Microsoft ինտերնետային տեղեկատվական ծառայություններ (IIS) եւ այլն: Ընտրեք մեկը, որը հարմար է ձեր պահանջներին:
2-ը: Ստատիկ IP հասցե ստեղծեք. Կապվեք ձեր ինտերնետային ծառայության մատակարարին (ISP) եւ խնդրեք ստատիկ IP հասցե ձեր ինտերնետ կապի համար: Սա կապահովի, որ ձեր վեբ կայքը հասանելի լինի, նույնիսկ եթե ձեր IP հասցեն փոխվի:
3. Կազմաձեւեք ձեր երթուղիչը. Մուտք գործեք ձեր Router- ի կառավարման վահանակը եւ Forward Port 80 (HTTP տրաֆիկի համար լռելյայն նավահանգիստը) ձեր սերվերի ներքին IP հասցեին: Սա թույլ կտա արտաքին երթեւեկությունը հասնել ձեր վեբ սերվերին:
4. Տեղադրեք եւ կազմաձեւեք սերվերի ծրագիրը. Տեղադրեք սերվերի ծրագիրը ձեր սերվերի մեքենայի վրա եւ կազմաձեւեք այն ըստ ձեր կարիքների, ինչպիսիք են վիրտուալ տանտերերի տեղադրում եւ այլն:
5. Փորձեք ձեր կայքը. Ստուգեք, արդյոք ձեր կայքը հասանելի է ձեր ստատիկ IP հասցեն մուտքագրելով վեբ զննարկչի մեջ: Կարող եք նաեւ փորձարկել այն, օգտագործելով առցանց գործիքներ, ինչպիսիք են Pingdom- ը կամ Gtmetrix- ը:
6. Դոմենի անվանումը եւ DNS կարգավորումը. Գրանցեք դոմեյն անուն ձեր կայքի համար եւ տեղադրեք DNS գրառումները `մատնանշելու ձեր ստատիկ IP հասցեն:
7. Անվտանգության միջոցառումներ. Իրականացնել անվտանգության միջոցառումներ, ինչպիսիք են firewalls- ը, գաղտնագրումը, կանոնավոր կրկնօրինակը եւ այլն, ձեր վեբ սերվերը կիբեր սպառնալիքներից պաշտպանելու համար:
8. Մոնիտորինգ եւ պահպանում. Պարբերաբար վերահսկեք ձեր սերվերը կատարողականի խնդիրների, անվտանգության սպառնալիքների եւ ծրագրային ապահովման թարմացումների համար: Պահպանեք ձեր սերվերի ծրագրակազմը եւ ծրագրերը մինչ օրս `սահուն գործառույթն ապահովելու համար:
Խնդրում ենք նկատի ունենալ, որ ձեր տնից վեբ սերվերի հյուրընկալելը կարող է հարմար լինել բարձր երթեւեկության կայքերի կամ զգայուն տվյալների համար `հնարավոր անվտանգության ռիսկերի եւ սահմանափակ թողունակության պատճառով: Մտածեք պրոֆեսիոնալ վեբ հոստինգի ծառայություն նման պահանջների համար:
միջոցով Daisy / Տեղավորել | Գնել | Գնել Cryptocurrency- ով
https://glamgirlx.com
https://glamgirlx.com -
Թողեք ինձ հուշում Bitcoin- ում `օգտագործելով այս հասցեն. 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE