Praktikal nga Nasukad sa Pagkat-on ug Kasiguruhan sa Web

Daisylitrato profile profile

Human Daisy

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

Praktikal nga Nasukad sa Pagkat-on ug Kasiguruhan sa Web Ikatulo nga edisyon Charlotte Harper Hulyo 3, 2024 Gi-update / nakabig sa Hunyo 3, 2025

Pasiuna:

Ang mga konsiderasyon sa seguridad sa pagtukod sa software alang sa Web usa ka hinungdanon nga bahin sa plano ug pagpatay sa bisan unsang plano sa web samtang ang engineering usa ka prototype nga usa ka prototype nga kasaligan. Ang Dom (Document Object Markup), nga gipatuman kini sa HTML, Javascript, ug CSS nga nagpatuman sa mga proyekto ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug kusog sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug kinaiya, ug paghatag kadali sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug pamatasan, ug paghimog kadali sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug gahum sa paggamit ug kusog sa paggamit ug kinaiya nga magamit sa kasagaran sa kasagaran Si Joe, ang katapusan nga tiggamit nga nagtan-aw sa pagpatay sa oras o pagkuha usa ka butang nga nahimo sa Internet, kasagaran sa usa ka touchscreen smartphone nga aparato. 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 kadali sa paggamit ug pagka-flexible. Kung ikaw adunay pipila ka minuto aron mabasa pinaagi sa kini nga libro ug mahibal-an kung unsa ang gusto nako nga itudlo kanimo, o pag-adto sa akong kaugalingon nga mga katuyoan ug pag-adto sa imong kaugalingon nga libro ug isulat ang imong gusto ug buhaton ang imong gusto ug buhaton ang imong gusto ug buhaton ang mga kinahanglanon sa imong mamiminaw.

Bahin nako: Usa ako ka software developer nga adunay daghang kasinatian sa C / C ++, Java, Python, HTML, CSS ug JAVASSCHIP. Nagtukod ako mga website nga gusto sa mga tawo nga gamiton, gusto nga mobisita, ug bisan ang pagkaadik sa paggamit aron lamang sa pagkat-on, pag-usab sa oras, ug labing maayo, gibaligya nako ang 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. Imbis nga sulayan nga ibaligya nimo ang akong oras, nagtinguha ako sa pagpalit kanimo: Gusto ko nga makigsulti sa usa ka independente nga pag-develop sa App (Enderpreneur, nga adunay usa ka malampuson nga karera sa bisan unsang natad nga karera sa bisan unsang natad sa imong gusto. Ug tugoti ako nga klaro, ang edukasyon nga gihatag ko kanimo dili impormal. Mahimo ka nga moadto sa eskuylahan ug mahibal-an ang tanan niini nga adunay pormal nga edukasyon, o bisan pagbasa niini nga libro sa eskuylahan, kumpleto ang imong mga buluhaton, ug pag-ayo sa imong edukasyon ug hangyoon ka nga makompleto ang mga buluhaton. Dili ako ang imong propesor, mahimo nimong hunahunaon ako sama sa usa ka higala nga gusto nga mogiya kanimo ngadto sa usa ka karera nga gimaneho sa imong kaugalingon nga kalampusan. Ug dili ko ikaw gibaligya sa kalampusan, kinahanglan nimo nga paliton kini sa imong oras. Ang pagkat-on sa code adunay usa ka matulin nga kurbada sa pagkat-on ug dili gyud kadali, o bisan kung kini. Kinahanglan nimo nga magtrabaho kutob sa mahimo nimo ug magpadayon sa pagsulay ug mapakyas ug pagsulay pag-usab bisan kung ikaw nahigawad aron mahibal-an ang imong kaugalingon. Kana sa kinaiyahan sa code mismo. Ang code gipadagan sa usa ka tigpataliwala nga gidisenyo aron mahatagan ang mga mensahe sa sayup sa programmer, ug kini tudloan kanimo kung giunsa nimo pagkopya ang sayup sa imong search engine ug pagbasa sa mga ehemplo sa uban. Ug kinahanglan kong moingon, Dili kinahanglan nga ikaw dato kaayo, maalam, malampuson, o bisan ang detalye sa oriented o pag-organisar sa pagtukod sa usa ka app. Ang kompyuter nag-amping sa kana nga organisasyon alang kanimo. Kinahanglan nimo nga magpadayon sa pagsulay ug sayup, magpadayon sa pag-focus ug pag-ayo sa imong gibuhat, ug ikaw adunay usa ka malampuson nga karera sa kinatibuk-an sa imong gibuhat.

Kinsa ako: Akong nahibal-an nga ang katapusan nga seksyon labi pa bahin sa pagkat-on ug ang imong mga pamaagi gikan sa kini nga libro. Kinsa man ako? Kana usa ka komplikado nga pangutana. Dili klaro ako sa akong kaugalingon, samtang nag-antus ako sa mga medikal nga kahimtang nga makapalisud alang kanako bisan sa code o isulat ang mga hagit sa pag-asoy sa akong kinabuhi sa pagpaila sa akong kaugalingon. Sa laktud, kung gibasa nimo kini nga libro, gidala nimo kini sa balay tungod kay gipunting mo kini ug naghunahuna nga kini mapuslanon, o kung ikaw ang sama sa hunahuna nga gusto nimo nga molampos sa tanan nga imong gibuhat. 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. Labaw, kini ang akong buhaton: Nagtukod ako mga app aron matabangan ang akong kaugalingon ug ang ubang mga tawo molampos. Usa usab ako ka tagsulat, bisan kung kini ang akong una nga publikasyon nga gitinguha ko nga makompleto aron ibutang ang akong portfolio nga maghiusa sa usa ka mapuslanon nga dokumento, ug ako usa ka artista usab. Moangkon ko kini kanimo, lahi ako sa usa ka katingad-an nga tawo. Dili ako perpekto, nagdagan ako sa Balaod bisan ang pagdala kanako sa pagbiya sa mga kolehiyo ug unibersidad ug pagbiya sa mga estado aron sulayan ang akong kaugalingon nga adunay dugang nga kalampusan. Ako usa ka babaye nga natawo, nagsul-ob ako sa makeup, pagkuha mga litrato sa akong kaugalingon, magsul-ob og mga sinina ug uban pang mga babaye nga babaye, ug ako nagpabilin nga nahibal-an sa akong kaugalingon ingon usa ka babaye sa kinaiyahan. Adunay ako mga isyu sa ubang mga tawo kaniadto nga mosangput sa mga pakigbisog sa pagsulat ug pagtukod sa mga webapps, ug nangayo ako pasaylo nga wala na nako makuha kini nga libro sa imong mga kamot sa madali: Kinahanglan nimo kini. Gusto nimo nga magbasa ug magsulat sa code nga sama sa akoa ug nagtrabaho sama sa akoa ug naghimo sa parehas nga butang apan labi ka maayo ang imong pag-angkon sa imong kaugalingon aron mahimo ang imong libro nga kinahanglan nga magmalampuson sa imong kinabuhi. Ako adunay tanan nga mga isyu sa mga isyu nga nagtubo, kondisyon sa kahimsog, mga doktor, media, ug ang akong code sa pagkabahinbahin sa kalibutan. Bisan pa, kini nga libro usa ka butang nga akong nahunahunaan, akong masuso, akong panginabuhi, ug akong panginabuhi, busa gipabilhan ko ang imong konsiderasyon sa imong pag-adto sa teksto sa balay ug pag-ayo sa pagkat-on gikan kanako. Palihug hinumdumi ako dili ako hingpit, kini nga libro adunay mga sayup, mga pagbag-o, ug mga bag-ong edisyon, ug kinahanglan nimo nga hunahunaon ang imong makatarunganon nga kasinatian sa akong pagsulat. Hibal-i usab nga gipasabut nako nga maayo alang kanimo bisan kung nag-atubang ka mga hagit sa pagsulat. 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. Gisulti ko kini kanimo tungod kay nakasinati ako sa parehas nga mga kalisud. Gamita kini nga libro sa imong kaugalingon nga peligro, pagtrabaho uban sa imong komunidad ug mga komunidad nga magamit kanimo sa usa ka luwas nga paagi, ug kung giunsa ko kini madala sa usa ka luwas nga dalan diin kita molihok, sa Internet. Tingali dili ka pamilyar sa kung kinsa ako uban ang pipila lang nga mga pulong, apan gidasig ko ikaw sa pagbasa, mailhan mo ako samtang nagpadayon ka sa pagbasa ug pagsabut sa imong kaugalingon nga mga proyekto aron makompleto ang imong trabaho. Wala'y homwork sa kini nga libro, basta ang imong mga propesor o magtutudlo wala magtudlo kanimo, apan gidasig ko ikaw sa pagtukod sa usa ka Portfolio sa imong nahibal-an kung giunsa nimo magamit ang imong nakat-unan. 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.

Unsa kini nga libro: Kini nga libro usa ka panudlo pinaagi sa panig-ingnan. 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 nga imong gitukod sa hingpit nga labing maayo nga kahayag aron mahimong labing madanihon kutob sa mahimo sa imong mga tiggamit sa katapusan, ang mga bisita sa imong website. Niini nga libro, ipakita nako ang daghang mga pananglitan sa disenyo sa software nga adunay usa ka pagtuon sa web ingon usa ka plataporma ingon man seguridad. Atong sugdan ang kasinatian sa pagkat-on pinaagi sa pagtukod sa usa ka batakang proyekto nga gigamit ang shell sa UNIX, nga adunay mga backup ug mga bahin sa pag-backup ug pag-script. Pagkahuman, susihon naton ang usa ka basakan nga website sa blog, i-upgrade ang among blog nga adunay mga bahin sa litrato gamit ang mga solusyon sa seguridad nga gigamit ang usa ka server nga module sa Autterication (Pam). Atong repasuhon ang pagdumala sa file ug pagproseso, pagsuhid sa video nga pag-edit, ang donasyon sa tingog, pag-scanning sa barkode ug optical character nga pag-ila, taliwala sa ubang mga konsepto. Uban sa paagi nga susihon naton ang APIS nga makatabang kanato sa paghimo sa atong software nga labi ka mapuslanon ug luwas, nga adunay libre ug bayad nga kapilian. Along the way, we will explore physical security and militant tools such as firearms and munitions design and manufacturing including barrel and repeater design, turret and drone design, and other principals we will integrate with our software on the existing network in order to protect our software and demonstrate self defense and resillience. Mangin bag-o kita sa paghimo sa mga dula, 2D ug 3D nga maghatag mga makina sa pag-apil, ug pagtrabaho nga adunay mga panig-ingnan sa pagtuon sa kaso sa silicone nga goma. Sa pag-agi, gamiton usab namon ang mga solusyon sa pagkat-on sa makina nga magamit aron masiguro ang among software. Gamiton usab namon ang mga gamit sa stock nga magamit alang sa web aron ma-streamline ug luwas ang proseso. Kini nga libro usa ka giya sa imong kalampusan sa pagtukod sa usa ka aplikasyon sa web ug pag-apil kini sa usa ka propesyonal nga network sa mga sistema sa computer ug pag-embed sa usa ka giya sa pag-ayo sa mga sistema sa pag-undang ug pag-embed usa ka Hardware nga wala'y kasinatian o kaniadto nga kasinatian.

Unsa kini nga libro dili: Kung gusto nimo nga adunay usa ka website, mahimo ka nga magtukod usa ka yano nga tindahan ug ibaligya kung unsa ang imong kinahanglan, pag-post sa usa ka blog, pag-post sa mga litrato o kung wala ang usa ka linya sa code. Kini nga libro dili kana. Itudlo kanimo kini nga libro kung unsaon pagtukod ang software nga labi ka mapuslanon, hingpit nga gipakita, ang mga pinakabag-o nga mga kompanya nga mahimo pa nga mga kompanya nga nagpadagan sa mga kompanya nga wala pa magbuhat sa salapi. Kung sundon nimo kini nga libro, gusto nimong isulat ang code, code sa panukiduki, pagtukod ang imong kaugalingon nga mga apps, ug mahimo ka nga salapi gikan sa imong gibuhat. Maghimo ako salapi gikan sa kini nga libro, bisan sa una nga mga yugto, tungod kay kini adunay mga kasayuran nga kinahanglan sa mga tawo ug gusto nga magbasa, ug gipamalit na kung gipalit o gigamit ang akong mga apps. This book won't build an app for you, but it will point you in the right direction and arm you with the tools you need and the skills and tips that will facilitate your own success in building software for the web, with every line of code you will need to write as an example, ready to be pieced together into software you and your supporters, guests, clientele, friends, family, visitors, contractors, and the people of the internet want to use and support.

Unsa ang Imong Mahibal-an: Itudlo kanimo kini nga libro kung unsaon pagtukod ug ibaligya ang software, epektibo nga pag-ayo, mapuslanon nga pag-record sa media, pag-ila sa mga sona ug mga litrato sa mga Bluetooth ug sa NFC) Komunikasyon. Ang kini nga libro magtudlo kanimo kung unsaon paggamit ang usa ka network sa computer, pag-focus sa Debian Linux, kung giunsa ang pag-serbitar sa mga style sa CSS Mga text message alang sa pag-verify o uban pang mga katuyoan, pag-scan sa ID, imahe ug pag-aghat sa video, pagproseso sa imong software, pagproseso sa pagbayad, mga gimbuhaton sa pagbayad, asyntchronous nga mga buluhaton, ug daghan pa. Mahibal-an nimo kung giunsa ang pagtukod sa imong kaugalingon nga mga aparato sa Bluetooth, nga adunay mga baterya, chargerers, circuit, circuit, wire ug 3D nga giimprinta usab. Ipakita nako ang mga prinsipyo sa laraw sa 3D nga gigamit sa additive manufacturing ug Himan ug mamatay, mao nga makahimo ka sa paghimo sa imong kaugalingon nga mga butters, chargerats, outprinic circuits, ug mga output nga electronic. ug network kanila sa Bluetooth ug sa Web. Partikular, susihon naton ang duha nga mga pagtuon sa kaso, usa ka nag-agay nga massarager ug usa ka homemade firearm, nga gigamit ingon usa ka magamit nga graphic interface o pag-undang sa usa ka web alang sa mga sangputanan sa Speedier. Mahibal-an nimo kung giunsa ang pagtukod ug pag-deploy sa usa ka website gikan sa yuta nga wala'y kasinatian, himua kini nga gimbuhaton, luwas, matahum, mapuslanon ug mapuslanon ug mapuslanon ug mapuslanon ug mapuslanon ug mapuslanon ug mapuslanon ug mapuslanon ug mapuslanon ug mapuslanon ug labi ka hinungdanon. You will learn how to use machine learning and computer vision to make a site secure and more practical, record video and audio from your website, donate your voice, make music and modulate audio to create useful samples, and how to break through the noise by leveraging other websites to build the best possible network of websites that you can link directly to yours in order to share all the useful information you have to offer, and even more importantly bring people to your software and business. This book will be focused most heavily on media, security and machine learning, which are the major three components that will help you build useful software for the web by engaging the right users and disengaging the wrong ones in a manner that is realistic, practical, hands on and engaging while also automatic, and sturdy. This book teaches UNIX, specifically Debian (Ubuntu), Bash shell, Python, HTML, CSS, JavaScript, and a number of useful software packages for Python like requests, as well as useful bash software like git and ffmpeg. Tudloan ko usab ikaw kung giunsa ang pag-trade sa cryptocurrency awtomatiko, ug pagkuha bayad sa Cryptocurency o gikan sa mga regular nga mga bisita sa imong kita kung imong gipili nga buhaton kini. Tudloan ko ikaw kung unsaon paghimo salapi gikan sa imong website pinaagi usab sa pag-anunsyo, kung giunsa ang pag-andam sa imong app alang sa una nga ranggo aron makapangita ka sa pagpangita sa imong mga kostumer aron makapangita ka kutob sa mahimo. Tudloan ko ikaw kung giunsa nimo ibaligya ang imong software, i-advertise kini, pag-apelar sa mga kliyente nga nangita sa imong serbisyo, ug paghimo usa ka ngalan alang sa Internet pinaagi sa Internet pinaagi sa Internet pinaagi sa Internet pinaagi sa mga Avenues nga naa na, ug maayo ang pagtrabaho. I will teach you how to save your data on cloud computers that work for you and save your data cheaply, how to plan and build a website that does what your users want and what you want, and how to keep your users engaged by putting your site a tap away on their phones with notifications, email, text messages, phone calls, and more avenues to bring your users back to your website at your disposal behind the click of a button secured to you only. Ang kini nga libro mag-focus sa praktikal nga pagpatik ug pag-apod-apod sa mga media sa daghang mga litrato sa mga video sa mga video, paghimo sa imong kaugalingon nga mga tiggamit, ug ibaligya ang imong kaugalingon sa imong kaugalingon aron mahimo ang imong representante sa imong kaugalingon aron mahimo ka aron mahimo ang imong representante kanimo. You will also learn a few tips and tricks from me, from coding tips, practical vanity like makeup and photography, modeling and acting, and more, which will be important for portraying yourself and your company in the best possible light using all the tools available to you while distributing as much content as you need across a healthy balance of platforms to bring your software to fruition with no more effort, work, or money than is necessary. Kini nga libro gitawag nga "PraktikalWeb Based Deep Learning and Security by Example" for a reason: It deals with learning to code, specifically for the web, specifically with a focus on security, from a practical standpoint, with examples of working code that serves the practical purposes outlined in the text. The learning component of this text also encompasses machine learning, the code I will show you how to run for the web that will handle computer vision, facial recognition, image and video moderation, image enhancement, resolution enhancement, image captioning, and other tasks like prediction metrics sourced from images, such as the nature of the image as an authentic, computer-transferred image, or an optical copy (a photo of an image, or printed photo). Machine learning is very important when it comes to web security and software security, because it can preform tasks that were otherwise impossible. Your computer might log you in with a passcode, but it may be safer to use it if it logs you in with your face. You can make a server computer this safe, a computer that would normally ask you for a username and passcode and log you in, maybe with a confirmation token for each new login or new IP address, but if you are building large scale, easy to use, fundamentally secure, and powerful software, this may be enough. Tying your software too closely to someone else's software, like an email service or text message service, is not enough to make your software secure, or anyone's (bisan unsang site nga imong gigamit). Ang bisan kinsa nga nagtukod software nga dili sigurado nga sigurado adunay usa ka gipasabut kung unsa ang gipasabut niini. Ang software dili sigurado nga wala'y kasiguruhan tungod kay ang mga aparato ug mga account nga gigamit namon aron ma-access kini dili kanunay nga gipunting sa kaugalingon nga katuyoan sa software mismo. Kini usa ka butang nga nakapunting sa kini nga libro. Ang usa ka network nga computer mao ang pagkunhod sa default nga adunay usa ka taas nga key token, nga gitawag ug luwas nga sheell key, tungod kay ang mga sulud sa web server ingon man ang mga gamit sa web server, tungod kay ang Web Server naghatag sa bukas nga pag-access ingon man ang mga gamit sa web nga adunay mga gamit sa web nga adunay sulud sa server mismo. Ang Web server adunay access sa web browser sa gumagamit, nga labi ka kusgan nga bahin sa aparato sa gumagamit, tungod kay kini ang lugar diin ang gumagamit nga maka-access sa Networked software. Kini nga toolkit mahimo'g maghatag teksto, ang mga webpage nga imong nakita, ug mahimo usab nga irekord ang mga imahe, audio ug video (sama sa usa ka litrato nga adunay mga numero sa Bluetooth, ang mga sticker, mga stick sa mga data sa FLAETOOT, ang mga sticker, mga sticker, mga stick sa mga data sa facetooth o isulat sa mga datos nga adunay mga numero sa Bluetooth o STIKA SA PANAHON SA MGA SERBASED CARDS, MAAYO NGA MAHIMO SA MGA SERSIOOTH CARDS, MAAYO SA PANAHON SA MGA SERBASED CARDS, MAAYO SA PAGSULAY SA MGA SETAPO SA PANIMALAY ang Web site. Gamit ang tanan nga mga himan nga imong gisalikway, uban sa kini nga libro nga imong igahatag ang imong kaugalingon sa kahibalo sa pagtukod sa usa ka luwas nga website, ug sa kinatibuk-an ang usa ka luwas nga sistema sa computer nga nagtrabaho alang kanimo, ug mga hitsura ug hitsura

Asa magsugod: Malipayon ka nga laktawan ang seksyon nga gisugdan nako kini nga libro, o bisan unsang seksyon, sa eksaktong code nga imong gikinahanglan, labi na kung adunay mga kasangkapan sa paggamit sa mga kaso ug praktikal nga mga pananglitan niini. Kung wala ka'y kasinatian sa pagsulat code, girekomenda ko nga mabasa nimo ang tanan niini nga libro, ug labi na nga girekomenda nga basahon nimo ang mga miaging mga seksyon, aron masiguro nga kini nga libro tama alang kanimo. Kung kini nga libro dili husto alang kanimo, hunahunaa ang pag-angkon niini sa usa ka higala o paryente nga tingali interesado sa pag-uswag sa web sa ilang kaugalingon nga mapakyas ka sa mga gaps, aron mapakyas ka sa akong magtutudlo, o uban pang mga magtutudlo. Sugdi kung diin nimo, ang matag bahin sa kini nga libro mapuslanon kung magtinguha ka nga magtukod usa ka mapuslanon nga app, ug hunahunaa nga ang labing maayo nga mga apps gitukod uban ang katapusan nga tiggamit sa hunahuna: Hibal-i ang imong kustomer. Karon nakaila ka nako, nahibal-an nimo kini nga libro, ug andam ka nga magsugod. Sa pagsugod, pagkuha usa ka computer (bisan ang labing barato nga laptop gikan sa usa ka kahon sa kahon, Amazon, o usa ka karaang desktop nga nagtrabaho, ug gibutang kini sa paagi nga molihok alang kanimo.

