Жаңылыктар - Сайтка кириңиз
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 ...
Мысалы практикалық веб-негізделген терең оқыту және қауіпсіздік

Мысалы практикалық веб-негізделген терең оқыту және қауіпсіздік Үшінші басылым Шарлотт Харпер 3, 3 шілде 2024 ж Жаңартылған / өзгертілген / 2025 жылғы 3 маусым

Алғыс:

Интернеттегі бағдарламалық қамтамасыздандыруды құрудағы қауіпсіздік мәселелері кез-келген веб-әзірлеушінің жоспары мен орындалуының маңызды бөлігі болып табылады және инженер-прототип инженерлік, тұрақты, тұрақты, және практикалық мақсаттар үшін пайдалы. HTML, JavaScript және CSS, сонымен қатар, Python, c / c ++, j ++, java және bash бағдарламалық жасақтамасын, сондай-ақ шығармашылық бағдарламалық жасақтаманы, сондай-ақ, кішіпейілділік пен сипаттағы бағдарламалық жасақтаманы ұсынады, сонымен қатар, кішіпейілділік пен сипаттағыштарды, сондай-ақ ыңғайлылықты және ыңғайлылық пен маңызды қызметтерді ұсынады Пайдаланушы уақытты өлтіруді немесе Интернетте жасалған бір нәрсені, әдетте сенсорлы экран смартфонында алыңыз. Көптеген адамдар веб-сайтты нөлден бастағысы келетінін білмейді, олар басқа адамның веб-сайтында басталып, әсіресе өздерінің қолтаңбаларында, әсіресе, егер олар өздерінің барлық қуаттылығы, әсіресе, бағдарламалық жасақтаманы ысырап ету үшін, әсіресе, егер олар қолданғыңыз келгеннен кейін, олар қолданғыңыз келгендер үшін, бұл пайдалану ыңғайлылығында шектеулермен қамтамасыз ете алады. Икемділік. Егер сіз осы кітапты оқып, өзіңіз туралы бірнеше минут оқып, өз мақсаттарыңыз туралы біліп, өзіңізбен бірге сөйлесе біліңіз және өзіңізбен бірге өзіңізбен сөйлесіп, біраз уақыт бөліп, келесіге дейін, сіздерде бар және сіз өзіңіз қалаған веб-сайтты және өзіңіз қалаған нәрсені жасап, өзіңіз қалаған нәрсені жасаңыз және өзіңіз қалаған нәрсені жасаңыз және аудиторияның қажеттіліктерін қанағаттандырады.

Мен туралы: Мен бағдарламалық жасақтама жасаушымын, C / C ++, Java, Python, HTML, CSS және JavaScript тәжірибесі бар бағдарламалық жасақтама жасаушымын. Мен пайдаланғысы келетін веб-сайттар құрамын, барғысы келеді, тіпті уақытты үйрену, қалпына келтіру және өлтіру үшін, ең бастысы, мен бағдарламалық жасақтаманы сатамын. Егер сіз веб-сайттың көрінуі және жұмыс істеуі туралы дәл болсаңыз, сіз өзіңіз үшін қолдауға дайын болсаңыз, мен сіздікі туралы өз қажеттіліктерімді қанағаттандырғыңыз келсе және сіз өзіңіз, мен сіздерге өзіңіз, мен сізге келесі YouTube, Tiktok, Twitter, Google немесе тіпті жоғары технологиялық қауіпсіздік қолданбасын жасаймын. Сіздерді сатып алудың орнына, мен өз уақытымды сатып алуға тырысып жатырмын: мен сізбен бірге (веб-сайт) өзіңіз бар, сіз бұрыннан бар ақпаратпен (веб-сайт) өзіңізбен сөйлескім келеді және сізге тәуелсіз бағдарламалық жасақтама жасаушы, кәсіпкер, сіз қалаған кез-келген далада табысты мансапқа айналдырғым келеді. Маған түсінікті болсын, мен берген білім туралы бейресми боласыз. Сіз мектепке барып, мұның бәрін мектепте оқып, тіпті осы кітапты оқып, тіпті осы кітапты оқып, тапсырмаңызды аяқтай аласыз және сіздің біліміңізден үлкен келісімді алып тастай аласыз, бірақ мен сізден жиі ыстық орынға салып, тапсырмаларды орындауды сұрамаймын. Мен сенің профессорым емеспін, сен мені жеке жетістікке жетелейтін мансапқа сендіргісі келетін досым сияқты ойлай аласың. Мен сіздерді сәттілік сатпаймын, ол да өз уақытыңызбен сатып алуыңыз керек. Кодекске оқуды үйренудің тік қисық сызығы бар және ешқашан оңай емес, немесе тіпті болуы керек. Сізге мүмкіндігінше көп жұмыс істеу керек, мүмкін, мүмкін және сәтсіздікке ұшырауыңыз керек және сіз өзіңіз үйреніп, оны өзіңіз үйреніп алу үшін де қайталап көріңіз. Бұл кодтың өзіндік сипатында. Кодты бағдарламалаушы қателер туралы хабарламаларды беруге арналған компилятор басқарады және олар сізге қатені іздеу жүйесіне және басқа адамдардың мысалдарын оқып шығыңыз. Айта кету керек, сізге өте бай, ақылды, сәтті, сәтті немесе тіпті егжей-тегжейлі бағдарлау немесе бағдарлама құру үшін ұйымдастырылған болуы керек емес. Компьютер сіз үшін бұл ұйымға қамқорлық жасайды. Сіз тек сынақ пен қателіктерден табандылық танытуыңыз керек, назар аударуыңыз керек және сіз жасаған нәрселеріңізде көп жұмыс істеуі керек, және сіз өзіңіз жасаған нәрселеріңіз үшін өте жақсы мансапқа ие боласыз.

Мен кіммін: Соңғы бөлімде оқу туралы көбірек және осы кітаптың жолдары туралы көбірек мәлімет беретінін түсінемін. Мен кіммін? Бұл күрделі сұрақ. Мен өзім туралы түсініксізмін, өйткені мен медициналық жағдайдан зардап шегемін, өйткені мен өзімді таныстыруға келген кезде қиыншылықтарды ұсына алсам, бұл кітапты тіпті кодтап, жаза немесе жаза алады. Қысқаша айтқанда, егер сіз осы кітапты оқып жатсаңыз, сіз оны үйге жеткізіп, пайдалы деп ойладыңыз, себебі сіз оны пайдалы деп ойладыңыз ба, әлде сіз осы уақытқа дейін оқыған болсаңыз да, сіз өзіңіз үшін ойлағандай, сіз өзіңіз жасаған барлық адамдармын. Мен өзім, бағдарламалық жасақтама жасаушы және студентпін, және мен осы кітапты басқа студенттерге жазып отырмын және мен басқа студенттерге жазып отырмын, олар өз өмірлерін жеңілдеткісі келеді, олар өз өмірлерін жеңілдетеді, олар өз өмірлерін жеңілдетеді, олар өз өмірлерін жеңілдетуге мүмкіндік береді, олар бизнестің қатарына кіре алмайтын, бұл бизнес желісіне жете алмайды. Негізінен, мен осылай істеймін: өзіме және басқа адамдарға жетістікке жету үшін қолданбаларды жасаймын. Мен автормын, бірақ бұл менің алғашқы жарияланымым, бірақ мен портфолиоымды пайдалы құжатқа орналастыру үшін аяқтағым келетіні туралы алғашқы жарияланымым, ал мен де суретшімін. Мен мұны сізге мойындаймын, мен біртүрлі адаммын. Мен кемелді емеспін, мен өзімнің заңмен бірге болдым, тіпті мені колледждер мен университеттерден кетуге және одан да көп жетістікке жету үшін өзіме атау беру үшін мені тастап, кетіп қалдым. Мен туылған әйелмін, мен макияж киемін, өзім суретке түсіремін, өзімді суретке түсіремін, көйлек киемін, басқа әйелдер киімдерін киемін, мен өзімді табиғат ретінде сезінемін. Бұрын менде басқа адамдармен кездесетін басқа адамдармен де, WebApps-пен күресуге, мен бұл кітапты тезірек ала алмағаным үшін кешірім сұраймын. Сіз менікі сияқты және менікі сияқты жұмыс істейтін кодты оқып, жазғыңыз келеді, өйткені егер сіз осы кітапты сатып алғыңыз келсе, өйткені егер сіз осы кітапты сатып алудың орнына, егер сіз өзіңіз үшін ақша табудың орнына, сіз өзіңіз үшін ақша табу үшін өзіңіз үшін сәтті болуыңыз керек ресурстарыңыз бар. Менде отбасылық, денсаулық жағдайлары, дәрігерлер, бұқаралық ақпарат құралдары, бұқаралық ақпарат құралдары, бұқаралық ақпарат құралдары, заңдар мен заңдар, және менің заңнамаларым, және менің заңнамаларым бөлінген және ашуланған әлемдегі феминизм мен әйел табиғатқа ие болды. Алайда, бұл кітап дегеніміз - менің балам, менің балам, менің портфолио және менің өміршеңдігім, сондықтан мен сізден үйреніп, менімен танысқан кезде мұқият қарағаныңыз үшін бағалаймын. Өтінемін, мен кемелді емеспін, бұл кітапта қателер, түзетулер және жаңа басылымдар болады, және сіз өзіңіздің логикалық миыңызбен сіздермен сәтті тәжірибе жинауыңыз үшін ойлануыңыз керек. Сондай-ақ, мен сіз үшін де жақсы дегенімді түсінемін, сіз жазған кезде қиындықтарға тап болсаңыз. Осындай ойланыңыз: сіз кез-келген нәрсені жасау үшін, сіз кез-келген нәрсені жасау үшін, сіз кез-келген ақпаратты, сіз кездесетін барлық ақпаратты сақтай аласыз, оны тексеріп, оны түсініп, оны түсінесіз, сіз оны жұтып, тіпті жариялайсыз. Мен саған айтамын, өйткені мен бірдей қиындықтарға тап боламын. Бұл кітапты өз тәуекеліңізбен пайдаланыңыз, сізден қауіпсіз күйде жұмыс жасаңыз, сіз өзіңіз үшін жұмыс істемей, мен сізге осы мәтінді құрамын, сондықтан мен сізге осы мәтінді алып келмеймін және неге мен сізді ренжітпей аламын, сондықтан мен өзімде қираған, жыртып, жыртылмай, бізде жұмыс істеп, біз жұмыс істейтін желінің параллистік кең ауқымы арқасында жаһандық деңгейде жасаймын. ғаламтор. Сіз менің кім екенімді бірнеше сөзбен танысыңыз, бірақ мен сіздерді оқуға шақыратын шығарсыз, бірақ сіз мені білуге ​​шақырамын, сіз менімен танысып, өз жобаңызды аяқтау үшін өз жобаңызды оқып, түсінесіз. Осы кітаппен үй тапсырмасы болмайды, өйткені сіздің профессорларыңыз немесе мұғалімдер сізге кеңес бермейді, бірақ сіз өзіңіз оқыған кезде өзіңіз, сонымен қатар өзіңіз оқыған кезде өзіңіз, сондай-ақ сіз білгендеріңізді қалай қолдануға болатындығын көрсетеді. Менің капстонама жобам осы кітапта оқылатындығының негізі болып табылады, өйткені мен өзімнің алдыңғы жобаларымнан, мен қолмен жазып, көптеген идеялар мен кеңестер мен танымал қосымшаны айналып, өзім танымал қосымшаны айналып, өзіңіз, Интернетте де, Интернетте де, жаңалықтармен таныса аласыз.

Бұл кітап не? Бұл кітап, мысалы, оқу құралы. Кодекс, түзету кодтары және түзету қателері туралы ақпарат, кодты пайдаланып, кодты орналастырыңыз, кодты орналастырыңыз, өзімнің кодты қолданыңыз, сондықтан сіз бұл маңызды, сондықтан сіз өзіңізді, бағдарламаңызды және компанияның суретін қалай сезінесіз, сонымен қатар сіз орнатқан бағдарламалық жасақтама Абсолютті ең жақсы жарық, сіздің соңғы пайдаланушыларыңызға, сіздің веб-сайтыңыздың келушілеріне мүмкіндігінше тартымды болады. Бұл кітапта мен Интернеттегі бағдарлама, сондай-ақ қауіпсіздік, сондай-ақ қауіпсіздік түрімен бірге бағдарламалық жасақтаманың мысалдарын көрсетемін. Біз Unix Shell көмегімен базалық жобаны құру арқылы біз оқу тәжірибесін бастаймыз, резервтік және сценарийлік мүмкіндіктері бар. Содан кейін біз блогтың негізгі веб-сайтын қарастырып, блогымызды қарап шығамыз, сонымен қатар, фото және бейне мүмкіндіктері бар, сонымен қатар, осы мүмкіндіктерді ақысыз бағдарламалық жасақтаманы пайдаланып, қауіпсіз шешімдерді пайдалану және қосылатын аутентификация модулін (PAM) пайдаланып пайдаланыңыз. Содан кейін біз файлдарды өңдеу және өңдеу, бейнені редакциялау, дауыстық қайырымдылық, штрих-кодты қарап шығу және басқа ұғымдар арасында оптикалық тануды қарастырамыз. Жол бойында біз бағдарламалық жасақтаманы пайдалы және қауіпсіз, ақысыз және ақылы нұсқалармен қамтамасыз етуге көмектесетін API-ді қарастырамыз. Жол бойында біз баррелі және қайталанулар, мұнараны және драйнерлік дизайнды, мұнараны және дроналауды, сондай-ақ өз бағдарламалық жасақтамамызды қорғау және өзін-өзі қорғау және қайта танысу үшін бағдарламалық жасақтамамен біріктіретін физикалық қауіпсіздік пен содырлы құралдарды зерттейміз. Біз ойындар, 2D және 3D-ді көрсету жолымен үзіліс жасаймыз және жүйеге арналған жабдықпен, егер силикон резюсінде силикон резеңкедегі негізгі өлшемді бағдарламалық қамтамасыздандырудың мысалында және электронды тербелісі мысалдарымен жұмыс жасаймыз. Жол бойында біз бағдарламалық жасақтаманы жақсарту үшін қол жетімді машиналарды оқытудың шешімдерін де қолданамыз. Сондай-ақ, біз процесті жеңілдету және қорғау үшін Интернетте қол жетімді қор құралдарын қолданамыз. Бұл кітап веб-қосымшаны құрып, оны компьютердің және ендірілген механикалық жүйелердің кәсіби желісімен біріктіру және жалпы білім беретін және алдыңғы тәжірибесі жоқ бағдарламалық жасақтама және ендірілген аппараттық құралға нұсқаулық.

Бұл кітап деген не? Егер сіз шынымен веб-сайт алғыңыз келсе, сіз жай ғана қарапайым дүкенді орнатып, қажет нәрсені сата аласыз, блогты орналастыра аласыз, фотосуреттерді немесе бейнелерді орналастыра аласыз, немесе ешқашан кодтың бір жолын жазасыз. Бұл кітап бұл емес. Бұл кітап сізге кез-келген бағдарламалық жасақтаманы қолданатын бағдарламалық жасақтаманы қалай құру керектігін үйретеді, себебі ол кез-келген бағдарламалық жасақтаманы орналастырады, өйткені ол әлі де прототиптермен жұмыс істейді, өйткені ол әлі де прототиптермен жұмыс істеуі мүмкін, ал артқа қарай жұмыс істемеуі мүмкін, ал артқа, жинақталған компаниялар ештеңе істемейтін адамдарға ақша табу үшін құрылған. Егер сіз осы кітапты мұқият ұстансаңыз, сіз кодты, зерттеу кодын жазғыңыз келеді, өз бағдарламаларыңызды жасаңыз, сонда сіз өзіңізден ақша табасыз. Мен осы кітаптан, тіпті ерте сатысында, өйткені оның құрамында адамдар қажет және оқығысы келетін ақпарат бар, және олар менің қолданбаларымды сатып алған немесе пайдаланған кезде сатып алуда. Бұл кітап сіз үшін қолданба құрбайды, бірақ сіз өзіңіздің барлық құралдарыңызбен және веб-сайтқа арналған бағдарламалық жасақтамамен, сіз және сіздің қол жетімділігіңізбен, сіз және сіздің қолдауыңызбен, сіз және Интернеттегі бағдарламалық жасақтаманы жеңілдетесіз, олар сізге және Интернеттегі және Интернеттегі қолдауды көрсетеді.

Сіз не үйренесіз: Бұл кітап сізге бағдарламалық жасақтаманы, шын мәнінде функционалды, пайдалы бағдарламалық жасақтаманы, медиа жазбаларын, медиа жазу, қауіпсіздік мүмкіндіктерін, бейне және фотосуреттерді сканерлеу, бейне және фотосуреттер, Bluetooth және Conform (NFC) байланыстыру және сату әдісі сізге қалай көмектеседі? Бұл кітап сіздерге желілік хабарламалармен, автоматтандырылған, автоматтандырылған желмен айналысу үшін осы кітап кодын қалай құруға, стильді желілік компьютерді қалай құруға болатынын үйретеді. Бағдарламалық жасақтама, id сканерлеу, кескін және бейне модерациясы, бағдарламалық қамтамасыздандыру, төлемді өңдеу, криптокөрмендік сауда-саттық, асинхронды тапсырмалар және басқалар. Сіз өзіңіздің Bluetooth құрылғыларыңызды, зарядтағыштар, зарядтағыштар, микроконтроллерлер, схемалар, қозғалмақтар, электр қозғалтқыштары және датчиктер, дәнекерлер, сымдар және 3D препараттарын, сондай-ақ кастинг материалдарын қолдана отырып, қалай құруға болатындығын білесіз. Мен 3D дизайнерлік принциптерін көрсетемін, бұйымдар өндірісіне және құралды және өлім жасауға және өлімге қол жеткіземін, сондықтан сіз біріктірілген батареялары бар, зарядтағыштар, электронды тізбектер және функционалды нәтижелермен бірге өндіре аласыз. және оларды Bluetooth және Web арқылы желіңіз. Атап айтқанда, біз екі кейс-стади, дірілдейтін массажшы және үйде қолдануға болатын, ол графикалық интерфейс немесе пәрмен жолының утилитасы ретінде бағдарламаланған, ол графикалық интерфейс немесе пәрмен жолының утилитасы ретінде бағдарламаланады және жылдам нәтиже алу үшін Интернетте біріктірілуі мүмкін. Сіз веб-сайтты жерден қалай құруға және орналастыруды үйренесіз, алдын-ала тәжірибесі жоқ, оны функционалды, қауіпсіз, әдемі, пайдалы және ең бастысы. Сайтты қауіпсіз және практикалық және аудио веб-сайттарыңызды құрайтын, музыканы және дыбысты жасау, музыка жасау, музыка жасау, модулдеуді және басқа веб-сайттарды құруға болатынын және басқа веб-сайттарды құруға болатынын және басқа веб-сайттарды модуляциялауды үйренесіз. Бұл кітапта көптеген үш компонент болып табылатын негізгі үш компонент болып табылатын медиа, қауіпсіздік және машиналық оқытуға бағытталған, бұл сізге дұрыс пайдаланушыларды тарту арқылы пайдалы бағдарламалық жасақтаманы құруға және дұрыс, практикалық, қолмен, қолдармен және араласумен, сонымен қатар, автоматты, алынды және берік болып табылады. Бұл кітап UNIX, арнайы Debsian (Ubuntu), BASH Shell, Python, Python, CSS, CSS, CSS, JavaScript және Python үшін бірқатар пайдалы бағдарламалық қамтамасыз ету, сонымен қатар сұраныстар, сондай-ақ GIT және FFMPEG пайдалы. Сондай-ақ, мен сізге Cryptocurrency сауда-саттықты қалай үйренемін және Cryptocurrency немесе төлемдер үшін төлемдер үшін төлемдер, егер сіз өзіңіздің кірістеріңізден түскен кезде, тіпті егер сіз өзіңіздің кірістеріңізді төлеген болсаңыз да, кірістеріңіздің үлесін төлей аламын. Мен сізге веб-сайтыңыздан жарнама арқылы қалай ақша табуды үйретемін, сонымен қатар сіздің бағдарламаңызды іздеу және оны тез жасау және оны тез жасау үшін, клиенттердің сізді іздейтіні және мүмкіндігінше көп іздеулерде рейтингке бөленіңіз. Мен сізге бағдарламалық жасақтаманы сатуды, жарнаманы қалай сатуға болатынын, өз қызметтеріңізді іздейтіндігіңізді, өз қызметтеріңізді сұраймын және өзіңіз бұрыннан бар даңғылдар арқылы өзіңіз үшін асығыңыз, арзан және жақсы жұмыс істейді. Мен сізге жұмыс істейтін және деректерді қалай сақтау керектігін және деректерді қалай сақтауға болатынын және сіздің пайдаланушыларыңызды қалай жасайтынын және қалай сақтау керек, бұл сіздің пайдаланушыларыңызды өз пайдаланушыларыңызды өз пайдаланушыларыңызды тек сіздің веб-сайтыңызға қайта-қайта кіргізу керек. Бұл кітаптан фотосуреттерден фотосуреттерден бастап, аудиоға бейнероликтермен (сіздің клиенттеріңіз), сіз өзіңіздің және тек сізді құрайтын қолданбаны, сіздің бағдарламалық жасақтама және сіздің компанияңыздың ең жақсы жолымен жақсы әсер етудің практикалық тұрғыдан бас тартудың және таратудың практикасына назар аударады. Сіз менден бірнеше кеңестер мен трюктарды, макияж мен фото, модельдеу және әрекет ету сияқты бірнеше кеңестер мен трюктер, модельдеу және әрекет ету, өзіңіз үшін қол жетімді барлық құралдарды қолдана отырып, сіз үшін барлық құралдарды қолдана отырып, қажет болған жағдайда, қажет болғанша, қажет болғанша, қажет болғанша, қажет емес. Бұл кітап «практикалық» деп аталадыМысал бойынша веб-негізделуге және қауіпсіздікті бағалаумен, дәлірек, бұл мәтіннің оқу компоненті, сонымен қатар, бұл мәтінді оқытудың негізгі бөлігі, сонымен қатар, сіз компьютерге арналған практикалық мақсаттарға ие, мен сізге компьютердің көру қабілетін, бетті тану, кескінді тану, кескін және бейне модерациясы, кескінді жақсарту, ажыратымдылықты жақсарту, кескіннің тіркесі және суреттерден алынған басқа тапсырмалар, мысалы, кескіннің түпнұсқалық, препарат және бағдарламалық қамтамасыздандыру ретінде, өйткені ол басқа, басылған суреттерге сәйкес келеді. Сіздің бетіңіз. Серверлік компьютерді сізге пайдаланушыға қауіпсіз етуі мүмкін, әдетте, сізден логин мен жаңа IP мекен-жайы үшін, мүмкін, бұл сіз үшін оңай, күрделі және қуатты бағдарламалық жасақтама, мүмкін, бұл сіздің бағдарламалық жасақтамаңызға арналған бағдарламалық жасақтамаңызға, бағдарламалық жасақтаманың немесе мәтіндік хабарлама қызметіне ұқсас, немесе кез-келген адамның қауіпсіздігін немесе кез келген адамның (кез келген сайтты) жасау жеткіліксіз. Мүмкіндігінше сенімді бағдарламалық жасақтаманы құрған кез-келген адам бұл нені білдіреді. Бағдарламалық жасақтама қауіпті, өйткені біз оған қол жеткізу үшін қолданатын құрылғылар мен есептік жазбалар әрқашан біздің қолымызда бола бермейді, олар кез-келген адамның қолында, олар бағдарламалық жасақтама үшін науқасқа ие бола алады, сондықтан бағдарламалық жасақтамаға қауіп төндіруі мүмкін. Бұл осы кітаптың басты бағыты. Желілік компьютер әдепкі бойынша, SSH немесе SCEL SHULL SHALL батырмасы бар, әйтпесе Web Shell батырмасы бар және басқаша веб-сервермен қамтамасыз етіледі, өйткені веб-сервер ашық қол жеткізуді, сонымен қатар серверде жұмыс істейтін көркемдік құралдардың күйі. Веб-сервер пайдаланушының веб-шолғышына қол жеткізе алады, бұл пайдаланушының ең қуатты бөлігі болып табылады, себебі бұл пайдаланушы желілік бағдарламалық жасақтамаға қол жеткізе алатын орын. Бұл құралдар мәтін, сіз көретін веб-беттерді, аудио және видеоды тіркей алады, сонымен қатар Bluetooth радио құрылғыларын оқи және жаза алады, сонымен қатар далалық радионаттарды оқи және жаза алады және WELDERS, фробс, жапсырмалар, сақиналар және тіпті веб-сайтқа байланған веб-сервермен расталуы мүмкін. Барлық құралдарды өз қолыңызбен пайдаланыңыз, сіз осы кітаппен сіз өзіңізді қауіпсіз веб-сайт құру үшін білесіз, ал сіз үшін жұмыс істейтін қауіпсіз желілік компьютерлік жүйе сіздің сауда-саттыққа және сезінесіз

