Օրինակ, գործնական ցանցի վրա հիմնված խորը ուսուցում եւ անվտանգություն

Daisyպրոֆիլի լուսանկարը

Միջոցով Daisy

Practical Web Based Deep Learning and Security by Example Third Edition Charlotte Harper July 3, 2024 Updated/Converted June 3, 2025 Foreword: Security considerations in building software for the web are an important part of any web developer's plan and execution while engineering a prototype that is dependable, stable, and useful for practical purposes. The DOM (Document Object Markup), with it's implementation of HTML, JavaScript, and CSS as well as backend software implementing Python, C/C++, Java and bash, give web developers the freedom and power to create a wide variety of projects that express creativity, provide ease of use and functionality, portray humility and character, and provide ease of use as well as convenience and important services that are all attractive to the average Joe, the end user looking to kill time or get something done on the internet, usually on a touchscreen smartphone device. Most people wouldn't even know where to start when they want to build a website from scratch, they would tend to start on another person's website and build something limited in functionality, dependability, ease of use and especially creativity when they could have had all the latest powerful tools at their disposal in order to build something useful without wasting time pressing buttons, and especially wasting money paying for expensive subscriptions to software few people wanted to use anyway given it's limitations in ease of use and flexibility. If you have a few minutes to read through this book and learn what I want to teach you, or even speak with me personally about your goals and get some guidance in the right direction, and are motivated to learn to code and write your own software, take this book home and set aside some time to learn to build the next influential, powerful, streamlined and important web application, a website that is all on you and does exactly what you want and meets the needs of your audience. About me: I am a software developer with a wide range of experience in C/C++, Java, Python, HTML, CSS and JavaScript. I build websites people want to use, want to visit, and even get addicted to using just to learn, recreate and kill time, and most importantly, I sell software. If you had an idea as to exactly how you wanted a website to look and function, you were willing to support me so I can meet my own needs while I meet yours, and you are willing to cover the costs of running a website yourself, I would build you the next YouTube, TikTok, Twitter, Google, or even a high-tech security app only you can access. Instead of trying to sell you my time, I'm trying to buy yours: I want to talk you into building an app (website) yourself with the information that already exists, and teach you what you need to be an independent software developer, entrepreneur, leading a successful career in whatever field you desire. And let me be clear, the education I give you will be informal. You could go to school and learn all of this with a formal education, or even read this book in school, complete your assignments, and take away a great deal from your education, but I won't formally put you in the hot seat and ask you to complete assignments. I'm not your professor, you can think of me like a friend who wants to guide you toward a career driven by your own personal success. And I'm not selling you success either, you will need to buy it with your time. Learning to code has a steep learning curve and was never easy, or even supposed to be. You need to work as hard as you possibly can and continue to try and fail and try again even when you are frustrated in order to learn and build apps yourself. That's in the nature of code itself. Code is run by a compiler that is designed to give the programmer error messages, and these will teach you how to code, even if you are simply copying the error into your search engine and reading other people's examples. And I must say, you don't need to be extremely rich, smart, successful, or even detail oriented or organized to build an app. The computer takes care of that organization for you. You just need to persevere through the trial and error, maintain focus and work hard at what you do, and you will have a very successful career in the entirety of what you do. Who I am: I realize that the last section was more about learning and your take a ways from this book. Who am I exactly? That's a complicated question. I am unclear on that myself, as I suffer from medical conditions that can make it difficult for me to even code or write this book at times, while presenting challenges with socialization and identity issues that make my life more difficult when it comes to introducing myself. In short, if you are reading this book, you brought it home because you flipped through it and thought it was useful, or even if you just read this far in, to you I am a like minded individual who wants to see you succeed in everything that you do. I am an engineer myself, a software developer, and a student, and I am writing this book for other students who want to make their lives easier by having a handbook of the software they need making their lives easier by giving examples to copy that fit together like a big puzzle into a working, useful, large, functional, cohesive, and engaging app that can drive success no matter the line of business. Largely, this is what I do: I build apps to help myself and other people succeed. I am an author as well, though this is my first publication that I intend to complete in order to put my portfolio together into a useful document, and I am an artist as well. I'll admit this to you, I'm sort of a strange person. I'm not perfect, I've had run ins with the law even leading me to leave colleges and universities and leave states in order to try to make a name for myself with more success. I am a woman by birth, I wear makeup, take photos of myself, wear dresses and other womens clothing, and I stay conscious of myself as a female by nature. I've had issues with other people in the past that lead to struggles with writing and building webapps, and I apologize that I haven't been able to get this book in your hands sooner: You needed this. You will want to read and write code that looks like mine and works like mine and does the same thing but even better, because if you can afford to buy this book instead of mashing your keyboard like I do just to create a book yourself asking money for it, you have the resources you need to be successful in your life. I had all sorts of issues with family growing up, health conditions, doctors, the media, and the law, and my code deeply reflects the struggle that is feminism and female nature in a divided and frustrated world. However, this book is something I deeply care about, my baby, my portfolio, and my livelihood, so I appreciate your consideration when you take the text home and carefully pore over it in order to learn from me. Please keep in mind I am not perfect, this book will have errors, revisions, and new editions, and you will need to think with your logical brain as best you can in order to have a successful experience with my writing. Also, understand that I mean well for you even when you face challenges when writing. Think about it like this: When you can just rent a computer system to do anything you can possibly imagine in the digital space, store all the information you encounter, analyze and organize it, and come to understand it, you will inevitably encounter difficulties with the information you are ingesting and even publishing. I tell you this because I encounter the same difficulties. Use this book at your own risk, work with your community and communities available to you to build software within a safe setting, and don't take things to personally when you fail or even succeed in the wrong way: That's how I got this far, and why I can bring you this text and help you succeed without diverging off on a path of madness that leaves me ruined, torn and frayed while I encounter the ordinary problems everyone does on a global scale thanks to the paralellistic global scale of the network on which we will work, the internet. You might not be very familiar with who I am with just a few words, but I encourage you to read on, you will get to know me as you continue to read and understand me while building your own projects to complete your work. There will be no homework with this book, as long as your professors or teachers don't assign you any, but I highly encourage you to build a portfolio of projects yourself as you read along, as well as a capstone project showcasing how you can apply what you have learned. My capstone project is the basis for most of what you will read in this book, as it incorporates code from my previous projects, code I have created and learned to write methodically by hand, and a wide range of ideas and tips that have helped me succeed to the point where I can spin up a simple app that is fully featured and looks and behaves like a popular app you might see your friend or family using, on the internet, advertised to you, or in the news. What this book is: This book is a tutorial by example. You can find code here, instructions for how to learn to code, information on debugging code and fixing errors, troubleshooting steps, instructions on how to back up and save your code, re-deploy if anyone breaks your code, secure your code, deploy your code, build interactive websites that are entertaining, engaging, and addictive, and you will get a sense of who I am, why this is important, and how to portray yourself, your app and company image, as well as the software you build in the absolute best light to be the most attractive as possible to your end users, your website's visitors. In this book, I will demonstrate a number of examples of software design with a focus on the web as a platform as well as security. We will initiate the learning experience ...
Օրինակ, գործնական ցանցի վրա հիմնված խորը ուսուցում եւ անվտանգություն