Giunsa pagbasa kini nga libro: Gipasiugda ang teksto, nagpasabut nga ang teksto nahisakop sa usa ka command prompt, diin isulat nimo ang code nga imong gipadagan. Ang Command Prompture grabeng keyboard nga naka-focus ug wala'y gamay nga pag-klik, pagpadali sa imong pag-obra sa trabaho ug paghimo sa mga butang nga labi kadali kanimo.

Pagsugod: Atong sultihan. Magsugod kita sa code sa pagtukod sa usa ka lokal nga makina ug magsugod kung wala magtukod usa ka website nga konektado sa Internet. Kini labi ka luwas nga magsugod, wala magkasimal, ug dali alang kanimo. Depende sa imong operating system, ang pag-adto sa usa ka Bash Shell mahimong lahi. Alang sa Mac OS, girekomenda ko ang pag-install sa usa ka virtual nga makina sa kini nga punto, ingon nga makuha nimo ang labing kaarang nga adunay usa ka virtual machine. Ang lainlaing mga tagahatag ug virtualbox ug mga paralells mahimong modagan sa usa ka virtual nga makina alang kanimo, bisan kung posible usab nga i-install ang Ubuntu direkta sa makina nga girekomenda aron makahimo usa ka paspas nga kasinatian. Kung naggamit ka Linux o Windows, nga akong girekomenda, kini dali nga makahimo og usa ka proyekto. Ablihi ang imong terminal, pag-adjust sa SIZE sumala sa imong nakita nga angay, ug pagsugod sa pagsunod sa lakang 2. Kung naggamit ka mga bintana, palihug sundan ang lakang 1.

Lakang 1: - Ang mga tiggamit sa Windows lang Sa Windows, Open Command Prompt A ingon tagdumala ug tipo wsl -install

Lakang 2: - Padayon dinhi, o laktawan ang lakang 1 ngadto dinhi kung wala ka naggamit mga bintana Sa usa ka bukas nga terminal, (depende sa imong OS, nga gitawag nga ubuntu sa Windows, Terminal sa Mac o Linux, o usa ka susama nga ngalan), magsugod pinaagi sa paghimo og proyekto. Gihimo namon kini uban ang Sugo sa MKDIR, nga nagmugna sa usa ka direktoryo. Kung kinahanglan nimo nga maghimo usa ka direktoryo aron tipigan ang imong proyekto, nga girekomenda, gamita ang CD Command nga magbag-o sa direktoryo ug ug

CD / PATH / TO / DIREDICY - Ang dalan mao ang mga folder (Files) nga nag-una sa imong direktoryo sa destinasyon, ang imong default nga dalan mao ang ~ o / username (kung username ang imong username). Aron mabag-o ang default directory, Type CD o CD ~ Ang panig-ingnan sa MKDIR - pulihan ang "panig-ingnan" sa ngalan sa direktoryo

Karon adunay usa ka direktoryo sa pagtrabaho alang sa imong proyekto. Ingon nga kini hinungdanon kaayo nga ma-save kini nga direktoryo sa kaso kinahanglan nimo nga magbalhin sa usa ka lainlaing makina o i-deploy ang code nga imong gisulat aron ma-back ang imong direktoryo sa sunod nga mga lakang. Apan ang pagtukod sa usa ka script nagkuha usa ka gamay nga code, ug ang code kinahanglan nga awtomatiko nga mahimong mapuslanon kutob sa mahimo. Mao nga magtukod kita usa ka script aron una nga magtukod og mga script. Magsugod kita pinaagi sa paghimo sa script ug paghimo niini nga maarang-arang. Magamit namon ang sudo, chmod ug paghikap alang niini, ug tawgon ang "ascript" sa script ".

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

Karon among gilalang ang script, gihimo kini nga mapahamtang, ug andam nga i-edit kini. Ang Nano usa ka editor sa teksto nga magtugot kanimo sa pag-edit sa teksto nga wala ma-klik, nga labi kadali kaysa sa paggamit sa usa ka interface sa grapiko. Aron ma-edit ang usa ka file nga adunay Nano, gamita ang Nano ug dayon ang agianan padulong sa file. Aron makahimo usa ka script nga naghimo sa usa ka script, kini parehas nga parehas sa paghimo sa among script sa una nga lugar. Gamiton namon ang parehas nga code ingon sa ibabaw, pag-ilis sa ngalan sa script, "ascript" nga adunay usa ka parameter nga $ 1. Gitugotan kami niini nga tawagan ang script pinaagi sa pag-type lang sa sudo ascript newscript, kung unsang punto mahimo namon ang usa ka bag-ong script pinaagi sa pag-ilis sa "Newscript" sa ngalan sa imong script. Ang code sa Nano kinahanglan tan-awon sama sa:

sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1

Ug aron sa pagsira sa Nano, mahimo naton mapugngan ang control key ug i-press x, dayon y sa pagpaila kita sa pagluwas sa file, ug naigo sa pagbalik. Karon imbis nga i-type kini nga tulo nga mga mando aron ma-edit ang usa ka script, mahimo namon nga i-type ang ascript sa SUDO nga i-edit pag-usab ang script. Kini nga mga buhat! Ug ang bisan unsang bag-ong script mahimong dali nga modagan pinaagi sa pagtawag niini sa kabhang. Atong maluwas ang among trabaho karon: Magsulat kita usa ka backup script aron maluwas ang among bag-ong script ug dayon ibalik kini sa direktoryo sa proyekto, samtang gisuportahan usab ang backup script.

sudo ascript backup

Karon, sa Nano:

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

Kung diin / agianan / sa / direktoryo mao ang agianan sa proyekto nga imong gihimo kauban ang MKDIR. Sa ulahi mahibal-an naton kung giunsa ang pagkopya sa mga agianan sa pag-usab sama niini nga adunay usa ka loop ug usa ka lista, nga dili kaayo code, apan alang karon ipadayon kini nga yano ug adunay pipila ka linya. Aron modagan kini nga script ug i-backup ang imong code, i-save ang file sa Nano nga adunay kontrol + x, y ug pagbalik, ug i-type ang sa ubos sa imong kabhang

backup

Kung giaghat ka sa tanan alang sa usa ka password samtang nagbasa sa kini nga libro ug nagsunod sa kabhang, palihug isulud ang imong password sa gumagamit, adunay tulo ka pagsulay sa wala pa kinahanglan nimo nga ipalayo ang mando. Mahimo nimong gamiton ang pataas ug pataas nga mga udyong sa mga rerun nga mga mando ug i-edit kini, kinahanglan ba nga kinahanglan nimo nga modagan bisan unsa kaduha. Yano nga pagpakita ug pag-undang sa pagpili sa usa ka mando, sa wala pa ang pag-edit sa mando sa tuo, wala nga mga udyong ug pagtangtang sa yawi ingon man ang keyboard, ug gipadagan kini.

Pagbati! Nahimo nimo ang paghimo og usa ka katingad-an nga backup script nga nagpaluyo sa duha ka hinungdanon nga mga script sa shell sa imong direktoryo sa pagtrabaho. Mahimo naton nga ibalhin ang mga butang sa ulahi samtang nagkadako ang proyekto, apan kini molihok karon. Magpadayon kita sa pagsuporta sa panganod, gamiton namon ang github alang niini (bisan adunay daghang uban nga mga solusyon sa pagtangtang sa imong software, bisan ang parehas nga pag-backup sa imong software sa imong software sa imong software sa usa ka password o yawi. Kini instrumento sa pagtipig sa imong software, labi na samtang kami molalin sa mga luwas nga mga higayon nga wala'y sapayan samtang ang usa ka higayon nga dili ma-back up kung dili nimo makuha ang usa ka higayon nga dili nimo ma-back up kung dili nimo ma-back up ang imong code, nga dili nimo ma-back up ang imong code, nga dili nimo makuha ang awtomatiko nga pag-ilis, nga imong itago kini.

If you're not already using an Ubuntu virtual machine at this point, I reccomend using an Ubuntu virtual machine at this point because it will make your life easier when installing all of the packages necessary in order to build a working website and preform deep learning operations on your computer. Gibalhin namon ang code sa usa ka web server sa hapit na moabut, apan gusto namon nga sigurohon adunay labing menos usa ka decurity sa seguridad nga naa sa phishing, ug mogamit sa daghang mga pakete sa Linux aron mahimo kini. Kung gusto pa nimo gamiton ang Mac OS, malipay ka sa pagpangita ug pag-install sa mga kinahanglan nga pakete sa online, apan wala'y mga alternatibo alang sa matag package nga kini nga libro o serye nga tabonan.

Atong idugang ang pipila ka mga mando sa paghimo sa among trabaho sa backup script pinaagi sa pagpadagan sa Command Sudado Ascript Backup.

# ...

Sa makausa pa, kontrolado X aron makatipig.

Karon kinahanglan namon nga buhaton ang pipila ka higayon sa pag-configure alang sa kini nga proyekto. Tungod kay sa wala madugay kini usa ka proyekto nga gitango, dili kinahanglan nga i-type ang matag sugo sa matag higayon nga atong i-deploy gikan sa usa ka gitipig nga gitunud, apan atong isulat kini kung gisulat naton ang atong mga script. Sa pagsugod, siguruha nga kita naa sa tama nga direktoryo ug pasiuna ang repository git repositor ug pagmugna sa mga yawe sa SSH.

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

Pagkahuman namon mag-type sa SSH-KeyGen, ang bag-ong yawi kinahanglan nga maluwas sa folder sa balay sa ilawom sa usa ka folder nga gitawag .SSH. Gitawag kini nga ID_RA.Pub. Atong pangitaon kini nga yawi ug kopyahon kini. Aron makita kini,

cd ~
cat .ssh/id_rsa.pub

Kopyaha ang teksto nga gibalik sa katapusang sugo, ug paghimo usa ka account sa imong git provider (maayo nga nathub), sa wala pa idugang ang yawi sa SSH sa imong account. Kung adunay usa ka account, i-klik ang taas nga tuo nga menu ug pagsulod sa mga setting, sa wala pa idugang ang imong SSH yawe sa SSH keys sa pag-access sa menu. Pagpili Pagdugang usa ka SSH Key ug idugang ang imong pag-paste sa kini ug paghatag niini usa ka titulo, sa wala pa pagtipig ug pagbalik sa Github aron makahimo usa ka bag-ong repositibo. Susama kini alang sa ubang mga taghatag sa gitsyon, kinahanglan nimo nga basahon ang ilang dokumentasyon. Sa bag-ong pag-configure sa reportery, hatagi ang imong repositibo sa usa ka deskriptibo nga ngalan ug pagdesisyon kung gusto nimo ipatik kini, ug siguruha nga dili pa mo-encide ang mga file. Kung gilalang ang repository, kopyahon ang clone nga adunay SSH URL, ug idikit kini sa mosunud nga mando.

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

Karon mahimo ka nga mobalik sa imong repositibo sa CD, pamilyar ka niini. Sulayi ang imong backup script karon nga adunay backup

Maayo! Karon makabaton gyud kita og coding. Atong i-install ang Django karon nga adunay kami usa ka maayo nga pagkupot sa bash ug git. Tugotan kami sa Django nga i-back up ang among software, mahimo usab kini sa Bash apan ang Django kinahanglan adunay mas yano nga mas yano nga pagpatuman (kini mahimong baldado ug dali nga ma-configure).

Aron ma-install ang software sa Ubuntu, gamiton namon ang SUDO ACT-makakuha og mando. Una, i-update ug i-upgrade ang software nga naanad na namo. Mahimo kini sa sudo apt-makuha ang update ug sudo apt-the up-upgrade -y. Sunod, i-install naton ang Python ug ang atong virtual nga palibut, ang panimalay sa among code, uban ang mosunud nga mando: sudo apt-get-get-the-python3-venv

Kini ang tanan nga kinahanglan nimo nga moadto uban ang Django sa mga termino sa software nga pag-install sa pag-abut sa ubuntu. Alang sa Windows ug Linux kini kinahanglan nga patas nga diretso, apan alang sa Mac mahimo nimong i-install ang usa ka virtual machine ug pagbayad sa virtualbox ug pag-set up sa mga lakang sa pag-setup sa usa ka palibot sa ubuntu. Ang Ubuntu kritikal sa kini nga kaso tungod kay kini ang software ang mga website nga nagdagan ug kini nagtugot kanila sa pag-host sa mga website sa tanan nga nahisgutan nga software.

Maluya kita sa Django.

Sa among direktoryo pag-usab, nga adunay CD:

python -m venv venv # Nagmugna sa virtual nga palibot diin gitipigan ang code
source venv/bin/activate # Gi-aktibo ang virtual nga palibot
django-admin startproject mysite . # Diin ang mysite mao ang proyekto nga nagsugod ako sa akong karon nga direktoryo.

Gisugdan ra kami ni Django, tungod kay ang Django nag-host sa web server ug gibuhat ang tanan nga kinahanglan namon aron makakuha usa ka sukaranan nga lokal nga website pataas ug nagdagan. Karon nga na-install namon si Django, i-edit naton ang mga setting nga gamay aron mahimo kini nga buhat kung giunsa naton kini kinahanglan. Una, maghimo kita usa ka bag-ong app

python manage.py startapp feed

Mamatikdan nimo ang una nga app nga gitawag nga feed. Ang App kinahanglan nga tawgon bisan unsa ang gusto nimo, ug maghimo kami mga bag-ong apps, apan ang ngalan sa matag app kinahanglan nga makanunayon matag higayon nga ang app gi-refer sa code. Aron makadugang usa ka bag-ong app, kanunay namon nga i-edit ang mga setting.py sa pikas nga direktoryo nga gihimo ang app, nga ginganlag startproject, pagkahuman sa app. Paggamit sa Nano,

nano app/settings.py

Sa mga setting, pangitaa ang mga na-install_apps ug bulag sa [] ngadto sa 3 ka linya. Gamit ang upat nga mga luna sa linya sa walay sulod nga linya, idugang ang 'feed', o ngalan sa imong app. Kini nga seksyon sa mga setting.py kinahanglan tan-awon:

INSTALLED_APPS = [
    'feed',
]

Sa wala pa kami makalimtan, sulayan naton nga nagtrabaho si Django. Gamit ang Command Python Pagdumala.py runserver 0.0.0.0:4.0:006:8000, mahimo naton nga mag-navay sa code

Karon, magkalot kita sa pagsulat sa pipila ka code sa Python. Si Django adunay tulo nga mga nag-unang sangkap, silang tanan gipadagan sa code sa hingpit. Ang mga sangkap gitawag nga modelo, pagtan-aw ug template, ug ang matag usa naa sa mas taas ug mas ubos nga lebel sa wala pa ipadala ang webpage sa tiggamit.

Ang modelo mao ang code nga nagtipig kasayuran sa database alang sa pagkuha, pagsunud ug paghubad.

Desidido ang pagtan-aw kung giunsa ang modelo nga gihubad, gi-manipula, ug giusab, hapit tanan nga pagtan-aw nga mogamit direkta nga modelo.

Ang template mao ang HTML code nga adunay daghang dugang nga mga kampanilya ug mga whistles nga gitawag nga laraw sa template. Ang template gihubad sa pagtan-aw diin kini napuno sa Python Code ug Konteksto sama sa mga modelo ug kasayuran (USUALL STINGS ug ANCURESS) gikan sa pagtan-aw.

Ang Django adunay ubang mga sangkap usab, lakip ang apan dili limitado sa:

Mga setting, nga gi-configure ang app sama sa among gihisgutan.

Ang mga URL, nga mga sumbanan nga gisundan sa gumagamit aron maangkon ang mga piho nga mga bahin sa aplikasyon sa web.

Ang mga porma, nga nagpatin-aw kung giunsa ang kasayuran nga gipadala sa server nga gidumala ug gihatag sa database ingon man sa tiggamit. Kini ang pundasyon sa impormasyon sa pagproseso sa kilid sa server, ug makadawat sa bisan unsang matang sa kasayuran sa mga tindahan sa computer, labi ka labi nga mga text clings, numero, ug bakak nga mga booleboans).

Ang mga template, nga mao ang HTML Code ug Pinulongan sa Template ug tulay ang gintang tali sa Python ug HTML nga magamit sa usa ka website nga adunay usa ka code sa Python nga dili magamit sa usa ka lainlaing katuyoan sa usa ka hilit nga aparato nga dili kinahanglan nga duol sa server.

Ang mga static file, nga sagad nga JavaScript ug kini librarya nga gisilbi sa server ug nalambigit sa template.

Ang mga file sa media, nga gisudlan sa server o sa gawas nga pag-host, o gisulat sa server sa wala pa maproseso ug gi-post sa lain nga server (usa ka balde) alang sa pag-host.

Ang middleWare, nga mao ang mga piraso sa code nga gipadagan sa parehas nga pagtan-aw sa matag pagtan-aw ug giisip nga "gilakip" sa pagtan-aw.

Mga processors sa konteksto, nga nagproseso sa konteksto sa matag pagtan-aw ug gigamit sa pagdugang dugang nga konteksto.

Ang mga pagsulay, nga nagpamatuod nga ang tiggamit o hangyo gipasa ang pipila ka mga kinahanglanon sa wala pa ang pagtan-aw.

Ang mga konsumedor, nga nagdikta kung giunsa ang pagdumala sa mga websockets ug pagtubag sa komunikasyon.

Ang admin, nga gigamit aron magparehistro sa mga modelo aron mahimo silang manipuled sa detalye sa panid sa Django Admin, diin ang database mahimong ipangalagad pinaagi sa usa ka graphical interface.

Ang celery, nga naghubit sa mga asynchronous nga mga buluhaton sa mga bahin sa Django Code mahimong magsugod sa pagdagan sa wala pa dayon magpadayon sa sunod nga buluhaton o linya sa code.

Ang Django adunay daghang uban pang mga sangkap, nga among hisgutan sa detalye dinhi. There are plenty of ways to make Django more functional, adding WebSockets, which are fast, streamlined communication channels, Celery, which executes asynchronous tasks, and a multitude of other pieces of software for extending Django, especially in the view functions, where most of the code is executed. Ang mga function sa pagtan-aw mao ang yawi tungod kay sa kasagaran gipahayag nila ang matag piraso sa code nga piho sa usa ka piho nga sumbanan sa URL, o usa ka seksyon sa server.

Una, susihon naton ang mga gimbuhaton sa pagtan-aw. Ang mga function sa pagtan-aw nagsugod sa mga import nga pag-import sa code nga magamit sa pagtan-aw, ug gihubit gamit ang regular nga mga kahulugan o klase. Ang labing yano nga pagtan-aw gihubit sa function kahulugan def, ug ibalik ang usa ka httpresronse nga adunay sukaranan nga template. Magsugod kita pinaagi sa paghubit sa usa ka sukaranang pagtan-aw aron ibalik ang teksto nga "Kumusta Kalibutan". Hinumdumi nga sa matag higayon nga imong idugang ang code pagkahuman sa usa ka pahayag sama sa DEF, kung, samtang, alang, bisan pa, kinahanglan nimo nga idugang ang 4 nga mga luna alang sa matag usa sa mga nag-una nga mga kahulugan nga gusto nimong i-apply sa imong gimbuhaton. Mosulod kami kung unsa ang gipasabut sa matag usa niini.

Gikan sa direktoryo sa among site, pag-edit ang feed / Views.py file gamit ang Nano ug idugang ang mga mosunud nga linya sa katapusan sa file.

from django.http import HttpResponse

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

Ang httprestonse ni Django nagtubag sa usa ka pisi sa teksto, nga gipunting sa pag-abli ug pagsira '. Sa matag higayon nga ipasa nimo ang kasayuran sa usa ka function o klase, sama sa hangyo o usa ka lubid, kinahanglan nimo nga gamiton ang mga ginikanan (, pag-abli ug pagsira).

Dili kini tanan kinahanglan naton tan-awon ang atong pagtan-aw. Siyempre, wala pa naton gisultihan ang server kung diin eksakto ang pagtan-aw, kinahanglan pa naton ipasabut ang usa ka agianan diin ang panglantaw kinahanglan maghatag. Magsugod kita pinaagi sa paghubit sa usa ka sukaranang agianan sa App / URL.py, ug kita moadto sa mga titing sa dalan sa ulahi.

Sa app / URLS.py, pagdugang usa ka linya pagkahuman sa mga pahayag sa import pagkahuman sa pagsugod sa pag-import sa pagtan-aw nga among gibuhat.

from feed import views as feed_views