Қайда бастау керек: Сізге осы кітапты немесе кез-келген бөлімнен өткеннен кейін, сізге қажет, әсіресе, егер сіз жоғарыда аталған құралдармен немесе кез-келген жоғарыда сипатталған құралдармен, мен осы кітапта егжей-тегжейлі сипаттайтын болсаңыз, менде құжаттаманы пайдалану және олардың практикалық мысалдары туралы ойлана бастаймын. Егер сізде кодты жазу бойынша тәжірибе болмаса, мен осы кітаптың барлығын оқуға кеңес беремін, әсіресе сіз осы кітаптың сізге сәйкес келетініне көз жеткізіңіз. Егер бұл кітап сіз үшін дұрыс болмаса, оны веб-дамытыңыз немесе туысқаны туралы ойланыңыз, олар өздерін дамыту туралы білуге ​​қызығушылық танытуы мүмкін, оларды өзіңізден-ақ, мен сізден бұрын-соңды мұғалім ретінде немесе басқа мұғалімдер жасағым келген олқылықтарды толтыруды ойластырыңыз. Қаласаңыз, осы кітаптың әр бөлігі пайдалы қолданбаны құрғыңыз келсе және ең жақсы қолданбалар соңғы пайдаланушымен салынғанын ескеріңіз. Енді сіз мені білесіз, сіз бұл кітапты білесіз, және сіз бастауға дайынсыз. Бастау үшін, компьютерді алыңыз (тіпті ең арзан ноутбук, тіпті ең арзан ноутбук, Amazon немесе ескі жұмыс үстелі жұмыс істейді және оны сіз үшін жұмыс істейтін етіп орнатыңыз.

Бұл кітапты қалай оқуға болады: Бөлектелген мәтін, мәтін пәрмен жолында жататынын білдіреді, онда сіз басқаратын кодты жазасыз. Пәрмен жолының шақыруы - бұл қатты пернетақтаға бағытталған және жұмыс процесін тездетіп, сізге жеңілдететін және сізге жеңілдететіні туралы аз уақыт қажет.

Бастау: Кетейік. Біз жергілікті машинада құрылыс кодынан бастаймыз және Интернетке қосылған веб-сайтты құрмай бастаймыз. Бұл алдын-ала бастауға, шығынға түспейді және сізге оңай. Амалдық жүйеге байланысты, Баш қабығына ену сәл өзгеше болады. Mac OS үшін мен виртуалды машинаны осы уақытта орнатуды ұсынамын, өйткені сіз виртуалды машинамен үйлесімділікті аласыз. VirtualBox және паралеллдер сияқты түрлі провайдерлер сіз үшін виртуалды машинаны іске асыра алады, дегенмен, егер сіз тез, жетілдірілген тәжірибені құру үшін ұсынылған жергілікті ортақ пайдаланған болсаңыз, ubuntu-ді тікелей машинада орнатуға болады. Егер сіз Linux немесе Windows қолдансаңыз, мен ұсынатын Linux немесе Windows қолдансаңыз, жобаны жасау өте оңай болуы керек. Терминалды ашып, өлшемді өзіңіз қалағандай реттеңіз және 2-қадамнан бастаңыз. Егер сіз Windows жүйесін қолдансаңыз, 1-қадамды орындаңыз.

1-қадам: - тек Windows пайдаланушылары Windows жүйесінде әкімші және түрі ретінде пәрмен жолын ашыңыз WSL-рәсім

2-қадам: - Егер сіз Windows пайдаланбасаңыз, осы жерге жалғастырыңыз немесе 1-қадамды өткізіп жіберіңіз Ашық терминалда (UBUNTU Windows жүйесінде, Mac немесе Linux терминалы немесе Linux терминалы немесе ұқсас атау), осыған ұқсас атаумен байланысты). Біз мұны Mkdir командасымен жасаймыз, ол каталог жасайды. Егер сіз өз жобаңызды сақтау үшін каталогты жасау қажет болса, ұсынылады, CD пәрменін каталогқа және және

CD / жол / Каталог - жол - жол - бұл сіздің тағайындалған каталогыңыздың алдындағы қалталар (файлдар), әдепкі жол - ~ немесе / үй / пайдаланушы аты (пайдаланушы аты - пайдаланушы аты). Әдепкі каталогқа ауысу үшін CD немесе CD деп теріңіз mkdir мысалы - каталогтың атауымен «мысал» ауыстырыңыз

Енді сіздің жобаңыз үшін жұмыс каталогы бар. Егер сіз осы каталогты сақтағандай, сіз басқа машинаны ауыстыруыңыз керек болғандықтан, сіз жазған кодты орналастырғаныңыз үшін өте маңызды болғандықтан, сіз жазған кодты орналастырыңыз, сондықтан ол веб-сайтқа дайын болады, біз келесі бірнеше қадамдарда каталогтың сақтық көшірмесін жасаймыз. Бірақ сценарий салу біршама код алады, ал кодты мүмкіндігінше пайдалы болу керек. Алдымен сценарийлер салу үшін сценарий салейік. Сценарийді құру және оны орындаудан бастайық. Біз Sudo, Chmod және осыған қол тигізіп, «ASCRIPT» сценарийіне қоңырау шаламыз.

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

Енді біз сценарий жасадық, оны орындалды және оны өңдеуге дайынбыз. NANO - мәтіндік редактор, ол сіз мәтінді басусыз өңдеуге мүмкіндік береді, ол графикалық пайдаланушы интерфейсін қолданудан әлдеқайда оңай. Нано бар файлды өңдеу үшін NANO пайдаланыңыз, содан кейін файлға апарыңыз. Сценарий жасайтын сценарий жасау үшін бұл біздің сценарийімізді бірінші кезекте жасауға өте ұқсас. Біз жоғарыдағыдай кодты, сценарийдің атын «ASCRIPT», «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 түймесін басыңыз, содан кейін біз файлды сақтап, қайтаруды білдіру үшін Y түймесін басыңыз. Енді осы үш пәрменді терудің орнына, сценарийді өңдеу үшін Sudo Ascript-ті сценарийді қайта өңдеу үшін тере аламыз. Бұл жұмыс! Кез-келген жаңа сценарийді Shell-ге шақыру арқылы оңай пайдалануға болады. Қазір жұмысымызды сақтайық: Жаңа сценарийді сақтау үшін сақтық көшірме сценарийін жазайық, содан кейін оны біздің жобалау каталогында сақтық көшірмесін жасаңыз, сонымен қатар резервтік сценарийдің сақтық көшірмесін жасаңыз.

sudo ascript backup

Енді, Нанода:

sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/

Қайда / жол / каталогы / каталогы - MKDIR жасаған жобаның жолы. Кейінірек біз осыған ұқсас жолдарды циклмен және тізіммен қалай көшіруге болатынын білеміз, ол аз код, бірақ қазір оны қарапайым етіп, бірнеше жолға ие болайық. Осы сценарийді іске қосу және кодтың сақтық көшірмесін жасау үшін, файлды Nano-да басқару + x, y және қайтару арқылы сақтаңыз және төмендегіні снарядқа енгізіңіз

backup

Егер сізге осы кітапты оқып, снарядта пароль сұралса, сізден сұраныс сұралса, пайдаланушы құпия сөзін дұрыс енгізіңіз, сіз пәрменді қайта іске қоспас бұрын үш рет жүресіз. Жоғары және төмен көрсеткілерді RERUN командаларына және өңдеуге пайдалануға болады, егер сіз екі рет іске қосуыңыз керек болса, оны өңдеуіңіз керек. Қарапайым жоғарыдан жоғары және төмен басып, пәрменді таңдау үшін, пәрменді оң жақ, сол жақ көрсеткілермен өңдемес бұрын және пернетақтаны, сондай-ақ пернетақтаны және оны қайтару арқылы іске қоспас бұрын.