Օրինակ, գործնական ցանցի վրա հիմնված խորը ուսուցում եւ անվտանգություն Երրորդ հրատարակություն Charlotte Harper Հուլիսի 3, 2024 Թարմացվել / փոխարկվել է 2025 թվականի հունիսի 3-ին

Նախաբան.

Վեբ կայքի համար ծրագրային ապահովման համար անվտանգության նկատառումները ցանկացած վեբ ծրագրավորողի ծրագրի եւ կատարման կարեւոր մասն են, մինչ ինժեներական նախատիպը, որը կարող է հուսալի, կայուն եւ օգտակար գործնական նպատակներով: The Dom (Փաստաթղթերի օբյեկտի նշումը), իր ներդրմամբ HTML, JavaScript- ի եւ CSS- ի, ինչպես նաեւ Python- ի, C / C ++, Java եւ Bash- ի կողմից իրականացվող հետադարձ ծրագրերի իրականացման միջոցով Ժամանակը սպանելու կամ ինտերնետում կատարված ինչ-որ բան ստացեք, սովորաբար սենսորային սմարթֆոնների սարքի վրա: Մարդկանց մեծամասնությունը նույնիսկ չգիտեր, թե որտեղից սկսել, երբ նրանք ցանկանում են զրոյից վեբ կայք կառուցել, նրանք կարող էին իրենց տրամադրության տակ դնել մի քանի բաներ, որոնք կարող էին ավելի քիչ բաներ օգտագործել: Եթե այս գրքի միջոցով կարդալու եւ սովորեք, թե ինչ եմ ուզում սովորեցնել ձեզ, կամ նույնիսկ անձամբ խոսել ձեր հետ ձեր սեփական համակարգը, այս ամենը ձեզ վրա է սովորում եւ անում է ձեր լսարանի կարիքները:

Իմ մասին. Ես ծրագրային մշակող եմ `C / C ++, Java, Python, HTML, CSS եւ JavaScript- ի փորձի լայն տեսականի: Ես կառուցում եմ այնպիսի կայքեր, որոնք ցանկանում են օգտագործել, ցանկանում են այցելել, եւ նույնիսկ կախվածություն ձեռք բերեք, օգտագործելով ժամանակը սովորելու, վերստեղծելու եւ սպանելու համար, ես վաճառում եմ ծրագրակազմ: Եթե գաղափար ունեիք, թե ինչպես եք ուզում, թե ինչպես եք կայք նայելու եւ գործելու, դուք պատրաստակամորեն կարողանամ բավարարել ձեր սեփական կարիքները: Փոխանակ փորձելու ձեզ վաճառել իմ ժամանակը, ես փորձում եմ գնել ձերն է. Եվ թույլ տվեք պարզ լինել, կրթությունը, որը ես տալիս եմ ձեզ, ոչ ֆորմալ: Դուք կարող եք դպրոց գնալ եւ այս ամենը սովորել պաշտոնական կրթությամբ, կամ նույնիսկ կարդալ այս գիրքը դպրոցում, լրացրեք ձեր հանձնարարությունները եւ ձեզանից լավ տեղավորվի: Ես ձեր պրոֆեսորը չեմ, դուք կարող եք մտածել իմ մասին մի ընկերոջ մասին, ով ցանկանում է ձեզ առաջնորդել դեպի ձեր սեփական հաջողություններով առաջնորդվող կարիերան: Եվ ես ձեզ նույնպես հաջողություն չեմ վաճառում, ձեզ հարկավոր է այն գնել ձեր ժամանակով: Կոդի սովորելը ունի կտրուկ ուսման կոր եւ երբեք հեշտ չէր, կամ նույնիսկ պետք է լիներ: Դուք պետք է աշխատեք այնքան դժվար, որքան հնարավոր է, եւ շարունակեք փորձել եւ ձախողվել եւ կրկին փորձել, երբ ինքներդ ձեզ հիասթափված եք: Դա ինքնին կոդի բնույթով է: Կոդը գործարկվում է այն կազմողի կողմից, որը նախատեսված է ծրագրավորողի սխալի հաղորդագրությունները տալու համար, եւ դրանք ձեզ կսովորեցնեն, թե ինչպես պետք է կոդավորել ձեր որոնիչի մեջ եւ կարդալով սխալը: Եվ ես պետք է ասեմ, որ ձեզ հարկավոր չէ չափազանց հարուստ, խելացի, հաջողակ կամ նույնիսկ մանրամասն կողմնորոշված կամ կազմակերպված լինել, ծրագիր կառուցելու համար: Համակարգիչը հոգ է տանում ձեզ համար այդ կազմակերպության մասին: Պարզապես պետք է համառել դատավարության եւ սխալի միջոցով, պահպանել ուշադրության կենտրոնում եւ քրտնաջան աշխատել ձեր արածի վրա, եւ դուք կունենաք շատ հաջող կարիերա ձեր արածի մեջ:

Ով եմ ես Ես գիտակցում եմ, որ վերջին բաժինը ավելի շատ սովորելու մասին էր, եւ ձեր ուղիները այս գրքից: Ով եմ ես ճիշտ: Դա բարդ հարց է: Ես ինքս ինձ անհասկանալի եմ, քանի որ տառապում եմ բժշկական պայմաններից, որոնք ինձ համար կարող են դժվարացնել նույնիսկ այս գիրքը նույնիսկ այս գիրքը, մինչդեռ իմ կյանքը ավելի բարդացնում է: Մի խոսքով, եթե դուք կարդում եք այս գիրքը, այն բերեցիք տուն, քանի որ դուք շրջեցիք դրա միջով եւ մտածեցիք, որ դա օգտակար է այն ամենի համար, ինչ ցանկանում եք տեսնել ձեզ համար: Ես ինքս ինքս եմ, ծրագրային ապահովման մշակող եւ ուսանող եմ, եւ ես այս գիրքը գրում եմ այն մյուս ուսանողների համար, ովքեր ցանկանում են ավելի հեշտացնել իրենց կյանքը `իրենց կյանքը, որը կարող է հաջողություն ունենալ, անկախ բիզնեսի գծից: Հիմնականում, սա այն է, ինչ ես անում եմ. Ես ծրագրեր եմ կառուցում, օգնելու ինձ եւ այլ մարդկանց հաջողության հասնելու համար: Ես նաեւ հեղինակ եմ, չնայած սա իմ առաջին հրապարակումն է, որ ես մտադիր եմ լրացնել, որպեսզի իմ պորտֆելը միասին դնի օգտակար փաստաթղթի մեջ, եւ ես նույնպես նկարիչ եմ: Ես դա ձեզ ընդունելու եմ, ես մի տեսակ տարօրինակ մարդ եմ: Ես կատարյալ չեմ, քանի որ ես անում եմ օրենքով, նույնիսկ ինձ տանում էին քոլեջներ եւ համալսարաններ թողնելու եւ երկրներից հեռանալու համար, որպեսզի փորձենք ավելի մեծ հաջողություններ ունենալ: Ես ծննդյան կին եմ, ես հագնում եմ դիմահարդարում, լուսանկարում եմ ինքս ինձ, հագնում զգեստներ եւ կանանց այլ հագուստներ, եւ ես ինքս ինձ համար գիտակցում եմ բնության մեջ: Նախկինում խնդիրներ եմ ունեցել այլ մարդկանց հետ, որոնք հանգեցնում են գրելու եւ վեբ գրքերի կառուցման պայքարի, եւ ես ներողություն եմ խնդրում, որ այս գիրքը շուտով չէի կարողացել: Դուք կցանկանաք կարդալ եւ գրել կոդը, որը նման է իմը եւ իմ նման է աշխատում եւ նույնն է անում, բայց եթե կարողանաք ինքներդ ձեզ համար փող աշխատել, դուք պետք է կարողանաք ձեռք բերել ձեր կյանքում: Ես ունեի բոլոր տեսակի խնդիրներ ընտանիքի մեծացման, առողջության պայմանների, բժիշկների, լրատվամիջոցների եւ օրենքի հետ, եւ իմ օրենսգիրքը խորապես արտացոլում է ֆեմինիզմը եւ կին բնությունը բաժանված եւ հիասթափված աշխարհում: Այնուամենայնիվ, այս գիրքը մի բան է, որը ես խորապես հոգ եմ տանում, իմ երեխային, իմ պորտֆելը եւ իմ ապրուստը, այնպես որ ես գնահատում եմ ձեր ուշադրությունը, երբ ինձանից ստանձնեք տեքստը: Խնդրում եմ հիշեք, որ ես կատարյալ չեմ, այս գիրքը կունենա սխալներ, վերանայումներ եւ նոր հրատարակություններ, եւ ձեզ հարկավոր է մտածել ձեր տրամաբանական ուղեղի հետ, հնարավորինս լավ փորձ ունենալու համար: Նաեւ հասկացեք, որ ես լավ եմ նկատի ունենում ձեզ համար նույնիսկ երբ գրելու ժամանակ մարտահրավերների եք բախվում: Մտածեք այսպիսիի մասին. Ես դա ասում եմ ձեզ, քանի որ հանդիպում եմ նույն դժվարություններին: Օգտագործեք այս գիրքը ձեր ռիսկով, աշխատեք ձեր համայնքի եւ համայնքների հետ, որոնք ձեզ հասանելի են անվտանգ պարամետրում ծրագրակազմ կառուցելու համար, եւ ինչու ես կարողանում բերել ինձ այս տեքստը, մինչդեռ ես կարող եմ բերել այն, ինչի վրա եմ թողնում ինձ վրա Մենք կաշխատենք, ինտերնետ: Գուցե դուք շատ ծանոթ չեք, թե ով եմ ընդամենը մի քանի բառի հետ, բայց ես խրախուսում եմ ձեզ կարդալ, դուք կկարողանաք կարդալ եւ հասկանալ ինձ, ձեր աշխատանքը կառուցելու համար, ձեր աշխատանքը ավարտելու համար: Այս գրքի հետ տնային գործ չի լինի, քանի դեռ ձեր դասախոսները կամ ուսուցիչները ձեզ չեն նշանակում, բայց ես ձեզ շատ խրախուսում եմ կառուցել ծրագրերի պորտֆոլիո, ինչպես կարդում եք ձեր սովորածը: Իմ Capstone նախագիծը հիմք է հանդիսանում այս գրքում կարդալու մեծ մասի համար, քանի որ այն կներառի իմ նախորդ նախագծերից, որը ես ստեղծել եմ եւ սովորել եմ, որ կարողանան նմանվել ձեր ընկերոջը, եւ նորություններում կարող եք տեսնել ձեր ընկերոջը:

Ինչ է այս գիրքը. Այս գիրքը օրինակ, օրինակ է: Կարող եք կոդ գտնել այստեղ, հրահանգներ, թե ինչպես սովորել կոդը, տեղեկությունները կարգաբերելու կոդերի եւ սխալների շտկման ուղղությամբ, ձեր ծածկագիրը կվերցնեք, եւ ինչպես ես դա կարեւորում, եւ ինչպես է դա կարեւոր, եւ ինչպես է դա կարեւոր, ինչպես նաեւ դա Ծրագրաշար, որը դուք կառուցում եք բացարձակ լավագույն լույսի ներքո, որպեսզի հնարավորինս գրավիչ լինի ձեր վերջնական օգտագործողներին, ձեր կայքի այցելուներին: Այս գրքում ես կցուցադրեմ ծրագրային ձեւավորման մի շարք օրինակներ, որոնց վրա կենտրոնանալով համացանցի, որպես հարթակ, ինչպես նաեւ անվտանգություն: Մենք կսովորեցնենք ուսուցման փորձը `կառուցելով հիմնական նախագիծ, օգտագործելով Unix Shell- ը, պահուստային եւ գրությունների հատկություններով: Այնուհետեւ մենք կքննարկենք բլոգի հիմնական կայքը, արդիականացրեք մեր բլոգը լուսանկարներով եւ վիդեո-տեսանկյունից, ինչպես նաեւ օգտագործեք այս հատկանիշները `անվճար ծրագրակազմ օգտագործելու համար եւ ապահովեք մեր սերվերը: Այնուհետեւ մենք կվերանայենք ֆայլերի բեռնաթափում եւ վերամշակում, ուսումնասիրելու վիդեո խմբագրումը, ձայնային նվիրատվությունը, շտրիխ-սկանավորման եւ օպտիկական բնույթի ճանաչումը, ի թիվս այլ հասկացությունների: Անապարհին մենք կքննարկենք API- ները, որոնք կօգնեն մեզ մեր ծրագրակազմը դարձնել ավելի օգտակար եւ անվտանգ, անվճար եւ վճարովի տարբերակներ: Անապարհին մենք կքննարկենք ֆիզիկական անվտանգությունն ու զինյալ գործիքները, ինչպիսիք են հրազենը եւ զինամթերքի դիզայնը եւ արտադրությունը, ներառյալ բարել եւ կրկնող ձեւավորում, պտուտահաստոց եւ անօդաչու ձեւավորում եւ այլ տնօրեններ, մեր ծրագրակազմը պաշտպանելու եւ ինքնապաշտպանության եւ վերամշակման համար: Մենք կվերցնենք խաղեր, 2D եւ 3D մատուցող շարժիչներ կառուցելու եւ ներկառուցված ապարատների հետ աշխատելու դեպքում, հիմնական ծավալային մատուցման ծրագրային ապահովման եւ էլեկտրոնային թրթռող մերսման օրինակներ, համապատասխանաբար սիլիկոնային ռետինով: Անապարհին մենք նաեւ կօգտագործենք մեքենայական ուսուցման լուծումներ, որոնք արդեն հասանելի կլինեն `մեր ծրագրակազմը ավելի լավ ապահովելու համար: Գործընթացը շտկելու եւ ապահովելու համար մենք կօգտագործենք նաեւ համացանցի համար մատչելի ֆոնդային գործիքներ: Այս գիրքը վեբ դիմումի կառուցման եւ համակարգչի եւ ներկառուցված մեխանիկական համակարգերի մասնագիտական ցանցի հետ ինտեգրելու ուղեցույց է եւ այն ինտեգրվել համակարգչային եւ ներկառուցված մեխանիկական համակարգերի մասնագիտական ցանցի հետ եւ ընդհանուր առմամբ ծրագրային ապահովման եւ ներկառուցված ապարատների կառուցման ուղեցույց:

Ինչ չէ այս գիրքը. Եթե իսկապես ցանկանում եք ունենալ կայք, ապա պարզապես կարող եք ստեղծել պարզ խանութ եւ վաճառել ձեզ անհրաժեշտ, բլոգ, փակցրեք լուսանկարներ կամ տեսանյութեր, կամ այլ կերպ, առանց որեւէ կոդ գրել: Այս գիրքը դա չէ: Այս գիրքը կսովորեցնի ձեզ, թե ինչպես կառուցել ծրագրակազմ, որն ավելի օգտակար, լիարժեքորեն ներկայացված է, ֆունկցիոնալ եւ անվտանգ, քան ցանկացած ծրագիր, որը դեռեւս նախատիպեր է, որոնք գործարկվում են: Եթե այս գրքին ուշադիր հետեւեք, կցանկանաք գրել կոդ, հետազոտական կոդ, կառուցել ձեր սեփական ծրագրերը, եւ դուք գումար կստանաք ձեր արածից: Այս գրքից գումար կդարձնեմ նույնիսկ վաղ փուլերում, քանի որ այն պարունակում է տեղեկատվություն, մարդիկ պետք են եւ ցանկանում են կարդալ եւ արդեն գնում են, երբ գնում են կամ օգտագործում են իմ ծրագրերը: Այս գիրքը ձեզ համար ծրագիր չի կառուցի, բայց ձեզ կպատճառի ճիշտ ուղղությամբ եւ կկարողանաք ձեզ անհրաժեշտ գործիքներ եւ համացանցի համար ծրագրային ապահովման, ընտանիքի, այցելուների, ընտանիքի, հյուրերի, այցելուների, ընտանիքի, հյուրերի, այցելուների համար:

Ինչ կսովորեք. Այս գիրքը ձեզ կսովորեցնի, թե ինչպես ստեղծել եւ վաճառել ծրագրակազմ, իրոք ֆունկցիոնալ, օգտակար ծրագրաշար, մեդիա ձայնագրություն, անվտանգության հնարավոր առանձնահատկություններ, ինչպիսիք են դեմքի ընթերցվող գոտու շտրիխ-սկանավորում, վեբ API- ն, տեսանյութեր եւ լուսանկարներ, ինչպիսիք են Bluetooth- ը եւ մոտ դաշտը (NFC) հաղորդակցվելու համար: Այս գիրքը կսովորեցնի ձեզ, թե ինչպես օգտագործել ցանցային համակարգիչ, կենտրոնանալով Debian Linux- ի վրա, ինչպես ձեր ծրագրակազմը `օգտագործելով Python- ի ձեւերը Նպատակը, ID սկանավորման, պատկերի եւ վիդեո չափավորումը, տվյալների միկրոտրանցումը `ձեր ծրագրակազմը անվտանգ, վճարման մշակման, ծպտյալ առաջադրանքների, ասինխրոն առաջադրանքների եւ այլն պահելու համար: Դուք կսովորեք, թե ինչպես կառուցել ձեր սեփական Bluetooth սարքերը, մարտկոցներով, լիցքավորիչներով, միկրոկոնտոլներով, սխեմաներով, շարժիչներով եւ ցուցիչներով, օգտագործելով զոդում, մետաղալարեր եւ 3D տպագիր, ինչպես նաեւ ձուլված նյութեր: Ես կցուցադրեմ 3D դիզայնի տնօրեններ, որոնք կիրառվել են հավելանյութերի արտադրության եւ գործիքների վրա եւ մեռնելու համար, այնպես որ դուք ի վիճակի եք արտադրել ձեր ներդրված, ապարատային սարքերը ինտեգրված մարտկոցներով, լիցքավորիչներով, էլեկտրոնային սխեմաներով: եւ ցանցային դրանք Bluetooth- ով եւ համացանցով: Մասնավորապես, մենք կուսումնասիրենք երկու դեպքի ուսումնասիրություն, թրթռող մերսող եւ տնական հրազեն, ինչպես ծրագրավորված է OpenSCAD- ում, որը հասանելի է գրաֆիկական ինտերֆեյսի կամ հրամանի տողի կոմունալ եւ կարող է ինտեգրվել համացանցում, արագ արդյունքների համար: Դուք կսովորեք, թե ինչպես ստեղծել եւ տեղակայել կայք գետնից, առանց նախնական փորձի, այն դարձնել ֆունկցիոնալ, անվտանգ, գեղեցիկ, օգտակար եւ ամենակարեւորը: Դուք կսովորեք, թե ինչպես օգտագործել մեքենայի ուսուցման եւ համակարգչային տեսլականը `ձեր կայքից անվտանգ եւ ավելի գործնական, ձայնագրելու տեսանյութ եւ աուդիո, ձեր ձայնը կազմելու համար, եւ ինչպես կարող եք ուղղակիորեն կապել ձեր առաջարկած բոլոր օգտակար տեղեկությունները: Այս գիրքը կենտրոնանալու է առավելագույնը լրատվամիջոցների, անվտանգության եւ մեքենայի ուսուցման վրա, որոնք երեք բաղադրիչներն են, որոնք կօգնեն ձեզ ստեղծել օգտակար ծրագրակազմ, ներգրավելով ճիշտ օգտագործողներին, եւ գործնական, գործնական, ձեռքերում է նաեւ իրատեսական եւ ամուր: Այս գիրքը ուսուցանում է Unix, մասնավորապես Debian (Ubuntu), Bash Shell, Python, HTML, CSS, JavaScript եւ Python- ի նման մի շարք ծրագրային փաթեթներ, ինչպիսիք են GIT- ը եւ FFMPEG- ը, ինչպես Git- ը եւ FFMPEG- ը: Ես նաեւ կսովորեցնեմ ձեզ, թե ինչպես ինքնաբերաբար առեւտուր անել Cryptocrency- ը եւ վճարումներ կատարել Cryptocurrency- ում կամ կանոնավոր դեբետային քարտերից, մինչդեռ ձեր այցելուները վճարում եք ձեր եկամուտների բաժնեմասը: Ես ձեզ կսովորեցնեմ, թե ինչպես կարելի է գումար վաստակել ձեր կայքից `ինչպես գովազդի միջոցով, ինչպես պատրաստ լինել ձեր ծրագիրը որոնիչների համար եւ առաջին վարկանիշում դասակարգվել է այն, ինչ հնարավոր է շատ ընդհանուր որոնումներ կգտնեք: Ես ձեզ կսովորեցնեմ, թե ինչպես վաճառել ձեր ծրագրակազմը, գովազդել այն, դիմեք ձեր ծառայությունները փնտրող հաճախորդներին եւ ինքներդ ձեզ անունով անուն տալու համար, որոնք արդեն գոյություն ունեն: Ես ձեզ կսովորեցնեմ, թե ինչպես կարելի է պահպանել ձեր տվյալները ամպային համակարգիչների վրա, որոնք աշխատում են ձեզ համար եւ ավելի էժան են ձեր օգտագործողները, որոնք ցանկանում են ձեր օգտագործողներին ձեր տրամադրության տակ դնել ձեր օգտագործողներին ձեր տրամադրության տակ: Այս գիրքը կկենտրոնանա մեծ քանակությամբ լրատվամիջոցներ հրապարակելու եւ բաշխելու գործնականության վրա, տեքստից մինչեւ լուսանկարներ տեսանյութեր դեպի աուդիո, լավ տպավորություն թողնելով վերջնական օգտագործողների վրա (ձեր ծրագրակազմը եւ ձեր ընկերությունը լավ տեսք է տալիս: Դուք նաեւ կսովորեք մի քանի խորհուրդներ եւ հնարքներ, կոդավորման խորհուրդներից, դիմահարդարման եւ լուսանկարչության նման գործնական ունայնությունից, մոդելավորելը եւ գործելը եւ ավելին, ձեր ծրագրակազմը ավելի մեծ ջանքեր գործադրելու համար, քան անհրաժեշտ է: Այս գիրքը կոչվում է «գործնականՀամացանցային խորը ուսուցում եւ անվտանգություն օրինակով », մի պատճառով, այն գործ ունի, որը սովորում է ծածկագրին, մասնավորապես` կենտրոնում ներկայացված գործնականում, որը կզբաղեցնի համակարգչային տեսլականը, պատկերի բարելավումը, բանաձեւը Պատկերների վերնագրում եւ այլ առաջադրանքներ, ինչպիսիք են պատկերները, ինչպիսիք են պատկերները, ինչպիսիք են պատկերի բնույթը, որպես վավերական, համակարգչային փոխանցված պատկեր կամ օպտիկական պատճեն (պատկերների ուսուցում կամ տպագիր): Եթե դա կարող է ավելի անվտանգ լինել Դեմ. Դուք կարող եք կատարել սերվերի համակարգիչ այս անվտանգ, համակարգիչ, որը սովորաբար ձեզ հարցնում է օգտվողի անուն եւ մուտք գործելու համար, կարող է բավարար լինել ուրիշի ծրագրակազմը, կամ ձեր օգտագործած ցանկացած կայք): Ամեն ոք, ով կառուցում է համակարգչային անվտանգություն, որն անպտուղ ապահով է, ինչ-որ իմաստ ունի, թե ինչ է դա ենթադրում: Ծրագրակազմը բնածին անապահով է, քանի որ այն սարքերը եւ հաշիվները, որոնք մենք օգտագործում ենք այն հասանելիությունը, միշտ չէ, որ մեր տրամադրության տակ են, նրանք կարող են ինքնուրույն անձի համար ռիսկի դիմել: Սա այս գրքի ուշադրության կենտրոնում է: Network անցային համակարգիչը լռելյայն ապահովված է երկար ստեղնաշարի նշանով, կանչված եւ SSH կամ անվտանգ shell ստեղնով եւ այլապես լավագույնս ապահովված է վեբ սերվերի հետ, քանի որ ինքնուրույն պահվում է արվեստի անվտանգության գործիքներ: Վեբսերվերը մուտք ունի օգտագործողի վեբ զննարկիչ, որը, հավանաբար, օգտագործողի սարքի ամենահզոր մասն է, քանի որ այն այն վայրն է, որտեղ օգտագործողը կարող է մուտք գործել ցանցային ծրագրակազմ: Այս գործիքակազմը կարող է տեքստ տրամադրել, ձեր տեսած վեբ էջերը եւ կարող եք նաեւ արձանագրել պատկերներ, աուդիո եւ վիդեո (ինչպես, թե ինչպես կարելի է գրել եւ գրվել է վեբ-սերվերի կողմից նշված վեբ սերվերի կողմից: Օգտագործելով ձեր տրամադրության տակ գտնվող բոլոր գործիքները, այս գրքով դուք կվերազատեք ինքներդ ձեզ `անվտանգ կայք կառուցելու գիտելիքներով, եւ ընդհանուր ցանցի անվտանգ համակարգչային համակարգ, որն աշխատում է ձեզ համար, կատարում եւ զգում է

Որտեղ սկսել. Դուք ողջունում եք բաց թողնել այն հատվածը, որը ես սկսում եմ այս գիրքը կամ ցանկացած բաժնում, որը անհրաժեշտ է ձեզ անհրաժեշտ ճշգրիտ կոդին, մանավանդ, որ այս գրքում կամ դրա գործնական օրինակներն ունեն: Եթե գրելու կոդ չունեք, ես խորհուրդ եմ տալիս կարդալ այս ամբողջ գիրքը եւ հատկապես խորհուրդ տալ կարդալ նախորդ բաժինները, որպեսզի այս գիրքը ճիշտ լինի: Եթե այս գիրքը ճիշտ չէ ձեզ համար, ապա հաշվի առեք այն ընկերոջը կամ հարազատին, ով կարող է հետաքրքրվել իրենց կողմից վեբ զարգացման մասին սովորելուն եւ նրանցից ստացվող այլ ուսուցիչներ: Սկսեք այնտեղ, որտեղ դուք կցանկանաք, այս գրքի յուրաքանչյուր մասը օգտակար կլինի, եթե մտադիր եք օգտակար ծրագիր կառուցել, եւ հաշվի առեք, որ լավագույն ծրագրերը տեղադրված են ձեր հաճախորդին: Հիմա դուք ինձ ճանաչում եք, դուք գիտեք այս գիրքը, եւ պատրաստ եք սկսելու: Սկսելու համար համակարգիչը գրավել (նույնիսկ տուփի խանութի ամենաէժան նոութբուքը աշխատում է, Amazon- ը կամ հին աշխատասեղանը:

Ինչպես կարդալ այս գիրքը. Տեքստը կարեւորեց, նշում է, որ տեքստը պատկանում է հրամանի հուշումին, որտեղ դուք կգրեք ձեր գործարկած ծածկագիրը: Հրամանի հուշումը խիստ ստեղնաշար է կենտրոնացած եւ քիչ կտտացնում է սեղմում, արագացնելով ձեր աշխատանքային հոսքը եւ ձեզ վրա ավելի հեշտացնելը:

Սկսել. Եկեք սուզվենք: Մենք կսկսենք տեղական մեքենայի վրա ծածկագիր կառուցել եւ սկսել առանց ինտերնետին միացված կայք կառուցելու: Սա ավելի անվտանգ է սկսել, ոչինչ չի ծախսում եւ ձեզ համար հեշտ է: Կախված ձեր գործառնական համակարգից, բաշի կեղեւի մեջ մտնելը մի փոքր այլ կլինի: Mac OS- ի համար խորհուրդ եմ տալիս այս պահին վիրտուալ մեքենա տեղադրել, քանի որ դուք կստանաք առավելագույն համատեղելիությունը վիրտուալ մեքենայի հետ: Տարբեր պրովայդերներ, ինչպիսիք են վիրտուալ տուփը եւ Պարալելլսը կարող են վիրտուալ մեքենա վարել ձեզ համար, չնայած հնարավոր է նաեւ Ubuntu տեղադրել ուղղակիորեն մեքենայի վրա, եթե նախընտրում եք օգտագործել հայրենի միջավայր, որն առաջարկվում է արագ, արագ փորձառություն ստեղծել: Եթե դուք օգտագործում եք Linux կամ Windows, որը ես խորհուրդ եմ տալիս, պետք է լինի բավականին հեշտ նախագիծ ստեղծելը: Բացեք ձեր տերմինալը, կարգավորեք չափը, երբ տեսնում եք տեղին եւ սկսեք հետեւյալ քայլ 2-ը: Եթե դուք օգտագործում եք Windows, խնդրում ենք հետեւել 1-ին քայլին:

Քայլ 1. - Միայն Windows- ի օգտվողները Windows- ում բաց հրամանի հուշում, որպես ադմինիստրատոր եւ տեսակը WSL -Install

Քայլ 2. - Շարունակեք այստեղ, կամ բաց թողեք այստեղ, եթե չօգտագործեք Windows- ը Բաց տերմինալում (կախված ձեր ՕՀ-ից, որը կոչվում է Ubuntu Windows- ում, Terminal Mac- ում կամ Linux- ում կամ նման անուն), սկսեք նախագիծ ստեղծել: Մենք դա անում ենք Mkdir հրամանի հետ, որը գրացուցակ է ստեղծում: Եթե Ձեզ անհրաժեշտ է ստեղծել գրացուցակ, ձեր նախագիծը պահելու համար, որը առաջարկվում է, օգտագործեք CD հրամանը, գրացուցակին փոխելու համար եւ եւ

CD / PATH / TO / տեղեկատու. Ուղին այն թղթապանակներն են (ֆայլերը), որոնք նախորդում են ձեր նպատակակետային գրացուցակը, ձեր լռելյայն ուղին ~ կամ / տուն / օգտվողի անուն (որտեղ օգտագործողի անունն է): Փոխվել լռելյայն գրացուցակում, մուտքագրեք CD կամ CD MKDIR օրինակ - «Օրինակ» -ը փոխարինել գրացուցակի անունով

Այժմ դուք ունեք աշխատանքային գրացուցակ ձեր նախագծի համար: Լինելով այնքան կարեւոր, որ այս գրացուցակը պահվի, եթե անհրաժեշտ է անցնել այլ մեքենայի կամ տեղակայել ձեր գրած կոդը, որպեսզի այն պատրաստ լինի համացանցում: Բայց սցենարի կառուցումը մի քիչ կոդ է պահանջում, եւ ծածկագիրը պետք է ավտոմատացված լինի հնարավորինս օգտակար լինելու համար: Այսպիսով, եկեք սցենար կառուցենք `առաջին հերթին սցենարներ կառուցելու համար: Սկսենք սցենարը ստեղծելուց եւ գործադիր դարձնելով: Մենք կօգտագործենք սուդո, CHMOD եւ շոշափենք դրա համար եւ կզանգահարենք «Ascript» սցենարը:

sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript

Այժմ մենք ստեղծել ենք սցենարը, այն գործարկվել է, եւ պատրաստ ենք խմբագրել այն: Nano- ն տեքստային խմբագիր է, որը թույլ կտա ձեզ խմբագրել տեքստը առանց կտտացման, ինչը շատ ավելի հեշտ է, քան գրաֆիկական ինտերֆեյսի օգտագործումը: Նանոյի հետ ֆայլը խմբագրելու համար օգտագործեք Nano- ն, ապա ֆայլի ուղին: Սցենար պատրաստելու համար, որը պատրաստում է սցենար, առաջին հերթին մեր սցենարը դարձնում է: Մենք կօգտագործենք նույն ծածկագիրը, ինչպես վերեւում, փոխարինելով սցենարի անունը, «Ascript» փաստարկային պարամետրով, 1 դոլար: Սա թույլ է տալիս մեզ զանգահարել սցենարը, մուտքագրելով պարզապես Sudo Ascript Newscript- ը, որի ընթացքում մենք կարող ենք ստեղծել ցանկացած նոր սցենար `ձեր սցենարի անունով փոխարինելով« 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 վիրտուալ մեքենայի օգտագործումը, քանի որ այն կդարձնի ձեր կյանքը `ձեր համակարգչում կառուցելու համար անհրաժեշտ բոլոր փաթեթները տեղադրելու համար: Մենք մոտ ապագայում ծածկագիրը կտեղափոխենք վեբ սերվերին, բայց մենք ուզում ենք համոզվել, որ մեր վեբ սերվերի հետեւում կա առնվազն մի քանի շերտեր, որոնք դեմ են ֆիշինգին, եւ դա անելու համար: Եթե դուք դեռ ցանկանում եք օգտագործել 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 ավելի ֆունկցիոնալ պատրաստելու շատ եղանակներ կան, ավելացնելով ցանցեր, որոնք արագ, արագացված հաղորդակցման ալիքներ են, նեխուր, որոնք իրականացվում են ապարատի գործառույթների մեծ մասի համար: View գործառույթները առանցքային են, քանի որ նրանք սովորաբար հայտարարում են յուրաքանչյուր ծածկագրի յուրաքանչյուր կտոր, որը հատուկ է հատուկ 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- ի նախշերը ցուցակ են, այնպես որ համոզվեք, որ միշտ վերջացնեք նրանց յուրաքանչյուր կետը ստորակետով, քանի որ սա առանձնացնում է յուրաքանչյուրը: Յուրաքանչյուր կետ պետք է գնա նաեւ նոր գծի, մեկ անգամ եւս չորս տարածքով `դրա առջեւ, ինչպես հավելվածը պարամետրերում: Տեսքի առաջին բաղադրիչը կբերենք դատարկ լարային գործառույթով, որպեսզի ստեղծենք այնպիսի տեսակետ, որն աշխատում է վեբ սերվերի արմատային գրացուցակում: Ձեր 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 եւ մեքենայական ուսուցում:

Դասերը պահվում են ձեր ծրագրի մոդելներում: Օգտագործելով 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 ձեւանմուշում ներկայացնելով ներկայացման կոճակով: Մեզ պետք է նաեւ CSRF նշան, նշան, որը կանխում է արտաքին կայքերը ձեւաթուղթը, առանց առաջին էջը բեռնելու:

Եկեք կոտրենք սա: Գոյություն ունի նոր ձեւի դաս, նշան, ձեւը ինքնին եւ ներկայացման կոճակը: Շատ պարզ է, բայց երբ մենք նայում ենք դրան, գուցե ցանկանանք ավելի լավ տեսք ունենալ: Այն աշխատում է, մենք կարող ենք նոր հաղորդագրություններ փակցնել ձեւի հետ, եւ դրանք այժմ պահպանվում են տվյալների բազայում: Այստեղ կան մի քանի բաներ: Մենք օգտագործում ենք HTML պիտակներ, հայտարարելու, որ փաստաթուղթը HTML փաստաթուղթ է, մենք օգտագործում ենք ձեւանմուշի պիտակ ({% ...%), ձեւի համար նշանը ստանալու համար: Մենք ունենք նաեւ մի հանգույց, որպեսզի տեքստը դնի բլոկային պիտակներ եւ ձեւանմուշ: Block Tags- ը իսկապես կարեւոր է, քանի որ մենք կարող ենք սահմանել, թե ինչպես են ձեւանմուշների բաժինները նրանց հետ, եւ կաղապարի պիտակները հիմք են հանդիսանում մեր կոդով:

Այժմ մենք պետք է մեր ծրագիրը ավելի լավը դարձնենք, քանի որ այժմ այն իսկապես հիմնական է թվում: Մենք դա կարող ենք անել, օգտագործելով 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- ն: Նախ, եկեք ստեղծենք նոր ծրագիր, որը կօգտագործենք ձեւանմուշներն ու տեսակետները հիմնական մուտքի էջի համար: Մենք կստեղծենք նաեւ այլ ծրագրեր, որպեսզի ներկայացնեն մուտքի շարունակական մարտահրավերները `ծրագիրը ապահովելու համար, ներառյալ տնկարան, դեմքի ճանաչում, դաշտային հաղորդակցման, արտաքին սարքերի, բազմաբնույթ վավերացման եւ մատնահետքերի ճանաչման:

Մենք արդեն խոսեցինք ծրագիր սկսելու մասին: Մեր գրացուցակից, վիրտուալ միջավայրի ներսում, փոխանցեք Կառավարեք այս փաստարկները

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']

Այսպիսով, մենք ունենք մեկ այլ ձեւ այստեղ, որն իրականում գործում է բավականին պարզ: Դա օգտագործողի գրանցման ձեւ է `օգտվողի անունով, էլ. Փոստով եւ գաղտնաբառով, ինչպես նաեւ հաստատեք գաղտնաբառի դաշտը: Նկատի ունեցեք, որ այս ձեւը չի տարածվում կանոնավոր ձեւերով: Մեկ դաշտը սահմանվում է նույնը, եւ դասի մետան սահմանում է ձեւը ձեւը համապատասխանում է մնացած տեղեկություններին, որոնք գրվելու են ձեւին: Դրանց մեծ մասը արդեն գոյություն ունի Django- ի կառուցված օգտագործողի ձեւով, այնպես որ մենք դա կօգտագործենք որպես դասի հիմք (անցնում է փակագծերում):

Հաջորդը, մենք կքննարկենք օգտագործողին գրանցելու տեսքը, հիմա, երբ մենք ունենք ձեւ եւ ձեւանմուշ: Սա Modelform է, ինչպես մեկը, նոր գրառման տեսքում: Խմբագրել օգտվողներին / Դիտումներ.py եւ ավելացնել հետեւյալ ծածկագիրը.

# ... Ներմուծում

Սա այն ամենն է, ինչ մենք պետք է գրանցված օգտվողներ ստանանք, բայց մենք պետք է ավելի շատ տեղեկություններ ունենանք: Մենք ուզում ենք իմանալ այն ժամանակը, երբ գրանցվել են օգտագործողը, նրանք վերջին անգամ տեղում էին, նրանց մասին որոշ տեղեկություններ, ինչպես կենսագրությունը, ժամանակի մոդելը եւ այլընտրանքային հաղորդագրությունները: Դա անելու համար մենք կթարմացնենք մոդելները: Հատված ենք երկու ծրագրերում: Սկսենք խմբագրելով կերերի մոդելը: Այժմ դա պետք է նման լինի.

from django.db import models # ... Ներմուծում
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Ավելացնել այս տողում

Ուշադրություն դարձրեք ֆայլին ավելացված երկրորդ տողի վրա: Սա օտարերկրյա բանալին է, որը յուրաքանչյուր գրառումը կվերափոխի մեկ փոստով մեկ փոստով, այնպես որ մենք կարող ենք համոզվել, որ մենք պահում ենք օգտագործողի կողմից օգտագործողի վրա պահվող հաղորդագրությունները եւ ոչ մի գրառումը չի կարող կատարել: Մենք սահմանում ենք այս օտարերկրյա բանալին այն դասի հետ, որը ներկայացնում է, ջնջում է գրառումները օգտագործողներին, զրոյական եւ դատարկ փաստարկներով, որպեսզի անհրաժեշտության դեպքում կարողանանք օգտագործել օգտագործողը: Այս կապակցված անունը, ի տարբերություն փոստի, գրառման հեղինակի, մեզ տալիս է մեզ օգտագործողին, ով փակցրեց ինքնուրույն գրառումը: Այժմ մենք կարող ենք գրառումները ձեռք բերել օգտագործող օգտագործող օգտագործող օգտագործող: posts.all () կամ reat.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- ի հետ կապված եւ սպամը հեռացնելու դժվարությամբ: Սա չպետք է տեղի ունենա անմիջապես, բայց եթե դա տեղի ունենա, մենք հետագայում կքննարկենք, թե ինչպես ինքնաբերաբար չափավորվել սպամը կայքում եւ կատարելագործել օգտագործողի ինքնությունը կամ կարող է հաստատել օգտագործողի ինքնությունը:

Նայելով բազմակողմանի վավերացման օրինակին, որը մենք ուսումնասիրեցինք, արտադրության մեջ, իրերը կարող են տարբեր լինել: Ուշադրություն դարձրեք, թե ինչպես ենք մենք սահմանափակում մուտքերը եւ լրանում ենք նշաններ: Եթե ռոբոտները մուտք են գործում կայք, ապա երկու գործոնային վավերացում կարող է ավելի բարդ լինել, քանի որ դրանք կարող են մուտքագրել կոդեր, միեւնույն ժամանակ օգտագործողն է: Դրա դեմ պայքարելու համար օգտագործենք մոդել օգտագործողի մոդելներում, հայտարարելով, թե ինչպես ենք շփվում կայքի հետ, երբ մենք վավերացնում ենք հեռախոսահամարով օգտագործելով բազմաբնույթ գործոնային վավերացում: Մենք նաեւ կավելացնենք էլ. Փոստով վավերացնելու տարբերակ: Սկսեք խմբագրելով օգտագործողի մոդելները Nano- ի հետ:

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 ոչ
# Gssapicleanuprecrecrectents այո
# 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

Այս տողերը ավելացրեք ֆայլին, փոխարինելովՁեր SSH ստեղնով դուք գտել եք կատու օգտագործելով: (.ssh / id_rsa.pub)

# ! / 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- ը, ի թիվս այլ որոնիչների, հիանալի ռեսուրսներ են `ծրագրավորման օգնությունը որոնելու համար: Պարզապես որոնեք ձեր ստացման սխալը, եւ դուք կկարողանաք տեսնել, թե ինչպես են այլ մարդիկ լուծում խնդիրը: Նաեւ ողջունում եք կապվել ինձ հետ, ձեր ուսուցիչների (ուսուցիչների, դասախոսների, դաստիարակների), ինտերնետի ցանկացած հասակակիցներ, որոնք մատչելի են ծրագրավորման համար, կամ կրկին խորհրդակցեք այս գրքի կամ այլ ռեսուրսներ, լուծումներ գտնելու համար: Ես հասկանում եմ, որ դա հեշտ չէ, բայց նույնիսկ եթե կարդացել եք այս հեռավորության վրա եւ չեք գրում որեւէ կոդ, դուք շատ եք սովորում զրոյից վեբ հավելվածի կառուցման մասին: Ինքներդ ձեզ հետեւից, դուք հիանալի աշխատանք եք կատարում:

Շնորհակալ եմ այս երրորդ հրատարակության վեբ զարգացման ուղեցույցը կարդալու համար: Հետագա հրատարակություններում ես կներառեմ փաստաթղթի սկզբում քննարկված կարեւորագույն օրինակներ, եւ մենք շատ ավելի խոր ենք սուզվելու ծրագրակազմի եւ ապարատների զարգացման աշխարհում: Մնացեք, թե ինչ է գալու, եւ ես անհամբերությամբ սպասում եմ ձեզ սովորեցնելու, թե ինչպես կառուցել անհավատալի ծրագրաշար: Տեսեք ձեզ հաջորդ հրատարակության մեջ:






Սերտ
Էջ 1
Ցատկել
Տեսեք ամբողջ հոդվածը
Շարունակեք կարդալ

Գնել | Գնեք ծպտյալով



https://glamgirlx.com/hy/practical-web-based-deep-learning-and -


Մասնագիտական զվարճանք, լուսանկարներ, տեսանյութեր, աուդիո, կենդանի եւ պատահական խաղախաղ, ինչպես նաեւ ID սկանավորում, վեբ զարգացման եւ Surrogacy ծառայություններ:

Թողեք ինձ հուշում Bitcoin- ում `օգտագործելով այս հասցեն. 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE

© Glam Girl X 2025

Ծառայության պայմաններ