Karon, ipasabut naton ang sumbanan sa pagtan-aw. Ang mga sumbanan sa pagtan-aw adunay tulo nga mga sangkap, ang sangkap sa agianan, nga nagsulti sa server diin ang pagtan-aw sa sulud sa sulud nga pag-adtoan sa pag-adto sa usa ka sumbanan sa pag-angkon sa usa ka sulud sa pag-adtoan sa usa ka settle sa pag-adto sa usa ka sumbanan Makatarunganon nga buhaton ang mga butang sa ingon niini nga paagi ug magbag-o, tungod kay ang imong codebase usa ka kanunay nga pagbag-o sa palibot nga kinahanglan nga pagka-flexible ug kadali nga magtrabaho. Ania kung unsa ang hitsura sa imong panan-aw, mahimo nimong idugang kini sa mga urlpatters = [seksyon sa app / Urls.py. Ang sumbanan sa pagtan-aw gihubit sa tulo nga mga sangkap nga gihubit sa ibabaw, ug usa ka function nga gitawag nga agianan. Ang imong mga sumbanan sa URL usa ka lista, busa siguruha nga kanunay nga tapuson ang matag aytem sa usa ka koma, tungod kay nagbulag kini sa matag usa. Ang matag aytem kinahanglan usab nga moadto sa usa ka bag-ong linya, sa makausa pa sa upat nga mga luna sa wala pa kini, sama sa app sa mga setting.py. Atong ipasabut ang una nga sangkap sa pagtan-aw sa usa ka walay sulod nga function sa pisi, aron makamugna ang usa ka pagtan-aw nga nagdagan sa direktoryo sa gamut sa Web server. Ang imong URLS.py kinahanglan karon tan-awon sama niini:

from feed import views as feed_views

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

Kini ang basihan sa paghimo sa usa ka website nga adunay Django nga hingpit nga static. Aron makahimo usa ka labi ka dinamikong website diin mahimo naton magsugod sa kasayuran sa cache, sama sa mga imahe, video, audio, kinahanglan naton gamiton ang sunod. Karon, susihon naton ang among code ug pagdagan ang server. Aron masusi ang code alang sa mga sayup, pagdagan:

python manage.py check

Kung adunay bisan unsang mga mensahe sa sayup, kinahanglan nga repasohon nimo ang mga pagbag-o nga imong gihimo sa imong app ug tan-awa kung adunay usa ka ekstra nga string, bisan unsang typo, bisan unsang aksidente, bisan unsang aksidente nga natangtang sa karakter, o bisan unsang aksidente. Ang pagbasa sa mensahe sa sayup (kung adunay usa ka), kinahanglan nimo nga makita ang agianan sa usa ka file nga imong gibuhat o gi-edit kauban ang usa ka linya sa linya ug tan-awa kung naa ka bayran. Kung imong giayo ang isyu, pag-usab ang mando sa ibabaw. Kung andam na ang imong software nga modagan ug nagtrabaho, makita nimo ang output "nga tseke nga giila nga wala'y mga isyu." Karon andam ka na moadto. Pagdagan ang server sa:

python manage.py runserver 0.0.0.0:8000

Karon ablihi ang usa ka web browser ug pag-navigate sa HTTP: // Localhost: 8000. Kinahanglan nimo nga makita ang teksto nga gibalik sa mga ginikanan ug kinutlo sa httpressonse function sa imong pagtan-aw. Kini usa ka panguna nga pananglitan, apan kung gihimo nimo kini nga layo, imong nasabtan ang mga sukaranan kung giunsa ang trabaho sa Linux, Bash, Python, ug Django, ug Django, ug Django. Kaluluoy ang pagkalalom sa pila ka modelo sa database, ug susihon ang gahum sa usa ka klase sa Python sa pagtipig sa kasayuran. Pagkahuman, magsugod kami sa pagkuha sa usa ka gunitanan sa HTML ug CSS sa wala pa naton himuon ang among site nga hingpit nga gipakita, nabag-o ug luwas gamit ang HIVASCRICT ug Machine Thorling.

Ang mga klase gitipigan sa mga modelo.py sa imong app. Paggamit sa Nano, I-edit ang App / Models.py ug pagdugang usa ka bag-ong klase. Ang usa ka klase gihubit sa kahulugan sa klase ug gipasa ang usa ka superclass nga napanunod niini, sa kini nga mga modelo.model. Ang ngalan sa klase moabut human sa kahulugan sa klase, ug pagkahuman sa kahulugan sa klase A: (Colon) gigamit, sa wala pa ang mga kinaiya ug mga kahulugan sa paglihok nga gihigot sa klase sa ubos. Ang among klase nanginahanglan usa ka ID nga magamit namon aron makuha kini ug ipadayon kini nga talagsaon, ug kinahanglan usab nga usa ka kapatagan sa teksto aron pagtipig sa pipila ka kasayuran. Sa ulahi mahimo namon nga makadugang usa ka timestamp, file, Booleans (tinuod o sayup nga mga kahulugan nga makatabang sa pag-adto sa modelo sa usa ka gumagamit sa server, ug daghan pa. Atong i-unpack ang code sa ubos:

from django.db import models # Ang import nga gigamit aron ipasabut ang among klase ug kini nga mga kinaiya
class Post(models.Model): # Ang Kahulugan sa Atong Klase mismo
    id = models.AutoField(primary_key=True) # Ang ID sa among modelo, usa ka awtomatikong hinimo nga yawi nga magpangutana kanamo sa modelo, ipadayon kini nga talagsaon, ug mapuslanon kung kinahanglan nga makig-uban sa modelo sa higayon nga kini nahimo.
    text = models.TextField(default='') # Ang pag-ila sa among mga tindahan sa klase, sa kini nga kaso, pipila ka teksto, nga nagpakamatay sa usa ka walay sulod nga pisi.

Pagtapos ug i-save ang file sama sa among gibuhat sa wala pa mahuman.

Adunay daghang uban pang mga uma ug kapilian nga atong susihon kung i-update namon kini nga klase samtang ang among app nag-uswag, apan kini ang sukaranang mga kinahanglanon sa paghimo sa usa ka app aron ma-post ang pipila ka teksto. Bisan pa, kini nga modelo dili molihok nga mag-inusara. Sama sa gihulagway kaniadto, kinahanglan naton ang usa ka naandan nga pagtan-aw ug naandan nga sumbanan sa URL aron mahimo kini nga modelo, ug kinahanglan usab naton ang usa ka porma uban ang usa ka template. Atong susihon una ang porma.

Aron ipasabut ang usa ka porma, pag-edit sa app / porma.py uban ni nano ug idugang ang mga mosunud nga linya. Kinahanglan namon ang duha ka mga import, among klase sa porma, ingon man ang modelo nga among gihimo (feed.models.post lakip na ang usa ka subclass nga gitawag nga Meta nga magpasabut sa modelo nga nakigsulti. Ang porma mahimo usab nga adunay usa ka function sa pasiuna nga nagpahimutang niini base sa kasayuran sa hangyo, modelo o kung dili, atong susihon kini sa ulahi.

Ang mga modelo nga porma labi ka mapuslanon tungod kay makahimo sila usa ka modelo o pag-edit usab sa usa ka modelo, mao nga gamiton naton kini alang sa duha. Atong ipasabut ang usa sa mga porma.py sa ubos.

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

Kini ang mga sukaranan kung unsa ang hitsura sa usa ka porma ug modelo. Ang kini nga porma sa modelo mahimong magamit sa pag-instanate o pag-edit sa usa ka post, pag-usab sa teksto nga kini adunay sulod. Magtan-aw kami sa pag-apil sa kini nga porma sa usa ka pagtan-aw sa sunod. Una, himuon naton ang mga paglalin ug ibalhin ang database aron ang among code mahimo nga makig-uban sa modelo kung magdagan kini. Aron mahimo kini, pagdagan ang mosunud nga mga mando:

python manage.py makemigrations
python manage.py migrate

Kini usa ka minuto nga ipahamtang, apan sa higayon nga kini, tugutan nimo kini nga ma-access ang modelo sa mga pagtan-aw, middleware, o bisan diin sa software. Magpadayon kita pinaagi sa paghimo sa usa ka pagtan-aw diin makita naton ang atong modelo. I-edit ang feed / Views.py ug Idugang ang mosunud nga code, ingon sa giingon. Dili nimo kinahanglan nga idugang ang bisan unsa pagkahuman sa # sign, kana nga code mao ang mga komentaryo nga gigamit sa pagpaila sa kasayuran bahin sa code. Magsugod kami pinaagi sa pag-import sa among modelo sa mga panan-aw, ug pagdugang kini sa usa ka konteksto diin mahimo naton kini buhaton sa usa ka template ingon usa ka lista alang sa pagpakita. Sunod, magdugang kami usa ka template diin mahimo namon ang porma ug modelo nga adunay usa ka butones aron makahimo usa ka bag-ong butang base sa modelo ug i-post kini sa server. Kini komplikado nga tunog, mao nga himuon lang naton kini nga lakang. Sa wala pa naton mahuman ang pagtan-aw, maghimo kita usa ka template nga naghatag lang sa modelo ug siguruha nga makita naton kini pinaagi sa paghimo og usa ka bag-ong post sa kabhang. Ania kung giunsa ang pagtan-aw sa ingon nga pagtan-aw:

    posts = Post.objects.all() # Pangutana ang tanan nga mga post sa database hangtod karon

Kini tanan tan-awon nga yano ra hangtod nga makaabut kami sa ilawom. Render, the value returned by the function instead of in a HTTP response like the previous example, always takes a request as its first input, accepts a context (in this case the posts in the database), which can now be rendered in the template, and returns the template defined in the function. Ang template mahimong usa ka dokumento sa HTML nga adunay gamay nga sinultian nga gitawag nga Jinja2, nga naghubad sa kasayuran sa Python sa HTML.

Aron masugdan ang paghimo sa mga template, paghimo sa duha nga mga direktoryo sa pagpakaon.

mkdir feed/templates
mkdir feed/templates/feed

Sunod, pag-edit ang usa ka template sa direktoryo sa ibabaw, feed / template / feed, ug idugang ang code alang sa kini nga panig-ingnan. Atong tan-awon ang template alang sa kini nga panig-ingnan.

Kini usa ka yano nga template. Gipunting niini ang pag-abli ug pagsira sa mga tag sa HTML, usa ka tag sa dokumento nga adunay usa ka legend title, usa ka laraw nga nagdugang usa ka gamay nga linya sa lista sa mga post ingon usa ka parapo sa template. Kini ang tanan nga gikinahanglan aron makahatag mga post, apan wala pa sa database. Magbuhat kita sa pipila nga adunay kabhang. Mahimo naton nga modagan ang kabhang sa pagdumala.py

python manage.py shell

Karon, i-import ang among modelo sa post

from feed.models import Post

Sunod, maghimo kami usa ka yano nga post nga adunay usa ka pisi ug mogawas sa kabhang. Ang pisi mahimong bisan unsa, bisan kung kini dugay nga teksto.

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

Sa katapusan, kinahanglan naton idugang ang usa ka sumbanan sa URL sa atong feed. Tungod kay ang among feed app mogamit daghang mga URL ug gusto namon nga ipadayon ang mga gidak-on sa file, maghimo kita usa ka lokal nga URL.py sa among feed app nga ingon niini:

from django.urls import path
from . import views

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

Kinahanglan usab namon nga i-edit ang mga URLS.py sa base app, bisan unsa ang among gihangyo nga tawagan kini, kini ang una nga direktoryo nga among gibuhat. I-edit ang app / app.py ug idugang ang mosunud sa mga sumbanan sa URL

from django.urls import include # sa tumoy
    # ... nauna nga code dinhi

Karon, kung gipadagan namon ang server nga adunay Python Manage.py runserver, makita namon ang panid nga among gihimo tungod kay kami adunay modelo, tan-awon ingon man ang mga sumbanan sa URL, kauban ang mga butang sa database. Sunod, ipatuman naton ang porma nga among gihimo ug nagsugod sa paghimo sa among kaugalingon nga mga post. Apan sa wala pa kami magsulat sa daghang code, maghimo kita usa ka backup gamit ang script nga gisulat namon sa sayo pa, pag-backup. Pagdagan kini nga script sa kabhang, paghulat pipila ka mga higayon, ug ang tanan nga code ipaluyohan sa among gitipigan nga git repositor.

backup

Ang pagpatuman sa porma medyo yano. I-import namon ang among porma, idugang ang usa ka tag-iya sa hangyo sa post, ug i-save ang post sa database sa wala pa mag-redirect sa parehas nga pagtan-aw. Mahimo naton gamiton ang pag-redirect function nga among gi-import, ug usa pa nga function nga gitawag nga balikon aron makuha ang URL alang sa sumbanan sa pagtan-aw. Pangutan-on namon kini sa feed sa lubi: Pakan-a 'tungod kay ang ngalan sa nalangkit nga sumbanan mao ang feed, ug ang pagtan-aw gitawag usab nga feed.

    posts = Post.objects.all() # Pangutana ang tanan nga mga post sa database hangtod karon
    if request.method == 'POST': # Pagdumala sa hangyo sa post
        form = PostForm(request.POST) # Paghimo usa ka pananglitan sa porma ug i-save ang datos niini
        if form.is_valid(): # Pag-validate sa porma
            form.save() # I-save ang bag-ong butang
        return redirect(reverse('feed:feed')) # Pag-usab sa parehas nga URL nga adunay usa ka hangyo
        'form': PostForm(), # Siguruha nga ipasa ang porma sa konteksto aron mahimo naton kini.

Karon, kinahanglan naton nga i-update ang template aron account alang sa bag-ong porma. Mahimo naton kini pinaagi sa paggamit sa

Tag sa HTML ug paghubad sa porma sa template sa HTML nga adunay usa ka isumite nga buton. Kinahanglan usab namon ang usa ka timaan sa CSRF, usa ka timaan nga nagpugong sa gawas nga mga site gikan sa pag-post sa porma nga wala'y pag-load sa usa ka panid.

Bungkagon naton kini. Adunay usa ka bag-ong klase sa porma, usa ka timaan, ang porma mismo, ug usa ka butang nga isumite. Nindot nga yano, apan kung gitan-aw namon kini, mahimo namon nga mas nindot tan-awon. Nagtrabaho kini, mahimo namon nga i-post ang mga bag-ong post nga adunay porma ug sila karon naluwas sa database. Adunay pipila ka mga butang nga nahitabo dinhi. Gigamit namon ang mga tag sa HTML aron ideklarar nga ang dokumento usa ka dokumento sa HTML, gigamit namon ang usa ka Tintlate Tag ({% ...%}) aron ihatag ang porma. Adunay usab kami usa ka loop aron mahatagan ang teksto gamit ang mga tag sa block ug tag template Tag. Ang mga Tags sa Block hinungdanon kaayo tungod kay mahimo naton nga ipasabut kung giunsa ang mga seksyon sa mga template nga gihatag sa kanila, ug ang mga tag sa template mao ang sukaranan kung giunsa naton gibutang ang mga variable sa among code.

Karon kinahanglan naton nga himuon ang atong app nga labi ka maayo, tungod kay karon kini tan-awon nga sukaranan. Mahimo naton kini pinaagi sa paggamit sa CSS, bisan usa ka linya, o sa mga klase nga gihigot sa matag butang sa dokumento. Nindot gyud ang CSS tungod kay kini nagsulti sa tanan sa panid kung giunsa kini kinahanglan tan-awon, ug mahimo kini nga tan-awon nga maayo kaayo. Adunay pipila ka mga librarya nga makahimo niini, apan ang akong personal nga pag-adto mao ang bootstrap.

Ang Bootstrap mahimong ma-download gikan sa ilang website,getbootstrap.com/. Kausa didto, ipadayon ang buton aron mabasa ang mga dokto sa pag-install, ug kopyahon ang code gikan sa Code gikan sa CDN Section. Kinahanglan nimo kini nga code sa taas sa imong dokumento sa HTML, sa usa ka tag nga gitawag og ulo. Usab, magpadayon kita sa paghimo sa usa ka template sa base aron dili naton kinahanglan nga likayan ang kini nga mga link sa matag template.

Paghimo usa ka bag-ong direktoryo nga gitawag nga mga template nga adunay mga template sa MKDIR, ug dayon pag-edit sa mga template / base.html.

Kini kinahanglan tan-awon sama niini:

Siguruha nga kopyahon ang CSS ug JavaScript, ang .css ug .js file, tungod kay kinahanglan namon ang JavaScript aron mahimo ang among site nga labi ka function sa umaabot.

Karon, mobalik kita sa Bash Shell ug Pagdali sa Dali nga Sugo. Hinumdumi, kung kinahanglan nimo nga ma-access ang virtual nga palibot, i-type ang gigikanan nga Venv / Bin / Pag-aktibo. Tugotan ka niini nga i-install ang mga pakete sa Python sa lokal sa usa ka paagi nga nagtugot sa Django nga maka-access kini. Aron mahatagan ang among mga porma nga gihimo sa mga klase sa Django Bootstrap, gamiton namon ang usa ka Python Package nga gitawag Crispy Forms. Mahimo naton i-download kini uban ang mosunud nga mando

pip install django-crispy-forms

Sa higayon nga kini gi-install, idugang kini sa mga setting.py

    # ... nauna nga code dinhi

Karon, balik sa among template sa feed, mahimo naton tangtangon ang pipila ka mga butang. Atong kuhaon ang sinugdanan ug katapusan sa dokumento ug pulihan kini sa kabilin gikan sa atong sukaranan nga template, gamit ang extends ug ang kahulugan sa block. Usab, kami magdugang usa ka template nga pag-import sa template nga adunay karga ug usa ka template nga pagsala sa porma. Sa katapusan, dugangan naton ang usa ka klase sa bootstrap sa butones sa porma aron mahimo kini nga tan-awon sama sa usa ka butones. Kana kinahanglan tan-awon sama niini:

Matahum! Kana usa ka gamay nga code na. Sunod, kinahanglan naton kini nga sulayan ug siguruha nga makita naton nga ang tanan nindot tan-awon, ug sigurado usab nga ang tanan nagtrabaho sa husto. Pagdagan ang server sama sa matag naunang mga panudlo ug siguruha nga ang lugar tan-awon ug molihok nga maayo. Nindot nga trabaho! Andam ka nga magpadayon sa sunod nga lakang, diin among idugang ang pag-andar sa pag-login sa Gumagamit gamit ang parehas nga mga URL, porma, mga panan-aw ug template. Mahinungdanon ang template sa base, ug padayon namon nga usbon kini ug maghimo mga pagbag-o kung gikinahanglan, apan karon mag-log in sa usa ka us aka impormasyon nga mag-log in sa imong username ug ang labi ka hinungdanon nga kasayuran nga makatabang sa imong pag-log in sa imong account nga ma-access ra nimo.

Aron mahimo kini, kinahanglan naton gamiton ang modelo sa gumagamit nga gitukod sa Django. Ang modelo sa gumagamit usa ka modelo sa database, sama sa among post, mahimo nga i-hubad ang usa ka user sa website. Sa umaabot, sa wala pa kami mag-deploy sa site sa Internet, atong ipadayon kini nga modelo sa uban nga mga modelo nga gipahinungod niini, ug magtukod dugang nga mga lakang sa seguridad alang sa pag-login nga resistensya sa phishing. Magsugod kami pinaagi sa paggamit sa pipila nga gitukod sa mga porma sa pag-login nga gihatag sa Django. Una, maghimo kita usa ka bag-ong app nga gamiton naton aron makahatag mga template ug mga panan-aw alang sa batakang panid sa pag-login. Maghimo usab kami sa ubang mga apps aron magrepresentar sa padayon nga mga hagit sa pag-login aron ma-secure ang app, lakip ang usa ka Pincode, Excight Device, Factor Perification, ug FitlePrint Affiction, ug Frightprint Affiction, ug FinglePrint Affiction

Nahisgutan na namon ang pagsugod sa usa ka app. Gikan sa among direktoryo, sa sulod sa virtual nga palibot, ipasa ang pagdumala.py kini nga mga ARGUMENTE

python manage.py startapp users

Karon, kinahanglan nga adunay usa ka direktoryo alang sa bag-ong app. Magsugod kita pinaagi sa paghimo og usa ka pagtan-aw sa kana nga direktoryo nga katumbas sa pag-login sa gumagamit. Gitukod ni Django ang mga pagtan-aw alang sa mga logins sa gumagamit, apan dili kini angay alang kanamo tungod kay kinahanglan namon ang usa ka naandan nga pagtan-aw, nga labi nga nahimo sa usa ka kahulugan.

Sa kini nga pagtan-aw, magsugod kita pinaagi sa pagsusi alang sa usa ka hangyo sa post, hangyo sa pagpasa.post sa usa ka loginform nga gi-import gikan sa Django, ug pag-log sa User sa wala pa kini pag-usab sa among feed app.

Sa mga tiggamit / Views.py, idugang ang mosunud nga code

        username = request.POST['username'] # Kuhaa ang username ug password gikan sa hangyo sa post
        password = request.POST['password'] # Pamatud-an ang tiggamit

Kini ang tanan nga imong kinahanglan alang sa usa ka batakang pagtan-aw sa pag-login. Karon, maghimo kita usa ka porma alang sa pagtan-aw pinaagi sa pagpalapad sa template sa base. Magsugod kami pinaagi sa paghimo og usa ka bag-ong direktoryo alang sa mga template sa folder sa tiggamit.

mkdir users/templates
mkdir users/templates/users

Karon, kinahanglan naton nga ma-edit ang mga tiggamit / template / tiggamit / Login.html. Samtang naa kami niini, maghimo kami usa ka template aron tugutan usab ang tiggamit.

nano users/templates/users/login.html

Karon, sa template,

Kini ang mga sukaranan sa usa ka template sa pag-login. Sama ra kini sa ubang mga template sa istruktura, apan kini tan-awon nga lahi sa lahi kung kini gihubad. Mahimo namon kopyahon kini nga code aron matukod ang usa pa ka parehas nga template nga gitawag Register.HTML, diin among usbon ang mga pulong ug mogamit usa ka bag-ong porma nga among gitukod. Atong buhaton una ang template. I-edit ang mga tiggamit / template / Gumagamit / Pagrehistro.html ug idugang ang mosunud nga code:

Karon, magtukod kita usa ka porma alang sa among pagrehistro sa tiggamit ug paglibut sa mga pagtan-aw sa wala pa naton ma-upgrade ang atong mga login sa gumagamit nga adunay usa ka modelo. Himoon namon kini nga sukaranan nga magsugod sa, apan ilakip ang daghang mga detalye ug mga bahin sa seguridad sama sa mga kasabutan ug CAPTCHA sa umaabot. I-edit ang mga porma sa mga tiggamit sa Nano / Porma.py, ug idugang ang mosunud nga code.

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

Mao nga kita adunay lain nga porma dinhi, nga sa yano nga mga buhat yano ra. Kini usa ka porma sa rehistro sa gumagamit nga adunay usa ka username, email ug password, ingon man usa ka pagkumpirma sa natad sa password. Timan-i nga kini nga porma wala magpadako sa regular nga porma sa porma.form, kini usa ka modelo nga porma nga nagpasabut nga kini adunay usa ka meta. Ang usa ka uma gihubit parehas, ug gihubit sa Meta Meta ang modelo nga katumbas sa nahabilin nga kasayuran nga isulat sa porma. Kadaghanan sa mga naa niini naa sa pagtukod ni Django sa usercreationationform, mao nga gamiton namon kana nga basihan sa klase (gipasa sa panulat).

Sunod, susihon naton ang panan-aw sa pagrehistro sa usa ka tiggamit, karon nga kita adunay usa ka porma ug usa ka template. Kini usa ka modelo nga modelo, sama sa usa sa bag-ong pagtan-aw sa post. I-edit ang mga tiggamit / Views.py ug Idugang ang mosunud nga code:

# ... Mga import

Kini ang tanan nga kinahanglan naton nga makakuha usa ka tiggamit nga narehistro, apan kinahanglan nga adunay daghang kasayuran. Gusto namon mahibal-an ang oras nga narehistro ang gumagamit, kung unsang orasa sila sa katapusan sa site, pipila ka kasayuran bahin sa kanila, nga kinahanglan usab nga i-update ang among modelo sa feed ug mga post sa gumagamit sa matag tiggamit. Aron mahimo kana, i-update namon ang mga modelo.py sa parehong mga apps. Magsugod kita pinaagi sa pag-edit sa modelo sa feed. Kini kinahanglan nga ingon niini karon:

from django.db import models # ... Mga import
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Idugang sa kini nga linya

Pagtagad sa ikaduha nga linya nga gidugang sa file. Kini usa ka langyaw nga yawi, nga mag-ila sa matag post sa usa ka tiggamit matag post, aron masiguro namon nga among gitipig ang mga post sa usa ka user-perc User mahimo nga wala kini ipasabut sa usa ka user. Gipasabut namon kini nga yawi sa langyaw sa klase nga kini nagrepresentar, usa ka DEDED ARGUMENTE nga gitangtang ang mga tiggamit sa mga tiggamit sa mga post nga nahimo namon nga mga post Ang kini nga may kalabutan nga ngalan, dili sama sa post.author, ang tagsulat sa post, naghatag kanamo nga tiggamit nga nagpost sa post mismo. Mahimo na naton makuha ang mga post nga gihimo sa usa ka tiggamit pinaagi sa pagdagan sa gumagamit.post.all (), o tagsulat.post.Post.all ().

Karon, himuon naton nga labi ka mabaskog ang atong mga login. Mahimo na naton himuon nga labi ka dali ang among site sa phishing pinaagi sa pag-rate sa lim-aw sa paglimite sa gidaghanon sa mga higayon nga tugutan namon ang usa ka pag-login sa site, kini dali. Magsugod usab kita sa pagtipig sa pipila ka kasayuran bahin sa matag tiggamit sa wala pa kami magpadayon sa pagpalambo sa among app. Pag-edit sa mga tiggamit / modelo.py, idugang ang mosunud nga code.

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

Timan-i nga kini nga modelo medyo parehas sa modelo nga post. Kami adunay usa ka dugang nga import, timezone, nga magtugot kanamo sa pagtakda sa mga kakulangan sa mga natad sa petsa, ug kami usab adunay usa ka kinaiya ug textfield sama sa post. Ang paggamit sa tanan nga mga timestamp nagtabang kanato sa pagseguro sa site ug masabtan ang paggamit niini, ug ang mga natad sa teksto maghatag kita kasayuran bahin sa matag tiggamit, o tagsulat, sa website. Ang onetoonefield kinahanglan nga usa ra ka menor de edad nga konsiderasyon, kini molihok nga parehas sa usa ka forginkey apan adunay usa ra matag sunud nga modelo. Niini nga paagi, ang tiggamit adunay usa ra ka profile, samtang sila adunay daghang mga post.

Karon, mapauswag naton ang among pag-login ug pag-rehistro sa mga pagtan-aw sa account alang sa profile. Una, pag-edit sa mga tiggamit / Views.py ug pag-focus sa pagtan-aw sa rehistro:

# ... Mga import
            Profile.objects.create(user=user) # Siguruha nga idugang kini nga linya, aron makahimo usa ka profile alang sa tiggamit

Naghimo lang kini usa ka profile alang sa tiggamit, nga wala nagpuno sa bisan unsang kasayuran. Karon, gusto namon nga sigurohon nga ang account sa gumagamit dili kanunay nga naka-log in sa kanunay, o labing menos mga password nga kanunay nga masulayan, busa i-update naton ang pagtan-aw sa pag-login.

# ... Mga import
        if user and user.profile.can_login < timezone.now(): # Timan-i nga kami karon nagsusi kung ang tiggamit mahimong maka-log in
        else: # Kung ang pag-login wala molampos,
            user = User.objects.filter(username=username).first() # Kini ang bahin diin among gi-update ang profile sa mga tiggamit
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Mao nga dili sila maka-log in pag-usab sa pipila ka mga segundo

Kini ang sukaranang sukaranan sa seguridad. Siguruha nga ang site dili mahuyang sa usa ka tawo nga nagsulay sa matag posible nga kombinasyon sa password, o bisan sa pipila kanila sa parehas nga oras. Dili kini makapahigawad sa ordinaryong tiggamit nga nahibal-an ang ilang passcode ug nag-log in sa pipila ka mga aparato, apan kini magpadayon sa daghang mga phishing robot nga wala sa app. Timan-i nga nagdugang kami kung adunay usa ka variable, can_login, nga kinahanglan nga usa ka oras sa nangagi, ug i-update kini sa matag dili malampuson nga pag-login gamit ang parehas nga username. Niining paagiha, ang usa ka makadaot nga tiggamit dili makatag-an sa usa ka password bisan diin hapit dayon. Ang gidaghanon sa mga segundo sa datetime.timedelta () mahimong ma-update usab, ug ang website mahimong labi ka mabaskog nga gamay nga dili magamit sa daghang mga segundo. Girekomenda ko ang 15 nga magsugod sa.

Hinumdumi, nagtukod kami usa ka backup script aron maluwas ang among trabaho, mao nga magpadayon kita sa unahan kung unsa ang among nahimo nga labi ka maayo aron masiguro nga naluwas kami. Pagdagan ang sugo:

sudo backup

Sa makausa pa, kini makaluwas sa imong trabaho hangtod karon. Girekomenda ko ang kanunay nga pag-backup aron ma-save ang imong trabaho, ug mahimo ka usab nga magpadagan sa usa ka backup nga trabaho awtomatiko. Mahimo nimo kini gamit ang usa ka UIC Utility nga gitawag CRON. Aron ma-aktibo kini nga gamit, pagdagan ang mosunud nga mando ug isulod ang imong password:

sudo crontab -e

Kung wala ka pa pilia ang kapilian 1 alang sa Nano, ang teksto nga editor nga kinahanglan nimong pamilyar, ug pag-scroll sa ilawom sa file gamit ang mga yawe sa arrow nga gigamit ang mga arrow key. Idugang ang mosunud nga linya:

0 * * * * sudo backup

Gigamit ni Cron ang format nga minuto, oras, adlaw sa bulan, bulan, adlaw sa semana, diin ang usa o usa ka numero nagrepresentar sa pagdagan sa mando. Gamit ang usa ka 0 alang sa minuto ug * alang sa nahabilin nga mga kapilian, mahimo kaming magpadagan sa usa ka sugo sa una nga minuto sa matag oras sa pagsugod sa minuto. Gitugotan kami niini nga i-back up ang code nga awtomatiko. Ang tanan nga mga trabaho sa Cron sa dihang gipatay sa SUDO RUN nga gamut, busa dili na kinahanglan naton i-type ang usa ka password matag oras.

Aron mas dali nga i-back up ang among code nga wala mogamit usa ka password, isalikway ang password alang sa among backup nga mando. Buhaton namon kini pinaagi sa pagpatuman sa mosunud nga mando ug mosulod sa usa ka password:

sudo visudo

Karon, mag-scroll kita sa ilawom sa file ug pagdugang usa ka linya:

ALL ALL=NOPASSWD: /bin/backup

Gitugotan kami niini nga modagan ang mando nga "backup" ingon nga bisan unsang tiggamit, nga wala'y password. Ang format alang niini dali, prefix lang ang linya nga adunay "tanan nga tanan = nopasswd: / bin /" ug matapos ang mando, nga naa sa / US /.

Karon, magsugod kita sa pagtrabaho sa email. Ang email hinungdanon alang sa mga website, tungod kay kini usa ka paagi aron mapadayon ang usa ka website nga labi ka luwas, pag-verify ang mga tiggamit sa tinuud nga mga tawo, ug bisan ang mga produkto sa merkado o serbisyo sa mga kustomer. Daghang mga tawo nga kanunay nga gisusi sa Internet ang ilang email adlaw-adlaw, ug nakadawat sa tanan nga mga matang sa email sa marketing bahin sa usa ka website sa Django nga labing maayo alang kanimo.

Una, mahimo ka magbayad alang sa usa ka serbisyo sa email nga makapaarang kanimo sa pagpadala email gikan sa imong domain ug nanginahanglan gamay nga code. Adunay daghang mga serbisyo nga nagtanyag niini, sama sa Google Workspace, Sendinblue, Mailgun, ug daghan pa.

Kay kon dili, maayo ang pagtukod sa imong kaugalingon nga serbisyo sa email sa sulod sa imong server gikan sa sinugdan. Girekomenda ko kini nga kapilian, bisan kung kini labi ka code ug mahimong manginahanglan espesyal nga pag-host. Dili ka makasugod sa usa ka mail server gikan sa imong balay sa computer nga lagmit, busa magpadayon kita sa pag-configure ug code aron makapadala sa usa ka server sa Sulod.

Una, pag-edit sa mga setting.py sa mosunod nga mando:

nano app/settings.py

Kung diin ang app mao ang ngalan sa app nga imong gibuhat gamit ang StartApp.

Idugang ang mga mosunud nga linya:

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)

Siguruha nga bag-ohon kini kung andam ka nga i-deploy ang imong app, among pag-usab kini sa ulahi. Ang setting sa email_address kinahanglan nga email nga gusto nimong ipadala, ug ang password (Email_host_password) kinahanglan nga ibutang sa password. Gi-load ko ang password gikan sa usa ka config file aron mapugngan kini gikan sa code gamit ang mosunud nga lohika, sa ibabaw sa mga linya sa mga setting.py:

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

Pagkahuman, nagpahimutang ako usa ka file nga json kauban ang config sa /etc/config.json nga gigamit ang Nano sama sa mosunod.

Aron ma-edit ang file:

sudo nano /etc/config.json

Idugang ang mga mosunud nga linya:

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

Padayon namon nga i-edit ang config file ug idugang ang tanan nga mga password ug mga yawe nga gamiton namon sa app. Karon, dali naton susihon kung giunsa ipadala ang email gamit ang Python. Una, maghimo kita usa ka template alang sa usa ka email sa pag-verify nga mahimo naton ipadala sa atong mga tiggamit, ug ibutang kini sa direktoryo sa template sa tiggamit. Kini nga template isulat sa HTML.

nano users/templates/users/verification_email.html

Kini nga email medyo yano. Nagkinahanglan kini usa ka konteksto sa usa ka tiggamit, ang base URL alang sa site, ug usa ka user ID ug token nga gigamit aron ma-verify ang email sa gumagamit. Siguruha nga ipasabut ang base URL sa mga setting.py sa wala pa kami magsulat sa pipila ka code sa Python aron makahatag sa template. Sige ug idugang ang mga mosunud nga linya sa app / setting.py, duol sa sinugdanan.

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

BASE_URL = PROTOCOL + '://' + DOMAIN

Sa kadugayan, kung andam na ang imong site alang sa Internet ug imong i-deploy kini, gusto nimong ipasabut ang imong domain ingon ang ngalan sa domain nga imong gipalit aron magrepresentar sa site. Kini ang ngalan nga imong i-type sa navbar aron ma-access ang imong site. Karon, mahimo nimong ibilin ang blangko sa domain o paggamit sa usa ka placeholer. Gusto usab nimo nga usbon ang site_name sa usa ka ngalan nga gusto nimo ihatag sa imong site, sa imong pagpili.

Sa wala pa kami ipadala email, maghimo kita usa ka token generator aron kita adunay usa ka timaan sa pagpa-aktibo sa account nga dili matapos. Mahimo naton kini pinaagi sa pagtukod ug pag-import sa usa ka timaan sa pagpaaktibo sa account nga sama sa mosunod. I-edit ang file:

nano users/tokens.py

Idugang ang mosunud nga code:

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()

Ang kini nga batakan nga token generator nakahatag usa ka timaan nga mahimo naton ipadala ang tiggamit sa usa ka URL ug magamit sa tiggamit aron ma-verify ang ilang email ug ma-aktibo ang ilang account.

Sunod, tan-awon naton kung giunsa pagpadala ang usa ka email. Paggamit sa Nano, pag-edit sa mga tiggamit / Email.py.

nano users/email.py

Ang pagpadala sa verification html email sama niini:

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)

Kini yano nga yano. Gi-import namon ang mga gimbuhaton nga kinahanglan namon nga ipadala ang email, ihatag ang email sa mga template, ug among mga setting, ug dayon among gihubit ang email pinaagi sa ngalan sa template pinaagi sa gumagamit gamit ang usa ka gumagamit. Mamatikdan nimo nga wala namon gihubit ang function aron ipadala ang mail, Send_html_email, bisan pa, isulat kini sa ubos sa code nga among gidugang sa mga tiggamit / 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()

Kini usa ka gamay nga komplikado, ug dili kami andam nga modagan sa tanan nga kini nga code. Himatikdi kami nga nagtino sa usa ka unsub_link, ang link nga magamit sa tiggamit sa pag-unsubscribe gikan sa among mga email. Mahinungdanon kini, tungod kay ang mga tiggamit kinahanglan nga makapili sa among mga email gawas kung gusto nila nga makita sila, bisan unsang oras. Nagdugang usab kami usa ka alternatibo sa teksto sa among mensahe, nga mao ang mensahe sa HTML nga nakuha sa mga tag sa HTML. Sa katapusan, susihon namon kung gipadala ang email, ug kung wala kini, among marka sa profile sa gumagamit nga ang ilang email dili balido.

Magbalhin kita sa mga modelo sa gumagamit aron mahimo naton kini nga tanan nga buluhaton. Kinahanglan naton ipasabut ang usa ka function aron makamugna ang usa ka link sa pag-unsubscribe, ug ipasabut ang usa ka uma nga Boolean aron markahan nga ang email sa tiggamit dili balido.

Una, idugang ang mga mosunud nga import sa tumoy sa mga tiggamit / Models.py

nano users/models.py
# ...

Sunod, idugang naton ang mga gimbuhaton sa modelo sa gumagamit aron mahimo ang timaan ug susihon ang timaan nga gigamit aron ma-aktibo ang email, ingon man ang kapatagan aron makatipig kung ang tiggamit malampuson nga nakadawat sa ilang mail. Sa mga tiggamit / modelo.py pag-usab, idugang ang mosunud nga code hangtod sa katapusan sa modelo (indentted code)

# ...
            TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Balido sa 30 ka Adlaw

Kini yano nga yano, gigamit namon ang usa ka timestamp sa timestamps, nga usa ka batakang himan sa cryptsography, aron makahimo usa ka timaan nga matapos sa usa ka piho nga oras, ug gigamit usab namon ang usa ka piho nga oras, ug gigamit usab namon ang usa ka piho nga oras sa pagsusi kung kini balido. Gigamit namon kini nga mga token kaduha, sa makausa aron ma-verify ang email, ug sa makausa alang sa usa ka link nga dili pag-unsubscribe.

Karon nga kita adunay niini, ang katapusan sa buhat nga kinahanglan naton buhaton mao ang mga panan-aw. Sulod sa mga tiggamit / Views.py, dugangan naton ang mga pagtan-aw aron ma-verify ang email address, ug sa pag-unsubscribe.

nano users/views.py

Una, idugang ang mga mosunud nga import. Gintabog ko sa pila ka ekstra para indi naton kinahanglan nga i-import ang dugang nga mga butang pag-usab sa ulahi.

from .email import send_verification_email # Siguruha nga i-import ang function sa pagpadala sa email

Mahimo ka na adunay pipila niini nga mga import, apan dili kini masakit sa pagsubli niini. Kinahanglan nimo nga i-import ang Funcification Email Function Function, ingon man account sa Account_activation_Token gikan sa mga tiggamit.Tookens, taliwala sa ubang mga import.

Karon, sa ilawom sa file, idugang ang mosunud nga code:

        # unsubscribe sila
    # Kung dili ang pag-redirect sa panid sa pag-login
# Pagpadala sa Sulat (Pangayo, Gumagamit)

Kini usa ka daghang code. Bungkagon naton kini. Ang una nga function, limpyo ug yano, dili mag-unsubscribes sa tiggamit gikan sa lista sa pagpadala. Ang ikaduha nga function nagpalihok sa ilang email, ug imong namatikdan nga nagdugang ako usa ka nagkomento nga function, Spellelticim. Malipayon ka nga mogamit usa ka template sa email ug kahulugan sa pag-andar nga magpadala usa ka welcome email, wala pa ako. Ang katapusan nga function nga akong gilabay mao ang hinungdanon, tungod kay matapos ang mga email sa pagpaaktibo. Busa, kinahanglan naton nga i-resend ang email sa pagpaaktibo sa pila ka oras. Mahimo naton gamiton ang usa ka sukaranang porma alang niini, ug tawagan ang function aron ipadala ang pag-verify email. Sa wala pa naton himuon kini, siguruha nga kini gipadala sa una nga lugar, pinaagi sa pagdugang usa ka function call sa pagtan-aw sa rehistro. Idugang kini nga linya sa wala pa ang pag-usab sa pagtan-aw sa rehistro, pagrehistro, sa mga tiggamit / Views.py.

nano users/views.py
# ... (pagkahuman) def rehistro (hangyo):
# ... (sa wala pa) Redirect (

Dili nimo kinahanglan idugang ang una ug katapusan nga mga linya sa kana nga code snippet, siguruha nga ang pagtan-aw sa rehistro nagpadala sa pag-verify email sa tiggamit. Kini kinahanglan tan-awon sama niini:

# ... Mga import
            send_verification_email(user) # Siguruha nga idugang kini nga linya!

Karon, kinahanglan namon nga magdugang usa ka porma aron i-resend ang email sa pagpaaktibo. Sa mga tiggamit / Porma.py, idugang ang mosunud nga porma:

# ... (Mga Pag-import)

Kinahanglan usab namon ang usa ka template nga katumbas sa kini nga porma sa pagpa-aktibo sa email sa pag-aktibo. Atong idugang kini nga template sa. I-edit ang file:

nano users/templates/users/resend_activation.html

Sunod, idugang ang mosunud nga code sa file.

Whew, daghan kana! Karon, kung atong i-deploy ang code sa among server, mahimo namon ipadala ang email sa HTML ug i-aktibo ang mga account sa gumagamit nga adunay pag-klik sa email. Tingali gusto usab namon nga magpadala usa ka yano nga email nga welcome email, busa tan-awa kung unsaon pagbuhat kana. Balik sa mga tiggamit / Email.py, idugang ang mosunud nga code:

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)