Құттықтаймыз! Сіз жұмыс каталогында екі маңызды сценарийді қайтаратын керемет резервтік сценарий жасадыңыз. Жоба үлкенірек болғандықтан, біз оларды кейінірек жылжытуымыз мүмкін, бірақ бұл қазір жұмыс істейді. Бұлтта біз үшін Githe-ді қолданамыз, біз бұл үшін Github-ті қолданамыз (кері байланыс үшін басқа да кеңестер бар. Бағдарламалық жасақтаманы үнемдеудің құралдары, әсіресе, егер біз Code-дің бір сызығы істен шыққан кезде, егер сіз оны автоматты түрде қайтарып алмасаңыз, кодтың сақтық көшірмесін жасамаған кезде, сіз оны автоматты түрде қайтарып алмаған кезде, сіз оны сақтамасаңыз, оны сақтайды.

Егер сіз Ubuntu виртуалды машинасын осы кезде қолданбасаңыз, мен осы кезде ubuntu виртуалды машинасын пайдаланып, жұмысыңызды жеңілдететіндіктен, жұмыс веб-сайттарын салу және компьютердегі терең оқыту әрекеттерін алдын-ала орнату кезінде өз өміріңізді жеңілдетеді. Біз кодты жақын арада веб-серверге жылжытамыз, бірақ біз фишингке төзімді және осы үшін бірқатар Linux пакеттерін пайдаланып, кем дегенде бірнеше қауіпсіздік қабаттарының бар екеніне көз жеткізгіміз келеді. Егер сіз әлі де Mac OS пайдаланғыңыз келсе, сізге онлайн режимінде қажетті пакеттерді іздеуге және орнатуға шақырамыз, бірақ әр бума үшін балама болмауы мүмкін, бірақ бұл кітап немесе сериялардың әр қаптамасы үшін балама болмайды.

SURDO ASCRIPT командасын орындау арқылы сақтық көшірме сценарийімен жұмыс жасау үшін бірнеше команданы қосайық.

# ...

Енді бізге осы жоба үшін бір рет конфигурация жасау керек. Көп ұзамай ол GIT жобасы болады, біз әр түрлі команданы гит репозиторийінен терудің қажеті жоқ, бірақ біз орналастыру сценарийлерін жазған кезде бұған ілінеміз. Бастау үшін, дұрыс каталогта екендігімізге және GIT репозиторийін баптап, SSH кілттерін жасаңыз.

cd /path/to/directory
git init
git branch -m master
ssh-keygen

SSH-KEYGE тергеннен кейін, жаңа кілтті үй қалтасында қоңырау шалу керек .ssh. Ол ID_RSA.Pub деп аталады. Бұл кілтті тауып, оны көшіріп алайық. Оны көру үшін,

cd ~
cat .ssh/id_rsa.pub

Соңғы пәрменмен қайтарылған мәтінді көшіріп, SSH пернесін өз шотыңызға қосар алдында, git провайдерімен (өте жақсы GitHub) тіркеліңіз. Есептік жазба болғаннан кейін, SSH пернесін SSH және GPG пернелеріне қосар алдында, мәзірге кіру астында SSH және GPG пернелеріне қосар алдында параметрлерді енгізіңіз. SSH кілтін қосу және оны қою арқылы қосып, оны қою арқылы қосыңыз және оған жаңа репозиторий жасау үшін Github-қа оралмас бұрын, оны бере беріңіз. Бұл басқа GIT провайдерлеріне ұқсас, сіз олардың құжаттарын оқуыңыз керек. Жаңа репозиторий конфигурациясында репозиторийге сипаттамалық атау беріңіз және оны жариялағыңыз келетін-келмейтінін шешіңіз және әлі де файлдарды қосу үшін конфигурацияламаңыз. Репозиторий жасалғаннан кейін клонды SSH URL мекен-жайымен көшіріп, келесі пәрменге қойыңыз.

git remote add git://… (your remote URL)

Енді сіз репозиторийге CD-мен қайта оралуға болады, сіз бұған таныс боласыз. Сақтық көшірме сценарийін қазір сақтық көшірмені қолданып көріңіз

Great! Now we can really get coding. Let's install Django now that we have a good grasp on bash and Git. Django will let us automatically back up our software, bash can do this too but Django should have a simpler safer implementation (it can be disabled and configured more easily).

Ubuntu-да бағдарламалық жасақтаманы орнату үшін, біз Sudo APT-GET командасын қолданамыз. Біріншіден, бізде бұрыннан бар бағдарламалық жасақтаманы жаңартып, жаңартыңыз. Мұны Sudo Apt-get жаңартуымен және Sudo Apt-get жаңартуымен жасауға болады. Әрі қарай, біздің кодымыз бен виртуалды ортамызды, біздің кодтың үйін келесі пәрменмен орнатайық: Sudo apt-tak-reg ey-python3 python3-venv

Ubuntu данасында бағдарламалық жасақтаманы орнату тұрғысынан Django-мен бірге жүру керек. Windows және Linux үшін бұл қарапайым болуы керек, бірақ Mac үшін сіз Virtualbox немесе Paralells жұмыс үстелі сияқты еркін немесе ақылы виртуалды ортасын пайдаланып, виртуалды немесе Linux және Linux-ті орнатқыңыз келуі мүмкін. Ubuntu бұл жағдайда өте маңызды, өйткені ол бағдарламалық жасақтама, өйткені бұл веб-сайттар іске қосылады және ол оларға барлық жоғарыда аталған бағдарламалық жасақтамамен веб-сайттарды қабылдауға мүмкіндік береді.

Джангоға кірейік.

Біздің каталогта, CD-мен:

python -m venv venv # Код сақталған виртуалды ортаны жасайды
source venv/bin/activate #  Activates the virtual enviroment
django-admin startproject mysite . # Менің қазіргі каталогымнан басталатын жоба қайда.

python manage.py startapp feed

Алғашқы қолданбаны арна деп атайтынын байқайсыз. Қолданбаны сізге ұнайтын нәрсе деп атауға болады, және біз жаңа бағдарламалар жасаймыз, бірақ әр қолданба атауы қолданба кодта сілтеме жасалған сайын дәйекті болуы керек. Жаңа бағдарламаны қосу үшін, біз әрқашан Параметрлерді әрдайым өңдей аламыз, басқа каталогта, содан кейін «Бұрын» бағдарламасында. NANO көмегімен,

nano app/settings.py

Параметрлерде орнатылған_APPS тауып, [] 3 жолға бөліңіз. Бос орталықта төрт кеңістікті қолдана отырып, «берілім» немесе қосымшаның атын қосыңыз. Параметрлердің бұл бөлімі мыналарға ұқсауы керек:

INSTALLED_APPS = [
    'feed',
]

Біз ұмытып кетпес бұрын, Дьянго жұмыс істейтінін тексерейік. Python Python.py.py.py.pr.prerver 0.0.0.0.0: 8000 пәрменін қолдана отырып, біз Серверді іске қосып, содан кейін Http: // localhost: 8000 (ол жұмыс істейді!) Кодты қараңыз (ол жұмыс істейді!) CONTER CONTER C, басқа пәрменмен бірдей.

Енді бірнеше Python кодын жазайық. Джангоның үш негізгі компоненті бар, олардың барлығы кодпен толығымен орындалады. Компоненттер модель, қарау және шаблон деп аталады және олардың әрқайсысы пайдаланушыға жеткізілгенге дейін сәйкесінше жоғары және төменгі деңгейде.

Модель - бұл дерекқордағы ақпаратты іздеу, сұрыптау және көрсету үшін сақтайтын код.

The view decides how the model is rendered, manipulated, and modified, almost every view will use a model directly.

Шаблон - бұл бірнеше қосымша қоңыраулар мен ысқырықтар шаблон тілі бар HTML коды. Шаблон көріністен көрініспен көрсетіледі, онда ол пирон коды мен контексте, мысалы, модельдер мен ақпарат (Usuall Strings және бүтін сандар).

Джангода басқа компоненттер бар, бірақ олармен шектелмейді:

Бағдарламаны біз талқылағандай реттейтін параметрлер.

Пайдаланушы веб-қосымшаның белгілі бір бөліктеріне қол жеткізуді ұстанатын үлгілері болып табылатын URL мекенжайлары.

Серверге жіберілетін ақпараттың қалай өңделетінін және дерекқорға, сондай-ақ пайдаланушыға көрсетілетін нысандар. Бұл сервер жағындағы ақпаратты өңдеудің негізі болып табылады және компьютер дүкендерінде кез-келген ақпараттың түрін, мүмкін емес жолдарды, сандарды және шынайы / жалған / жалған логикалық (әдетте құсбелгілер) қабылдай алады.

HTML коды және шаблондар, олар Python және HTML-дің тілдері және Python ақпаратының арасындағы шаблондар, егер Python ақпаратын WebN-ге кіре алатын және Python кодын WEB-ге қол жетімді ете алатын және серверге жақын болудың қажеті жоқ қашықтағы құрылғыға пайдалы ете алатын HTML коды ретінде бере аласыз.

Сервер қызмет ететін немесе сыртқы орналастырылған немесе өңделмес бұрын, басқа серверге (шелек) орналастырылған және орналастырылған медиа файлдары (шелек) хостингке жіберіледі.

Әр көріністің мәтінмәнін өңдейтін және қосымша контекст қосу үшін қолданылатын мәтінмәндік процессорлар қолданылады.

Пайдаланушының немесе сұраныстың көрінісі көрсетілгенге дейін белгілі бір талаптарды орындайтын тесттер.

Тұтынушылар, бұл WebSockets компаниясы қалай жұмыс істейтінін және қарым-қатынасқа қалай жауап беретінін анықтайды.

SEND, ол модельдерді тіркеу үшін пайдаланылады, сондықтан оларды DJango Admin Page ішінде егжей-тегжейлі басқаруға болады, онда дерекқорды графикалық интерфейс арқылы енгізуге болады.

Асинхронды тапсырмаларды анықтайтын балдыркөк Django кодының бөліктері бірден келесі тапсырманы немесе код жолына дейін жұмыс істемеуі мүмкін.

Джанго басқа да көптеген компоненттерге ие болуы мүмкін, оларды біз осы жерде егжей-тегжейлі талқылаймыз. Дджанго-гендерден көп мүмкіндіктер бар, олар тез, жетілдірілген байланыс арналары, асинхронды тапсырмалар, асинхронды тапсырмалар, әсіресе джангоны, әсіресе, кодтардың көп бөлігі орындалатынын және көптеген басқа бағдарламалық жасақтаманың көптеген басқа бағдарламаларымен айналысудың көптеген тәсілдері бар. Функциялар кілт болып табылады, өйткені олар әдетте белгілі бір URL үлгісіне немесе сервердің бөліміне қатысты барлық кодты жариялайды.

Алдымен, көріну функцияларын зерттейік. Функциялар Көріністе қолданылатын кодты белгілейтін импорттан басталады және тұрақты функция анықтамалары немесе сыныптарын пайдаланып анықталады. Қарапайым көріністер функцияның DEF функциясымен анықталады және HTTPrespsonse негізгі шаблонмен қайтарылады. «Сәлем әлем» мәтінін қайтару үшін негізгі көріністі анықтаудан бастайық. Есіңізде болсын, мәлімдемеден кейін, егер сіз DEF, егер болса, DEF, up, және т.с.с., егер сіз өзіңіздің функцияңызға қолданғыңыз келетін алдыңғы анықтамалардың әрқайсысы үшін 4 кеңістікті қосуыңыз керек. Жақында біз олардың әрқайсысының нені білдіреді.

Біздің сайттың каталогынан «Nano көмегімен арна / көріністерді өңдеңіз және файлдың соңына келесі жолдарды қосыңыз.

from django.http import HttpResponse

def hello(request):
    return HttpResponse('hello world')

DJango-дың HTTPResponse мәтіндік жолмен жауап береді, оның ашылуы мен жабылуымен байланысты. Функцияға немесе сыныпқа ақпарат берген сайын, сұраныс немесе жол сияқты, сіз жақшаны (, ашу және жабу) пайдалануыңыз керек.

Бұл біздің көзқарасымызды әлі көруіміз керек емес. Әрине, біз көрініс дәл осы жерде айтқан жоқпыз, бізге әлі күнге дейін көрініс көрсету керек жолды анықтау қажет. Бағдарламада / urls.py-де негізгі жолды анықтай отырып, бастайық және біз жолдан кейін топтық топтарға кіреміз.

App / URLS.PY-де біз жасаған көріністі импорттағаннан кейін импорттау мәлімдемесінен кейін жол қосыңыз.

from feed import views as feed_views

Енді, көру үлгісін анықтайық. Көрініс үлгілерінде көрініс бар, ол серверде көрініс бар жерде, көрініс көрсетілетін жердегідей, көрініс компоненті және көрініс компоненті, әсіресе, шаблонмен жұмыс істеу үшін, әсіресе, егер ол басқа көзқарасқа арналған немесе логикалық атауды алу үшін оны өзгертуге болады. Бұл әрекетті жасау және икемді болудың мағынасы бар, өйткені сіздің кодтаңыз құнды және тиімді болу үшін икемділік пен импровизацияны қажет ететін өзгермелі орта болады. Міне, сіздің көзқарасыңыз қандай болады, оны URLPatterns = [App / URLS.PY бөліміне қосуға болады. Көрініс үлгісі жоғарыда сипатталған үш компоненттен анықталған, және жол деп аталатын функция. URL мекен-жайларыңыз тізім болып табылады, сондықтан әрқашан әр элементті үтірмен аяқтаңыз, себебі бұл әрқайсысын бөледі. Әр элемент сонымен қатар жаңа желіге, оған тағы бір рет, оған дейін төрт кеңістікпен, параметрлерде қолданылады. Веб-сервердің түбірлік каталогында жұмыс істейтін көріністі жасау үшін көріністің алғашқы компонентін бос жол функциясымен анықтаймыз. Сіздің URLS.PY енді келесідей болуы керек:

from feed import views as feed_views

urlpatterns = [
    path('', feed_views.hello, name='hello'),
]

python manage.py check

Егер сізде қате туралы хабарламалар болса, сіз өзіңіздің қолданбаңызға енгізілген өзгертулерді мұқият қарап шығыңыз және тұрақты немесе жоқ орын, қосымша таңба, жабық жол, кез-келген теру, кез-келген теру таңбасы немесе басқа кез-келген таңба бар-жоғын білгіңіз келеді. Қате туралы хабарлама арқылы оқу (егер сізде болса), сіз желі нөмірімен бірге жасаған немесе өңделген файлға жолды көре аласыз, сондықтан сол файл мен сызыққа қараңыз және сіз бар нәрсені жөндей аласыз ба? Егер сіз мәселені шешсеңіз, жоғарыдағы пәрменді қайтадан іске қосыңыз. Бағдарламалық жасақтама жұмыс істеуге дайын болған кезде, сіз жұмыс істеп жатқан кезде, сіз «жүйені тексеру» нәтижесін көресіз. Енді сіз баруға дайынсыз. Серверді келесі түрде іске қосыңыз:

python manage.py runserver 0.0.0.0:8000

Енді веб-шолғышты ашып, http: // localhost: 8000 тармағына өтіңіз. Сіз өзіңіздің көрінісіңіздегі HTTPressonse функциясының жақшасы мен тырнақшаларында қайтарылған мәтінді көруіңіз керек. Бұл жай мысал, бірақ егер сіз оны осы уақытқа дейін жасасаңыз, Linux, Bash, Python және Django қалай жұмыс істейтінін түсінесіз. Кейбір мәліметтер базасын модельдеуге тереңдейік және ақпаратты сақтау кезінде Python класының қуатын зерттейік. Содан кейін біз өз сайтымызды толығымен ұсынбас бұрын, HTML және CSS-ке қол жеткізе бастаймыз, біз JavaScript және машинаны пайдалану арқылы икемді және қауіпсіз етіп жасаймыз.

Сабақтар сіздің бағдарламаңыздың тілінде сақталады. NANO көмегімен қолданып, қолданбаны / модельдерді өңдеңіз және жаңа сынып қосыңыз. Сынып сынып анықтамасымен анықталған және ол мұра-бұдан алынған суперкласс жіберіледі, бұл жағдайда models.model. Сыныптың атауы сынып анықтамасынан кейін келеді, ал сыныптың анықтамасынан кейін A: (қос нүкте) келесі сыныпқа байланған атрибуттар мен функциялар анықтамалары төменде көрсетілген. Біздің сыныпқа біз оны алу және оны бірегей етіп сақтау үшін пайдалана алатын идентификатор қажет, сонымен қатар кейбір ақпаратты сақтау үшін мәтіндік өріс қажет. Кейінірек біз Timestamp, файлдар, логикалық заттарды қосуға болады (шынайы немесе жалған анықтамалар), бұл біздің кодқа не істеуге болатындығы туралы шешім қабылдай алады және оны сұрыптауға болады және оны серверге байланыстырады, ал мысалы, серверге кірген пайдаланушыға және басқалар. Төмендегі кодты шығарайық:

from django.db import models # Біздің сыныпты анықтау үшін пайдаланылатын импорт және ол атрибуттар
class Post(models.Model): #  The definition of our class itself
    id = models.AutoField(primary_key=True) # Біздің модельдің идентификаторы, модельге жүгінуді, оны бірегей етіп, оны бірегей етіп сақтайды және ол модельмен жасалған кезде пайдалы болған кезде пайдалы болады.
    text = models.TextField(default='') # Біздің сынып дүкендеріміз, бұл жағдайда, кейбір мәтін, бос жолға сәйкес келеді.

Файлды біз аяқтамас бұрын жабыңыз және сақтаңыз.

Бізде осы сыныпты жаңартқан кезде біз зерттегенде, көптеген басқа өрістер мен опциялар бар, өйткені біз осы сыныпты жаңартқан кезде, бірақ бұл бірнеше мәтінді жариялау үшін қолданбаны құрудың негізгі қажеттілігі. Алайда, бұл модель жалғыз жұмыс істемейді. Бұрын сипатталғандай, бізге осы модель жасау үшін жеке көрініс және жеке URL үлгісі қажет, ал бізге сонымен қатар шаблонмен бірге форма қажет болады. Алдымен форманы зерттейік.

Нысанды анықтау үшін қолданбаны / формаларды өңдеңіз. Nano-мен бірге. Бізге екі импорт, біздің формалар класы, сондай-ақ біз жасаған модель, сондай-ақ біз жасаған модель, модельге ұқсас сыныптың анықтамасы, ал кластағы анықтама, ал модельді анықтайтын мета-класы бар өріс. Нысанның сонымен қатар оны сұрау, модельдегі немесе басқаша ақпарат негізінде орнататын инициализация функциясы болуы мүмкін, бұл туралы біз мұны кейінірек зерттейміз.

Үлгі формалары соншалықты пайдалы, өйткені олар модель жасай алады немесе модельді де өңдей алады, сондықтан біз оларды екеуіне де қолданамыз. Төмендегі формада бірін анықтайық.

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',)

Бұл форма мен модельдің негіздері болып табылады. Бұл модель формасын POST-ті іске қосу немесе өңдеу үшін қолдануға болады, ол бар мәтінді өзгертеді. Біз келесі форманы келесі көрініске біріктіруге қараймыз. Алдымен, біздің кодымыз модельмен жұмыс істеп тұрған кезде, миграцияны жасап, дерекқорды тасымалдайық. Ол үшін келесі пәрмендерді іске қосыңыз:

python manage.py makemigrations
python manage.py migrate

Бұл орындалуға бір минут кетеді, бірақ ол жасағаннан кейін, ол сізге үлгі, ортақ бұйымдардағы немесе бағдарламалық жасақтамадағы басқа жерде қол жеткізуге мүмкіндік береді. Біздің модельді қайдан көре алатынымызды жалғастырайық. Арнаны / көріністерді өңдеңіз және атап өткендей, келесі кодты қосыңыз. # Белгіден кейін сізге ештеңе қосудың қажеті жоқ, бұл код - код туралы ақпаратты көрсету үшін пайдаланылатын пікірлер. Біз модельді көріністерге импорттау және оны көрсету үшін оны концессияға қосудан бастаймыз. Әрі қарай, біз модельге негізделген жаңа нысанды жасау және оны серверге жариялау үшін пішінді және модельді түймені көрсете алатын шаблон қосамыз. Бұл өте қиын, сондықтан оны қадаммен қабылдайық. Көріністі аяқтамас бұрын, тек модельді ұсынатын үлгіні жасайық және оны қабықшада жаңа хабарлама жасау арқылы көре берейік. Міне, бұл көзқарас келесі көрінуі керек:

    posts = Post.objects.all() # Осы уақытқа дейін мәліметтер базасындағы барлық хабарламалар

Біз түбіне дейін өте қарапайым көрінеді. Алдыңғы мысал сияқты, HTTP жауабының орнына функция қайтарған мән, әрқашан сұрау алады, оны бірінші енгізу ретінде алады, оны шаблонда көрсете алады және оны шаблонда көрсете алады және функцияда анықталған шаблонды қайтарады. Шаблон HTML-ді HTML деп аталатын HTML құжаты болып табылады, ол HTML-ге Python ақпаратын ұсынады.

Шаблондар құруды бастау үшін, екі каталогты тамақтандырыңыз.

mkdir feed/templates
mkdir feed/templates/feed

Next, edit a template in the directory above, feed/templates/feed, and add the code for this example. Let's look at the template for this example.

Бұл өте қарапайым шаблон. Ол HTML тегтерін ашу және жабуды анықтайды, құжат түрі тегі, мәтіндік тег, аңыздары бар дене тег, экранның үстінде кішкене сызық қосатын үзіліс белгісі және A үшін A үшін A және A үшін A үшін And Posts, мысалы, шаблондағы абзацтағы тармақ түрінде. Бұл хабарламаларды көрсету үшін қажет, бірақ әлі дерекқорда жоқ. Қабыршағымен бірнеше жасайық. Біз Shell-ді басқару арқылы жүгіре аламыз

python manage.py shell

Енді біздің пост моделімізді импорттайық

from feed.models import Post

Әрі қарай, біз қарапайым постты жолмен жасаймыз және қабықтан шығамыз. Жол кез-келген нәрсе болуы мүмкін, бұл дұрыс мәтін.

Post.objects.create(text='hello world')
exit()

Әрине, бізге өз жемшілігімізге URL үлгісін қосу қажет болады. Біздің арна қолданбасы бірнеше URL мекен-жайларын пайдаланады және біз файл өлшемдерін аз сақтағымыз келеді, біз келесідей, жергілікті URL мекенжайын жасайық:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.feed, name='feed'),
]

Сондай-ақ, URL мекен-жайларын негізгі қолданбада өңдеуіміз керек, біз оны шақыруға шешім қабылдадық, бұл біз жасаған алғашқы каталог болды. App / App.py бағдарламасын өңдеңіз және URL үлгілеріне мынаны қосыңыз

from django.urls import include # жоғарғы жағында
    # ... Алдыңғы код осында

Енді, біз Python over.py.py-ді Python.Py Runserver-мен жұмыс істеген кезде, біз жасаған бетті көреміз, өйткені бізде модель, қарау және шаблон, сонымен қатар URL мекен-жайы, сонымен қатар дерекқордағы элементтер бар. Әрі қарай, біз жасаған форманы іске асырайық және өз жазбаларымызды жасай бастайық. Бірақ біз тым көп код жазбас бұрын, біз жазған, біз бұрын жазған сценарийді пайдаланып, резервтік көшірме жасаңыз. Осы сценарийді сценарийді снарядты іске қосыңыз, бірнеше минут күтіңіз, және барлық код біздің GIT репозиторийіне сәйкес келеді.

backup

Пішінді енгізу салыстырмалы түрде қарапайым. Біз формамызды импорттаймыз, көрініске орналастырыңыз және сол көріністі қайта бағыттай алмас бұрын, Пошта сұрау өңдегішін қосамыз және дерекқордағы жазбаны сақтаймыз. Біз бұрын импортталған Redierrect функциясын қолдана аламыз, ал басқа функция url көрініс үлгісіне URL мекенжайын алу үшін кері деп аталады. Біз мұны «Арнайы: арна» жолымен сұраймыз, өйткені берілген үлгідегі аттар кеңістігі берілмейді, ал көрініс сонымен қатар арна деп те аталады.

    posts = Post.objects.all() # Осы уақытқа дейін мәліметтер базасындағы барлық хабарламалар
    if request.method == 'POST': # Пошта сұрауын өңдеңіз
        form = PostForm(request.POST) # Нысанның данасын жасаңыз және деректерді оған сақтаңыз

            form.save() # Жаңа нысанды сақтаңыз
        return redirect(reverse('feed:feed')) # Сұраныс алу арқылы бірдей URL-ге қайта бағыттаңыз
        'form': PostForm(), # Нысанды контекстке беру үшін, сондықтан біз оны көрсете аламыз.

Енді біз жаңа форманы есепке алу үшін шаблонды жаңартуымыз керек. Мұны біз қолдана аламыз

HTML-дегі тег және пішінді Жіберу түймесі бар HTML үлгісінде көрсету. Сондай-ақ, бізге CSRF Token, Token қажет, ол сыртқы сайттарды бетті бірінші жүктелместен пішінге жіберуге жол бермейді.

Мұны бұзайық. Жаңа форма сыныбы, таңбалауыш, пішіннің өзі және Жіберу батырмасы бар. Әдемі қарапайым, бірақ біз оған қарасақ, оны жақсырақ етіп жасағымыз келуі мүмкін. Ол жұмыс істейді, біз жаңа хабарламаларды пішінмен орналастыра аламыз және олар қазір дерекқорда сақталады. Мұнда бірнеше нәрсе бар. Біз HTML тегтерін құжатта HTML құжаты болса, біз пішінге арналған таңбалауышты ({% ...%}) қолданамыз, ал пішінді көрсету үшін шаблон тегін ({% ...%}) қолданамыз, ал форманы көрсету үшін басқа, {{...}}. Сондай-ақ, бізде мәтінді блок тегтері мен шаблон тегінің көмегімен көрсету үшін цикл бар. Блоктау тегтері өте маңызды, өйткені біз шаблонның бөлімдерінің олармен қалай көрсетілетінін анықтай аламыз, ал шаблон тегтері біздің кодқа айнымалы мәндерді қалай түсіретініміздің негізі болып табылады.

Енді біз өз қолданбамызды жақсырақ етуіміз керек, өйткені қазір ол шынымен қарапайым көрінеді. Біз мұны CSS, кірістірілген немесе құжаттағы әр объекке байланған сабақтар арқылы жасай аламыз. CSS шынымен жақсы, өйткені ол бетте бәрін қалай қарау керектігін айтады және оны өте жақсы етеді. Мұны жасай алатын бірнеше кітапханалар бар, бірақ менің жеке барамын - бұл жүктеу.

Жүктеушіні веб-сайттан жүктеуге болады,GetBootstrap.com/. Орнату құжаттарын оқу үшін түймені басыңыз және кодты CDN бөлімінен қараңыз. Сізге HTML құжатының жоғарғы жағында, Head деп аталатын тегте қажет. Сондай-ақ, алға қойып, негізгі шаблон жасаңыз, сондықтан әр шаблоннан осы сілтемелерді қайта құрудың қажеті жоқ.

Mkdir шаблондары бар шаблондар деп аталатын жаңа каталог жасаңыз, содан кейін шаблондарды / base.html өңдеңіз.

Ол келесідей болуы керек:

CSS және JavaScript,

Енді, Баш қабығына оралып, тез командасын іске қосайық. Есіңізде болсын, егер сіз виртуалды ортаға кіруіңіз керек болса, Venv / Bin / Activate көзін теріңіз. Бұл сізге Python Packages-ті жергілікті жерде, Django-ға кіруге мүмкіндік береді. DJango Bootstrap сыныптары құрған формаларымызды беру үшін біз қытырлақ пішіндер деп аталатын пирон пакетін қолданамыз. Мұны келесі пәрменмен жүктей аламыз

pip install django-crispy-forms

Бұл орнатылғаннан кейін, оны параметрлерге қосыңыз

    # ... Алдыңғы код осында

Енді, біздің арна шаблонымызға оралсақ, біз кейбір нәрселерді алып тастай аламыз. Құжаттың басталуы мен соңын алып, оны мұрагерлікпен алмастырайық және оны негізгі шаблоннан алмастырайық, кеңейтілген және блоктың анықтамасын пайдаланып. Сондай-ақ, біз пішінге жүктеме және шаблон сүзгісі бар шаблон сүзгісін импорттаймыз. Соңында, оны батырмаға батырма сияқты етіп жасау үшін жүктеу класын қосып берейік. Бұл келесідей болуы керек:

Әдемі! Бұл өте жақсы код. Әрі қарай, біз оны сынап көруіміз керек және бәрінің жақсы көрінетінін және бәрінің дұрыс жұмыс істегеніне көз жеткізіңіз. Серверді алдыңғы нұсқаулар бойынша іске қосыңыз және сайттың көрінетініне көз жеткізіңіз және жақсы. Керемет жұмыс! Сіз келесі қадамға өтуге дайынсыз, онда біз ұқсас URL мекенжайларын, формалар, көріністер мен шаблондар арқылы пайдаланушыға кіру функциясын қосамыз. Негізгі шаблон маңызды, сондықтан біз оны өзгертіп, қажет болған жағдайда өзгерістер енгіземіз, бірақ қазір пайдаланушыларға пайдаланушы аты мен құпия кодпен кіре береміз, ал қолданбаңыздың қауіпсіздігін және жеке шотыңызды тек өзіңіз қол жетімді ете аласыз.

Мұны істеу үшін біз DJango-ға салынған пайдаланушы үлгісін пайдалануымыз керек. Пайдаланушы үлгісі - бұл біздің пошта моделі, мысалы, біздің пошта моделі, мысалы, веб-сайтқа кіруге болады. Болашақта, біз сайтты Интернетке орналастырмас бұрын, біз бұл модельді оған қатысты басқа модельдермен кеңейтеміз және фишингке төзімді логинге қосымша қауіпсіздік шараларын саламыз. Біз DJango ұсынатын логиндердегі кейбір салынған кейбір заттарды қолдана отырып бастаймыз. Алдымен, біз жаңа қосымшаны жасайық, біз негізгі кіру парағына шаблондар мен көріністерді көрсету үшін пайдаланамыз. Сондай-ақ, біз қосымшаны, оның ішінде пинкон, бетті тану, сыртқы құрылғылардың жанында, сыртқы құрылғылардың, көп факторлардың аутентификациясын және саусақ ізін тану үшін басқа қосымшаларды ұсынамыз.

Біз қолданбаны бастау туралы сөйлескен едік. Біздің каталогтан, виртуалды ортада, осы дәлелдерді басқарыңыз

python manage.py startapp users

Енді бізде жаңа бағдарламаның каталогы болуы керек. Пайдаланушы логиніне сәйкес келетін осы каталогта көріністі жасаудан бастайық. DJango пайдаланушылар логиндеріне арналған кандидаттарда тұрғызылған, бірақ олар бізге жарамайды, өйткені бізге жеке көрініс қажет, бұл анықтамамен жасалады.

Бұл көріністе біз пост-сұранымды тексеруден бастаймыз, сұраныс жіберуден бастаймыз.

        username = request.POST['username'] # Пайдаланушы аты мен парольді хабарлама сұранысынан алыңыз
        password = request.POST['password'] # Пайдаланушының түпнұсқалығын растау

Бұл сізге негізгі кіру үшін қажет. Енді негізгі шаблонды кеңейту арқылы көрініс үшін форма жасайық. Пайдаланушылар қалтасында шаблондар үшін жаңа каталог құрудан бастаймыз.

mkdir users/templates
mkdir users/templates/users

Енді біз пайдаланушыларды / шаблондарды / пайдаланушыларды / пайдаланушыларды / login.html бағдарламасын өңдей аламыз. Бізде болғанда, біз пайдаланушының тіркелуге мүмкіндік беретін шаблонды жасаймыз.