Ingon usab, kinahanglan naton ang usa ka template aron ihatag ang tanan niini nga kasayuran. Sa akong website, ang template morag sa ubos, apan giabiabi ka nga ma-format kini bisan pa.

Timan-i nga wala kami nagsira sa mga tag sa lawas o html, tungod kay gidugang namon kini kung idugang namon ang pag-link sa html unsubscribe. Mahinungdanon kini, apan dili kami gusto nga ipasabut sila sa makaduha.

So unsay sunod? Kita moabut sa layo nga paagi. Sa tinuud, kinahanglan nga andam kita nga i-deploy ang site sa usa ka server. Mahimo naton idugang ang @login_required Decorator ug himuon nga luwas ang among mga panan-aw, pagkuha mga signup sa gumagamit, ipadala ang kompleto nga email, ug ang kasayuran sa cache nga kinahanglan buhaton aron magpabilin nga may kalabutan. Idugang namon ang pipila ka labi ka mapuslanon nga mga bahin, ug dayon magtukod usa ka basihan sa pag-deploy sa among code sa usa ka hilit nga server, nga nagpahimutang sa usa ka mail server, pag-configure sa domain aron mahimo ang among site nga luwas ug angay.

Kinahanglan usab namon ang usa ka pagtan-aw sa pag-reset sa password, mao nga idugang naton kana sa dali. Ang gitukod sa Django sa pag-reset sa password sa pag-reset sa pipila ka mga gimbuhaton, apan tan-awon naton kung giunsa pagsulat ang atong kaugalingon nga pagtan-aw, mga template sa email, mga sumbanan sa URL. Ania kung unsa ang hitsura sa pagtan-aw, sa mga tiggamit / Views.py

# ... Mga import

Kini nga porma gitukod sa Django, apan magkinahanglan kami usa ka template aron kumpirmahon ang pag-reset sa password, tiggamit / template / Mga Gumagamit / password_RetMolml

Adunay usab kami usa ka template aron magpadala usa ka email sa pag-reset sa password, nga adunay usa ka yano nga porma, sa mga tiggamit / template / tiggamit / password_RetMl

Ang template alang sa email mismo yano, kini usa ka sukaranan nga html file nga maghatag usa ka link aron i-reset ang password, sa mga tiggamit / tiggamit / password_remail.htmet.HTML. Awtomatikong ipasabut ni Django ang kini nga file.

Kinahanglan usab namon ang duha pa nga mga template. Ang una mao ang pagkumpirma nga ang email gipadala. Ang mga panan-aw alang niini naa na sa Django, mao nga kinahanglan namon nga hisgutan kini sa mga URL.py. Kini nga template nahimutang sa mga tiggamit / template / tiggamit / password_reet_DONE.HTML

Ug sa katapusan, aron makumpirma nga ang pag-reset sa password kompleto, mga tiggamit / template / tiggamit / password_Retet_Comple.html

Karon, kinahanglan namon ang mga sumbanan sa URL alang sa kini nga mga panan-aw. Sa mga tiggamit / URLS.py, idugang ang mga mosunud nga mga sumbanan sa URL:

    # ... mga miaging mga URL dinhi

Upat ka mga template, daghan kana! Apan karon sigurado kami nga ma-reset ang password sa gumagamit bisan unsang oras nga kinahanglan namon, tanan gikan sa web browser.

Nakasabut ko nga kini usa ka daghang code. Kung ingon og gamay sa imong ulo, ok ra. Mouswag ka, ang imong pagsabut molambo, ug mahimo ka labi ka takus sa code sa dili madugay. Kung nawala ka sa hingpit, girekomenda ko nga mobalik sa kini nga software pagkahuman sa pagtrabaho sa usa ka kaugalingon nga nagpalayo sa kaugalingon nga kurso sa online. Kasagaran kini libre nga magsugod, ug mogiya kanimo sa tanan nga kinahanglan nimo nga magmalampuson sa imong pagbalik sa kini nga proyekto. Kung gibati nimo nga andam ka nga magpadayon, basaha, sunod, tabunan namon ang imong code sa usa ka pag-deploy sa usa ka bag-ong proyekto nga adunay pipila ka yano nga mga mando.

Ang katapusan nga butang nga kinahanglan namon buhaton sa wala pa ang pag-aghat sa usa ka hilit nga server mao ang paghimo sa among site nga gamay nga labi ka luwas. Mamatikdan nimo nga ang pagtan-aw sa pag-login nagkuha lamang usa ka username ug password, ug wala'y hinungdan nga hinungdan sa panghimatuud o usa ka higayon. Kini usa ka dali nga pag-ayo, ug sa parehas nga code, mahimo namon nga ipadala ang among site sa mga text message ug bisan kung tubagon sa mga text message nga gipadala sa server. Sa pagsugod, mobalik kami sa mga modelo sa gumagamit ug idugang ang usa ka pirata nga timestamp nga magrepresentar sa matag pag-login. Makadugang usab kami usa ka talagsaon, rotating identifier sa modelo sa gumagamit nga gamiton aron makadugang dugang nga seguridad sa among pag-login. Pag-edit sa mga modelo sa gumagamit, tiggamit / modelo.py, idugang ang mosunud nga code:

# Siguruha nga i-import ang UUID, Timestamp Signer ug URL Generator (Balikbalik)
    # Idugang kini nga code dinhi
    # Ug idugang kini nga function
            TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Balido alang sa 3 mins

Siguruha nga ang imong mga tiggamit / modelo.py sama niini, gawas sa mga komentaryo (code sa mga linya nga adunay #). Pagkalapas niini, yano ra. Kami adunay pipila ka mga import, usa ka timestamp sa usa ka utok sa cryptographic nga makamugna usa ka luwas nga code ug pamatud-an kini aron mahimo kini nga balido, ug dili mas tigulang sa usa ka piho nga mga segundo. Gigamit usab namon ang usa ka UUID, nga usa ka talagsaon nga identifier nga nagpaila sa among tiggamit sa pagpirma sa timaan, ug sa URL kung diin gipadala ang timaan sa tiggamit. Gamiton namon kini nga batakang crypptography aron magtukod usa ka pagtan-aw sa duha nga hinungdan. Sa wala pa kami magbuhat bisan unsa, ipadayon naton ang mga paglalin aron ma-update ang mga modelo sa atong gumagamit. Sa direktoryo nga adunay pagdumala.py, pagdagan ang mosunud nga mga mando aron makahimo ug makompleto ang mga paglalin.

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

Mahinungdanon kini tungod kay sa matag higayon nga maghimo kita mga pagbag-o sa mga modelo, kinahanglan naton nga buhaton ang mga lamesa ug i-update ang database nga adunay mga default sa wala pa naton magamit ang mga modelo.

Sunod, i-improvise ang among pagtan-aw sa pag-login aron ma-redirect sa usa ka pagtan-aw sa sekundaryong panghimatuud. Sa mga tiggamit / Views.py, kuhaa ang function sa pag-login ug pag-usab sa URL nga nahimo ra namon sa mga modelo sa gumagamit.

# ... Mga import
        if user and user.profile.can_login < timezone.now(): # Timan-i nga kami karon nagsusi kung ang tiggamit mahimong maka-log in
            # Kuhaa ang AUTH_LOGUGUGIN ANSA
                return redirect(user.profile.create_auth_url()) # HINUMDOMI NGA NAGTUO SA USA KA BAG-ONG URL dinhi
            else: # Kung ang tiggamit wala mogamit sa panghimatuud sa multi-factor, i-log kini.
        else: # Kung ang pag-login wala molampos,
            user = User.objects.filter(username=username).first() # Kini ang bahin diin among gi-update ang profile sa mga tiggamit
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Mao nga dili sila maka-log in pag-usab sa pipila ka mga segundo

Mao nga kini medyo yano, kami karon adunay paagi sa pag-redirect sa duha nga hinungdan sa panghunahuna kung gibuhat naton kini. Kita usab adunay usa ka pagbagsak kung ang usa ka tiggamit wala magdugang usa ka numero sa telepono. Magdugang kami usa ka sukaranang pagtan-aw aron madugangan ang usa ka numero sa telepono sa dili madugay ug mag-log in sa usa ka text message sa dili madugay.

Una, kinahanglan naton ang usa ka dali nga paagi sa pagpadala usa ka text message gikan sa among code. Aron mahimo kini, makapili kita gikan sa usa ka gidaghanon sa APIS, apan ang labing kadali sa akong opinyon mao ang Twilio. Nagtanyag usab sila og maayong presyo alang sa gagmay nga mga proyekto, ingon man usab daghang mga diskwento. Paghimo usa ka account sa Twilio.com, pun-a ang pipila ka mga detalye bahin sa imong proyekto, pagpalit usa ka numero sa telepono, ug kopyaha ang imong mga yawi sa API sa imong mga setting.py. Pagkahuman, idugang kini nga code sa ilawom sa usa ka bag-ong file, tiggamit / SMS.py.

nano users/sms.py
# Pag-import sa tanan nga mga kinahanglanon nga pakete
# Kini nga code nagpadala sa teksto sa Twilio
# Usa ka katabang nga function aron makakuha usa ka numero nga adunay daghang mga numero
# Ipadala ang teksto aron ma-verify ang tiggamit
# Magpadala usa ka user bisan unsang teksto sa kini nga function
# Pag-validate sa code sa kini nga function
# Pag-validate sa oras

Siguruha nga usbon ang imong mga setting sa angay, pagdugang niini nga mga linya sa imong mga yawi:

# Siguruha nga kopyahon kini gikan sa imong Dashboard sa Twilio
AUTH_VALID_MINUTES = 3 # Ang gidaghanon sa mga minuto nga ang panid sa TFA aktibo nga nakaayo kaniadto

Una, kinahanglan naton ang mga porma alang sa atong duha nga hinungdan nga panghunahuna sa panghimatuud. Pag-edit sa mga tiggamit / Porma.py, idugang ang mosunud nga code.

# ... Mga import
# Usa ka porma alang sa pagsulod sa among numero sa telepono
# Usa ka porma alang sa nagpamatuod

Sunod, maghimo kita sa mga pagtan-aw sa mga tiggamit / Views.py

# ... Mga import

Kinahanglan usab naton ang mga template alang sa duha niini nga mga pagtan-aw. Atong idugang una ang MFA template.

nano users/templates/users/mfa.html

Idugang kini nga Code sa HTML sa template

Kini ang medyo nagpatin-aw sa kaugalingon. Ang porma nagpadala bisan usa ka code o usa ka walay sulod nga code, ug imong namatikdan sa pagtan-aw nga gipadala namon ang code kung makadawat kami usa ka walay sulod nga code. Pagkahuman adunay duha lang kami magsumite mga butones, ug sa kini nga paagi mahimo namon ipadala ang code sa bisan unsang butones. Sunod, magdugang kami usa ka yano nga porma aron makadugang usa ka numero sa telepono.

nano users/templates/users/mfa_onboarding.html

Idugang ang mosunud nga HTML:

Kini nga porma labi ka yano, kini naghatag lang sa numero sa numero sa telepono nga among gihimo ug gitugotan ang user pagdugang usa ka numero sa telepono.

Maayo ang hitsura niini! Hangtod nga ang tanan maayo nga gipahimutang, kinahanglan nga magpadala kami mga mensahe, ug i-log ang tiggamit sa ilang numero sa telepono sa diha nga madugangan namon ang mga sumbanan sa URL. Ang katapusan nga butang nga kinahanglan naton nga ibutang usa ka pagtan-aw sa profile aron masiguro namon nga ang tiggamit mahimo'g magbag-o sa numero sa telepono.

Atong idugang ang usa ka pagtan-aw sa profile sa mga tiggamit / Views.py. I-update sa kini nga panan-aw ang BIO, email sa gumagamit, username, ug numero sa telepono, ingon usab pagtugot kanamo nga maatiman ang hinungdan sa hinungdan. Una, kinahanglan namon ang duha pa nga porma sa mga tiggamit / porma.py

# ... Mga import

Sunod, makahimo kita usa ka pagtan-aw sa paggamit sa duha niini nga mga porma. Pag-edit sa mga tiggamit / pagtan-aw.py ug pagdugang sa pagtan-aw.

# Idugang kini nga mga import

Kinahanglan usab namon ang usa ka template alang sa kini nga pagtan-aw.

nano users/templates/users/profile.html

Mamatikdan nimo kini usa ka yano nga yano nga porma, apan adunay pipila nga javascript niini nga awtomatikong nag-post sa sulud sa porma samtang sila gi-update. Mapuslanon kini nga adunay, mao nga makahimo ka sa pag-edit nga wala kinahanglan nga i-press ang isumite matag oras.

Sunod, kinahanglan namon ang mga URL nga nagrepresentar sa tanan niini nga mga pagtan-aw sa mga tiggamit sa URL sa mga tiggamit. I-edit ang mga tiggamit / URLS.py ug idugang kini nga code:

# ... Ang miaging code, import
# ... Mga sumbanan sa URL nga kaniadto nakasulod kami, dugangi ang sunod nga tulo nga linya

Karon usa ka maayong panahon sa pagsulay sa among proyekto. Apan una, magpadagan kita sa usa pa ka backup.

backup

Ug pagdagan ang server. Sa wala pa kami mag-deploy sa usa ka server sa Linux, usa ka maayo nga ideya aron mahimo ang duha nga hinungdan sa panghimatuud sa asoy. Atong buhaton kini nga pag-adto sa among profile URL, / Gumagamit / Profile /, ug pagsusi sa kahon aron mapatuman ang pag-ila sa among numero sa telepono, ug dayon isumite ang porma.

python manage.py runserver localhost:8000

Bisitaha ang webpage pinaagi sa pag-adto sa imong web browser, gigamit ko ang Google Chrome sa kini nga pananglitan, ug pagsulod sa URL HTTPS: // LocalHost: Mga Account / Account

Mahimo ka nga mag-log in kung kinahanglan ug makahimo sa duha nga hinungdan nga panghimatuud.

Ang kini nga proyekto nanginahanglan usa ka server nga modagan aron kini makapadala sa mail. Apan una, kinahanglan naton ang usa ka paagi aron makita ang mga sayup. Mamatikdan nimo nga kung gipadagan nimo ang server sa Debug Mode, nga adunay mga setting.Debug nga katumbas sa tinuod, ang server nagpakita sa mga sayup nga awtomatiko. Aron ipakita ang mga sayup nga wala gigamit ang Debug Mode, nga dili luwas sa usa ka server sa produksiyon, kinahanglan naton idugang ang usa ka pagtan-aw alang niini. Ang labing hinungdanon nga mga sayup nga kinahanglan naton nga makontrol mao ang:

Sayup 500 - Usa ka Suliran sa Atong Code Sayup 404 - usa ka panid nga wala makit-an (nabuak nga URL) Sayup 403 - Usa ka pagtugot nga gilimod sa sayup

Atong idugang ang usa ka bag-ong app sa pagdumala sa mga sayup, gitawag nga mga sayup.

python manage.py startapp errors

Idugang kini sa mga setting.py sama sa among gibuhat kaniadto, sa pag-install nga setting sa-install nga_apps, ug pagsugod pinaagi sa pagdugang mga pakisayran sa pipila nga mga pagtan-aw sa PEP / URLS.py, diin ang app mao ang ngalan sa imong Django Project.

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

Kini ang tanan nga atong gikinahanglan gawas sa mga pagtan-aw sa sayup, mga template ug gamay nga middware. Atong ipasabut ang ingon niini:

# Paghimo sa imong mga panan-aw dinhi.

Sunod, ipasabut naton ang middleware aron masulbad kini nga mga sayup. Buhaton namon kini pinaagi sa una nga pagdugang sa MiddleWare_Classes sa mga setting.py, nga adunay ngalan sa among Middware.

    # ... BISAN

Sunod, idugang naton ang Middleware.

from threading import local
import traceback
from django.utils.deprecation import MiddlewareMixin

_error = local()

class ExceptionVerboseMiddleware(MiddlewareMixin):
    def process_exception(self, request, exception):
        _error.value = traceback.format_exc()

def get_current_exception():
    try:
        return _error.value
    except AttributeError:
        return None

def set_current_exception(exception):
    try:
        _error.value = exception
    except AttributeError:
        print('Attribute error setting exception.')

Nagdugang kami usa ka function aron makuha ang kasamtangan nga eksepsiyon pinaagi sa paggamit sa usa ka hilig nga hilo, nga makatabang kanamo sa pagsubay sa bisan unsang mga sayup sa among code. Sa mga termino sa mga template, kinahanglan ra naton ang usa, tungod kay gipunting namon ang titulo sa panan-aw. Ang template kinahanglan nga maghatag sa titulo ug "pagsunud", ang among sayup nga traceback gikan sa konteksto.

nano errors/templates/errors/error.html

Kini ang among labing yano nga template, apan mao kana kung unsa kadali ang pagtan-aw sa mga sayup sa among proyekto. Sunod, pag-disable ang Debug sa mga setting.

nano app/settings.py

Pangitaa kini nga linya diin kini gitakda sa Tinuod, ug usbon kini sa bakak

DEBUG = False

Sige ug i-backup ang app karon. Andam kami nga i-deploy sa usa ka hilit nga server sa Linux, ug ipadayon ang pagdugang mga bahin gikan didto.

sudo backup

Sa wala pa naton i-post kini nga code sa usa ka server, kinahanglan naton hunahunaon nga adunay pipila nga mga isyu sa code. Depende sa kaso, ang mga site nga nakadawat kasayuran nga gi-post sa mga isyu adunay mga isyu nga adunay spam nga gi-post ug kalisud sa pagtangtang sa spam. Dili kini kinahanglan nga mahitabo dayon, apan kung kini nagakahitabo, susihon dayon naton kung giunsa ang pag-ila sa mga robots sa usa ka pag-scan sa ilang ID o usa ka pag-scan sa user o usa ka pag-ila sa fingerprint.

Gitan-aw ang usa ka panig-ingnan nga panghimatuud sa daghang hinungdan nga among gisusi, sa produksiyon, ang mga butang mahimong lahi. Timan-i kung giunsa naton pag-rate ang paglimite sa mga logins, ug pag-expire sa mga token. Kung ang mga robot nag-access sa usa ka site, ang duha nga hinungdan sa panghimatuud mahimong labi ka lisud samtang sila makasulod sa mga code sa parehas nga tiggamit. Aron mapugngan kini, mogamit kita usa ka modelo sa mga modelo sa gumagamit, nga nagpahayag kung giunsa naton pakig-uban sa site kung kita nagpamatuod sa paggamit sa usa ka numero sa telepono. Magdugang usab kami usa ka kapilian aron mapamatud-an sa email. Magsugod pinaagi sa pag-edit sa mga modelo sa tiggamit uban ni Nano.

nano users/models.py

Kini ang angay nga tan-awon sa modelo nga atong gidugang. Wala kami magkinahanglan og bisan unsang mga pamaagi, mga variable nga magtipig sa usa ka ID, ang tiggamit, timestamp, pag-expire ug mga pagsulay batok sa bisan unsang paagi sa pagpahiuyon sa daghang paagi (usa ka code nga gipadala sa usa ka telepono o email).

# Usa ka sukaranan nga timaan nga gigamit sa pag-log in sa website

Atong idugang usab ang usa ka pribilehiyo sa among tiggamit, ug hatagan namon kini nga mano-mano sa karon, sa wala pa ang paglalin sa mga pribilehiyo nga mga tiggamit Awtomatiko. Sa mga modelo sa tiggamit, idugang kini nga linya sa profile:

    vendor = models.BooleanField(default=False)

Sama sa bisan unsang mga pagbag-o sa database, kinahanglan naton nga maghimo mga paglalin ug molalin sa database bisan unsang oras nga atong i-edit ang usa ka Models.py File sa Django. Hinumdumi, aron buhaton kini gigamit namon ang gigikanan una (kung wala pa kini gigamit sukad pa bukas ang terminal) ug dayon ang pag-agwanta sa Python.

cd project-directory-you-named # (kung gikinahanglan)

Karon, mahimo nimong palambuon ang bisan unsang mga account nga imong gibuhat ingon mga tindera pinaagi sa paggamit sa kabhang.

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

Karon, atong susihon ang atong Factor Authentication Viewment nga gamiton kini nga timaan. Una, kinahanglan naton nga usbon ang atong mga gamit sa helper sa MFA. Paggamit sa 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
# Pamatud-an ang tiggamit gamit ang ilang email o numero sa telepono
    token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Isala ang token pinaagi sa kantidad nga gipasa sa URL (usa ka 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)) # Kung kini nga sesyon wala buhata, paghimo kini
    user = User.objects.filter(id=token.user.id).first() # Kuhaa ang tiggamit gikan sa token
    if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Kung napamatud-an na sila, pag-log kini
    if not user: raise PermissionDenied() # Gilimod kung wala'y nakit-an nga tiggamit
    if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Susihon ang tagsulat nga token
        auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Pag-log sa user kung wala pa sila naka-log in
        user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Paghatag usa ka pagtapos sa ilang hinungdan sa pagpakaaron-ingnon
        return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Pag-usab sa tiggamit sa sunod nga panid
    if not user.profile.mfa_enabled: # Susihon kung gipagana ang MFA
        if not check_verification_time(user, token): # Susihon ang oras
            user.profile.mfa_enabled = False # I-clear ang numero sa telepono
            user.profile.enable_two_factor_authentication = True # Pag-ayo sa MFA
            user.profile.phone_number = '+1' # I-disable ang numero sa telepono
            user.profile.save() # I-save ang Profile
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Pag-log sa tiggamit kung ang ilang MFA wala magamit
    if request.method == 'POST' and not fraud_detect(request, True): # Kung ang hangyo usa ka hangyo sa post
        form = TfaForm(request.POST) # Diha-diha dayon ang porma
        code = str(form.data.get('code', None)) # Kuhaa ang code
        if code and code != '' and code != None: # Siguruha nga dili kini walay sulod
            token_validated = user.profile.check_auth_token(usertoken) # Susihon ang tagsulat nga token
            is_verified = check_verification_code(user, token, code) # Susiha ang code
            if token_validated: # Kung ang tanan
                if is_verified: # Naa sa han-ay
                    user.profile.mfa_enabled = True # Pag-ayo sa MFA (kung wala pa mahimo)
                    auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Pag-log sa tiggamit
                    for key, value in request.GET.items(): # Pagtukod usa ka pangutana alang sa sunod nga parameter (kung adunay)
                        return HttpResponseRedirect(next) # Pag-usab
            elif not token_validated: # Kung ang token dili balido
            if p.mfa_attempts > 3: # Kung adunay daghang mga pagsulay
            if form.data.get('send_email', False): # Ipadala ang email (o teksto)
    # Paghatag porma (alang sa pagkuha mga hangyo)