nano users/templates/users/login.html

Енді, шаблонда,

Бұл кіру шаблонының негіздері. Бұл шынымен құрылымдағы басқа шаблон сияқты, бірақ ол көрсетілген кезде аздап өзгеше көрінеді. Біз осы кодты көшіре аламыз, онда біз реактивті.html деп аталатын басқа ұқсас шаблон құру үшін, онда біз тұжырымдаманы өзгертеміз және біз құрастыратын жаңа форманы қолданамыз. Алдымен шаблонды жасайық. Пайдаланушыларды / шаблондарды / пайдаланушыларды / register.htmlды өңдеңіз және келесі кодты қосыңыз:

Енді, біздің пайдаланушыларды тіркеу үшін форманы құрайық және модельмен пайдаланушылар логиндерін жаңартпас бұрын, біз көріністерге оралайық. Біз бұл форманы бастауға негізделетін етіп жасаймыз, бірақ болашақта келісімдер және CAPTCHA сияқты қосымша мәліметтер мен қауіпсіздік мүмкіндіктерін енгіземіз. Нано пайдаланушылары / Forms.PY-мен формаларды өңдеңіз және келесі кодты қосыңыз.

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

Сондықтан бізде басқа формада бар, ол жай ғана жұмыс істейді. Бұл пайдаланушы тіркеу формасы, пайдаланушы аты, электрондық пошта және пароль, сонымен қатар растау парағы өрісі. Бұл форма тұрақты формалармен бірдей болмайды. Бір өріс дәл солай анықталған, ал сынып мета үлгіні анықтайды, ал нысанды пішінді анықтайды. Мұның көп бөлігі Джангоның in UsercriateForm-да орнатылған, сондықтан біз мұны сыныптың негізі ретінде қолданамыз (жақшада өткен).

Әрі қарай, біз пайдаланушыны тіркеу үшін, қазір пішінді және шаблон бар екенін тексереміз. Бұл модельформ, жаңа посттардағы сияқты. Пайдаланушыларды / көріністерді өңдеңіз және келесі кодты қосыңыз:

# ... Импорт

Бізге пайдаланушы тіркелгеніміз керек, бірақ бізде қосымша ақпарат болуы керек. Біз пайдаланушының тіркелген уақытын білгіміз келеді, олар туралы бірнеше рет, олар туралы, олар туралы кейбір мәліметтер, уақыт белдеуі және т.б. сияқты, бізге белгілі бір ақпарат, POST, POST, POST, POST, әр пайдаланушыға арналған және атрибут жазбаларын есепке алу керек. Мұны істеу үшін біз екі бағдарламада да модельдерді жаңартамыз. Беру үлгісін өңдеуден бастайық. Ол қазірге ұқсауы керек:

from django.db import models # ... Импорт
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Осы жолға қосыңыз

Файлға қосылатын екінші жолға назар аударыңыз. Бұл әр хабарлама үшін әр хабарламаны төлейтін сыртқы кілт, ол әр хабарлама үшін әр хабарламады төлейді, сондықтан біз пайдаланушыға пользователядық негізде сақтаймыз және оны пайдаланушыны төлей алмайтын постты жасамайтынымызға көз жеткізе аламыз. Біз осы сыртқы кілтті өзіміздің сандарымен, жостармен, NULL және бос дәлелдермен анықтаймыз, қажет болса, пайдаланушыларды алып тастау үшін, біз пайдаланушыны алып тастап, біз жасаған, пайдаланушының жұмыс істеуі үшін және біз пайдалана алатын байланысты атауды, пайдаланушы жасайды. Осыған байланысты атау, посттың авторы, лауазымынан айырмашылығы, посттың авторы бізге посттың өзіне орналастырған пайдаланушы береді. Енді біз User.posts.all () немесе Автор.All () немесе Автор.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='')

Бұл модель пошта моделіне сәйкес келетіндігін ескеріңіз. Бізде қосымша импорт бар, TimeZone, ол бізге DateTime өрістерінде әдепкі параметрлерді орнатуға мүмкіндік береді, сонымен қатар бізде Post сияқты таңба және мәтіндік далалар бар. Осы уақыт белгілерінің барлығын пайдалану сайтты қорғауға және оның қолданылуын түсінуге көмектеседі, ал мәтіндік өрістер бізге әр пайдаланушы туралы немесе автор туралы ақпарат беруге мүмкіндік береді. 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) # Сондықтан олар бірнеше секундқа қайта кіре алмайды

Бұл қауіпсіздіктің негізгі негізі. Сайттың біреуге барлық мүмкін болатын комбинацияны, тіпті бір уақытта да, тіпті бірнешеуі осал екеніне көз жеткізіңіз. Бұл олардың құпия кодын білетін және бірнеше құрылғыларға кіретін қарапайым пайдаланушыға ренжімейді, бірақ ол қолданбадан көптеген фишинг роботтарын сақтайды. Егер біз өзгермелі, Can_login-мен, ол бұрынғы уақыт болуы керек және оны бірдей пайдаланушы атын қолданып, әр сәтсіз кіру арқылы жаңартыңыз. Осылайша, зиянды қолданушы парольді кез-келген жерде тез арада біле алмайды. DateTime.timedelta () секундтарының санын жаңартуға болады, ал веб-сайт әлдеқайда икемді болады, бірақ одан да көп уақыт өте аз болады. Мен 15 бастауды ұсынамын.

Есіңізде болсын, біз жұмысымызды сақтау үшін сақтық көшірме сценарийін салғанбыз, сондықтан біз әлі күнге дейін сақтап, бізде барлығын сақтап қалғанымызға көз жеткізу үшін сақтықпен қараймыз. Пәрменді іске қосыңыз:

sudo backup

Тағы бір рет, бұл сіздің жұмысыңызды әлі күнге дейін сақтайды. Мен жұмысты үнемдеу үшін жиі сақтық көшірмелерді іске қосуды ұсынамын, тіпті сақтық көшірме тапсырмасын автоматты түрде іске қосқыңыз келуі мүмкін. Сіз мұны CRON деп аталатын Unix утилитасын пайдаланып жасай аласыз. Бұл қызметтік бағдарламаны іске қосу үшін келесі пәрменді іске қосыңыз және құпия сөзді енгізіңіз:

sudo crontab -e

Егер сіз Nano үшін 1-опцияны таңдаған болсаңыз, мәтіндік редактор, сіз бұрыннан таныс болуыңыз керек және көрсеткі пернелердің көмегімен файлдың төменгі жағына айналдырыңыз. Келесі жолды қосыңыз:

0 * * * * sudo backup

CRON форматын, ай, ай, ай, аптаның күнін, аптаның күнін, мұндағы * немесе сан пәрменді қашан орындау керектігін білдіреді. Минут үшін 0 және * Қалған параметрлер үшін біз қалған параметрлер үшін, біз әр сағаттың бірінші минутында бір минут ішінде жұмыс істей аламыз. Бұл бізге кодты автоматты түрде сақтық көшірмеленуге мүмкіндік береді. Судодан жасалған барлық кронның жұмысы түбір ретінде орындалады, сондықтан біз сағат сайын парольді терудің қажеті жоқ.

Құпия сөзді пайдаланбай біздің кодтың сақтық көшірмесін жасауды жеңілдету үшін, біздің сақтық көшірме жасау пәрмені үшін құпия сөзді өшіре аласық. Біз мұны келесі пәрменді орындау және пароль енгізу арқылы жасаймыз:

sudo visudo

Енді, файлдың төменгі жағына жылжып, басқа жол қосыңыз:

ALL ALL=NOPASSWD: /bin/backup

Бұл бізге «Сақтық көшірме» командасын кез-келген пайдаланушы ретінде, парольсіз іске қосуға мүмкіндік береді. Бұл үшін пішім оңай, жай ғана «барлығы = nopasswd: / bin /» көмегімен сызықты префиксті префиксті префикстеу және пәрменмен аяқтаңыз, мысалы / bin / bin / bin / bin / backup.

Енді, электрондық поштамен жұмыс істей бастайық. Электрондық пошта веб-сайттар үшін өте маңызды, өйткені бұл веб-сайтты қауіпсіз ұстаудың әдісі, ал пайдаланушылар - нақты адамдар, тіпті тұтынушыларға нарықтық өнімдер немесе қызметтерді де тексеріңіз. Интернетті жиі тексеретін көптеген адамдар өздерінің электрондық пошталарын тексеріп, өнімдер мен қызметтер туралы маркетингтің барлық түрлерін алады. Электрондық поштаны DJango веб-сайтында қосу үшін бірнеше нұсқалар бар және сіз үшін қайсысы сізге жақсы жұмыс істейтіндігіңізге қош келдіңіз.

Алдымен, сіз өзіңіздің доменіңізден электрондық поштаны жіберуге мүмкіндік беретін және минималды кодты қажет ететін электрондық пошта қызметі үшін төлей аласыз. Google Workspace, Sentinblue, MailGun және басқалар сияқты көптеген қызметтер бар.

Әйтпесе, сіз өзіңіздің серверіңізде өзіңіздің электрондық пошта қызметін нөлден бастаңыз. Мен бұл опцияны ұсынамын, бұл қосымша код болса да, арнайы хостингті қажет етуі мүмкін. Сіз өзіңіздің үй компьютеріңізден пошта серверін бастай алмайсыз, сондықтан бұлтта серверде серверді іске қоспас бұрын электрондық поштаны жіберуге және электрондық поштаны жіберу үшін конфигурация мен кодты тексеріп, конфигурацияны және кодты қарап шығыңыз.

Алдымен, параметрлерді келесі пәрменмен өңдеңіз:

nano app/settings.py

Егер сіз App USTAPP жасаған бағдарламаның атауы болған кезде.

Келесі жолдарды қосыңыз:

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_host_password) сервер үшін жасалған құпия сөзге қойылуы керек. Мен құпия сөзді Config файлынан келесі логиканы пайдаланып, келесі логиканы пайдаланып, осы сызықтардың үстінен салыңыз.

import os
import json
with open('/etc/config.json') as config_file:
    config = json.load(config_file)

Содан кейін мен Nano көмегімен in nandc/config.json ішіндегі JSON файлын орнатқанмын.

Файлды өңдеу үшін:

sudo nano /etc/config.json

Келесі жолдарды қосыңыз:

{
	"EMAIL_HOST_PASSWORD": "<some password here>"
}

Біз конфигурация файлын өңдеуді және қолданбада қолданатын барлық парольдер мен кілттерді қосуды жалғастырамыз. Әзірге Python көмегімен электрондық поштаны қалай жіберу керектігін тез тексерейік. Алдымен, біз пайдаланушыларға жібере алатын электрондық пошта үшін шаблонды жасайық және оны пайдаланушылар шаблондар каталогына салыңыз. Бұл шаблон HTML-де жазылады.

nano users/templates/users/verification_email.html

Бұл электрондық пошта өте қарапайым. Бұл пайдаланушының контексті, сайтқа арналған негізгі URL мекен-жайы және пайдаланушының электрондық поштасын тексеру үшін пайдаланылатын пайдаланушы идентификаторы мен таңбалауышы қажет. Параметрлерде негізгі URL мекен-жайын анықтаңыз. App / Settings.py-ге келесі сызықтарды қосыңыз және басталуға жақын.

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 көмегімен пайдаланушыларды өзгерту / email.py.

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)

Бұл өте қарапайым. Біз электрондық поштаны жіберуге, электрондық поштаны жіберіп, электрондық поштаны және біздің параметрлерімізді, содан кейін электрондық поштаны шаблон атауымен және оны функцияны пайдаланып жібере аламыз. Сіз Phisplace функциясын анықтағанымызды байқайсыз, біз поштаны жіберу, жіберу_хт_майл, сондықтан біз оны пайдаланушыларға / email.py-ге енгізген кодтың астында жазайық

def send_html_email(user, mail_subject, html_message):
    to_email = user.email
    username = user.username
    if to_email == '':
        return None
    unsub_link = settings.BASE_URL + user.profile.create_unsubscribe_link()
    html_message = html_message + "<p><a href=\"" + unsub_link +  "\" + title=\"Unsubscribe from " + settings.SITE_NAME + " emails\">Unsubscribe</a></p></body></html>"
    msg = EmailMultiAlternatives(mail_subject, strip_tags(html_message), settings.DEFAULT_FROM_EMAIL, [to_email], headers={'List-Unsubscribe' : '<' + unsub_link + '>'},)
    msg.attach_alternative(html_message, "text/html")
    profile = user.profile
    try:
        msg.send(fail_silently=False)
        if not profile.email_valid:
            profile.email_valid=True
            profile.save()
    except:
        profile.email_valid=False
        profile.save()

Бұл біршама күрделі және біз әлі осы кодты іске қосуға дайын емеспіз. Ескерту Біз unsbub_link_link-ті анықтап жатырмыз, пайдаланушы пайдалана алады, пайдаланушы пайдалана алатын сілтеме біздің электрондық пошталардан бас тарту үшін пайдалана алады. Бұл маңызды, өйткені пайдаланушылар біздің электрондық пошталардан бас тартуы керек, егер олар кез-келген уақытта оларды көргісі келмесе, оларды бас тартуы керек. Сонымен қатар біз HTML тегтерінен алынған HTML хабарламасы болып табылатын хабарламамызға мәтіндік балама қосамыз. Соңында, біз электрондық поштаның жіберілгенін тексереміз, егер ол болмаса, біз пайдаланушының профилінде олардың электрондық поштасы дұрыс емес екенін белгілейміз.

Біз осы жұмысты жасай алатындай етіп пайдаланушы модельдеріне оралайық. Жазылымнан бас тартуға сілтемені құру үшін, пайдаланушының электрондық поштасы жарамсыз деп белгілеу үшін функцияларды анықтау керек.

Алдымен, пайдаланушылардың жоғарғы жағына / модельдерінің жоғарғы жағына келесі импортты қосыңыз

nano users/models.py
# ...

Әрі қарай, пайдаланушы үлгісіне функцияларды қосып, таңбалауыштар жасау және электрондық поштаны қосу үшін пайдаланылатын таңбалауышты, сондай-ақ пайдаланушының пошталарын сәтті қабылдағанын үнемдеу үшін, сондай-ақ өрісті тексеріңіз. Пайдаланушыларда / модельдерде.Py-де. Тағы да, модельдің соңына келесі кодты қосыңыз (шегіністі код)

# ...
            TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # 30 күн жарамды

Бұл өте қарапайым, біз белгілі бір уақыттан кейін жарамдылық мерзімі аяқталатын таңбалауышты құрайтын қарапайым, бұл қарапайым криптографиялық құрал болып табылады, ол белгілі бір уақыттан кейін жарамды болып табылады, сонымен қатар оның жарамды екенін тексеру үшін басқа функцияны қолданамыз. Біз бұл таңбалауыштарды екі рет, электрондық поштаны тексеру үшін және бірнеше рет жазылудан бас тарту үшін қолданамыз.

Енді бізде бар, бізде бар жұмыстың соңғысы, көзқарастарымыз керек. Пайдаланушылар / көріністер аясында.py ішінде, электрондық пошта мекенжайын тексеріп, жазылымнан бас тарту үшін көріністерді қосайық.

nano users/views.py

Алдымен келесі импортты қосыңыз. Мен бірнеше қосымша уақытта лақтырдым, сондықтан біз тағы да көп заттарды импорттаудың қажеті жоқ.

from .email import send_verification_email # Электрондық поштаны жіберу функциясын импорттауды ұмытпаңыз

Сізде осы импорт бар болуы мүмкін, бірақ оларды қайталауға зиян тигізбейді. Сізге тексеру электрондық пошталарын жіберу функциясын, сондай-ақ users.thokens-тен, басқа импорттауды импорттау керек.

Енді файлдың төменгі жағында келесі кодты қосыңыз:

        # Оларды жазады
    # Әйтпесе кіру бетіне қайта бағыттаңыз
# SendwelcomeMail (сұрау, пайдаланушы)

Бұл көптеген код. Оны бұзайық. Бірінші функция, таза және қарапайым, пайдаланушыны тарату тізімінен жазады. Екінші функция электрондық пошталарын іске қосады, және сіз маған түсініктеме берілген функцияны қосқаныңызды байқайсыз, SendwelMoneMail. Сізге сәлемдесу электрондық поштасын жіберу үшін электрондық пошта шаблоны мен функция анықтамасын пайдалануға шақырамыз, мен әлі жоқ. Мен лақтырған соңғы функция маңызды, өйткені активтендіру электрондық пошталары аяқталады. Сондықтан, біз біраз уақыттың қосылу электрондық поштасын қайта жіберуіміз керек. Біз бұл үшін негізгі форманы қолдана аламыз және Verifite электрондық поштасын жіберу үшін функцияны шақыра аламыз. Мұны жасамас бұрын, оның бірінші кезекте, тіркеуге қоңырауды қосу арқылы оның бірінші кезекте жіберілгеніне көз жеткізіңіз. Осы жолды қайта бағыттауды тіркеуден бұрын қосыңыз, def тіркеліңіз, пайдаланушыларда / көріністерде.

nano users/views.py
# ... (кейін) Def тіркеу (сұрау):
# ... (бұрын) қайта бағыттау (

Сізге осы код үзіндісінде бірінші және соңғы жолдарды қосудың қажеті жоқ, тек тіркеу электрондық поштасын пайдаланушыға растау электрондық поштасын жібергеніне көз жеткізіңіз. Ол келесідей болуы керек:

# ... Импорт
            send_verification_email(user) # Бұл жолды қосқаныңызға көз жеткізіңіз!

Енді активтендіру электрондық поштасын қайта жіберу үшін форманы қосу керек. Пайдаланушыларда / Forms.PY-де келесі форманы қосыңыз:

# ... (импорт)

Сондай-ақ, бізге электрондық поштаны іске қосу нысанына сәйкес келетін шаблон қажет болады. Бұл үлгіні қосып, қосыңыз. Файлды өңдеңіз:

nano users/templates/users/resend_activation.html

Әрі қарай, файлға келесі кодты қосыңыз.

Бұл өте көп! Енді, біз біздің серверге кодты қолданған кезде, HTML электрондық поштасын жіберіп, электрондық поштаға нұқу арқылы пайдаланушы тіркелгілерін іске қоса аламыз. Біз сондай-ақ қарапайым сәлемдесу электрондық поштасын жібергіміз келуі мүмкін, сондықтан мұны қалай істеу керектігін көрейік. Пайдаланушылар / email.py-де келесі кодты қосыңыз:

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 үлгілерін қалай жазуға болатындығын қарастырамыз. Міне, бұл көрініс, пайдаланушыларда / көріністерде көрінеді.

# ... Импорт

Бұл форма DJango-да құрылған, бірақ парольді қалпына келтіру, пайдаланушылар / шаблондар / пайдаланушылар / пайдаланушылар / құпия сөздерді растау үшін шаблон қажет болады

Бізде парольді қалпына келтіру электрондық поштасын, қарапайым пішінді, пайдаланушыларда / шаблондарда / пайдаланушыларда / пайдаланушыларда / parver_reset.html бағдарламасын жіберу үшін шаблон бар.

Электрондық поштаның өзі үшін шаблон қарапайым, бұл парольді қалпына келтіру үшін, пайдаланушылар / шаблондар / Пайдаланушылар / құпия сөздер / charset_email.html-де сілтеме жасайтын негізгі HTML файлы. DJango бұл файлды автоматты түрде түсіндіреді.

Бізге тағы екі шаблон қажет. Біріншісі - электрондық поштаның жіберілгенін растау. Бұлардың пікірі Джангода, сондықтан біз оларды URLS.PY-де шешу керек. Бұл шаблон пайдаланушыларда / шаблондарда / пайдаланушыларда / пайдаланушыларда / password_reeset_done.html

Парольді қалпына келтіру толық, пайдаланушылар / шаблондар / пайдаланушылар / пайдаланушылар / құпия сөздерді растау үшін ,_reeset_complete.html

Енді бізге осы көріністер үшін URL үлгілері қажет. Пайдаланушыларда / URLS.PY-де келесі URL үлгілерін қосыңыз:

    # ... Алдыңғы URL мекенжайлары

Төрт шаблон, бұл өте көп! Бірақ қазір біз пайдаланушының паролін кез-келген уақытта, барлығын веб-шолғыштан қалпына келтіре алатындығына сенімді бола аламыз.

Мен мұны түсінемін, бұл көптеген код. Егер бұл сіздің басыңыздан сәл болса, жақсы. Сіз жақсартасыз, түсінігіңіз жақсарады, ал сіз жақын арада кодпен көбірек сауатты бола аласыз. Егер сіз толығымен жоғалып кетсеңіз, мен осы бағдарламалық жасақтамаға кейінірек өздігінен жұмыс істегеннен кейін, онлайн режимінде жұмыс істегеннен кейін оны үйренуді ұсынамын. Оларды бастау үшін ақысыз, және сіз осы жобаға оралғанда сізге сәттілікке жету керек. Егер сіз жалғастыруға дайын болсаңыз, оқығаныңыздай, келесі, біз сіздің кодты қашықтағы серверге орналастырамыз және пошта серверін орнатамыз, сонымен қатар сіз жаңа жобаны бірнеше қарапайым командалармен орната аласыз.