Kung kita nagdugang sa kini nga code, siguruha nga i-import ang function aron ipadala ang usa ka email. Sa tumoy sa file, ang pagtan-aw sa tiggamit (uban ang uban pang import), idugang

from .mfa import send_verification_email as send_mfa_verification_email

Karon, kinahanglan naton isulat kana nga function sa wala pa ang bisan kinsa nga molihok. Kini kinahanglan nga magpalapad sa among pagpadala sa email, ug magpadala lang usa ka email sa tiggamit sa verification code.

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

Mao nga kining tanan nagtrabaho nga maayo, karon kami adunay usa ka sistema sa panghimatuud nga hinungdan nga nagsalig sa numero sa telepono o email nga pag-log in. Mahimo kini nga mga spammer, robot o bisan kinsa nga wala mag-ingon nga maayo alang sa among trabaho. Tan-awa ang usa ka pagtan-aw nga ako adunay alang sa pag-monitor sa mga tiggamit sa akong website:

# import
from .tests import is_superuser_or_vendor # Kinahanglan namon nga buhaton kini nga pagsulay
    # Pagkuha lista sa mga tiggamit
    return render(request, 'users/users.html', { # Ibalik ang mga tiggamit sa usa ka template

Timan-i nga kini nga code naggamit usa ka pagsulay, kinahanglan naton ipahayag kini nga pagsulay sa usa ka pagsulay.py file ug i-import kini. Pag-edit sa mga tiggamit / Test.py, himua ang pagsulay.

def is_superuser_or_vendor(user):
    return user.profile.vendor or user.is_superuser

Kini kauban ang mga tiggamit / tiggamit.html template, nga ingon usa ka butang nga sama niini:

Timan-i nga ang template naglakip sa lain nga template, tiggamit /tiggamit.html. Kung gigamit ang usa ka template nga adunay subtemplate ug dili paggamit sa mga extends, usa ka maayo nga ideya nga idugang ang usa ka underscore () sa wala pa ang ngalan sa file aron mapalapdan, aron mailhan ang mga template.

Timan-i nga kini usa ka daghan nga Jinja, tingali wala nimo makuha ang tanan nga kini nga mga variable. Apan kini ang hitsura sa akong code.

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

Kinahanglan usab namon ang lain nga subtemplate, toggle_active.html. Kini nga template kinahanglan usa ka porma nga nagtugot kanato sa pag-togle kung ang usa ka tiggamit aktibo.

Kinahanglan usab naton idugang ang usa ka pagtan-aw sa pag-postger sa kalihokan sa tiggamit, ug angay nga mga sumbanan sa URL. Samtang naa kami sa kini, dugangan naton ang pagtan-aw sa usa ka tiggamit kung kinahanglan naton kana.

# Import
    success_url = '/' # Ang pag-redirect sa URL sa Kalampusan
    def test_func(self): # Sulayi kung ang tiggamit mao ang superuser ug adunay pagtugot sa pagtangtang

Samtang kini praktikal kung gikinahanglan, ang pagtangtang sa usa ka tiggamit dili kinahanglan nga kadaghanan sa mga oras, mahimo ra naton nga i-post lang ang panan-aw sa mga tiggamit nga mobisita sa site kung kinahanglan naton nga isalikway kini.

Ang mga sumbanan sa URL nagdugang kita sama niini. Uban sa Nano, pag-edit sa mga tiggamit / URLS.py ug idugang kini nga mga linya:

nano users/urls.py

Ang mga linya kinahanglan nga moadto sa lista sa mga agianan sa pagtan-aw sa tiggamit, sa wala pa matapos ang "]" apan pagkahuman sa sinugdan "[".

# ...
# ...

Karon, siguruha nga i-back up ang site aron ma-download nimo kini sa web server nga magpadayon kami sa pagtrabaho. Gikan sa linya sa mando,

sudo backup

Karon ang among site gipaluyohan.

Mao nga karon kami adunay pipila nga labi ka mapuslanon nga mga bahin. Apan unsa man ang bahin sa dako nga litrato dinhi? Kini nga code dili pa magamit gikan sa Internet, wala pa kami mail server, ug kinahanglan namon nga palapdan ang among app aron matabangan kami sa pag-usisa sa site nga nagpamatuod sa mga pribilehiyo nga mga tiggamit.

Atong makuha ang tanan niini. Ang labing hinungdanon nga butang alang sa karon makuha ra kini nga code online, nga mahimo naton sa pipila lang ka linya sa bash sa usa ka Server sa Ubuntu. Kinahanglan nimo nga mag-abang sa usa ka server alang niini bisan kung adunay usa ka server sa balay ug usa ka suskrisyon sa Internet nga nagtugot kanimo sa pag-abli sa mga pantalan. Ako personal nga nagpadagan sa akong website sa usa ka HP Z440 nga na-install sa akong apartment, apan kasagaran kini labi ka barato alang sa mga batakang pribado nga server (VPS).

Hinumdumi nga ang code nga atong gipadagan karon medyo manipis, kinahanglan nga magpadayon ug molambo sa wala pa kita andam nga mogamit sa usa ka produkto. Siguruha nga mag-amping kung unsa ang imong gibuhat sa Internet, siguruha kung imong gi-deploy ang kini nga site sa publiko sa web sa usa ka linux server, adunay plano nga i-block ang dili gusto nga mga pakig-uban sa imong website. Kini lagmit dili usa ka problema sa sinugdanan, apan magtan-aw kita sa lainlaing mga solusyon aron mapugngan kini, lakip na ang pagkat-on sa makina, panan-aw sa intelihente ug kompyuter. Kung kini nahimo nga usa ka problema, tan-awa ang dugang sa kini nga teksto alang sa usa ka solusyon.

Sa mga termino sa pag-abang sa usa ka VPS, adunay daghang mga lugar nga mahimo nimong adtoan. Ang Google Cloud adunay mga VPS server, Ionos, Kamatera, Amazon Aws, ug daghang mga tagahatag ang nagtanyag mga solusyon sa Server nga Server nga angay sa among mga panginahanglan.

Kinahanglan nimo nga i-klik pinaagi sa ilang mga porma ug pagpili og usa ka plano nga magsugod. Mahimo ka nga makaadto sa usa ka batakang plano sa bisan unsang tighatag, apan siguruha nga gitugotan ka sa provider nga magbukas sa Port Mail Server Ports aron ipadala ang email (Port 25), ang pipila nga mga tighatag niini nga mga pantalan. Hangtod karon adunay akong labing maayo nga kasinatian sa Ionos ug Kamatera, silang duha magtugot kanako sa pagpadala sa walay kutub nga email ug ang ilang presyo medyo barato.

Makonekta ka sa imong bag-ong server sa usa ka protocol nga gitawag nga SSH O SCEWISYON, nga nagtugot kanimo sa layo nga interface nga parehas sa server sama sa imong personal nga computer. Kung gipahimutang nimo ang server, lagmit pangutan-on ka sa hosting provider nga magdugang usa ka ssh yawe, o hatagan ka nila usa ka username ug password. Ang Key sa SSH mao kung giunsa nimo pag-log in sa server gikan sa linya sa mando aron ma-edit ang code. Gamita ang mga kapilian sa SSH-KeyGen aron makamugna ang usa ka SSH key.

ssh-keygen

I-save ang file ug i-overwrite kini kung kinahanglan nimo, maayo nga i-rotate ang imong mga yawe sa SSH kung wala ka na. Karon, mahimo nimong gamiton ang mosunud nga mando aron makita ang imong SSH key. Gusto nimong kopyahon kini sa imong hilit nga server aron magamit nimo kini aron mapamatud-an.

cat ~/.ssh/id_rsa.pub

Kung wala ka makakita sa usa ka ssh yawe kung nag-type sa kana nga mando (usa ka taas nga pisi sa mga numero ug mga letra nga nagsugod sa usa ka yawe sa RSA (Silipay nga magamit ang usa ka 4096 bit nga rersa ssh yawe.

ssh-keygen -t rsa -b 4096

Paghimo usa ka VPS nga nagdagan ubuntu, bisan pa nagplano ka nga buhaton kini. Sa higayon nga nakamugna ka usa ka VPS pinaagi sa pag-klik sa mga porma sa website sa mga tighatag (Kamatera.com, ionos.com o parehas nga pag-log in sa imong IP address (ang adres Kinahanglan usab nga magmahunahunaon ka sa default username sa server nga among gihimo, pananglitan, ubuntu.

ssh ubuntu@XX.XX.XX.XX

Mahimo ka nga pangutan-on alang sa usa ka password, kung gihangyo ka alang sa usa ka password, isulod kini. Dili kami mogamit sa default username, busa magsugod kami sa paghimo sa usa ka bag-ong tiggamit ug pagdugang usa ka ssh yawi sa ilang account.

Magsugod kita pinaagi sa pagdugang usa ka bag-ong file sa SSHD_Config, nga nagsulti sa server kung giunsa paggamit ang SSH.

nano sshd_config
# Kini ang Spy Server System System nga Configurasyon nga file.  Makita
# sshd_config (5) alang sa dugang nga kasayuran.
# Kini nga SSHD gitigum sa agianan = / USR / LOCAL / SBIN: / USR / US: / USR / SBIN:
# Ang estratehiya nga gigamit alang sa mga kapilian sa default sshd_config gipadala
# Ang OpenSSH mao ang pagtino sa mga kapilian sa ilang default nga kantidad diin
# Posible, apan biyai sila sa pagkomento.  Dili kompleto nga kapilian nga nag-override sa
# kantidad nga default.
# Port 22
# Addressfamily bisan kinsa
# Pamati 0.0.0.0
# Pamati ::
# Hostkey / etc / ssh / ssh_host_sa_key
# Hostkey / etc / ssh / ssh_host_ecdsa_key
# Hostkey / etc / ssh / ssh_host_ed25519.key
# Mga Ciphers ug Keying
# REKEYlimit default wala
# Tutipa sa pag-log
# Syslogucacility AUTH
# Impormasyon sa loglevel
# Panghimatuud:
# Logingactime 2m
# Permotootlogingin-password
# Mga higpit nga oo
# MaxuthTries 6
# Mga Maxsession 10
# Gilauman .SSH / AUTHORIZED_KEYS2 nga dili mapugngan sa default sa umaabot.
# AuthorismdPrincipaliksfile wala
# AuthorizedkeysEsCommand wala
# Authorizedkeyscommamatus wala
# Alang niini nga magtrabaho kinahanglan usab nimo ang mga yawe sa host sa / etc / ssh / SSH_ nga gipadako_host
# HostbaseAuthentication dili
# Pag-ilis sa Oo Kung Dili Ka Magsalig ~ / .ssh / nailhan nga_host alang sa
# HostbaseAuthentication
# Wala magtagad sa mga wala mailhi nga wala
# Ayaw Basaha ang mga ~ / / .rhosts ug ~ / .shshs Files
# Mga Pagbalhin sa YES
# Aron dili pag-disable ang tunneled nga tin-aw nga mga password sa teksto, pagbag-o sa wala dinhi!
# Mga Permitemptypasswords no
# Pagbag-o sa Oo aron maatiman ang mga password nga tubag sa hagit (Mga Isyu sa Pag-atiman
# pipila ka mga modyul sa PAM ug mga hilo)
# Mga Kapilian sa Kerberos
# Kerberosauthentication dili
# Kerberosorlocalpasswd oo
# KerbberostkicleAnUs oo
# Kerberostafstoken no
# Mga kapilian sa GSSPA
# Gssapiuthenication dili
# Gssapicicaupcredensial oo
# GssapistripotCtorcheck oo
# Gssapikeyexchange no
# Ibutang kini sa 'Oo' aron mahimo ang panghimatuud sa PAM, pagproseso sa account,
# ug pagproseso sa sesyon. Kung kini gipalihok, ang panghimatuud sa PAM
# gitugotan pinaagi sa KBDINTECTIVIAUBENTIATENTION UG
# PasswordAuthentication.  Depende sa imong Configure sa Pam,
# Ang panghimatuud sa PAM pinaagi sa KBDINTECTIVIAUBENTION NGA MAHIMO
# ang pag-setting sa "permrootlogin nga wala'y password".
# Kung gusto nimo ang account sa PAM Account ug Session nga mga tseke aron modagan nga wala
# Ang panghimatuud sa Pam, dayon itugot kini apan ibutang ang passwordAuthentication
# ug kbdinteactiveAuthentication sa 'Dili'.
# ALUTIONSENTFORWORWING OO
# Pagtugot sa pagtugot oo
# Mga gatewayports no
# X11Displayoffset 10
# X11uselocalhost oo
# Stilltty Oo
# Pag-imprinta oo
# Tcpkeepalive oo
# PERSUMENERENRIVION NO
# Ang pag-compress nalangan
# Kliyenteifinterval 0
# Kliyenteifecountmax 3
# Gigamit no
# PIDFILE /RUN/shd.pid
# Mga Maxstartup 10: 30: 100
# Pagtugot sa dili
# Chrootdirectory wala
# Mga bersyon sa wala
# walay default nga agianan sa bandila
# Tugoti ang kliyente nga ipasa ang mga variable sa lugar sa lokal
# override default nga wala'y substysems
# Panig-ingnan sa mga Sulud nga Mga Setting sa usa ka Per-User nga sukaranan
# Match ang mga anoncvs sa gumagamit
# X11fortarding No
# Pagtugot sa pagtugot no
# Gitugotan nga dili
# Mga Kalag sa CVS Server

Hinumdomi, Ctrl + x ug y aron ma-save ang file. Sunod, isulat naton ang usa ka sukaranan nga script nga gitawag nga pasiuna (tanan sa default nga direktoryo sa balay sa among tiggamit).

nano initialize

Idugang kini nga mga linya sa file, pag-ilisUban sa imong SSH Key nga nakit-an nimo gamit ang iring. (.sh / id_sa.pub)

# ! / bin / bash

Aron makalakaw ka sa kini nga file, magsugod kita linya pinaagi sa linya. Ang una nga linya nagsulti sa tigpaniid nga kini usa ka script sa Bash. Pagkahuman kami nag-instalar sa mga dependencies, pagkopya sa SSHD_Config sa tama nga direktoryo, pag-restart sa SSH alang sa root, idugang ang usa ka ngalan sa adduser sa kini nga ngalan sa ilang ngalan ug kapansanan karon). Nagdugang kami usab team sa grupo sa sudo, makamugna ang ilang SSH key, idugang ang among yawi sa mga awtorisadong mga yawe ug ila usab, ug i-print ang ilang yawi. Kini nga bag-ong tiggamit kung giunsa namon pag-log in sa site.

Sa usa ka bag-ong terminal, padayon ug ablihan pag-usab ang server.

ssh team@XX.XX.XX.XX

Dili nimo kinahanglan ang usa ka password karong panahona, ingon nga ikaw adunay usa ka SSH key. Kita usab adunay kapansanan nga pag-login nga adunay password aron mapadayon ang site nga mas luwas.

Karon, kini nga server nagsugod sa hingpit nga blangko nga wala'y kasayuran bahin niini. Magsugod kita pinaagi sa pag-clone sa among proyekto gikan sa git aron maka-download kami ug modagan kini sa hilit nga makina. Sa hilit nga server nga konektado sa SSH, una nga i-print ang imong SSH yawe:

cat ~/.ssh/id_rsa.pub

Sunod, idikit kini nga yawi sa mga setting sa git gusto namon kaniadto aron mapahimutang ang among git repository. Mahimo naton karon nga i-clone ang among proyekto diretso sa server. Siguruha nga gipaluyohan nimo ang proyekto sa lokal sa una mao nga kini sa git server aron i-download.

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

Perpekto. Karon ang tanan nga mga file ania dinhi. Makita naton sila sa LS

ls

Karon, magsugod kita sa pagpahimutang sa server. Una, kopa ang direktoryo sa imong proyekto sa usa ka yano, halandumon nga ngalan nga gamiton namon alang sa proyekto.

cp -r yourproject whatyoucalledit

Kung diin ang "unsa ka ouucalledit" ang bag-ong ngalan sa imong proyekto. Sunod, kinahanglan naton nga magtukod usa ka sukaranang utility aron mapahimutang ang server. Atong maluwas kini nga gamit ug gamiton kini sa umaabot. Aron matukod kini nga gamit, maghimo kita usa ka binary nga user aron ipasabut kung giunsa naton pag-edit ang usa ka script. Gamit ang Bash, I-edit / USR / Bin / Ascript

sudo nano /usr/bin/ascript

Siguruha nga gamiton ang sudado didto aron adunay mga permiso sa pag-edit sa file. Sa file, idugang kini nga mga linya:

# ! / bin / bash
    echo "# ! / bin / bash ">> / USR / BIN / $ 1

Hinumdumi nga kini nga script nagkuha usa ka argumento, ang ngalan sa script, ingon $ 1. Una kini gisusi kung adunay file, o kung dili man kini gihimo, gidugang ang una nga linya aron mapahayag ang mga pagtugot niini, ug gipunting ang mga pagtul-id niini sa mga ngalan sa mga script nga among gihimo. Kung ang file naa na, ang pagbag-o sa pagtugot ug pag-edit niini. I-save ang file, ug sunod atong usbon kini pagtugot. Hangtod nga gigamit naton kini nga script, dili na naton kinahanglan nga buhaton kini pag-usab.

sudo chmod a+x /usr/bin/ascript

Perpekto. Karon maghimo kita usa ka script nga gitawag nga pag-setup. Una, dili aron mabuntog ka, apan tan-awa kung unsa ang hitsura sa akong Setup Script. Maglakaw kita pinaagi sa kung unsa kini nga script kinahanglan tan-awon sa imong proyekto, dili nimo kinahanglan ang tanan sa akong script aron magsugod.

# ! / bin / bash
# sudo chmod a + x scripts / USERSETUP
# ./scripts/usersetPUP
# SSH-KeyGen
# Directory sa Proyekto
# Mga Sugo sa Pag-log
# Nano Config
# Git config
# Pag-update ug pag-install
# Pag-ayo sa Clamav Antivirus
# I-set hostname
# Setup Postgres
# Pag-backup sa database sa Database
# I-disable ang IPPAPTS
# I-install ang bitfender
# Setup Postfix
# Paghimo Dirs
# Pag-set up nga si VirtualENenV
# Pagkuha ug paghimo mga dependencies
# I-set ang mga lagda sa firewall
# I-install ang mga dependen sa PYPI
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# PIP Pag-install OpenCV-Python == 4.5.5.64
# PIP I-install ang Opencv-Trot-Python == 4.5.5.64
# I-install ang sertipot
# Pagdagan Certbot
# Reload Mail Server
# Kopyahon ang mga CERTS
# sudo cp /etc/letsencrypryplt/live/femmebabe.com/perrivkey.pem Privencey.pem
# suo cp /etc/letsencrypryprypt/live/femmebabe.com/cert.pem cert.pem
# Patch venv
# Ibutang ang mga setting sa gumagamit
# Paghatag pagtugot
# SUDO CHOWND -R TEAM: GAME / VAR / Run /
# SUDO CHOWN GOLD: GOLD / RUN / SUDO / TS -R
# sudo chmod 664 db.sqlite3
# SUDO CHOWWN WWW-DATA: Gumagamit DB.SQLITE3
# Kopyaha ang Config ug Pagtul-id
# Pag-setup database
# I-inject Pam Config ug kuhaa ang sayup nga SSH Config
# SUDO SED -I ''LE' $ D '/ETC/PAM.D/ShD
# SUDO SED -I ''LE' $ D '/ ETC / Profile
# Kopyaha ang Bin Scripts ug Pagtul-id
# Pag-usab ug Pag-ayo sa mga Serbisyo
# Pag-ayo sa mga Module sa Apache
# sudo a2dismomod mpm_event
# sudo a2dismomod mpm_worker
# sudo a2enmod mpm_prefork
# I-disable ang default nga site
# Pag-ayo sa among site
# Pag-usab sa daemon ug i-restart apache, postfix ug opendkim
# Paghatag pagtugot
# Pag-configure sa SWAP
# Init nga makina sa caption
# Pag-setup git
# Ipakita ang IPV6 ug Opendkim alang sa pag-configure sa domain
# Nahuman ang pag-setup

Kana ang daghang pag-setup! Sa laktod nga, kini nga mga code sa mga log nga code, gi-configure ang Nano ug Git, Copies Over Files Att Ang mga dependencies sa clades, nag-install sa mga sertipiko ug nagtakda sa server, nag-install sa pag-configure, magsugod ug nagpahinabo sa SEVERS, I-print ang IP, IPV6 address ug opendkim nga yawe. Sakit nga yano, apan kini sama sa daghang code. Dili na kinahanglan nga daghan kini tungod kay wala kami mga dependenties, wala kami naggamit celery, celerybeat o daphne, apan among i-install ang pipila kanila nga magsugod. Hinumdumi nga kini nga code adunay usa ka domain nga gipahayag sa daghang mga higayon.

Kinahanglan usab namon nga mopalit usa ka ngalan sa domain (nga usa ka gamay nga tinuig nga bayad). Girekomenda ko ang Squacspace alang sa pagpalit sa usa ka domain, ang ilang layout intuitive ug dali gamiton. Mahimo nimong mapalit ang bisan unsang domain nga imong gusto, apan gigamit nako ang domain femmebabe.com sa kini nga panig-ingnan. Sa higayon nga nakapalit ka usa ka domain, ulo sa Squadspspace DNS Configuration Panel ug pagdugang usa ka rekord nga nagtudlo sa imong domain sa server sa IP address. Kini kinahanglan tan-awon sama niini:

@ Usa ka xx.xx.xx.xx

Uban sa @ Operator ingon ang host, nga nagpasabut sa tanan nga mga subdomains sa ilalum sa kini nga domain ug ang gamut nga domain ang tanan mag-redirect sa server. Adunay daghang mga rekord nga ipahayag, apan mahimo naton nga magpadayon sa mga kini sa higayon nga andam kita magpadala mail. Hinumdumi, mahimo'g pila ka adlaw sa wala pa ka malampuson nga magpadala sa mail gikan sa server. Ang mga rekord sa DNS nga atong gitakda ang paggahin og panahon sa pag-propagate.

Bisan pa, ang bugtong rekord nga kinahanglan naton magsugod usa ka talaan. Mao nga mahimo naton pun-on ang sa ubos sa Script sumala sa among proyekto ug pagdagan kini.

Magsugod kita sa usa ka gamay nga script sa pag-setup aron i-install lamang kung unsa ang kinahanglan naton alang sa usa ka sukaranang pag-uswag. Dili kami mogamit sa daghang mga dependencies o postgresql Bisan pa, magsugod lang kami sa usa ka sukaranan nga server sa HTTP ug mabalaka bahin sa pag-ila niini. Hinumdumi, aron makakuha usa ka sertipiko sa HTTPS ug gipadagan ang server, kinahanglan namon nga mopalit usa ka domain kauban ang pag-abang sa usa ka server. Alang sa karon, puli ang "Team" sa kini nga file nga adunay ngalan sa imong tiggamit, "Dir" nga adunay direktoryo sa imong proyekto, ug ihatag ang imong email ug domain sa <> Mga Tags.

Dugang pa, sa wala pa kami modagan sa kini nga code, kinahanglan namon nga usbon ang mga setting sa firewall nga suporta sa hostall, kung adunay. Kasagaran kini naa sa tab nga 'Networks' sa imong host provider, o kung ikaw ang nag-host sa kaugalingon, sa seksyon sa 'Port Porsing's' sa imong router. Gusto usab nimo nga magbutang usa ka static IP pinaagi sa imong router nga adunay adres sa imong makina sa server, kung naggamit ka sa kaugalingon nga pag-host sa kaugalingon. Kinahanglan nimo nga ablihan ang mosunud nga mga pantalan alang sa pagbasa / pagsulat sa pag-access.

22 (SSH) 25 (mail) 587 (Mail) 110 (kliyente sa mail) 80 (http) 443 (https)

# ! / bin / bash
# Mga Sugo sa Pag-log
# Nano Config
# Git config
# Pag-update ug pag-install
# Pag-ayo sa Clamav Antivirus
# I-set hostname
# Pag-backup sa database sa Database
# I-disable ang IPPAPTS
# Pag-set up nga si VirtualENenV
# I-install ang sertipot
# Pagdagan Certbot
# Ibutang ang mga setting sa gumagamit
# Paghatag pagtugot
# SUDO CHOWND -R TEAM: GAME / VAR / Run /
# SUDO CHOWN GOLD: GOLD / RUN / SUDO / TS -R
# Pag-usab ug Pag-ayo sa mga Serbisyo
# Pag-ayo sa mga Module sa Apache
# Pag-usab sa daemon ug i-restart apache, postfix ug opendkim
# Ipakita ang IPV6 ug Opendkim alang sa pag-configure sa domain

Sa wala pa modagan kini nga code, siguruha nga ang domain nga imong gipalit nga konektado sa server. Aron mahimo kini, ablihi ang usa ka terminal sa imong lokal nga makina, ug ipadagan kini nga sugo sa imong domain:

ping femmebabe.com # Isulud ang imong domain dinhi, pagkahuman sa Ping

Kung ang tanan tan-awon nga maayo ug ang server nagpadala mga tubag, andam kami nga modagan sa script ug mag-install usab sa mga pakete ingon man ang pagsugod, pag-ayo ug pamatud-an ang among server sa apache.

Dili kini tanan nga pag-setup kinahanglan nga i-configure ang postfix, tan-awon naton kana nga pag-setup labi pa sa ulahi. Karon, pagdagan kini nga code sa pag-setup ug kinahanglan nga mogahin og pipila ka minuto aron ma-install ug pamatud-an ang imong server. Sa makausa pa, siguruha nga pulihan ang ngalan sa email, email ug domain sa script sumala sa ngalan nga imong gipalit.

Karon nga ang server gihatagan, mahimo ka moadto sa URL sa bisan unsang web browser ug susihon aron masiguro nga ang server mao ang nagdagan sa HTTPS. Kung dili, sulayi ang paghulat sa usa ka gamay nga panahon alang sa mga rekord sa DN sa pagdakup ug dayon pagdagan ang mosunud nga mando aron mag-retry sertipikasyon sa sertipot:

sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com

Hangtod nga imong gi-configure ang tanan nga husto, kinahanglan nimo nga ma-access ang default nga panid sa Apache aron mahibal-an ang imong code nga nagtrabaho ug nagpakita sa usa ka buhi nga webpage. Sunod, i-edit naton ang mga setting.py aron mabag-o ang among default debug mode sa paghimo. I-configure usab namon ang domain sa mga setting, ingon man mga internal nga mga IP.

nano yourproject/settings.py

Sa mga setting, pagbag-o / idugang kini nga mga linya.

# Site Config

Karon, kinahanglan naton nga i-configure ang Apache2. Atong i-edit ang config file nga among i-deploy sa kini nga linya:

sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf

Ang kini nga file sa Config kinahanglan nga adunay ngalan sa imong domain niini, ug ang ngalan sa tiggamit ug proyekto. Gigamit nako ang ngalan sa domain femmebabe.com, ang team sa username, ug ang Project Ngalan 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>

Siguruha nga pulihan ang ngalan sa proyekto, mga direktoryo, ug domain sa kini nga pananglitan code kung gi-configure ang imong server. Karon, kinahanglan naton nga pag-disable ang default site. Mahimo kini gamiton gamit ang bash.

sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl

Sunod, mahimo naton nga mapaarang ang default nga site ug pag-usab sa Apache2, nga gigamit usab ang bash. Hinumdomi nga pulihan ang Femmebabe sa ngalan sa file nga imong gideklarar sa pag-edit sa / etc / apache2 / site nga magamit /.

sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2

Balik sa imong domain sa navbar. Kinahanglan nimo nga makita ang site nga imong gi-configure sa imong web browser. Pagbati! Kung dili nimo kini makita, tingali kinahanglan nimo nga magbag-o. Pag-amping pag-ayo sa mga setting sa imong proyekto, pag-configure sa Apache, ug siguruha nga wala ka'y mga sayup, ug gipadagan ang mga mosunud nga mga mando aron susihon ang proyekto.

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

Kung adunay mga sayup sa imong Python Project, pagsubay sa ila sa kung diin sila ug ayohon kini. Tingali dili nimo makita ang tanan sa imong mga sayup depende sa kung diin sila, busa kung adunay usa ka sayup nga giingon nga "pag-edit sa mosunud nga file sa virtual nga palibot, rehistro.

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

Scroll to line 83, where this runtime error is raised (raise RuntimeError("populate() isn't reentrant")), and add a comment before this line, then adding, with the same indentation, self.app_configs = {}. Kini tan-awon sama niini:

                # Paglikay sa Resentrant Calls nga likayan ang pagdagan sa Apkconfig.ready ()
                # mga pamaagi kaduha.
# Ipataas ang RuntimeError ("populate () dili reentrant")

Mahimo nimo nga susihon pag-usab ang proyekto ug ibutyag ang sayup.

python manage.py check

Pagkahuman makita nimo ang sayup ug ayohon kini. Kung naa nimo kini gitakda ug ang code nagtipon nga wala'y mga sayup, siguruha nga usbon ang file balik aron kini ingon:

                # Paglikay sa Resentrant Calls nga likayan ang pagdagan sa Apkconfig.ready ()
                # mga pamaagi kaduha.
# kaugalingon.app_configs = {}

Ang gihatag sa Server online, kung maghimo kita dugang nga mga pagbag-o niini, kinahanglan naton gamiton ang mosunud nga mando aron ma-reload ang server:

sudo systemctl reload apache2

Kahibulongan! Apan komosta ang pagpadala mail? Aron masugdan ang pagpadala sa email, kinahanglan una naton nga i-update ang pag-configure sa domain. Kinahanglan kini sa imong DNS Panel sa Squerasspace, o bisan unsang domain nga ngalan sa ngalan nga imong gipili. Kinahanglan usab namon nga i-install ug idugang ang pag-configure, ug pagdagan pipila ka mga mando.

Una, makuha naton ang IPV6 nga adres sa server. Atong ablihan ang imong DNS ug idugang ang mga rekord.

Aron makuha ang address sa IPV6 sa server, gamita kini nga sugo:

ip -6 addr

Karon, mahimo naton idugang ang mosunud nga mga rekord sa mga setting sa DNS. Ang akong mga rekord sama niini. Bisan pa, alang sa imong mga rekord, kinahanglan nimo nga ilisan ang IP address sa imong IP (dili 75.147.214, kana ako). Idugang usab ang imong domain sa lugar sa femmebabe.com, ingon man ang imong IPV6 nga adres nga nakit-an sa miaging sugo (dili nimo magamit ang minahan, FE80: FFF: 3E02). Ayaw kabalaka bahin sa domainkey alang karon, kini gibuhat sa dihang gipahimutang namon ang postfix, ang mail server, nga adunay Opendkim, ug i-print ang yawi. I-configure namon kini nga katapusan.

@ Arte N / a 75.147.182.214

@ Mx 10 femmebabe.com

@ Ptr N / a femmebabe.com

@ Txt N / a TXT @ V = SPF1 MX IP75.147.182.214IPE6: PE80 :: 725A: FFF: 3E02 ~ TANAN

default._bimi Txt N / a V = BIMI1; l = https: //femmebabe.com/media/static/femmebabe.svg

_Darmc Txt N / a V = DARMC1; p = wala

Sendonyly._domainsa Txt N / a

Karon, kinahanglan namon nga idugang ang pipila nga nagpadayon nga pag-configure alang sa postfix. Ang kinahanglan naton buhaton mao ang pagsiguro nga gipulihan namon ang ngalan sa domain, femmebabe.com, uban ang ngalan sa domain nga imong gigamit. Atong tan-awon ang tanan nga mga file sa Config usa, ug i-install kini sa usa ka direktoryo nga gitawag Config sa among proyekto, alang sa pag-instalar sa OS.

nano config/etc_postfix_main.cf

Idugang kini nga teksto sa file

# Tan-awa ang /USRIRA/postfix/Main.CF.Dist alang sa usa ka komentaryo, labi ka kompleto nga bersyon
# Piho nga Debian: Ang pagtino sa usa ka ngalan sa file mahimong hinungdan sa una
# linya sa kana nga file nga gamiton ingon nga ngalan.  Ang default sa Debian
# mao / etc / mailname.
# myorigin = / etc / mailname
# ningsenyo. Ang nakagusto sa trabaho sa mua.
# Dili Mahibal-an sa Sunod nga Linya Aron Maghimo Mga Pasidaan sa Mail "
# Malangan_warning_Time = 4H
# Tan-awa ang http://www.postfix.org/Compatibility_readme.html - default sa 3.6 sa
# lab-as nga pag-install.
# Mga Parameter sa TLS
# Pagsusi sa Milter

Sunod Config!

nano config/etc_postfix_master.cf

Idugang kini nga mga linya:

# 
# Postfix Master Proseso Configurasyon nga file.  Alang sa mga detalye sa format
# sa file, tan-awa ang Agalon (5) Manwal nga Panid (Sugo: "Man 5 Magtutudlo" o
# on-line: http://www.postfix.org/master.5.html).
# 
# Ayaw kalimti ang pagpahamtang sa "Postfix Reload" pagkahuman sa pag-edit sa kini nga file.
# 
# ==========================================================================
# Type Type Private Unriv Chroot Wakeup Maxproc Command + Args
# (oo) (oo) (dili) (dili) (100)
# ==========================================================================
# SMTP Inet N - Y - 1 Postscreen
# SMTPD Pass - - Y - - SMTPD
# DNSBlog Unix - - Y - 0 DNNBLOG
# Tlsproxy Unix - - Y - 0 Tlsproxy
# Pagpili usa: Pag-andam sa pagsumite alang sa mga kliyente sa loopback lamang, o alang sa bisan unsang kliyente.
# 127.0.0.1:0:Subsiss inet n - Y - - SMTPD
# -O syslog_name = postfix / pagsumite
# -O smtpd_tls_security_level = encrypt
# -so smtpd_sasl_auth_enable = oo
# -O smtpd_tls_auth_only = oo
# -O smtpd_reject_unlisted_recipient = dili
# -O smtpd_client_restriinions = $ mua_client_resttions
# -o smtpd_heelo_restrictions = $ mua_heelo_restrictions
# -O smtpd_sender_restrictions = $ mua_sender_restrictions
# -O smtpd_ercipient_resttions =
# -O SMTPD_RAYLE_RESTLICTIONS = PERMIT_SASL_AGLHENTIOND, isalikway
# -so milter_macro_daemeon_name = naggikan
# Pagpili usa: Pag-andam sa SMTPS alang sa mga kliyente sa loopback lamang, o alang sa bisan unsang kliyente.
# 127.0.0.1:smtps Inet n - Y - - SMTPD
# SMTPS INET N - Y - - SMTPD
# -O syslog_name = postfix / smtps
# -O smtpd_tls_wrappermode = oo
# -so smtpd_sasl_auth_enable = oo
# -O smtpd_reject_unlisted_recipient = dili
# -O smtpd_client_restriinions = $ mua_client_resttions
# -o smtpd_heelo_restrictions = $ mua_heelo_restrictions
# -O smtpd_sender_restrictions = $ mua_sender_restrictions
# -O smtpd_ercipient_resttions =
# -O SMTPD_RAYLE_RESTLICTIONS = PERMIT_SASL_AGLHENTIOND, isalikway
# -so milter_macro_daemeon_name = naggikan
# 628 Inet N - Y - - QMQPD
# Qmgr unix n - n 300 1 oqmgr
# -O SMTP_HEOO_TETETOUT = 5 -O SMTP_CONNECT_TETEOT = 5
# 
# ====================================================================
# Mga interface sa dili postfix software. Siguruha nga susihon ang manual
# Mga panid sa dili postfix software aron mahibal-an kung unsa ang mga kapilian nga gusto niini.
# 
# Kadaghanan sa mga musunud nga serbisyo naggamit sa postfix pipe (8) paghatud
# ahente.  Tan-awa ang pipe (8) nga panid sa tawo alang sa kasayuran bahin sa $ {nakadawat}
# ug uban pang mga kapilian sa envelope sa mensahe.
# ====================================================================
# 
# Maildrop. Tan-awa ang postfix maildrop_readme file alang sa mga detalye.
# Gipunting usab sa Main.CF: Maildrop_destination_recipient_limit = 1
# 
# 
# ====================================================================
# 
# Ang mga bag-o nga bersyon sa Cyrus mahimong mogamit sa naglungtad nga "LMTP" nga pagsulod sa agalon.
# 
# Hibal-i sa Cyrus.conf:
# LMTP CMD = "LMTPD -A" Pamati = "Lockoost: Lmtp" Proto = TCP4
# 
# Hibal-i sa Main.CF usa o daghan pa sa mga musunud:
# Mailbox_transport = lmtp: inet: localhost
# Virtual_transport = lmtp: inet: localhost
# 
# ====================================================================
# 
# Cyrus 2.1.5 (Amos Gouaux)
# Usab ipiho sa Main.CF: Cyrus_destination_recipient_limit = 1
# 
# Cyrus Unix - N N - - PIPE
# Mga Bandila = DRX User = Cyrus Argv = / Cyrus / Bin / Hated -r $ {Sender}-$ {User}
# 
# ====================================================================
# Daang panig-ingnan sa paghatud pinaagi sa Ciro.
# 
# Ol-Cyrus Unix - N N - - PIPE
# Mga Bandila = R Gumagamit = Cyrus Argv = / Cyrus / Bin / Dive -m-$ {extension} $ {User}
# 
# ====================================================================
# 
# Tan-awa ang postfix uucp_readme file alang sa mga detalye sa pag-configure.
# 
# 
# Uban pang mga pamaagi sa paghatud sa gawas.
# 

Ug ang pag-configure sa Opendkim. Giila sa mga Opendkim ang mga email nga mga server sa mga yawe sa domain aron mahimo silang mas luwas. Kung wala kini, ang mail dili gipirmahan ug tingali dili kini himuon sa usa ka inbox.

nano config/etc_default_opendkim

Idugang kini nga mga linya:

# Hinumdomi: Kini usa ka file sa configure sa panulundon. Wala kini gigamit sa mga opendkim
# Sistema sa Systemd Service. Palihug gamita ang katugbang nga mga parameter sa pag-configure sa
# /etc/opendkim.conf imbis.
# 
# Kaniadto, ang usa mag-edit sa default nga mga setting dinhi, ug dayon ipatuman
# /lib/opendkim/
# /etc/systemd/system/opendkim.Service.d/override.conf ug
# /etc/tmpfiles.d/opendkim.conf. Samtang kini posible pa, kini karon
# Girekomenda nga i-adjust ang mga setting direkta sa /etc/opendkim.conf.
# 
# Daemon_opts = ""
# Pag-ilis sa / VAR / SPOOL / POSTFIX / RUNDKIT / Opendkim aron magamit ang usa ka INIX Socket
# PostFix sa usa ka chroot:
# Rundir = / var / Spool / postfix / run / opendkim
# 
# Dili kompleto nga pagtino sa usa ka alternatibong socket
# Timan-i nga ang pagpahimutang niini mag-override sa bisan unsang kantidad sa socket sa Opendkim.conf
# Default:
# Pamati sa tanan nga mga interface sa Port 54321:
# Socket = Inet: 54321
# Pamati sa loopback sa Port 12345:
# Socket = inet: 12345 @ localhost
# Pamati sa 192.0.2.1 sa Port 12345:
# Socket = Inet: 12345@192.0.1.1
nano config/etc_dovecot_conf.d_10-master.conf

Idugang kini nga mga linya:

# Default_process_limit = 100
# Default_client_limit = 1000
# Default vsz (virtual nga gidak-on sa panumduman) nga limitasyon alang sa mga proseso sa serbisyo. Panguna kini
# gituyo aron dakpon ug patyon ang mga proseso nga ang pagtulo sa panumduman sa wala pa sila mokaon
# tanan.
# Default_vsz_limit = 256m
# Ang tiggamit sa pag-login gigamit sa internal nga mga proseso sa pag-login. Kini ang labing dili tinuyo
# Gumagamit sa Dovecot System. Dili kinahanglan nga adunay access sa bisan unsa.
# Default_login_user = Dovenull
# Ang internal nga tiggamit gigamit sa dili mapuslanon nga mga proseso. Kini kinahanglan nga bulag sa
# Gumagamit sa pag-login, aron ang mga proseso sa pag-login dili makabalda sa uban nga mga proseso.
# Default_internal_user = Dovecot
    # Port = 143
    # Port = 993
    # SSL = Oo
  # Gidaghanon sa mga koneksyon aron pagdumala sa wala pa magsugod sa usa ka bag-ong proseso. Sa kasagaran
  # ang mga mapuslanon nga mga kantidad nga 0 (walay kutub) o 1. 1 mas luwas, apan 0
  # mas paspas. <doc / wiki / loginprocess.txt>
  # serbisyo_count = 1
  # Kadaghanan sa mga proseso sa kanunay nga maghulat alang sa dugang nga mga koneksyon.
  # Proseso_min_avail = 0
  # Kung nagbutang ka sa serbisyo_count = 0, tingali kinahanglan nimo nga palambuon kini.
  # vsz_limit = $ default_vsz_limit
    # Port = 110
    # Port = 995
    # SSL = Oo
    # Port = 587
  # Paghimo sa Inet Mpaghatamlo kung dili nimo magamit ang ibabaw nga UNIX SECKET
  # inet_listerener lmtp {
    # Paglikay sa paghimo sa LMTP nga makita alang sa tibuuk nga Internet
    # address =
    # Port =
  # }
  # Kadaghanan sa panumduman moadto sa MMAP () sa mga file. Tingali kinahanglan nimo nga madugangan kini
  # Limitahan kung adunay daghang mga mailbox.
  # vsz_limit = $ default_vsz_limit
  # Max. Kadaghan sa mga proseso sa IMAP (mga koneksyon)
  # Proseso_limit = 1024
  # Max. Kadaghan sa mga POP3 Proseso (Mga Koneksyon)
  # Proseso_limit = 1024
  # Max. Kadaghan sa mga proseso sa pagsumite sa SMTP (mga koneksyon)
  # Proseso_limit = 1024
  # Gitudlo sa tagsulat_Socket_Path sa kini nga socket sa userdb pinaagi sa default. Kasagaran kini
  # gigamit ni Dovecot-ldos, Doveadm, tingali IMAP nga proseso, ug uban pa nga mga tiggamit
  # Ang bug-os nga pagtugot sa kini nga socket makahimo sa usa ka lista sa tanan nga mga usernames ug
  # Kuhaa ang mga sangputanan sa mga expire nga mga tan-awon sa tanan.
  # 
  # Ang default nga 0666 mode nagtugot sa bisan kinsa nga makonektar sa socket, apan ang
  # Ang mga looker sa GAMEDDB molampos lamang kung ibalik sa userdb ang usa ka umahan nga "UID" nga
  # katumbas sa UID sa proseso sa pagtawag. Ingon usab kung ang UID sa Caller o GID katumbas sa
  # UID ni Socket o gidi ang mga kalampusan sa lookup. Bisan unsa nga hinungdan sa usa ka kapakyasan.
  # 
  # Aron mahatagan ang nagtawag nga hingpit nga pagtugot sa pagtan-aw sa tanan nga mga tiggamit, ibutang ang mode sa
  # usa pa ka butang kaysa sa 0666 ug ang Doverecot nagtugot sa kernel nga ipatuman ang
  # Gitugotan ang mga permiso (e.g. 0777 sa tanan nga hingpit nga pagtugot).
  # Ang proseso sa tag-iya sa tagsulat gipadagan ingon nga gamut pinaagi sa default, aron kini maka-access
  # / etc / landong. Kung dili kini kinahanglan, ang tiggamit kinahanglan nga usbon
  # $ default_internal_user.
  # Gumagamit = Gamot
  # Kung gigamit ang dict proxy, ang mga proseso sa mail kinahanglan adunay access sa socket niini.
  # Pananglitan: Mode = 0660, Group = Vmail ug Global Mail_Groups = vmail
    # mode = 0600
    # Gumagamit =
    # Grupo =

Sa makausa pa, siguruha nga pulihan ang domain sa tanan niini nga mga file, femmebabe.com, uban ang domain nga imong napili. I-edit ang sunod nga file, config sa Dovecot,

nano config/etc_dovecot_dovecot

Ug idugang kini nga mga linya

## Dovecot Configuration file
# Kung nagdali ka, tan-awa ang http://wiki2.doveCot.org/quickconfigurasyon
# Ang "Dovetonf -n" nga mando naghatag usa ka limpyo nga output sa nausab nga mga setting. Gamita kini
# Imbis nga magkopya ug pasting file sa pag-post sa lista sa pagpadala sa Dovecot.
# '# 'kinaiya ug tanan pagkahuman kini gitagad ingon mga komento. Dugang nga mga wanang
# ug ang mga tab wala gibalewala. Kung gusto nimo gamiton ang bisan hain niini nga tin-aw, ibutang ang
# value inside quotes, eg.: key = "# Char ug Trailing Whitespace "
# Kadaghanan (apan dili tanan) nga mga setting mahimong mabug-atan sa lainlaing mga protocol ug / o
# gigikanan / destinasyon nga mga IP pinaagi sa pagbutang sa mga setting sa sulod nga mga seksyon, pananglitan:
# Protocol IMAP {}, lokal nga 127.0.0.1}, hilit nga 10.0.0.0.0}
# Gipakita ang default nga mga kantidad alang sa matag setting, dili kini kinahanglan nga dili kompleto
# Kadtong. Kini mga eksepsyon sa kini bisan pa: wala'y mga seksyon (e.g. Namespace {})
# o ang mga setting sa plugin gidugang pinaagi sa default, gilista lamang sila ingon mga pananglitan.
# Ang mga agianan usab mga pananglitan lamang sa mga tinuud nga mga kakulangan nga gipasukad sa pag-configure
# Mga kapilian. Ang mga agianan nga gilista dinhi alang sa pag-configure --Prefix = / USR
# --sysconfdir = / etc --localstatedir = / var
# Pag-access sa mga na-install nga protocol
# Usa ka comma nga gilain nga lista sa mga IPS o mga host diin makapamati alang sa mga koneksyon.
# "*" Pagpamati sa tanan nga mga interface sa IPV4, "::" Namati sa tanan nga mga interface sa IPV6.
# Kung gusto nimo nga ipiho ang dili mga default port o bisan unsang komplikado,
# I-edit ang Conf.d / Master.conf.
# Pamati = * ,::
# Ang direktoryo sa base kung diin magtipig sa datos sa Runtime.
# base_dir = / var / run / dovecot /
# Ngalan sa kini nga pananglitan. Sa multi-pananglitan nga pag-setup sa dove up ug uban pang mga mando
# mahimong magamit -i <Inscance_name> aron mapili kung unsang pananglitan ang gigamit (usa ka kapilian
# sa -C <config_path>). Ang ngalan sa panig-ingnan gidugang usab sa mga proseso sa Dovecot
# sa PS output.
# Storcance_name = Dovecot
# Pagpangumusta sa mensahe alang sa mga kliyente.
# Pag-login_greeting = Doverecot andam na.
# Space nga gibulag nga lista sa kasaligan nga network ranges. Mga koneksyon gikan niini
# Gitugotan ang mga IP nga maibanan ang ilang IP address ug pantalan (alang sa pag-log ug
# alang sa mga tseke sa panghimatuud). Ang pag-undang_plaintext_Auth wala usab gibalewala
# kini nga mga network. Kasagaran imong ipiho ang imong IMAP Proxy Servers dinhi.
# Pag-login_trusted_networks =
# SPACKE GIHATAG SA LANG SA PAG-ALAGAD SA PAG-ALAGAD SA PAGSULAY (E.G. TCPWRAP)
# login_access_sockets =
# Uban ang proxy_maybe = oo kung ang destinasyon sa proxy katumbas sa bisan unsang mga IP, ayaw pagbuhat
# Proxying. Dili kini kinahanglan nga normal, apan mahimong mapuslanon kung ang padulngan
# IP e.g. usa ka IP sa load balancer.
# tagsol_proxy_ sa kaugalingon
# Ipakita ang daghang mga titulo sa proseso sa verbose (sa PS). Karon gipakita ang ngalan sa tiggamit ug
# IP address. Mapuslanon alang sa pagtan-aw kung kinsa ang naggamit sa mga proseso sa IMAP
# (eg. Gipaambit nga mga mailbox o kung gigamit ang parehas nga UID alang sa daghang mga account).
# verbose_proctittle = dili
# Kinahanglan bang mapatay ang tanan nga proseso sa pag-undang sa Dovecot Master Proseso.
# Ang pagpahimutang niini sa "Dili" nagpasabut nga ang Dovecot mahimong ma-upgrade nga wala
# pagpugos sa mga adunay koneksyon sa kliyente aron tapuson (bisan kung mahimo usab kana
# usa ka problema kung ang pag-upgrade mao ang e.g. tungod sa usa ka security fix).
# shutdown_clients = oo
# Kung non-zero, pagdagan ang mga mando sa mail pinaagi sa daghang mga koneksyon sa Doveadm Server,
# imbis nga modagan sila diretso sa parehas nga proseso.
# DoveADM_Worker_Count = 0
# UNIX SEBECHO O HEDT: PORT NGA NAGTUO SA PAGSULAY SA DOVEADM SERVER
# DoveAdm_socket_path = DoveAdm-Server
# Space nga gibulag nga lista sa mga variable sa palibot nga gitipigan sa Dovecot
# Pagsugod ug gipasa sa tanan nga mga proseso sa iyang anak. Mahimo ka usab maghatag
# Key = kantidad nga kantidad aron kanunay magbutang sa piho nga mga setting.
# import_environment = tz
## 
## Mga setting sa server sa Diksiyonaryo
## 
# Ang diksyonaryo magamit sa pagtipig sa yawi = mga lista sa kantidad. Gigamit kini sa daghang
# plugins. Ang diksyonaryo ma-access bisan direkta o bisan usa
# diksyonaryo server. Ang mga mosunud nga mga numero sa block sa dict block sa Diksiyonaryo sa Uris
# kung gigamit ang server. Kini mahimo nga i-refer ang paggamit sa Uris sa format
# "Proxy :: <ngalan>".
  # quota = mysql: /etc/govecot/Dovecot-dic-dicql.conf.ext
# Kadaghanan sa aktwal nga pagsumpo nga gilakip sa ubos. Ang mga filenames
# una nga gisunud sa ilang kantidad sa ASCII ug giparking sa kana nga han-ay. Ang 00-prefixes
# Sa mga filenames gituyo aron mas dali nga masabtan ang pag-order.
# Ang usa ka config file mahimo usab nga mosulay sa pag-ilakip nga wala'y paghatag usa ka sayup kung
# wala kini makit-an:
# Gitugotan ang Doverecot nga Mamati sa Tanan nga Koneksyon sa Input (IPV4 / IPV6)

Pagdugang usa ka password alang sa tiggamit sa Dovecot:

nano config/etc_dovecot_passwd

Ang una nga bahin sa file, sa wala pa ang colon, mao ang username. Ang katapusan nga bahin, ang "imong mahimowingword", nagpaila sa password nga gusto nimong ihatag sa imong mail server.

team:{plain}yourpassword

Sunod, ang Opendkim Config

nano config/etc_opendkim.conf

Ug idugang kini nga mga linya:

# Kini usa ka sukaranang pagsumpo alang sa pagpirma ug pagtino. Kini dali ra
# gipahiangay aron mahiangay sa usa ka sukaranan nga pag-instalar. Tan-awa ang Opendkim.conf (5) ug
# /usr/share/goc/Oopendkim/Examples/exendkim.conf.sample alang sa kompleto
# dokumentasyon sa magamit nga mga parameter sa pag-configure.
# Logwhy no
# Sagad nga mga parameter sa pag-signing ug pag-verify. Sa Debian, ang "gikan sa" header
# oversigned, tungod kay kanunay kini nga yawi sa identidad nga gigamit sa mga sistema sa reputasyon
# ug sa ingon medyo sensitibo sa seguridad.
# Pagpirma sa Domain, Selector, ug Key (gikinahanglan). Pananglitan, buhata ang pagpirma
# alang sa domain "panig-ingnan.com" nga adunay selector "2020" (2020._domainainey.Example.com),
# Gamit ang pribado nga yawi nga gitipig sa /etc/dkimkeys/example.Pagpili. Daghan pa nga grano
# Ang mga kapilian sa pag-setup mahimong makit-an sa /USR/Share/goc/Oopendkim/readme. Magpatambal.
# Panig-ingnan sa Domain.com
# Selector 2020
# Keyfile /etc/dkimkey/example.private
# Sa Debian, ang Opendkim nagdagan ingon tiggamit "Opendkim". Gikinahanglan ang usa ka umask sa 007 kung kanus-a
# gamit ang usa ka lokal nga sockeit nga adunay MTU nga maka-access sa socket ingon usa ka dili pribilehiyo
# Gumagamit (pananglitan, postfix). Tingali kinahanglan nimo idugang ang user nga "postfix" sa grupo
# "Opendkim" sa kana nga kaso.
# Socket alang sa MTA Connection (Gikinahanglan). Kung ang MTA naa sa sulod sa usa ka prokot nga prokot,
# Mangatuon nga ang socket ma-access. Sa debian, ang postfix nagdagan sa
# usa ka chroot sa / var / spool / postfix, busa usa ka INIX socket kinahanglan
# gi-configure ingon sa gipakita sa katapusan nga linya sa ubos.
# Socket Loctick: /run/opendkim/opendkim.SOCK
# Socket PetET: 8891 @ localHost
# Socket INTET: 8891
# Mga Host alang sa pag-sign in kaysa sa pag-verify, ang default mao ang 127.0.1.1. Tan-awa ang
# Seksyon sa Operation of Opendkim (8) alang sa dugang nga kasayuran.
# Internalhost 192.168.0.0/16, 10.0.0.0.0/8, 172.16.0.0.0/12
# Ang ANCHOR ANCHOR nagtugot sa DNSSEC. Sa Debian, gihatag ang pagsalig sa ANCHOR FILE
# pinaagi sa package nga dns-data-data.
# Mga Nameferers 127.0.0.1
# Mga Domain sa Map Gikan sa mga adres sa mga Yawi nga gigamit sa mga mensahe
# Usa ka hugpong sa mga internal nga host kansang mail kinahanglan nga gipirmahan
nano config/etc_default_opendkim

Ug idugang kini nga mga linya

# Hinumdomi: Kini usa ka file sa configure sa panulundon. Wala kini gigamit sa mga opendkim
# Sistema sa Systemd Service. Palihug gamita ang katugbang nga mga parameter sa pag-configure sa
# /etc/opendkim.conf imbis.
# 
# Kaniadto, ang usa mag-edit sa default nga mga setting dinhi, ug dayon ipatuman
# /lib/opendkim/
# /etc/systemd/system/opendkim.Service.d/override.conf ug
# /etc/tmpfiles.d/opendkim.conf. Samtang kini posible pa, kini karon
# Girekomenda nga i-adjust ang mga setting direkta sa /etc/opendkim.conf.
# 
# Daemon_opts = ""
# Pag-ilis sa / VAR / SPOOL / POSTFIX / RUNDKIT / Opendkim aron magamit ang usa ka INIX Socket
# PostFix sa usa ka chroot:
# Rundir = / var / Spool / postfix / run / opendkim
# 
# Dili kompleto nga pagtino sa usa ka alternatibong socket
# Timan-i nga ang pagpahimutang niini mag-override sa bisan unsang kantidad sa socket sa Opendkim.conf
# Default:
# Pamati sa tanan nga mga interface sa Port 54321:
# Socket = Inet: 54321
# Pamati sa loopback sa Port 12345:
# Socket = inet: 12345 @ localhost
# Pamati sa 192.0.2.1 sa Port 12345:
# Socket = Inet: 12345@192.0.1.1

Kung andam na kami nga i-set up ang among postfix server, magdagan kami sa ubos nga code, nga adunay angay nga ngalan sa domain nga gilakip. Pagsugod pinaagi sa paghimo og usa ka script

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

Karon, sa Nano, ang Text Editor, I-edit kini nga file aron kini nag-uban sa imong ngalan sa domain imbis femmebabe.com.

# ! / bin / bash
# Setup Postfix

Karon, pagdagan ang nahuman nga script aron ma-configure ang postfix, opendkim ug doverecot.

./scripts/postfixsetup

Kung ang kini nga script nagdagan, kopyahon ang katapusang linya nga kini nagpatik ug idikit kini sa imong pag-configure sa DNS ingon nga kantidad alang sa Sendonly._Dungada. Kini ang yawi sa Opendkim nga gigamit aron mahibal-an ang imong domain kung ipadala ang luwas nga mail.

Kahibulongan! Sulod sa pila ka adlaw, kinahanglan nga ipadala nimo ang mail gikan sa server nga gihatag ang tanan nga gi-configure sa husto.

Kung gi-configure lang nimo ang DNS alang sa imong mail server, kinahanglan nga mokuha niini nga dili moubos sa 72 ka oras alang sa mga rekord aron ma-update. Kasagaran kini labi ka dali. Mahimo nimong susihon kung nagtrabaho ang imong server pinaagi sa paggamit niini nga mando, gihatag ang imong email:

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

Kung ang tanan makita nga nagtrabaho nga husto, kinahanglan nga makapadala ka email sa imong server. Kung wala kini nagtrabaho, sulayi ang pagtan-aw sa mga troso aron makita kung unsa ang sayup.

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

Maghatag kini nga kasayuran sa verbose bahin sa mail nga gipadala sa server ug kung kini nagtrabaho ba sa husto. Kinahanglan nimo nga makita ang email sa imong inbox usab, kung wala kini, susihon ang imong Spam Folder.

Kinahanglan nimo usab nga i-configure ang imong mga setting sa imong mga setting.py aron makigsulti ang imong email server sa imong Django app, ang proyekto. Idugang o pulihan kini nga mga linya sa imong mga setting

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

Matikdi nga naggamit kami usa ka config file aron makuha ang password. Atong i-load ang kini nga file sa mga setting nga sama niini, sa sinugdanan sa file.:

# Bukas ug load config

Atong buhaton kini nga file ug pagdugang usa ka tinago nga yawi niini, ingon man usab sa password sa mail. Aron makamugna usa ka tinago nga yawi, gamita kini nga mando, sa bisan unsang gitas-on nga gusto nimo sa katapusan:

openssl rand -base64 64

Karon, kopyaha ang teksto nga gihimo sa openessl ug pag-edit sa /etc/config.json

sudo nano /etc/config.json

Idugang ang mga mosunud nga linya sa imong file, nga adunay yawi nga gihimo sa openessl ingon nga sekreto nga yawi.

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

Ang Format nga JSON yano ug dali gamiton, mahimo naton ideklarar ang ubang mga yawe nga gusto naton gamiton sa kini nga paagi sa kini nga paagi nga dili sila mabulag sa ilang direktoryo sa proyekto. Girekomenda kini nga batasan alang sa mga yawe sa API, diin kita mogamit labaw pa sa pipila dinhi.

Gusto usab nimo nga i-back up ang imong proyekto aron masiguro nga ang tanan maluwas ug mahimo nimong mabawi ang imong trabaho sa ulahi bisan kung dili na nimo gusto nga mag-abang sa usa ka server.

sudo backup

Karon, sulayi ang pagpadala sa usa ka Email sa HTML gikan sa web server, nga gihatag ang pagpadala sa usa gikan sa linya sa mando nga nagtrabaho. Pangutan-a ang imong pananglitan sa tiggamit sa kabhang, ug ipadala ang usa ka email sa HTML sa kana nga tiggamit pinaagi sa Django. Bag-ohon ang akong ngalan sa code, Charlotte, sa imong username.

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()

Kung ang una nga sugo dili molihok, siguruha nga gamiton

source venv/bin/activate

Kung ang tanan nga gitakda nga husto, makakuha ka karon usa ka welcome email sa imong mailbox nga gipadala sa imong web app. Maayong trabaho! Mianhi ka dugay.

Gusto nako nga idugang, kung ikaw nakigbisog sa bisan unsang mga sayup samtang nagtrabaho sa usa ka proyekto nga sama niini, ayaw pagduha-duha sa pagpangita sa mga tubag ug pagpangayo tabang. Ang Google, taliwala sa uban pang mga search engine, maayo nga mga kapanguhaan aron pangitaon ang tabang sa programming. Pagpangita lang alang sa sayup nga imong nakuha, ug mahibal-an nimo kung giunsa pagsulbad sa ubang mga tawo ang problema. Usab, gidawat ka sa pagkontak kanako, ang imong mga magtutudlo, propesor, propesor, bisan kinsa nga mga kaedad sa Internet nga magamit sa mga programa sa programming, o uban pang mga kapanguhaan aron makit-an ang mga solusyon sa mga isyu nga imong nasinati. Nakasabut ko nga kini dili kadali, apan bisan kung nakabasa ka sa niining layo ug wala gisulat ang bisan unsang code, nakakat-on ka bahin sa pagtukod sa usa ka web app gikan sa sinugba gikan sa sinugba gikan sa usa ka web app gikan sa sinugdan. Path sa imong kaugalingon sa likod, maayo ang imong gibuhat.

Salamat sa paggahin oras sa pagbasa niining ikatulo nga edisyon sa pag-uswag sa web development. Sa umaabot nga mga edisyon, ilakip ko ang labi pa nga hinungdanon nga mga pananglitan nga gihisgutan sa sinugdanan sa dokumento ug mag-dive kami labi ka lawom sa kalibutan sa pag-uswag sa software ug hardware. Magpadayon nga gipunting alang sa kung unsa ang moabut, ug nagpaabut ako sa pagtudlo kanimo kung unsaon pagtukod ang dili katuohan nga software. Magkita ka sa sunod nga edisyon!






Sirhan
Pahina 1
Molukso
Tan-awa ang Tibuok nga Artikulo
Padayon sa pagbasa

Mopalit | Pagpalit uban ang Crypto



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


Professional entertainment, photos, videos, audio, livestreaming and casual gameplay, as well as ID scanning, web development and surrogacy services.

Biyai ako usa ka tip sa Bitcoin gamit ang kini nga adres: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE

© Glam Girl X 2025

Mga Termino sa Pag-alagad