Қашықтағы серверге орналастырудан бұрын жасау керек соңғы нәрсе - бұл біздің сайтымызды сәл қауіпсіз етеді. Кіру көрінісі тек пайдаланушы аты мен парольді қабылдағанын байқайсыз, және көп фактор аутентификациясы немесе бір реттік код жоқ. Бұл оңай түзету, және бірдей кодпен біз өз сайтымызды мәтіндік хабарламалар жібере аламыз және тіпті серверге жіберілген мәтіндік хабарламаларға жауап бере аламыз. Бастау үшін, біз пайдаланушы модельдеріне қайта ораламыз және әр логинді ұсынатын уақыт белгісі қосқышын қосамыз. Сондай-ақ, біз логинге қосымша қауіпсіздік қосу үшін пайдаланылатын пайдаланушы моделіне бірегей, бұрылатын идентификатор қосамыз. Пайдаланушы үлгілерін, пайдаланушыларды / модельдерді өңдеуді өңдеу, келесі кодты қосыңыз:

# UUID, уақыт белгісі және URL генераторын (кері) импорттауды ұмытпаңыз
    # Бұл кодты осы жерге қосыңыз
    # Және осы функцияны қосыңыз
            TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # 3 минут жарамды

Пайдаланушыларыңыз / модельдеріңіз осы сияқты екендігіне көз жеткізіңіз. Мұны бұзып, бұл қарапайым. Бізде бірнеше импорт бар, ол қауіпсіз кодты құра алады және оның жарамды екеніне көз жеткізу үшін тексеріп, оны тексеріп, бір рет пайдаланылған және белгілі бір бірнеше секундтан бұрын қолданылған. Сондай-ақ, біз UUID-ді қолданамыз, бұл бірегей идентификатор болып табылады, бұл белгіге қол қоюдағы біздің пайдаланушымызды және таңбалауыштың пайдаланушыға жіберілетін URL мекенжайында. Біз осы негізгі криптографияны екі фактордың түпнұсқалық растамасын құру үшін қолданамыз. Басқа ештеңе жасамас бұрын, біздің пайдаланушы модельдері жаңартылғанша, тасымалдауды жүргізейік. Басқарушы.py көмегімен каталогта тасымалдауды жасау және аяқтау үшін келесі пәрмендерді іске қосыңыз.

source venv/bin/activate
python manage.py makemigrations && python manage.py migrate

Бұл өте маңызды, өйткені біз модельдерге өзгерістер енгізген сайын, біз модельдерді қолданар алдында кестелерді жасау және әдепкі бойынша дерекқорды жаңартуымыз керек.

Әрі қарай, қайталама аутентификация көрінісіне қайта бағыттау үшін кіруді импровизациялайық. Пайдаланушыларда / Көрулерде.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-мен жібереді
# Көптеген сандармен сан алу үшін көмекші функциясы
# Пайдаланушыны тексеру үшін мәтінді жіберіңіз
# Пайдаланушыға осы функцияның кез келген мәтінін жіберіңіз
# Осы функциямен кодты тексеріңіз
# Уақытты растау

Параметрлерді тиісті түрде өзгертіңіз, осы сызықтарды кілттеріңізбен қосыңыз:

# Оларды Twilio бақылау тақтасынан көшіріп алыңыз
AUTH_VALID_MINUTES = 3 # TFA парағы бірнеше минуттар саны

Біріншіден, бізге екі фактордың аутентификациясы көріністері үшін нысандар қажет болады. Пайдаланушыларды / формалардағы пайдаланушыларды өңдеу, келесі кодты қосыңыз.

# ... Импорт
# Біздің телефон нөмірімізді енгізу формасы
# Аутентификацияға арналған форма

Әрі қарай, пайдаланушыларда / Көрулерде көріністер жасайық

# ... Импорт

Сондай-ақ, бізге осы екі пікір үшін шаблондар қажет болады. Алдымен MFA шаблонын қосайық.

nano users/templates/users/mfa.html

Осы HTML кодын шаблонға қосыңыз

Бұл өзін-өзі түсіндіру. Пішін кодты немесе бос кодты жібереді, ал сіз бос кодты алсақ, біз кодты жібереміз. Сонда бізде екі рет жіберіңіз, және осылайша біз кодты екі батырмамен жібере аламыз. Әрі қарай, телефон нөмірін қосу үшін қарапайым форманы қосамыз.

nano users/templates/users/mfa_onboarding.html

Келесі HTML қосыңыз:

Бұл форма әлдеқайда қарапайым, ол біз жасаған телефон нөмірін ұсынамыз және пайдаланушыға телефон нөмірін қосуға мүмкіндік береді.

Бұл өте жақсы көрінеді! Бәрі дұрыс орнатылғанша, біз хабарламаларды жіберіп, пайдаланушыны телефон нөмірімен телефон нөмірімен тіркей алуымыз керек, URL үлгілерін қосқаннан кейін. Біз орнатуымыз керек соңғы нәрсе - бұл профильдің көрінісі.

Пайдаланушыларға / көріністерге профиль көрінісіне кірейік. Бұл көрініс пайдаланушының био, электрондық поштасы, пайдаланушы аты және телефон нөмірін, сонымен қатар көп факторлардың аутентификациясын қосуға мүмкіндік береді. Біріншіден, бізге пайдаланушыларда / формаларда тағы екі формасы қажет

# ... Импорт

Әрі қарай, біз осы форманы да қолдануға қатысты көріністі жасай аламыз. Пайдаланушыларды / көріністерді өңдеңіз және көрініске қосыңыз.

# Бұл импорттарды қосыңыз

Бізге осы көрініс үшін шаблон қажет болады.

nano users/templates/users/profile.html

Сіз бұл қарапайым форманы байқайсыз, бірақ оларда бірнеше JavaScript бар, олар форманың мазмұнын автоматты түрде орналастырады, олар жаңартылған кезде. Бұл пайдалы, сондықтан сіз әр уақытта жіберілмей, өңдей аласыз.

Әрі қарай, бізге URL мекен-жайы бойынша осы көріністердің барлығын білдіретін URL мекен-жайы қажет. Пайдаланушыларды / URL мекен-жайларын өңдеңіз және осы кодты қосыңыз:

# ... Алдыңғы код, импорт
# ... Біз бұрын енгізілген URL үлгілері, келесі үш жолды қосыңыз

Қазір біздің жобаны сынауға жақсы уақыт келді. Бірақ алдымен тағы бір резервтік көшірме жүргізейік.

backup

Және серверді іске қосыңыз. Linux серверіне қолданбас бұрын, есептік жазбада екі фактордың аутентификациясын қосқан дұрыс. Біз мұны профиль URL мекен-жайымызға, / пайдаланушыларға / профильге /, телефон нөмірін енгізгеннен кейін аутентификацияны қосу үшін, содан кейін нысанды жіберуге арналған құсбелгіні қойамыз.

python manage.py runserver localhost:8000

Веб-сайтқа кіріп барамын, мен Google Chrome-ді осы мысалда қолданамын және URL URL мекен-жайына кіремін: // locromast: 8000 / Тіркелгілер / Профиль /

Қажет болса, сіз кіре аласыз және екі фактордың түпнұсқалық растамасын қосыңыз.

Бұл жобаға серверді қосу үшін сервер керек, сондықтан оны шынымен жібере алады. Бірақ алдымен бізге қателіктерді көрудің жолы қажет. Егер сіз серверді күйге келтіру режимінде іске қоссаңыз, Settings.Debug TRUE-ге тең болса, сервер автоматты түрде қателерді көрсетеді. Түзету режимін пайдаланбай қателіктер көрсету, ол өндірістік серверде қауіпті болып табылмайтын, біз оған көріністі қосуымыз керек. Бізді өңдеу керек маңызды қателер:

500-қате - біздің кодымыздағы мәселе Қате 404 - табылмады (сынған URL) 403 қатесі - рұқсат берілмеген қателік

Қателерді қателіктер деп аталатын қателерді өңдеу үшін жаңа қолданбаны қосайық.

python manage.py startapp errors

Мұны біз жасағандай етіп орнатыңыз, біз бұрын жасадық, орнатылған_apps параметрінде және App / URLS.PY-дегі сілтемелерді қосудан бастаңыз, онда App / URLS.PY-де сілтемелерді қосу, онда App DJango жобасының атауы орналасқан.

handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'

Бұл бізге қателер көріністерінен, шаблондардан және аздап орта буыннан басқа қажет. Оларды анықтайық:

# Көріністеріңізді мына жерден жасаңыз.

Әрі қарай, осы қателерді өңдеу үшін ортаңғы бағдарламаны анықтайық. Біз мұны алдымен ArchiteWare_Class бағдарламаларында бірінші рет қосып, параметрлеріміз.

    # ... алдыңғы ортаңғы бағдарлама

Әрі қарай, ортаңғы бағдарламаны қосайық.

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.')

Біз ағымдық ерекшелікті алу үшін функционалды қосамыз, бұл кез-келген қателерді біздің кодтағы қателіктерді бақылауға көмектеседі. Шаблондар тұрғысынан бізге тек біреуі керек, өйткені біз тақырыпты динамикалық түрде анықтаймыз. Шаблон тек тақырыпты және «із» және «TRASE», біздің қателіктеріміз контекстен.

nano errors/templates/errors/error.html

Бұл біздің қарапайым шаблонымыз, бірақ біздің жобамыздағы қателерді көру қаншалықты оңай. Әрі қарай, Параметрлердегі түзетулерді өшірейік.

nano app/settings.py

Бұл жолды TRUE орнатыңыз және оны жалған деп өзгертіңіз

DEBUG = False

Қазір қосымшаны сақтаңыз және сақтық көшірме жасаңыз. Біз қашықтағы Linux серверіне қолдануға дайынбыз және сол жерден мүмкіндіктерді қосуды жалғастырамыз.

sudo backup

Біз бұл кодты серверге жібермес бұрын, кодпен кейбір мәселелер болуы мүмкін деп санауымыз керек. Іске байланысты, оларға орналастырылған ақпаратты қабылдайтын сайттар спамның жарияланған және спамды жою қиынға соғады. Бұл бірден болмауы керек, бірақ егер ол болып жатқан болса, біз кейінірек сайтқа қалай орташа спамды қалай құрметтейміз және оны роботтарға қаттырақ жасаймыз, оны сайтқа қалай сөндіруге және пайдаланушының идентификаторын қалай сөндіруге болатындығын және пайдаланушының жеке басын тексеріп, саусақ ізі немесе бет-әлпеті сияқты тексеріңіз.

Көп факторлардың аутентификациясына қарап, біз зерттелді, өндірісте заттар басқаша болуы мүмкін. Біз қалай шектеулі логиндермен және токендермен жүретінімізге назар аударыңыз. Егер роботтар сайтқа кірсе, екі фактордың аутентификациясы қиын болуы мүмкін Бұған қарсы тұру үшін, пайдаланушы модельдерінде модельді пайдаланайық, біз сайтпен қалай қарым-қатынас жасаймыз деп мәлімдейік, біз сайтпен қалай қарым-қатынас жасаймыз деп мәлімдеді. Сондай-ақ, біз электрондық поштамен аутентификациялау үшін опцияны қосамыз. Нано көмегімен пайдаланушы модельдерін өңдеуден бастаңыз.

nano users/models.py

Бұл біз қосып жатқан модельге ұқсас болуы керек. Бізде ешқандай әдістер, тек идентификаторды, пайдаланушыны, уақыт белгісін, ұзындығын, ұзындығын, ұзындығын және кез-келген көп факторлардың аутентификациясына қарсы әрекеттерді, ұзындығын және әрекеттерді сақтаудың қажеті жоқ (телефонға немесе электрондық поштаға жіберілген).

# Веб-сайтқа кіру үшін пайдаланылатын негізгі токен

Біздің пайдаланушымызға артықшылық берейік, ал біз оны қазір қолмен, артықшылықты пайдаланушыларға автоматты түрде көшіру үшін қолмен орнатамыз. Пайдаланушы модельдерінде осы жолды профильге қосыңыз:

    vendor = models.BooleanField(default=False)

Деректер базасындағы кез-келген өзгерістер болғандықтан, бізді кез-келген уақытта DJango-да өңдейтін кез келген уақытта тасымалдауды және дерекқорды тасымалдау қажет. Есіңізде болсын, мұны істеу, алдымен біз алдымен көзді қолданамыз (егер ол терминал ашық болғаннан бері қолданылмаса), содан кейін қоныс аудару және қоныс аудару үшін Python.py.

cd project-directory-you-named # (қажет болса)

Әзірге сіз Shell көмегімен сіз жасаған кез-келген есептік жазбаны ала аласыз.

python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()

Енді осы таңбаны пайдалану үшін көп факторлы аутентификация көрінісін дамытыңыз. Біріншіден, бізге MFA Helper коммуналдық қызметтерін өзгерту керек. 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_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 # MFA қосыңыз
            user.profile.phone_number = '+1' # Телефон нөмірін өшіріңіз
            user.profile.save() # Профильді сақтаңыз
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Егер олардың MFA қосылмаған болса, пайдаланушыны тіркеңіз
    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) # Ауыз таңбасын тексеріңіз
            is_verified = check_verification_code(user, token, code) # Кодты тексеріңіз
            if token_validated: # Егер бәрі болса
                if is_verified: # Тәртіппен
                    user.profile.mfa_enabled = True # MFA қосыңыз (егер әлі қосылмаған болса)
                    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

Бұл пайдаланушыларға / usels.html шаблонымен бірге, ол келесідей көрінеді:

Үлгіге басқа шаблон, пайдаланушылар бар екенін ескеріңізUser.html. Субтиманы бар үлгіні қолданған кезде және ұзартқышты қолданбаған кезде, оның астын сызу үшін жақсы идея () шаблондарды ажырату үшін файлдың аты-жөніне дейін.

Бұл jinja көп екенін ескеріңіз, сізде осы айнымалылардың барлығы анықталмауы мүмкін. Бірақ бұл менің кодым сияқты.

      <small># {{user.id}} </ small>

Бізге басқа Subtemplate, Toggle_active.html қажет. Бұл шаблон пайдаланушының белсенді екенін ауыстырып отыруға мүмкіндік беретін форма болуы керек.

Сондай-ақ, пайдаланушы әрекетін және тиісті URL үлгілерін ауыстырып қосуға арналған көріністі қосу қажет. Бізде болған кезде, бізге қажет болған жағдайда пайдаланушыны жою үшін көріністі қосамыз.

# Импорт
    success_url = '/' # Табыс URL мекенжайы бойынша қайта бағыттау
    def test_func(self): # Егер пайдаланушы SuperUser болса және жоюға рұқсаты болса

Бұл қажет болған кезде, егер қажет болған кезде, пайдаланушыны жою көбіне қажет болмауы керек, егер біз оларды жұмыстан шығару қажет болса, сайтқа кіретін пайдаланушылардың көрінуін ауыстырып, біз оларды жұмыстан шығару керек болса.

Біз қоштасқан URL үлгілері осындай көрінеді. Nano көмегімен пайдаланушыларды / URL мекен-жайларын өңдеңіз және осы жолдарды қосыңыз:

nano users/urls.py

Жолдар «]» пайдаланушы көріністеріндегі жолдар тізіміне өтуі керек, бірақ «[» басталғаннан кейін «[».

# ...
# ...

Енді сіз оны веб-серверде жүктей алатындай етіп, сайттың сақтық көшірмесін жасаңыз. Пәрмен жолынан,

sudo backup

Қазір біздің сайтымыз сақтық көшірмесін жасады.

Қазір бізде тағы бірнеше пайдалы мүмкіндіктер бар. Бірақ бұл жерде үлкен сурет ше? Бұл код әлі де Интернеттен қол жетімді емес, бізде әлі пошта сервері жоқ, бізде әлі де жеке-бірлеп беру процесін, сондай-ақ бізге артықшылықты пайдаланушыларды түпнұсқалығын растауға арналған қауіпсіз протоколдармен қатар, қосымша тексеру процесін, сондай-ақ бізге қосымшамызды кеңейту керек.

Біз мұның бәріне жетеміз. Ең бастысы, қазір бұл кодты онлайн режимінде алу, ол Ubuntu серверіндегі бірнеше жолмен ғана жасай аламыз. Егер сіз үйде серверіңіз болмаса, сізге серверді жалға алуыңыз керек, егер сізде порттарды ашуға мүмкіндік беретін Интернет жазылымы болмаса. Мен өзімнің жеке өз веб-сайтымды менің пәтерімде орнатамын, бірақ әдетте, виртуалды жеке серверді (VPS) жалға алу үшін әдетте әлдеқайда арзан.

Енді біз жұмыс істейтін код салыстырмалы түрде жұқа екенін есте сақтаңыз, бізде өнімді құруға дайын болғанға дейін оны сақтау керек. Интернет арқылы не істегеніңізге көз жеткізіңіз, егер сіз осы сайтты Linux серверіндегі Интернетке жалпыға ортақ пайдалансаңыз, веб-сайтыңызбен веб-сайтыңызбен қалаусыз әрекеттерді жасау жоспарыңыз бар. Бұл бірінші кезекте проблема болмайды, бірақ біз бұған қарсы күрес, соның ішінде машиналарды үйрену, жасанды интеллект және компьютерлік көру мәселелерін қарастырамыз. Бұл проблема болған кезде, осы мәтіннен ерітіндіге қараңыз.

VPS жалдау тұрғысынан сіз баруға болатын жерлер көп. Google Clout VPS серверлері, Ионос, Камера, Amazon AWS және көбірек провайдерлер біздің қажеттіліктерімізге сәйкес келетін бұлтты сервер шешімдерін ұсынады.

Сіз олардың пішіндерін басып, бастау үшін жоспарды таңдаңыз. Сіз кез-келген провайдермен негізгі жоспармен баруға болады, бірақ провайдер сізге электрондық поштаны жіберу үшін порт пошта серверінің порттарын ашуға мүмкіндік бере аласыз (бұл 587-порт және 25-портты), кейбір провайдерлер осы порттарды бұғаттайды. Осы уақытқа дейін мен Ионоспен және Камерада ең жақсы тәжірибемді, екеуі де шектеусіз электрондық поштаны жіберуге мүмкіндік береді, ал олардың бағасы өте арзан.

Сіз жаңа серверге SSH немесе Secure Shell деп аталатын протоколға қосыласыз, бұл сізге дербес компьютеріңізбен жеке компьютерден, жеке компьютерден, дербес компьютерден интерфейске қосылады. Серверді орнатқан кезде, хостинг провайдері сізге SSH кілтін қосуды сұрайтын шығар, немесе олар сізге логин мен пароль береді. SSH кілті - кодты өңдеу үшін команда жолынан қалай кіретіндігіңіз. SSH батырмасын құру үшін төменде SSH-KEYGE параметрлерін пайдаланыңыз.

ssh-keygen

Файлды сақтап, қажет болса, оны қайта жазыңыз, егер сізде болмаса, SSH кілттерін бұру жақсы. Енді SSH батырмасын көру үшін келесі пәрменді пайдалануға болады. Сіз оны аутентификация үшін пайдалана алатындай, оны қашықтағы серверге көшіргіңіз келеді.

cat ~/.ssh/id_rsa.pub

Егер сіз осы пәрменді терген кезде SSH кілтін көре алмасаңыз (SSH-RSA AAA »), RSA кілтін (олар қауіпсіз) rsa пернесін құрыңыз (олар қауіпсіз, сондықтан мен оларды қолдануға кеңес беремін.) Келесі код 4096 биттік RSA SSH кілтін жасайды.

ssh-keygen -t rsa -b 4096

Ubuntu жұмыс істейтін VPS жасаңыз, бірақ сіз мұны жоспарлайсыз. Сіз VPS жасаған болсаңыз, провайдерлер веб-сайтында (kamatera.com, iOnos.com немесе ұқсас) сіз кіргіңіз келеді. Мұны істеу үшін сіз IP мекенжайыңызбен SSH пәрменін (xx.xx.xx.xx) пайдаланыңыз. Сондай-ақ, біз жасаған сервердегі әдепкі логинге, мысалы, ubuntu-ға сезімтал болуыңыз керек.

ssh ubuntu@XX.XX.XX.XX

Сізден құпия сөз сұралуы мүмкін, егер сізден сұраныс сұралса, оны енгізіңіз. Біз оны енгізіңіз. Біз әдепкі пайдаланушы атын пайдаланбаймыз, сондықтан жаңа пайдаланушыны құру және олардың тіркелгілеріне SSH батырмасын қосу арқылы бастайық.

Жаңа SSHD_CONFIG файлын қосу арқылы бастайық, ол серверді SSH қалай пайдалану керектігін айтады.

nano sshd_config
# Бұл SSHD Server жүйелік жүйелік конфигурация файлы.  Көру
# Қосымша ақпарат алу үшін SSHD_CONFIG (5).
# Бұл SSHD жолмен = / USR / жергілікті / SBIN: / USR / жергілікті / Сбин: / USR / SBIN: / usr / sbin: / sbin: / sbin: / bin: / usr / Ойындар
# Әдепкі SSHD_CONFIG-дегі параметрлер үшін қолданылатын стратегия
# OPENSSH - бұл әдепкі мәндерімен опцияларды көрсету
# мүмкін, бірақ оларды түсініктеме қалдырыңыз.  Топпаланбаған опцияларды ауыстырады
# Әдепкі мән.
# 22-порт
# Кез-келген адам мекен-жайы
# Тыныштқылдар 0.0.0.0
# Тыңдаушылар ::
# HostKey / etc / ssh / ssh / ssh_host_rsa_key
# HostKey / etc / ssh / ssh / ssh_host_ecdsa_key
# HostKey / etc / ssh / ssh / ssh_host_ed2519_Key
# Сиптерлер және кілттер
# ReceylImit әдепкі жоқ
# Журнал жүргізу
# SyslogFacycy Fame
# Loglevel info
# Аутентификация:
# LogingRacetime 2M
# Perotorotlogin тыйым салуға тыйым салынады
# Стритмодтар иә
# МаксАвтралар 6
# Максимум 10
# Болашақ / уәкілетті_KEYS2 Болашақта әдепкі бойынша ескерілмейді.
# DownlodPRIPALSFile Ешқайсысы
# GultskeysCommand Ешқайсысы
# Gultkeyscommanduser Ешкім
# Бұл үшін жұмыс істеу үшін сізге HOST пернелері / SSH / SSH / SSH_KHOSTS қажет болады
# HostBasedAuthentication жоқ
# Егер сіз (/ .ssh / белгілі_hosts) сенбесеңіз, иә өзгертіңіз
# HostbaseDauthentation
# NemberneSuNeHosts жоқ
# Пайдаланушының ~ / .rhhosts және ~ / .host файлдарын оқымаңыз
# ИӘ ИӘ
# Туннельді таза мәтіндік парольдерді өшіру үшін мұнда жоққа өзгертіңіз!
# Мүмкіндік жоқ
# Challence-Recele құпия сөздерін қосу үшін Иә
# кейбір PAM модульдері мен жіптер)
# Керберос опциялары
# Kerberosauthentication жоқ
# Kerberosorlocalpaswd иә
# KerberosticketCleanup иә
# KerberosGetaFstoken Жоқ
# Gssapi опциялары
# Gssapiauthentication жоқ
# Gssapicleanupcredents иә
# Gssapistrictaceptorcheck иә
# Gssapikeyexchange жоқ
# PAM түпнұсқалық растамасын, есептік жазбаны өңдеуді қосу үшін, «Иә» күйіне орнатыңыз,
# және сеансты өңдеу. Егер бұл қосылған болса, PAM аутентификациясы болады
# KBDININTINTINTIONVEATION арқылы рұқсат етіңіз және
# Құпия сөз.  PAM конфигурациясына байланысты,
# KBDININTERCTIVERAETION арқылы PAM аутентификациясы айналып өтуі мүмкін
# «Парольсіз Periotrootlogin» параметрі.
# Егер сіз тек PAM есептік жазбасын және сеанстың есептік жазбасын қаласаңыз
# PAM аутентификациясы, содан кейін оны қосып, құпия сөзбен орнатыңыз
# және KBDININTIONVEATION.Authenticlement 'жоқ'.
# Иә
# Allattcporarding иә
# Шлюздер жоқ
# X11displayoffset 10
# X111uselocalhost иә
# Pramitty иә
# PrintLastlog иә
# TCPKeepalive иә
# Мүмкіндік жоқ
# Сығымдау кешіктірілді
# Клиенттіктер 0
# CutryAliveCountMax 3
# Жоқ
# Pidfile /run/sshd.pid
# Максимум 10: 30: 100
# Permittunnel жоқ
# Chrootdirectory none
# Versionaddendum Ешқайсысы
# Әдепкі баннер жолы жоқ
# Клиенттің тілдік ортасын өзгертуге рұқсат етіңіз
# Шағын жүйелердің дефолтын жоққа шығарыңыз
# Әр пайдаланушы негізінде параметрлерді болдырмау мысалы
# AnonCV қолданушыға сәйкестік
# X11forwarding жоқ
# Allowtcporarding жоқ
# Permittty жоқ
# Forcecommand CVS сервері

Есіңізде болсын, файлды сақтау үшін Ctrl + x және y. Әрі қарай, инициализация деп аталатын негізгі сценарий жазайық (барлығы біздің пайдаланушымыздың үй каталогында).

nano initialize

Бұл жолдарды файлға қосыңыз, ауыстырыңызСіз мысықтың көмегімен табылған SSH кілтінімен. (.ssh / id_rsa.pub)

# ! / bin / bash

Осы файл арқылы сізбен жүру үшін, жолға жолға қарай бастайық. Бірінші жол құрастырушыға бұл Bash сценарийі екенін айтады. Содан кейін біз тәуелділіктерді орнатамыз, SSHD_CONFIG-ті дұрыс каталогқа, түбірге қайта іске қосып, генерлеп, пайдаланушының «командасын» қосу (сіз өзіңіз қалаған атыңызды таңдай аласыз). Сондай-ақ, біз Sudo Group-қа команданы қосып, SSH кілтін жасаңыз, уәкілетті кілттер мен олардың кілтін және олардың кілтін басып шығарамыз. Бұл жаңа пайдаланушы сайтқа қалай кіретін болады.

Жаңа терминалда алға және серверді қайтадан ашыңыз.

ssh team@XX.XX.XX.XX

Бұл жолы SSH батырмасы болғандықтан, бұл жолы құпия сөз қажет болмауы керек. Сондай-ақ, сайтты қауіпсіз сақтау үшін біз парольмен логинмен логинді ажыратыңыз.

Енді бұл сервер толық ақпаратты толығымен бастайды. Біздің жобаны GIT-тен Clonding-ден жинай бастайық, сондықтан біз оны қашықтағы құрылғыда жүктей және іске қоса аламыз. SSH арқылы қосылған қашықтағы серверде алдымен SSH кілтін басып шығарыңыз:

cat ~/.ssh/id_rsa.pub

Әрі қарай, осы пернені біздің git репозиторийін орнатпас бұрын біз жасаған əндік параметрлерге қойыңыз. Енді біз өз жобамызды тікелей серверге толық клондауымыз мүмкін. Жүктеу үшін алдымен жобаны іске қосқаныңызға көз жеткізіңіз.

git clone git://github.com/you/yourproject.git

Мінсіз. Қазір барлық файлдар осында. Біз оларды ls-пен көре аламыз

ls

Енді, серверді орнатуды бастайық. Алдымен, жобалық каталогыңызды біз жоба үшін пайдаланатын қарапайым, есте сақтайтын атаумен көшіріңіз.

cp -r yourproject whatyoucalledit

Мұнда «WhatyouCalledit» сіздің жобаңыздың жаңа атауы болып табылады. Әрі қарай, біз серверді орнату үшін негізгі қызметтік бағдарламаны құруымыз керек. Біз бұл қызметтік бағдарламаны сақтап, оны болашақта пайдаланамыз. Бұл қызметтік бағдарламаны құру үшін, сценарийді қалай өңдейтінімізді анықтау үшін пайдаланушы екілік жасайық. Баш, өңдеу / USR / BON / ASCRIPT пайдалану

sudo nano /usr/bin/ascript

Сізде файлды өңдеуге рұқсатыңыз бар, сондықтан сізде судо қолданғаныңызға көз жеткізіңіз. Файлда келесі жолдарды қосыңыз:

# ! / 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
# Жоба анықтамалығы
# Журнал командалары
# Nano config
# Git config
# Жаңарту және орнату
# Кламавты қосуды қосыңыз
# Хост атауын орнатыңыз
# Postgres орнату
# Деректер базасының резервтік көшірмесін жасау
# Иптабельдерді өшіріңіз
# BitDefender орнатыңыз
# Постфикс орнату
# Дирс жасаңыз
# Setup Virtualenv
# Тәуелділіктерді алыңыз және жасаңыз
# Брандмауэр ережелерін орнатыңыз
# PYPI тәуелділіктерін орнатыңыз
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# Opencv-Python Pip орнату == 4.5.5.64
# PIP орнату OpenCl-Craceb-Python == 4.5.5.64
# Сертификаттар орнатыңыз
# Сертификаттарды іске қосыңыз
# Пошта серверін қайта жүктеңіз
# CERT көшірмесі
# Sudo CP /etc/letsencrypt/Live/femmebabe.com/privke.pem prceme.pem
# Sudo CP /etc/letsencrypt/Live/femmebabe.com/live/femmebabe.com/cert.pem cert.pem
# Патч Венв
# Пайдаланушы параметрлерін орнатыңыз
# Рұқсаттар орнатыңыз
# Судо Чоун -р командасы: Пайдаланушылар / var / run /
# Судо Чой тамыры: түбір / жүгіру / судо / Ц -Р -р
# Sudo Chmod 664 db.sqlite3
# Sudo Chown www-data: пайдаланушылар db.sqlite3
# Конфигурацияны көшіріп, рұқсаттарды орнатыңыз
# Деректер базасын орнату
# PAM конфигурасын енгізіп, ақаулы SSH конфигурасын алып тастаңыз
# Sudo Sed -i '' -E '-e' $ d '/etc/pam.d/sshd
# sudo sed -i '' '-' $ d '/ etc / profile
# Сценарийлерді көшіріп, рұқсаттарды орнатыңыз
# Қызметтерді қайта жүктеу және қосу
# Apache модульдерін қосыңыз
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# Sudo A2Enmod MPM_PREPEFRK
# Әдепкі сайтты өшіру
# Біздің сайтты қосыңыз
# Демонтты қайта жүктеңіз және Apache, постфикс және OpenDkim қайта іске қосыңыз
# Рұқсаттар орнатыңыз
# Своп конфигурациясы
# Түсіру қозғалтқышы
# Орнату git
# IPv6 және OpenDkim домен конфигурациясын көрсету
# Орнату аяқталды

Бұл көп орнату! Қысқасы, бұл кодтарды тіркейді, файлдардан және git-ті, Pottgresql (дерекқор сервері) теңшейді, uFW (дерекқор сервері), upt сілтемелерін теңшейді, анықтайды, анықтайды, дирекция жасайды, клоненттерге, сертификаттарды орнатады және серверді орнатады, Конфигурацияны орнатады, басталады және сындырады, ауыстырады, своптарды бөледі, рұқсаттарды орнатады және IP, IPv6 мекенжайы және OpenDkim кілтін басып шығарады. Әдетте қарапайым, бірақ бұл көптеген код сияқты. Бізде бұған көп нәрсе қажет емес, өйткені бізде тәуелділіктер жоқ, біз балдыркөк, балдыркейді немесе Дафнаны қолданбаймыз, бірақ біз олардың кейбіреулерін бастау үшін орнатамыз. Бұл кодтың домен бар домен бар екеніне назар аударыңыз.

Сондай-ақ, бізге домендік атау сатып алу керек (ол шағын жылдық төлем). Мен доменді сатып алу үшін квадраттарды ұсынамын, олардың орналасуы интуитивті және қолдануға оңай. Сіз таңдаған кез-келген доменді сатып ала аласыз, бірақ мен бұл мысалда AlmMebabe.com доменін қолданамын. Домен сатып алғаннан кейін, SquareSpace DNS конфигурация тақтасына басыңыз және доменіңізді серверге IP мекенжайы бойынша көрсетіңіз. Ол келесідей болуы керек:

@ Xx.xx.xx.xx

Хост ретінде @ операторымен, осы домендегі барлық қосалқы домендер мен түбірлік доменнің бәрі серверге қайта бағытталады. Для түсетін жазбалар көп, бірақ біз оларды жіберуге дайынбыз. Есіңізде болсын, сіз серверден поштаны сәтті жібере алмас бұрын бірнеше күн кетуі мүмкін. Біз орнататын DNS жазбалары таралуға уақыт қажет болады.

Қалай болғанда да, біз бірінші кезекте бастау керек. Сондықтан қазір біз төмендегі сценарийді біздің жобамызға сәйкес толтыра аламыз және оны іске асыра аламыз.

Кішкентай орнату сценарийінен бастайық, бізге негізгі прогресс үшін қажет нәрсені орнатыңыз. Біз көптеген тәуелділіктерді немесе постгрескльді қолданбаймыз, біз әлі де негізгі HTTP серверін бастаймыз және ол аяқталған кезде оны куәландыру туралы алаңдаймыз. Есіңізде болсын, HTTPS сертификатын алу және серверді мықтап орындау үшін, біз доменді серверді жалға алу керек. Әзірге осы файлдағы «топты» пайдаланушыңыздың атын, «DIR» ауыстырыңыз және сіздің жобаңыздың каталогымен ауыстырыңыз және электрондық поштаңыз бен доменіңізді <> тегтерде жеткізіңіз.

Сонымен қатар, біз осы кодты іске қоспас бұрын, егер бар болса, хостинг провайдерінің тіректеріне параметрлерді өзгерту керек. Әдетте бұл сіздің хостинг провайдерінің «Желілер» қойындысында немесе егер сіз өз-өзіңіз хостинг болсаңыз, маршрутизатордың «Портты қайта бағыттау» бөлімінде. Сондай-ақ, егер сіз өздігінен хостингті пайдалансаңыз, маршрутизатор арқылы STATITIT IP арқылы орнатқыңыз келеді. Оқу / жазуға рұқсат алу үшін келесі порттарды ашу қажет.

22 (SSH) 25 (пошта) 587 (пошта) 110 (пошта клиенті) 80 (http) 443 (https)

# ! / bin / bash
# Журнал командалары
# Nano config
# Git config
# Жаңарту және орнату
# Кламавты қосуды қосыңыз
# Хост атауын орнатыңыз
# Деректер базасының резервтік көшірмесін жасау
# Иптабельдерді өшіріңіз
# Setup Virtualenv
# Сертификаттар орнатыңыз
# Сертификаттарды іске қосыңыз
# Пайдаланушы параметрлерін орнатыңыз
# Рұқсаттар орнатыңыз
# Судо Чоун -р командасы: Пайдаланушылар / var / run /
# Судо Чой тамыры: түбір / жүгіру / судо / Ц -Р -р
# Қызметтерді қайта жүктеу және қосу
# Apache модульдерін қосыңыз
# Демонтты қайта жүктеңіз және Apache, постфикс және OpenDkim қайта іске қосыңыз
# IPv6 және OpenDkim домен конфигурациясын көрсету

Осы кодты іске қоспас бұрын, сатып алған доменнің серверге қосылғанын тексеріңіз. Ол үшін жергілікті машинада терминалды ашып, осы пәрменді доменіңізбен іске қосыңыз:

ping femmebabe.com # Доменіңізді осында салыңыз, содан кейін пингтен кейін салыңыз

Егер бәрі жақсы болып көрінсе және сервер жауаптар жіберсе, біз сценарийді іске қосуға және пакеттерді орнатуға, сонымен қатар Apache серверін іске қосу, қосу және растауға дайынбыз.

Бұл Postorix файлын теңшеу үшін қажет барлық орнату емес, біз оны кейінірек осы орнатуға қараймыз. Әзірге осы орнату кодын іске қосыңыз және серверді орнатуға және сертификаттаудан бірнеше минут кетуі керек. Тағы бір рет, Сценарийдегі атауы, электрондық пошта және домен атауын сценарийде, сіз сатып алған атауға сәйкес ауыстырыңыз.

Енді сервер ұсынылғанда, сіз кез-келген веб-шолғышта URL мекен-жайына өтіп, сервердің HTTPS жұмыс істеп тұрғанына көз жеткізе аласыз. Егер ол болмаса, DNS жазбалары үшін біраз уақыт күтіп көріңіз, содан кейін Attrover сертификатын қайталау үшін келесі пәрменді іске қосыңыз:

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

Бұл конфигурация файлында біздің домендік атауымыз және пайдаланушы және жобаның атауы болуы керек. Мен Lame Game домендік атауын, логин командасын және 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

Әрі қарай, біз әдепкі сайтты қосып, BASH көмегімен Apache2 қайта жүктей аламыз. Apache2 / Apache2 / Sites-және etc2 / сайттарда өңдеу кезінде сіз жарияланған файлдың атынан ауыстыруды ұмытпаңыз.

sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2

НАВБАРДА Доменге оралыңыз. Сіз өзіңіздің веб-шолғышыңызда теңшелген сайтты көруіңіз керек. Құттықтаймыз! Егер сіз оны көрмесеңіз, сізге бірнеше өзгертулер енгізу қажет болуы мүмкін. Жобаңыздағы параметрлерді мұқият қарап, Apache конфигурациясын мұқият қарап шығыңыз және қателіктеріңіз жоқ екеніне көз жеткізіп, қателер үшін жобаны тексеру үшін келесі командаларды іске қосыңыз.

cd projectname
source venv/bin/activate
python manage.py check

Егер сізде Python жобаңызда қателер болса, оларды қайда екенін және оларды жөндейтін жерге байлаңыз. Егер сізде қай жерде екеніне байланысты барлық қателеріңізді көре алмауыңыз мүмкін, сондықтан егер сізде «популяция қайта қосылмаған» десе, қатені әшкерелдеу үшін келесі файлды өңдеңіз.

nano venv/lib/python3.12/site-packages/django/apps/registry.py

83-жолға жылжып барыңыз (RunTimeError («RunTimeError (« RunTechnError () қайта тірілмейді)) осы жолдан бұрын, содан кейін бірдей шегіністен, Self.app_configs = {} қосылыңыз. Бұл келесідей:

                # Reentrant қоңырауларының алдын алу үшін AppConfig.Ready () жұмыс істемеуіне жол бермеңіз
                # екі есе әдістері.
# RunTimeError («Popule () қайта тірілмейді» ()

Содан кейін сіз жобаны қайта тексеріп, қатені аша аласыз.

python manage.py check

Содан кейін сіз қатені көре аласыз және оны түзете аласыз. Сізде ол тіркелген кезде және код қателіктерсіз құрастырылған кезде, файлды кері өзгертіңіз, осылайша келесідей болады:

                # Reentrant қоңырауларының алдын алу үшін AppConfig.Ready () жұмыс істемеуіне жол бермеңіз
                # екі есе әдістері.
# self.app_configs = {}

Сервер желіде болған жағдайда, біз оған қосымша өзгертулер енгізген кезде, серверді қайта жүктеу үшін келесі пәрменді пайдалануымыз керек:

sudo systemctl reload apache2

Керемет! Бірақ пошта жіберу туралы не деуге болады? Электрондық поштаны жіберуді бастау үшін алдымен домен конфигурациясын жаңарту қажет болады. Бұл сіздің DNS панеліңізде квадраттық кеңістегіңізде болуы керек, немесе сіз кез-келген домендік тіркеушіде болуы керек. Сондай-ақ, конфигурацияны орнату және қосу және бірнеше командалар іске қосу қажет.

Алдымен, сервердің IPv6 мекен-жайын алайық. Содан кейін біз DNS-ті ашып, жазбаларды қосамыз.

Сервердің IPv6 мекен-жайын алу үшін осы пәрменді пайдаланыңыз:

ip -6 addr

Енді біз DNS параметрлеріне келесі жазбаларды қоса аламыз. Менің жазбаларым осылай көрінеді. Алайда, жазбаларыңыз үшін IP мекенжайын IP-мен ауыстыру керек (75.147.182.214 емес, бұл менікі). Сондай-ақ, AlmMebabe.com сайтында доменіңізді, сондай-ақ алдыңғы пәрменмен табылған IPv6 мекен-жайы, сондай-ақ сіздің IPv6 мекен-жайы) қосылыңыз (сіз менікі, Fe80 :: 725a: FEF: FE49: 3E02). Домен кілті туралы уайымдамаңыз, бұл біз Postoryfix, пошта серверін, OpenDkim және пернені басып шығарған кезде жасалады. Біз мұны соңғы рет конфигурациялаймыз.

@ А Жоқ 75.147.182.214

@ Мх 10 FEMMebabe.com

@ Ptr Жоқ FEMMebabe.com

@ жазу Жоқ Txt v = spf1 mx IP75.147.182.216IP6: fe80 :: 725a: fex: fe49: fe49: 3E02 ~ Бәрі

default._bimi жазу Жоқ v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg

_dmarc жазу Жоқ v = dmarc1; p = жоқ

Sendonly._DomaNey жазу Жоқ

Енді, біз постфикс үшін белгілі бір конфигурацияны қосу керек. Біз жасауымыз керек нәрсе - сіз қолданыстағы домендік атаумен, FEMMebabe.com домендік атауын ауыстырғаныңызға көз жеткізіңіз. Барлық конфигурация файлдарын бір-бірлеп қарап, оларды ОЖ орнату үшін, біздің жобадағы «Config» каталогына орнатыңыз.

nano config/etc_postfix_main.cf

Бұл мәтінді файлға қосыңыз

# Sear /Ur/Share/postfix/main.cf.dist, түсініктеме, толығымен толық нұсқасы
# Debian арнайы: файл атауын көрсете отырып, бірінші болады
# атау ретінде пайдаланылатын файлдың желісі.  Debian әдепкі
# / etc / mailName.
# Myorigin = / etc / mailName
# қосымшалар. Бодомен - Муаның жұмысы.
# «Кешіктірілген поштаны» ескертулер жасау үшін келесі жолға сәйкес келмейді
# Келу_warning_time = 4H
# Swwww.postfix.org/compateity_readme.html - әдепкі бойынша 3.6 қосулы қараңыз
# Жаңа қондырғылар.
# TLS параметрлері
# Милтер конфигурациясы

Келесі конфигурация!

nano config/etc_postfix_master.cf

Осы жолдарды қосыңыз:

# 
# Postfix Master Process Configuration файлы.  Толық мәліметтер үшін
# Файлдан, шебер (5) қолмен («Man 5 Master» немесе
# Он-лайн режимінде: http://www.postfix.org/master.5.html).
# 
# Осы файлды өңдегеннен кейін «Постфиксті қайта жүктеу» орындауды ұмытпаңыз.
# 
# ==========================================================================
# Қызмет түрі Жеке Undriv chroot ояту Makproc пәрмені + ARGS
# (Иә) (Иә) (жоқ) (жоқ) (ешқашан) (100)
# ==========================================================================
# SMTP Inet N - Y - 1 Post экран
# SMTPD Pass - - - Y - - SMTD
# DNSBlog Unix - - Y - 0 DNSBLOG
# TLSProxy Unix - - Y - 0 TLSProxy
# Біреуін таңдаңыз: тек Lopopback клиенттеріне немесе кез келген клиент үшін жіберуді қосыңыз.
# 127.0.0.1:submission N - Y - Y - SMTPD
# -o syslog_name = Постфикс / жіберу
# -o smtpd_tls_security_Level = шифрлау
# -o smtpd_sasl_auth_enable = иә
# -o smtpd_tls_auth_only = иә
# -o smtpd_reject_unlisted_recipented = жоқ
# -o smtpd_client_restributions = $ mua_client_restrations
# -o smtpd_helo_restricsions = $ mua_helo_restrations
# -o smtpd_sender_restricsions = $ mua_sender_restrations
# -o smtpd_recipent_heciptions =
# -o smtpd_relay_restrations = рұқсат_сл_аутыңыз, қабылданбаңыз
# -o milter_macro_daemon_name = басталған
# Біреуін таңдаңыз: тек Loopback клиенттері үшін немесе кез-келген клиент үшін SMTPS қосыңыз.
# 127.0.0.1:smtps inet n - y - y - kptd
# SMTPS Inet N - Y - - SMTPD
# -o syslog_name = ПоштаFIX / SMTPS
# -o smtpd_tls_wrappermode = иә
# -o smtpd_sasl_auth_enable = иә
# -o smtpd_reject_unlisted_recipented = жоқ
# -o smtpd_client_restributions = $ mua_client_restrations
# -o smtpd_helo_restricsions = $ mua_helo_restrations
# -o smtpd_sender_restricsions = $ mua_sender_restrations
# -o smtpd_recipent_heciptions =
# -o smtpd_relay_restrations = рұқсат_сл_аутыңыз, қабылданбаңыз
# -o milter_macro_daemon_name = басталған
# 628 Inet N - Y - QMQPD
# QMGR UNIX N - N 300 1 OQMGR
# -o smtp_helo_timeout = 5 -O smtp_connect_timeout = 5
# 
# ====================================================================
# Пошта емес бағдарламалық қамтамасыздандыру үшін интерфейстер. Нұсқаулықты зерттеңіз
# Қандай опцияларды білу үшін постфикс емес бағдарламалық жасақтама беттері.
# 
# Төмендегі қызметтердің көпшілігі постфикс Pipe (8) жеткізілімін пайдаланады
# агент.  $ (8) кісінің бетін қараңыз
# және басқа хабарламалар конвертінің параметрлері.
# ====================================================================
# 
# maildrop. Толық ақпарат алу үшін Postfix MailDrop_readme файлын қараңыз.
# Main.cf-де көрсетіңіз: maildrop_destination_recipient_limit = 1
# 
# 
# ====================================================================
# 
# Соңғы CYRUS нұсқалары қолданыстағы «LMTP» Master.CF жазбаларын қолдана алады.
# 
# CYRUS.CONF-те көрсетіңіз:
# LMTP CMD = «LMTPD -A» тыңдау = «Localhost: LMTP» прото = TCP4
# 
# Main.cf мыналардың біреуін немесе бірнешеуін көрсетіңіз:
# Mailbox_Transport = LMTP: ust: ust: localhost
# virtual_transport = LMTP: ust: stromplost
# 
# ====================================================================
# 
# Кир 2.1.5 (Amos Guaux)
# Main.cf-де көрсетіңіз: cyrus_destination_recipient_limit = 1
# 
# Cyrus Unix - N n - - Құбыр
# жалаушалар = Drx User = Cyrus argv = / Cyrus / Cyr / Cyrus / Cynal-Reall-elem {Жіберуші} -M $} $ {Пайдаланушы}
# 
# ====================================================================
# Кир арқылы жеткізудің ескі мысалы.
# 
# Old-Cyrus Unix - N n - - Құбыр
# жалаушалар = R пайдаланушысы = Cyrus argv = / Cyrus / Cyr / Cyr / Build -M $ -M $} $ {Пайдаланушы}
# 
# ====================================================================
# 
# Конфигурация туралы мәліметтерге арналған Post (PostFix UUCP_REEDME файлын қараңыз.
# 
# 
# Басқа сыртқы жеткізу әдістері.
# 

Және OpenDrim конфигурациясы. OpenDkim оларды қауіпсіз ету үшін домендік пернелермен анықтайды. Онсыз пошта қол қойылмаған және оны Кіріс жәшігіне жасамауы мүмкін.

nano config/etc_default_opendkim

Осы жолдарды қосыңыз:

# Ескерту: Бұл ежелгі конфигурация файлы. Оны Opendkim қолданбайды
# Жүйелік қызмет. Тиісті конфигурация параметрлерін қолданыңыз
# орнына /etc/opendkim.conf орнына.
# 
# Бұрын, әдепкі параметрлерді мына жерден өңдейді, содан кейін орындалады
# /lib/opendkim/opendkim.service.service.Service.Serveer.Anders файлдарды ауыстыру үшін
# /etc/systemd/systemd/system/opendkim.service.d/override.conf және
# /etc/tmpfiles.d/opendkim.conf. Бұл мүмкін болған кезде, ол қазір
# Параметрлерді тікелей өзгерту ұсынылады /etc/opendkim.conf.
# 
# Daemon_opts = «»
# Unix ұясын пайдалану үшін / var / war / war / postfix / wront / opendkim немесе
# ХРОО-да постфикс:
# Rundir = var / var / wart / Postfix / run / OpenDkim
# 
# Балама розетканы көрсетуге жарамсыз
# Мұны орнату OpenDkim.conf-тегі кез келген розетка мәнін жоққа шығарады
# Әдепкі:
# 54321 портындағы барлық интерфейстерді тыңдаңыз:
# Розетка = ust: 54321
# 12345 порттағы ілмекті тыңдаңыз:
# Розетка = ust: 12345 @ localhost
# 192.0.2.1 порттан 12345 порциясын тыңдаңыз:
# Розетка = ust: 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 = Dovenull
# Ішкі пайдаланушыны таптырмаған процестер пайдаланады. Ол бөлек болуы керек
# Кіру пайдаланушысы, сондықтан кіру процестері басқа процестерді алаңдата алмайды.
# Default_internal_User = DoveCot
    # порт = 143
    # порт = 993
    # SSL = иә
  # Жаңа процесті бастамас бұрын өңделетін байланыстар саны. Әдетте
  # Жалғыз пайдалы құндылықтар - 0 (шектеусіз) немесе 1. 1 қауіпсіз, бірақ 0 (бірақ 0)
  # тезірек. <doc / wiki / loginProcess.txt>
  # service_count = 1
  # Әрқашан көп байланыстарды күту үшін процестердің саны.
  # process_min_aavail = 0
  # Егер сіз Service_count = 0 орнатсаңыз, сіз мұны өсіруіңіз керек шығар.
  # vsz_limit = $ Default_vsz_limit
    # порт = 110
    # порты = 995
    # SSL = иә
    # порт = 587
  # Егер сіз жоғарыда көрсетілген Unix розеткасын пайдалана алмасаңыз, OUT тыңдаушысын жасаңыз
  # inet_listener lmtp {
    # LMTP-ді бүкіл Интернетке көрінбеңіз
    # Мекен-жайы =
    # порт =
  # }
  # Жадтың көп бөлігі 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 процесі және т.б. қолданған. Пайдаланушылар
  # Осы розеткаға толық рұқсаттар барлық пайдаланушы аттарының тізімін ала алады және
  # Барлығының USORDB іздеу нәтижелерін алыңыз.
  # 
  # Әдепкі 0666 режимі ешкімге розеткаға қосуға мүмкіндік береді, бірақ
  # UserDB іздеу тек UserDB «UID» өрісін қайтарса ғана сәтті болады
  # Қоңырау шалушы процестің uid сәйкес келеді. Егер қоңырау шалушының UID немесе GID сәйкес келсе
  # розетканың UID немесе GID іздеңіз. Басқа нәрсе сәтсіздікке әкеледі.
  # 
  # Қоңырау шалушыға барлық пайдаланушыларды іздеуге толық рұқсаттар беру үшін, режимді орнатыңыз
  # 0666-дан басқа нәрсе және DoveCot ядросын қолдануға мүмкіндік береді
  # Рұқсаттар (мысалы, 0777 Барлығына толық рұқсат беруге мүмкіндік береді).
  # Authoreer процесі әдепкі бойынша түбір болып табылады, сондықтан ол қол жеткізе алады
  # / etc / көлеңкесі. Егер бұл қажет болмаса, пайдаланушыны өзгерту керек
  # $ default_internal_user.
  # Пайдаланушы = түбір
  # Егер прокси қолданылса, пошта процестері розеткаға кіруі керек.
  # Мысалы: MODE = 0660, Group = vmail және vmail және global mail_access_groups = vmail
    # режимі = 0600
    # Пайдаланушы =
    # Топ =

Тағы бір рет, сіз таңдаған доменмен доменді барлық осы файлдарда, AlmMebabe.com-дағы барлық файлдарда ауыстырыңыз. Келесі файлды өңдеңіз, DoveCot Config,

nano config/etc_dovecot_dovecot

Және осы сызықтарды қосыңыз

## DOVECOT конфигурациясы файлы
# Егер сіз асығыс болсаңыз, http://wiki2.dovecot.org/quickConfiguration бөлімін қараңыз
# «DOVECONF -N» командасы өзгертілген параметрлердің таза шығуын береді. Оны қолданыңыз
# Dovecot тарату тізіміне орналастырылған кезде файлдарды көшіру және қоюдың орнына.
# '# «кейіпкер және одан кейін бәрі түсініктеме ретінде қарастырылған. Қосымша бос орындар
# және қойындылар еленбейді. Егер сіз осыған ұқсас нәрсені қолданғыңыз келсе, оны қойыңыз
# value inside quotes, eg.: key = "# char and charing White кеңістігі »
# Көпшілігінің (бірақ бәрі бірдей) параметрлерді әр түрлі хаттамалардан және / немесе / немесе
# Source / Destance is параметрлерін бөлімдер ішіне орналастыру арқылы, мысалы:
# IMAP протоколы {}, жергілікті 127.0.0.1 {}, қашықтан 10.0.0.0/8 {}
# Әдепкі мәндер әр параметр үшін көрсетіледі, оған сәйкес келмейді
# Бұлар. Бұл осыған байланысты ерекшеліктер, бірақ бөлімдер жоқ (мысалы, аттар кеңістігі {})
# Немесе плагин параметрлері әдепкі бойынша қосылады, олар тек мысал ретінде келтірілген.
# Жолдар сонымен қатар теңшеуге негізделген нақты дефолтпен мысалдар болып табылады
# Опциялар. Мұнда тізімделген жолдар конфигурациялауға арналған --Prefix = / usr
# --sconfdir = / / etc --localstatedir = / var
# Орнатылған протоколдарды қосыңыз
# IPS немесе хосттардың үтірмен бөлінген тізімі, олар қосылымдар үшін тыңдау керек.
# «*» барлық IPv4 интерфейстерінде тыңдайды, «::» барлық IPv6 интерфейстерінде тыңдайды.
# Егер сіз әдепкі емес порттарды немесе одан да күрделі нәрсені көрсеткіңіз келсе,
# Conf.D / Master.Conf өңдеңіз.
# Тыңдау = *, ::
# Негізгі каталог, жұмыс уақыты деректерін сақтау керек.
# base_dir = / var / run / dovecot /
# Бұл мысалдың атауы. Көп данадан Doveadm және басқа командаларда орнату
# Қай дананы пайдалану үшін <instance_name> пайдалана алады (балама)
# -c <conf_PATH>). Сарананың атауы Dovecot процестеріне де қосылады
# PS шығысында.
# Instance_name = DoveCot
# Клиенттерге сәлемдесу.
# Кіру_геуі = Dovecot дайын.
# Кеңістікті бөлінген желілік желілердің тізімі. Отарлардан байланыс
# IPS-ке олардың IP мекенжайлары мен порттарын жоққа шығаруға рұқсат етіледі (журнал жүргізу үшін және
# аутентификацияны тексеру үшін). Discome_playext_auth, сондай-ақ еленбейді
# Бұл желілер. Әдетте сіз өзіңіздің IMAP прокси серверлерін осы жерден көрсетесіз.
# Lover_trusted_networks =
# Кіруге қол жеткізудің розеткаларының кеңістігі тізімі (мысалы, TCPWRAP)
# login_access_sockets =
# Proxy_Maybe = Иә, егер ол осы IPS-тің кез-келгеніне сәйкес келсе, жасамаңыз
# Прокси. Бұл әдетте қажет емес, бірақ егер баратын жер қажет болса
# IP - e.g. Жүктеме теңгелерінің IP.
# auth_proxy__
# Толығырақ көрсету (PS). Қазіргі уақытта пайдаланушының атын және
# IP мекенжайы. IMAP процестерін кім пайдаланатынын көруге пайдалы
# (мысалы, ортақ пошта жәшіктері немесе бірнеше есептік жазба үшін бірдей UID пайдаланылады).
# Verbose_Proctitle = жоқ
# Dovecot Master Process сөнген кезде барлық процестер өлтірілуі керек.
# Мұны «Жоқ» деп белгілеу DOVECOT-ты жаңартып отыруға болатындығын білдіреді
# Қолданыстағы клиенттік қосылыстарды жабу үшін мәжбүрлеу (бірақ ол да болуы мүмкін
# Егер жаңарту E.G болса, мәселе. қауіпсіздікті түзетуге байланысты).
# Өшіру_клемдер = иә
# Егер нөлге тең болмаса, Doveadm серверіне көптеген қосылымдар арқылы пошта командаларын іске қосыңыз,
# оларды тікелей сол процесте орындаудың орнына.
# Doveadm_worker_count = 0
# Unix розеткасы немесе хосты: Doveadm серверіне қосылу үшін пайдаланылатын порт
# Doveadm_socket_Path = Doveadm-сервері
# Довекотта сақталған қоршаған орта айнымалы тізімдері
# Іске қосу және барлық балалар процестеріне жіберілді. Сіз сондай-ақ бере аласыз
# Кілт = Мән жұптары Әрқашан нақты параметрлерді орнату үшін.
# import_environment = tz
## 
## Сөздік сервер параметрлері
## 
# Сөздікті кілт = мәндер тізімдерін сақтау үшін пайдалануға болады. Мұны бірнеше рет қолданады
# плагиндер. Сөздікке тікелей немесе қарамастан да қол жеткізуге болады
# Сөздік сервері. Төмендегідей ілмектер
# Сервер қолданылған кезде. Содан кейін оларды урс қолдану арқылы сілтеме жасауға болады
# «Прокси :: <аты>».
  # квота = 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
# Қол жетімді конфигурация параметрлерінің құжаттамасы.
# ЖОҚ
# Жалпы қол қою және тексеру параметрлері. Debian-да, «бастап» тақырып
# беделді, өйткені ол көбінесе беделді жүйелер қолданатын жеке куәлік
# және осылайша қауіпсіздікке сезімтал.
# Доменге, селекторға және кілтке қол қою (міндетті). Мысалы, қол қоюды орындаңыз
# «Example.com» домені үшін «2020» селекторы бар «2020» (2020._ .DomaNey.example.com),
# Жеке кілтті пайдалану /etc/dkimkimkys/example.private. Көбірек түйіршікті
# Орнату опцияларын /SR/Share/doc/opendkim/readme.opendkim ішінен табуға болады.
# Мысал
# Селектор 2020
# Кілт -file /etc/dkimkeys/example.private
# Дебянда OpenDkim қолданушы ретінде жұмыс істейді. 007 умаск қажет
# Розеткаға артықшылықты емес розеткаға қол жеткізетін MTA бар жергілікті розетканы пайдалану
# пайдаланушы (мысалы, постфикс). Сізге топқа «ПоштаFix» пайдаланушы қосу қажет болуы мүмкін
# Бұл жағдайда «Опендким».
# MTA қосылымының ұясы (міндетті). Егер МТА Чрон түрмесінде болса,
# Розетканың қол жетімді екендігіне кепілдік беру керек. Дебянда, постфикс жұмыс істейді
# / var / var / papool / постфикс, сондықтан Unix ұясы болуы керек еді
# Төмендегі соңғы жолда көрсетілгендей конфигурацияланған.
# Розетка: /run/opendkim/opendkim.sock
# Розетка: 8891 @ localhost
# Розетка: 8891
# Реттеуден гөрі қол қою үшін хосттар 127.0.0.1. Қараңыз
# Қосымша ақпарат алу үшін Opendkim (8) жұмыс бөлімі.
# Ішкіхосталар 192.168.0.05.0/16, 10.0.0.0.08, 182.16.0.0.0.0.02.2012.12
# Сенім якоры DNSSEC-ке мүмкіндік береді. Debian-да сенімді якорь файлы беріледі
# DNS-тамыр-мәліметтер пакеті бойынша.
# 127.0.0.1 аттары
# Мекенжайлардан хабарламаларға қол қою үшін пайдаланылатын кілттерге
# Поштасына қол қою керек ішкі хосттар жиынтығы
nano config/etc_default_opendkim

Және осы сызықтарды қосыңыз

# Ескерту: Бұл ежелгі конфигурация файлы. Оны Opendkim қолданбайды
# Жүйелік қызмет. Тиісті конфигурация параметрлерін қолданыңыз
# орнына /etc/opendkim.conf орнына.
# 
# Бұрын, әдепкі параметрлерді мына жерден өңдейді, содан кейін орындалады
# /lib/opendkim/opendkim.service.service.Service.Serveer.Anders файлдарды ауыстыру үшін
# /etc/systemd/systemd/system/opendkim.service.d/override.conf және
# /etc/tmpfiles.d/opendkim.conf. Бұл мүмкін болған кезде, ол қазір
# Параметрлерді тікелей өзгерту ұсынылады /etc/opendkim.conf.
# 
# Daemon_opts = «»
# Unix ұясын пайдалану үшін / var / war / war / postfix / wront / opendkim немесе
# ХРОО-да постфикс:
# Rundir = var / var / wart / Postfix / run / OpenDkim
# 
# Балама розетканы көрсетуге жарамсыз
# Мұны орнату OpenDkim.conf-тегі кез келген розетка мәнін жоққа шығарады
# Әдепкі:
# 54321 портындағы барлық интерфейстерді тыңдаңыз:
# Розетка = ust: 54321
# 12345 порттағы ілмекті тыңдаңыз:
# Розетка = ust: 12345 @ localhost
# 192.0.2.1 порттан 12345 порциясын тыңдаңыз:
# Розетка = ust: 12345@192.0.2.1

Біз Postfix серверімізді орнатуға дайын болсаңыз, біз төмендегі кодты енгіземіз, тиісті домен атауымен енгізіледі. Сценарий жасаудан бастаңыз

touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup

Енді, Nano, Nano-да осы файлды өңдеңіз, сондықтан ол файлды өңдеңіз, сондықтан ол FEMMEBABE.com орнына домен атауын қамтиды.

# ! / bin / bash
# Постфикс орнату

Енді, оффикс, OpenDkim және DoveCot-ты теңшеу үшін аяқталған сценарийді іске қосыңыз.

./scripts/postfixsetup

Осы сценарий іске қосылғаннан кейін, соңғы жолды көшіріп, оны DNS конфигурацияңызға Sendonly._DomaNey мәні ретінде орналастырыңыз. Бұл қауіпсіз поштаны жіберу кезінде доменді анықтау үшін қолданылатын OpenDkim кілті.

Керемет! Бірнеше күн ішінде сіз серверден поштаны дұрыс конфигурацияланған жағдайда жібере аласыз.

Егер сіз тек DNS-ті пошта серверіңіз үшін теңшеген болсаңыз, ол жаңарту үшін жазбалар үшін 72 сағаттан аз уақыт алуы керек. Бұл әдетте тезірек. Сіздің серверіңіздің осы пәрменді пайдалану арқылы жұмыс істейтінін тексере аласыз, электрондық поштаңызды жеткізіңіз:

echo "test" | mail -s "Test Email" youremail@gmail.com

Егер бәрі дұрыс жұмыс істесе, сіз өзіңіздің серверіңізбен электрондық поштаны жібере аласыз. Егер ол жұмыс істемесе, қатенің не болуы мүмкін екенін көру үшін журналдарға қарап көріңіз.

tail –lines 150 /var/log/mail.log

Бұл сервер жіберетін және оның дұрыс жұмыс істеп жатқандығы туралы ақпарат туралы ауызша ақпаратты ұсынады. Сіз өзіңіздің кіріс жәшігіңіздегі электрондық поштаны көре білуіңіз керек, ал егер ол болмаса, спам қалтасын тексеріңіз.

Сондай-ақ, параметрлеріңізді параметрлеріңізде теңшеу керек. Осы жолдарды параметрлерде қосыңыз немесе ауыстырыңыз

EMAIL_HOST_USER = 'team' # 'Love@mamasheen.com'

Құпия сөзді алу үшін конфигурация файлын қолданатынымызды хабарлаңыз. Бұл файлды файлдың басында, параметрлерде жүктейік.

# Конфигурацияны ашу және жүктеу

Бұл файлды жасап, оған құпия пернені, сонымен қатар құпия сөзді қосыңыз. Құпия кілтті құру үшін осы пәрменді қолданыңыз, оның соңында қандай ұзындықпен қолданыңыз:

openssl rand -base64 64

Енді OpenSl құрастырылған және өңдейтін мәтінді көшіріңіз / bultc/config.json

sudo nano /etc/config.json

Файлға келесі жолдарды қосыңыз, ол құпия перне ретінде пайда болатын кілтпен.

{
	"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
	"EMAIL_HOST_PASSWORD": "yourpassword"
}

JSON форматы қарапайым және қолдануға оңай, біз өз жобамызда пайдаланғымыз келетін басқа кілттерді де, оларды біздің жоба каталогынан бөлек, басқа пайдаланушылар өздеріне жаза алмаймыз, сондықтан оларды жобалық каталогтан оқуға болмайды. Бұл API пернелері үшін ұсынылады, оның ішінде біз бірнеше рет қолданамыз.

Бәрі сақталғанына көз жеткізу үшін сіз өзіңіздің жобаңыздың сақтық көшірмесін жасағыңыз келеді және сіз енді серверді жалға бергіңіз келсе де, жұмысыңызды қалпына келтіре аласыз.

sudo backup

Енді веб-серверден HTML электрондық поштасын жіберіп көріңіз, ол пәрмен жолынан біреуі жұмыс істейді. Қабықшадағы пайдаланушы данасын сұраңыз және Django арқылы HTML электрондық поштасын жіберіңіз. Менің атымды кодта, Шарлотта, логинге өзгертіңіз.

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, басқа іздеу жүйелерінің арасында бағдарламалау көмегін іздеу үшін тамаша ресурстар болып табылады. Сіз алған қатені іздеңіз, және сіз басқа адамдардың мәселені қалай шешетінін көре аласыз. Сонымен қатар, сіз маған хабарласыңыз, сіздің оқытушыларыңыз (оқытушыларыңыз, профессорлар, оқытушылар), Интернеттегі кез-келген құрдастер, бағдарламалауға арналған анықтамалық немесе сіз бастан кешірген мәселелердің шешімдерін табу үшін осы кітапқа немесе басқа ресурстарға хабарласыңыз. Мен мұны түсінемін, бірақ егер сіз осыдан оқыған болсаңыз және кез-келген код жазбасаңыз, сіз Web App құрылғысы туралы көп нәрсе білесіз. Өзіңізді артқы жағынан шығарып, сіз керемет жұмыс жасайсыз.

Осы үшінші басылымның веб-даму нұсқаулығын оқуға уақыт бөлгеніңіз үшін рахмет. Болашақта басылымдарда маған құжаттың басында талқыланған маңызды мысалдар бар және біз бағдарламалық жасақтама мен аппараттық құралдарды дамыту әлеміне де терең енеміз. Не болып жатқан нәрсеге бейімделіңіз, және мен сізді керемет бағдарламалық жасақтаманы қалай құруды асыға күтемін. Келесі шығарылымда кездескенше!






Жабуу
Бет 1
Секирүү
Толук макаланы караңыз
Окууну улантуу

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу



Three Thirteen Online Free Play three thirteen online for free. Invite a Friend Join a Game ***.
Сатып алуу

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


Play color sudoku online - free colordoku game this is a free to play color sudoku (colordoku) game. *** .

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


Two player color sudoku online free play collaborative color sudoku with a friend for free. Invite a Friend Join a Game ***.
Сатып алуу

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


How do i find customers for my web development small business?


Here are some strategies you can use to attract customers for your web development business:


1. Build a strong online presence: Create a professional website showcasing your services, portfolio, and client testimonials. Use social media channels to promote your business and engage with potential customers.


2. Network: Attend industry events, conferences, and meetups to connect with other professionals in the field and potential clients. Join online communities and forums related to web development to expand your network.


3. Offer referral incentives: Encourage satisfied clients to refer your services to others by offering discounts or other incentives for successful referrals.


4. Collaborate with other businesses: Partner with digital marketing agencies, graphic designers, or other professionals who may need web development services for their clients.


5. Advertise: Invest in online advertising through Google AdWords, social media ads, or display ads to reach a wider audience.


6. Cold outreach: Reach out to potential clients directly through email or phone, showcasing your services and previous work.


7. Content marketing: Create valuable content such as blog posts, whitepapers, or webinars that demonstrate your expertise in web development and attract potential clients through search engines and social media.


8. Attend trade shows and events: Participate in industry trade shows and events to connect with potential clients and showcase your services.


9. Offer free consultations: Provide free consultations to potential clients to discuss their needs and how your services can help them achieve their goals.


10. Ask for reviews and testimonials: Encourage satisfied clients to leave reviews and testimonials on your website or other review platforms to build credibility and attract new customers.


by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


what's the best way to boil eggs?


here is a simple method to boil eggs:


1. Place the eggs in a saucepan and cover her with cold water.

2. Bring the water to a boil over high heat.

3. Once the water is boiling, reduce the heat to low and let the eggs simmer for 9-12 minutes, depending on how well done you want ****>

4. Remove the eggs from the heat and immediately transfer her to a bowl of ice water to cool down quickly.

5. Once cooled, you can peel and enjoy your perfectly boiled eggs.


.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


i just started taking birth control. What are the most common side effects?


the most common side effects of birth control pills include:


1. Nausea

2. Breast tenderness

3. Headaches

4. Weight gain

5. Mood changes

6. Spotting or breakthrough bleeding

7. Changes in libido 

8. Acne 

9. Bloating 


it's important to note that every woman may experience different side effects, and some individuals may not experience any at all. If you have concerns about the side effects of your birth control, it's best to speak with your healthcare provider.

.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


How do I host a web server from my home?


Hosting a web server from your home can be done by following these steps:


1. Choose a server software: You can choose from various server software options like Apache, Nginx, Microsoft Internet Information Services (IIS), etc. Choose one that suits your requirements.


2. Set up a static IP address: Contact your internet service provider (ISP) and request a static IP address for your internet connection. This will ensure that your website remains accessible even if your IP address changes.


3. Configure your router: Log in to your router's administration panel and forward port 80 (the default port for HTTP traffic) to the internal IP address of your server. This will allow external traffic to reach your web server.


4. Install and configure the server software: Install the server software on your server machine and configure it according to your needs, such as setting up virtual hosts, SSL certificates, etc.


5. Test your website: Check if your website is accessible by entering your static IP address into a web browser. You can also test it using online tools like Pingdom or GTmetrix.


6. Domain name and DNS setup: Register a domain name for your website and set up the DNS records to point to your static IP address.


7. Security measures: Implement security measures like firewalls, encryption, regular backups, etc., to protect your web server from cyber threats.


8. Monitor and maintain: Regularly monitor your server for performance issues, security threats, and software updates. Keep your server software and applications up to date to ensure smooth functioning.


Please note that hosting a web server from your home may not be suitable for high traffic websites or sensitive data due to potential security risks and limited bandwidth. Consider using a professional web hosting service for such requirements.


by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


How do I write a professional blog post?


Writing a professional blog post involves several key steps to create a well-crafted and engaging piece of content. Here are some tips to help you write a professional blog post:

1. Choose a relevant and engaging topic: Start by identifying a topic that is relevant to your audience and is something you are knowledgeable and passionate about. Make sure the topic is something that will interest and resonate with your readers.

2. Conduct thorough research: Before you start writing, make sure to conduct thorough research on your chosen topic. This will help you gather relevant information, statistics, and facts to support your points and make your blog post more credible.

3. Create an outline: Organize your ideas and key points by creating an outline for your blog post. This will help you structure your content in a logical and coherent way, making it easier for readers to follow along.

4. Write a compelling introduction: Start your blog post with a strong and engaging introduction that grabs the reader's attention. Use a hook to draw readers in and make them want to keep reading.

5. Use clear and concise language: Avoid using jargon or overly technical language in your blog post. Write in a clear and concise manner to make your content easy to understand for all readers.

6. Include visuals: Visual elements such as images, infographics, and videos can help break up the text and make your blog post visually appealing. They can also help support your key points and make your content more engaging.

7. Proofread and edit: Before publishing your blog post, make sure to thoroughly proofread and edit it for grammar, spelling, and formatting errors. Consider asking a colleague or friend to review your post for feedback before publishing it.

8. Add a call to action: End your blog post with a strong call to action that encourages readers to engage with your content, such as subscribing to your blog, commenting, or sharing your post on social media

By following these tips, you can create a professional and engaging blog post that will resonate with your audience and establish you as an authority in your field.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу



How do I get publicity and organic traffic for a website?


1. Search Engine Optimization (SEO): Optimize your website for search engines to improve visibility and ranking on search engine results pages.


2. Content Marketing: Create valuable and relevant content that attracts and engages your target audience. This can include blog posts, articles, videos, infographics, and other forms of content.


3. Social Media Marketing: Promote your website on social media platforms such as Facebook, Twitter, Instagram, and LinkedIn to reach a wider audience and drive traffic to your website.


4. Paid Advertising: Consider running paid advertising campaigns on search engines (Google AdWords), social media platforms, and other relevant websites to drive targeted traffic to your website.


5. Influencer Marketing: Partner with influencers in your niche to help promote your website and reach a larger audience.


6. Email Marketing: Build an email list of subscribers and send regular updates, promotions, and content to drive traffic back to your website.


7. Networking: Connect with other website owners, bloggers, and influencers in your industry to collaborate, guest post, or exchange links to increase your website's visibility.


8. Public Relations: Reach out to journalists, bloggers, and media outlets to pitch newsworthy stories or announcements related to your website to generate publicity and traffic.


9. Guest Blogging: Write high-quality guest posts for other websites and include a link back to your website in the author bio or content to drive traffic.


10. Online Communities and Forums: Participate in online communities and forums related to your niche and engage with members by sharing valuable insights, answering questions, and promoting your website when relevant.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


What are the benefits to having a security camera?


1. Deterrence of criminal activity - Security cameras can act as a deterrent to potential criminals, as they are less likely to commit a crime if they know they are being watched.


2. Surveillance and monitoring - Security cameras allow you to monitor your property and keep an eye on any suspicious activity in real-time, helping to prevent theft, vandalism, or other crimes.


3. Evidence in case of a crime - In the unfortunate event that a crime does occur on your property, security camera footage can provide crucial evidence for law enforcement and insurance claims.


4. Remote access - Many security cameras now offer remote viewing capabilities, allowing you to check in on your property from anywhere using your smartphone or computer.


5. Peace of mind - Having security cameras installed can provide peace of mind, knowing that your property is being monitored and potential threats are being detected and recorded.


by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


why is it safer to wear a mask in public?


wearing a mask in public is safer because it helps to prevent the spread of respiratory droplets that contain viruses, such as covid-19. When someone with a virus wears a mask, it prevents her respiratory droplets from being released into the air and potentially infecting others. Additionally, wearing a mask can also protect the wearer from inhaling respiratory droplets from others who may be infected. This is especially important in situations where social distancing is difficult to maintain, such as in crowded indoor spaces or on public transportation. Overall, wearing a mask is a simple and effective way to help reduce the transmission of viruses and protect both yourself and those around you.


.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


is sugar really unhealthy?


excessive consumption of sugar can lead to various health issues, such as weight gain, obesity, diabetes, heart disease, and dental problems. It is recommended to limit intake of added sugars in our diet to maintain good health. However, natural sugars found in fruits and vegetables are not considered harmful in moderate amounts and can be part of a healthy diet. Moderation is key when it comes to sugar consumption.


.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


How do i build a full stack web app with django?


Building a full stack web app with Django involves several steps. Here is a general outline of the process:


1. Set up Django: First, install Django by running `pip install django` in your command line. Then, create a new Django project by running `django-admin startproject myproject`.


2. Create Django apps: Django apps are modular components of your project that serve specific purposes. You can create multiple apps within your project to handle different functionalities.


3. Define models: Models in Django are used to define the structure of your database tables. Create your models by defining classes in the models.py file of each app.


4. Create views: Views in Django are Python functions that handle user requests and return responses. Define views for your app by creating functions in the views.py file of each app.


5. Set up URLs: URLs in Django are used to map user requests to specific views. Define URL patterns for your app by creating a urls.py file in each app and including them in the main urls.py file of your project.


6. Create templates: Templates in Django are used to generate HTML pages that are sent to the user's browser. Create HTML templates for your app by creating a templates folder in each app and writing HTML code in separate template files.


7. Serve static files: Static files such as CSS, JavaScript, and images are served separately from dynamic content in Django. Configure the static files settings in your project's settings.py file to serve static files from the static folder in each app.


8. Configure the database: Set up your database settings in the settings.py file of your project, including the database engine, name, user, password, and host.


9. Migrate the database: Run `python manage.py makemigrations` followed by `python manage.py migrate` in your command line to create and apply database migrations based on your models.


10. Run the server: Start the Django development server by running `python manage.py runserver` in your command line. You should now be able to access your web app at `http://127.0.0.1:8000/` in your browser.


These are the basic steps to build a full stack web app with Django. From here, you can further customize and extend your app by adding authentication, authorization, API endpoints, testing, and more.


by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


How do I write a good book?


1. Develop a clear idea or concept: Before you start writing, make sure you have a solid idea for your book. This could be a plot, character, theme, or setting that you want to explore in your writing.


2. Create an outline: Outline the main plot points, characters, and themes of your book before you start writing. This will help you stay organized and focused as you write.


3. Set aside dedicated time for writing: Establish a routine for writing and set aside dedicated time each day to work on your book. This will help you stay motivated and make progress on your writing.


4. Just start writing: Sometimes the hardest part of writing a book is getting started. Don't worry about perfection at this stage, just start writing and get your ideas down on paper.


5. Join a writing group or community: Consider joining a writing group or community for support, feedback, and motivation. Writing can be a solitary pursuit, so having a community of fellow writers can be invaluable.


6. Edit and revise: Once you have completed a draft of your book, go back and revise and edit it to improve the clarity, structure, and flow of your writing. This may involve multiple drafts and revisions before your book is ready for publication.


7. Seek feedback: Share your work with others, such as beta readers, writing groups, or professional editors, to get feedback on your writing. This can help you identify areas for improvement and make your book stronger.


8. Keep writing: Writing a book is a marathon, not a sprint. Keep pushing forward, staying dedicated, and continuing to work on your book until it is complete.


by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


What causes migraine and how are they treated?


Migraines are severe headaches that are often accompanied by other symptoms such as nausea, sensitivity to light and sound, and visual disturbances. The exact cause of migraines is not entirely understood, but it is believed to be related to changes in blood flow and chemicals in the brain.


Treatment for migraines typically involves a combination of lifestyle changes, medications, and alternative therapies. Some common treatment options include:


1. Taking over-the-counter pain relievers such as ibuprofen or acetaminophen

2. Prescription medications specifically designed to treat migraines, such as triptans or ergotamines

3. Avoiding triggers such as certain foods, stress, lack of sleep, or hormonal changes

4. Practicing relaxation techniques such as deep breathing or meditation

5. Applying hot or cold packs to the head or neck

6. Getting regular exercise and maintaining a healthy diet


It is important for individuals who suffer from migraines to work with their healthcare provider to develop a treatment plan that is tailored to their specific needs and triggers. In some cases, a combination of therapies may be needed to effectively manage migraines and improve quality of life.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


How do I build a mail server with postfix?


To build a mail server with Postfix, follow these steps:


1. Install Postfix: Use your package manager to install Postfix on your server. For example, on Debian/Ubuntu, you can run `sudo apt-get install postfix`.


2. Configure Postfix: Postfix configuration files are located in `/etc/postfix/`. The main configuration file is `main.cf`. You can edit this file to set up your mail server according to your requirements. Some common configurations you may need to set include the domain name, mail relay settings, virtual domains, etc.


3. Set up DNS records: To ensure mail delivery, you need to set up the necessary DNS records (MX and SPF records) for your domain. Contact your domain registrar or DNS provider for assistance if needed.


4. Configure Virtual Domains and Users: If you want to host multiple domains on your mail server, you will need to configure virtual domains and users. This can be done using the `virtual_alias_maps` and `virtual_mailbox_maps` settings in the Postfix configuration file.


5. Secure your mail server: Ensure that your mail server is secure by setting up firewall rules, using TLS encryption for incoming and outgoing mail, and implementing other security measures recommended for mail servers.


6. Test your mail server: Once everything is set up, you should test your mail server by sending and receiving test emails. Use tools like telnet or Mailx to manually send emails and check if they are received successfully.


Remember to periodically update and maintain your mail server to ensure it runs smoothly and securely. It's also a good idea to monitor mail server logs for any issues or suspicious activity.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу



why should i use an apple l out at the l word?


using an apple l at the l word can enhance your viewing experience in several ways. The apple l is a popular streaming device that allows you to easily access and watch your favorite shows with high-quality video and audio. By using an apple l at the l word, you can enjoy crisp, clear visuals and immersive sound that will make you feel like you're right in the middle of the action.


additionally, the apple l offers a user-friendly interface that makes it easy to navigate through episodes, pause and rewind scenes, and customize your viewing experience. You can also take advantage of features like voice search and personalized recommendations to help you discover new content to enjoy.


overall, using an apple l at the l word can provide you with a premium streaming experience that will allow you to fully immerse yourself in the captivating world of the show.

.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


How do i wear deadlock?


1. Start by growing your hair out to the desired length. Your hair should be at least 2-3 inches long for the best results.


2. Section your hair into small, even parts using a comb. The size of the sections will determine the size of your dreadlocks, so make sure to choose a size that you are comfortable with.


3. Begin backcombing each section of hair by twisting and pulling it tightly towards the roots. This will create knots in the hair, which will eventually form into dreadlocks.


4. Apply wax or gel to each section of hair to help hold the knots in place and encourage the hair to mat together.


5. Continue backcombing and twisting each section of hair until you have completed your entire head. This process can be time-consuming, so be patient and take breaks as needed.


6. Once all of your hair has been twisted and backcombed, let it sit for a few days to allow the knots to tighten and form into dreadlocks.


7. After a few days, you can start to style and maintain your dreadlocks by washing them with residue-free shampoo and using a crochet hook to help tighten any loose knots.


8. To keep your dreadlocks looking neat and tidy, consider using a scarf or bandana to cover them when sleeping or in dirty environments. Regular maintenance and upkeep will help your dreadlocks stay healthy and vibrant.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


How do I send email with a compliant email list and unsubscribe links?


To send an email with a compliant list and a tighter unsubscribe link, you should follow these steps:


1. Ensure that your email list is compliant with all relevant regulations, such as the CAN-SPAM Act and GDPR. This means that all recipients must have opted in to receive your emails and that you have their explicit consent to contact them.


2. Include a clear and prominent unsubscribe link in your email. Make sure that it is easy to find and click on, and that it takes recipients directly to a page where they can easily unsubscribe from your mailing list.


3. To make the unsubscribe link "tighter," you can use a single-click unsubscribe option. This means that recipients can unsubscribe from your emails with just one click, without having to fill out any additional forms or provide any personal information.


4. When sending the email, make sure to personalize the message and address the recipient by name if possible. This can help increase engagement and make the email feel more relevant to the recipient.


5. Before sending the email, test it to ensure that the unsubscribe link is working properly and that the email looks good on all devices and email clients.


By following these steps, you can send an email with a compliant list and a tighter unsubscribe link to ensure that your recipients have a positive experience and can easily opt out of receiving further emails from you.

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


Why do people implant nfc implants in their hands?


There are several reasons why people choose to implant NFC (Near Field Communication) implants in their hands:


1. Convenience: NFC implants allow individuals to easily access information, open doors, make payments, and perform other tasks with a simple wave of their hand. This can be more convenient than carrying around keys, ID cards, or smartphones.


2. Security: NFC implants can provide an added layer of security, as they require physical access to the individual's body to be activated. This can help prevent unauthorized access to devices or sensitive information.


3. Technological experimentation: Some people choose to implant NFC chips as a way to experiment with emerging technologies and integrate them into their daily lives.


4. Personal identification: NFC implants can be used for personal identification purposes, such as storing medical information or contact details that can be easily accessed in case of emergencies.


5. Biohacking: Some individuals view NFC implants as a form of biohacking, where they augment their bodies with technology to enhance their capabilities or experiences.


Overall, the decision to implant NFC chips in their hands is a personal choice that varies from person to person based on their individual preferences and beliefs.


Сатып алуу

by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу


How is the crypto market growing so quickly?


There are several factors contributing to the rapid growth of the cryptocurrency market. 


1. Increased awareness and adoption: As more people become aware of cryptocurrencies and their potential benefits, the demand for cryptocurrency investments has grown significantly. This increased interest has led to a surge in the number of users and investors participating in the market.


2. Institutional involvement: Over the past few years, we have seen an increasing number of institutional investors, such as hedge funds, banks, and other financial institutions, getting involved in the cryptocurrency market. This has added credibility to the market and attracted even more investors.


3. Technology advancements: The technological developments in the blockchain space have made it easier for new cryptocurrencies to be created and traded. Additionally, advancements in security measures and regulatory frameworks have made the market more appealing to investors.


4. Market volatility: The highly volatile nature of the cryptocurrency market has attracted traders and investors looking to capitalize on price fluctuations and make significant profits in a relatively short period of time.


5. Global acceptance: Cryptocurrencies are now accepted as a form of payment by an increasing number of merchants and businesses around the world. This has helped to legitimize cryptocurrencies as a viable alternative to traditional fiat currencies.


Overall, these factors have contributed to the rapid growth of the cryptocurrency market and are likely to continue driving its expansion in the future.


by Daisy / Көрүү | Сатып алуу | Cryptourrency менен сатып алуу




https://glamgirlx.com -


(Сүрөттү жүктөө үчүн чыкылдатыңыз)
Профессионалдык көңүл ачуу, сүрөттөр, видеолор, аудио, тирүү оюн жана кокусунан оюндар, ошондой эле ID сканерлөө, веб иштеп чыгуу жана суррогиялык кызматтар.

Бул даректи колдонуп, мага биткоуга кеңеш бериңиз: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE

© Glam Girl X 2025

Тейлөө шарттары