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

उदाहरणाद्वारे व्यावहारिक वेब आधारित खोल शिक्षण आणि सुरक्षा तिसरी आवृत्ती शार्लोट हार्पर 3 जुलै, 2024 3 जून 2025 रोजी अद्यतनित/रूपांतरित

अग्रगण्य:

वेबसाठी सॉफ्टवेअर तयार करण्याच्या सुरक्षा विचारात कोणत्याही वेब विकसकाच्या योजनेचा आणि अंमलबजावणीचा एक महत्त्वाचा भाग आहे जो अभियांत्रिकी प्रोटोटाइप विश्वासार्ह, स्थिर आणि व्यावहारिक हेतूंसाठी उपयुक्त आहे. 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 सहसा टचस्क्रीन स्मार्टफोन डिव्हाइसवर, वेळ मारण्याचा किंवा इंटरनेटवर काहीतरी पूर्ण करण्याचा विचार करीत आहे. बहुतेक लोकांना हे देखील माहित नसते की जेव्हा त्यांना सुरवातीपासून वेबसाइट तयार करायची असेल तेव्हा ते दुसर्‍या व्यक्तीच्या वेबसाइटवर प्रारंभ करतात आणि कार्यक्षमतेत मर्यादित काहीतरी तयार करतात, विश्वासार्हता, वापरण्याची सुलभता आणि विशेषत: सर्जनशीलता जेव्हा त्यांच्याकडे काही नवीनतम सॉफ्टवेअरची इच्छा नसतानाही काही उपयुक्त ठरेल आणि विशेषत: काही प्रमाणात सॉफ्टवेअरची भरपाई केली पाहिजे. आपल्याकडे या पुस्तकातून वाचण्यासाठी काही मिनिटे असतील आणि मला काय शिकवायचे आहे हे शिकण्यासाठी किंवा आपल्या ध्येयांबद्दल वैयक्तिकरित्या माझ्याशी बोलण्यासाठी आणि योग्य दिशेने काही मार्गदर्शन मिळाल्यास, आणि आपले स्वतःचे सॉफ्टवेअर कोड करण्यास आणि लिहिण्यास प्रवृत्त केले असेल तर हे पुस्तक घरी घेऊन जा आणि पुढील प्रभावशाली, आपल्या आवडीची आणि आपल्या आवडीची आवश्यकता असलेल्या वेबसाइटवर काही वेळ द्या.

माझ्याबद्दल: मी सी/सी ++, जावा, पायथन, एचटीएमएल, सीएसएस आणि जावास्क्रिप्टमधील विस्तृत अनुभवासह एक सॉफ्टवेअर विकसक आहे. मी लोकांना वापरू इच्छित असलेल्या वेबसाइट्स तयार करतो, भेट देऊ इच्छितो आणि फक्त शिकण्यासाठी, पुन्हा तयार करण्यासाठी आणि मारण्यासाठी फक्त वापरण्याची व्यसनी देखील बनवितो आणि सर्वात महत्त्वाचे म्हणजे मी सॉफ्टवेअर विकतो. आपल्याला एखादी वेबसाइट कशी दिसावी आणि कार्य करायची आहे याबद्दल आपल्याला कल्पना असल्यास, आपण मला पाठिंबा देण्यास तयार आहात जेणेकरून मी आपल्यास भेटत असताना मी माझ्या स्वत: च्या गरजा भागवू शकेन आणि आपण स्वत: वेबसाइट चालवण्याच्या किंमतींचा समावेश करण्यास तयार आहात, मी तुम्हाला पुढील यूट्यूब, टिकटोक, ट्विटर, गूगल किंवा अगदी उच्च-टेक सुरक्षा अ‍ॅप बनवू शकेन. माझा वेळ तुम्हाला विकण्याचा प्रयत्न करण्याऐवजी, मी आपले खरेदी करण्याचा प्रयत्न करीत आहे: मी आधीपासून अस्तित्त्वात असलेल्या माहितीसह स्वत: ला एक अ‍ॅप (वेबसाइट) तयार करण्यास सांगू इच्छित आहे आणि आपल्याला स्वतंत्र सॉफ्टवेअर विकसक, उद्योजक बनण्याची आवश्यकता आहे, जे आपल्याला पाहिजे असलेल्या क्षेत्रात यशस्वी करिअरचे नेतृत्व करते. आणि मला स्पष्ट होऊ द्या, मी तुम्हाला जे शिक्षण देतो ते अनौपचारिक असेल. आपण शाळेत जाऊन हे सर्व औपचारिक शिक्षणासह शिकू शकता किंवा शाळेत हे पुस्तक वाचू शकता, आपली असाइनमेंट पूर्ण करा आणि आपल्या शिक्षणापासून बरेच काही काढून टाकू शकता, परंतु मी तुम्हाला औपचारिकपणे हॉट सीटवर ठेवणार नाही आणि आपल्याला असाइनमेंट पूर्ण करण्यास सांगणार नाही. मी तुमचा प्राध्यापक नाही, तुम्ही माझ्या मित्रासारखा विचार करू शकता ज्याला तुमच्या स्वत: च्या वैयक्तिक यशाने चालवलेल्या करिअरकडे मार्गदर्शन करायचे आहे. आणि मी तुम्हाला एकतर यश विकत नाही, आपल्याला आपल्या वेळेसह ते खरेदी करण्याची आवश्यकता असेल. कोड शिकणे ही एक उच्च शिक्षण वक्र आहे आणि ती कधीही सोपी नव्हती, किंवा अगदी असली पाहिजे. आपल्याला शक्य तितके कठोर परिश्रम करण्याची आवश्यकता आहे आणि प्रयत्न करणे आणि अयशस्वी होणे आणि स्वत: ला अॅप्स तयार करण्यासाठी निराश झाल्यावरही पुन्हा प्रयत्न करणे आणि पुन्हा प्रयत्न करणे आवश्यक आहे. ते स्वतःच कोडच्या स्वरूपात आहे. कोड एका कंपाईलरद्वारे चालविला जातो जो प्रोग्रामर त्रुटी संदेश देण्यासाठी डिझाइन केला आहे आणि हे आपल्याला कोड कसे करावे हे शिकवेल, जरी आपण फक्त आपल्या शोध इंजिनमध्ये त्रुटी कॉपी करीत असाल आणि इतर लोकांची उदाहरणे वाचत असाल तरीही. आणि मी म्हणायलाच पाहिजे, आपल्याला अ‍ॅप तयार करण्यासाठी अत्यंत श्रीमंत, स्मार्ट, यशस्वी किंवा तपशील देणारं किंवा आयोजित करण्याची आवश्यकता नाही. संगणक आपल्यासाठी त्या संस्थेची काळजी घेतो. आपल्याला फक्त चाचणी आणि त्रुटीद्वारे चिकाटीची आवश्यकता आहे, लक्ष केंद्रित करणे आणि आपण जे काही करता त्यावर कठोर परिश्रम करणे आवश्यक आहे आणि आपण जे काही करता त्या संपूर्णपणे आपल्याकडे एक यशस्वी कारकीर्द असेल.

मी कोण आहे: मला हे समजले आहे की शेवटचा विभाग शिकण्याबद्दल अधिक होता आणि आपण या पुस्तकातून एक मार्ग काढला आहे. मी नक्की कोण आहे? हा एक गुंतागुंतीचा प्रश्न आहे. मी स्वत: वर अस्पष्ट आहे, कारण मी वैद्यकीय परिस्थितीने ग्रस्त आहे ज्यामुळे मला कधीकधी हे पुस्तक कोड करणे किंवा लिहिणे देखील अवघड होते, जेव्हा समाजीकरण आणि ओळख समस्यांसह आव्हान सादर करते जे माझे जीवन स्वतःचा परिचय देताना अधिक कठीण करते. थोडक्यात, जर आपण हे पुस्तक वाचत असाल तर आपण ते घरी आणले कारण आपण त्यातून पलटी झाली आणि विचार केला की ते उपयुक्त आहे, किंवा आपण हे अगदी वाचले असले तरीही, मी तुमच्यासाठी एक विचारशील व्यक्ती आहे ज्याला आपण जे काही करता त्या प्रत्येक गोष्टीत यशस्वी होऊ इच्छित आहे. मी स्वत: एक अभियंता आहे, एक सॉफ्टवेअर विकसक आणि एक विद्यार्थी आहे आणि मी हे पुस्तक इतर विद्यार्थ्यांसाठी लिहित आहे ज्यांना सॉफ्टवेअरचे हँडबुक असून त्यांचे जीवन सुलभ करायचे आहे जे कार्य, उपयुक्त, मोठे, कार्यशील, एकत्रित आणि व्यवसायात यशस्वी होऊ शकतील अशा अॅपमध्ये मोठ्या कोडे सारखे एकत्र बसणारी उदाहरणे देऊन त्यांचे जीवन सुलभ करते. मुख्यत्वे, मी हेच करतो: मी स्वत: ला आणि इतर लोकांना यशस्वी होण्यास मदत करण्यासाठी अ‍ॅप्स तयार करतो. मी एक लेखक देखील आहे, जरी हे माझे पहिले प्रकाशन आहे जे माझे पोर्टफोलिओला उपयुक्त दस्तऐवजात एकत्र ठेवण्यासाठी पूर्ण करण्याचा माझा हेतू आहे आणि मी एक कलाकार देखील आहे. मी हे तुला कबूल करेन, मी एक विचित्र व्यक्ती आहे. मी परिपूर्ण नाही, मी महाविद्यालये आणि विद्यापीठे सोडण्यास आणि अधिक यशस्वीरित्या स्वत: चे नाव देण्याचा प्रयत्न करण्यासाठी राज्यांना सोडण्यास प्रवृत्त केले आहे. मी जन्माने एक स्त्री आहे, मी मेकअप घालतो, स्वत: चे फोटो घेतो, कपडे आणि इतर महिलांचे कपडे घालतो आणि मी स्वभावाने मादी म्हणून स्वत: बद्दल जागरूक राहतो. यापूर्वी माझ्याकडे इतर लोकांसह समस्या आहेत ज्यामुळे वेबअॅप्स लिहिणे आणि तयार करणे या गोष्टींशी झुंज देईल आणि मी दिलगीर आहोत की हे पुस्तक लवकरच आपल्या हातात मिळविण्यात मला सक्षम नाही: आपल्याला याची आवश्यकता आहे. आपणास माझ्यासारखे दिसणारे आणि माझ्यासारखे कार्य करणारे कोड वाचण्याची आणि लिहायची आहे आणि तीच गोष्ट करायची आहे परंतु त्याहूनही अधिक चांगले, कारण जर आपण आपल्या कीबोर्डला मॅश करण्याऐवजी हे पुस्तक खरेदी करणे परवडत असेल तर मी फक्त त्यासाठी पैसे विचारून एक पुस्तक तयार करतो, आपल्याकडे आपल्या आयुष्यात यशस्वी होण्यासाठी आवश्यक संसाधने आपल्याकडे आहेत. माझ्याकडे कुटुंब वाढत असताना, आरोग्याची परिस्थिती, डॉक्टर, मीडिया आणि कायदा आणि माझा कोड विभाजित आणि निराश जगातील स्त्रीत्व आणि स्त्री स्वभाव असलेल्या संघर्षाचे गंभीरपणे प्रतिबिंबित करते. तथापि, हे पुस्तक मला खूप काळजी आहे, माझे बाळ, माझे पोर्टफोलिओ आणि माझे रोजीरोटी आहे, म्हणून जेव्हा आपण मजकूर घरी घेता आणि माझ्याकडून शिकण्यासाठी काळजीपूर्वक छिद्र करता तेव्हा मी आपल्या विचारसरणीचे कौतुक करतो. कृपया लक्षात ठेवा मी परिपूर्ण नाही, या पुस्तकात चुका, पुनरावृत्ती आणि नवीन आवृत्ती असतील आणि माझ्या लेखनाचा यशस्वी अनुभव घेण्यासाठी आपल्याला आपल्या तार्किक मेंदूसह सर्वोत्तम विचार करण्याची आवश्यकता असेल. हे देखील समजून घ्या की लिहिताना आव्हानांचा सामना करावा लागला तरीही मी तुमच्यासाठी चांगले आहे. यासारखे विचार करा: जेव्हा आपण डिजिटल जागेत शक्यतो कल्पना करू शकता असे काही करण्यासाठी संगणक प्रणाली भाड्याने घेऊ शकता, आपल्याला आढळणारी सर्व माहिती संचयित करा, विश्लेषण करा आणि आयोजित करा आणि ते समजून घ्या, आपण घेत असलेल्या माहितीसह आपल्याला अपरिहार्यपणे अडचणी येतील. मी तुम्हाला हे सांगतो कारण मला त्याच अडचणी आढळतात. हे पुस्तक आपल्या स्वत: च्या जोखमीवर वापरा, आपल्या समुदायासह आणि आपल्या समुदायासह कार्य करा आणि आपल्यासाठी सुरक्षित सेटिंगमध्ये सॉफ्टवेअर तयार करण्यासाठी आणि आपण अपयशी ठरता किंवा अगदी चुकीच्या मार्गाने यशस्वी होताना वैयक्तिकरित्या गोष्टी घेऊ नका: हेच मला हे कसे मिळाले आहे आणि मी हा मजकूर आपल्याला काटेकोरपणे आणू शकतो ज्यामुळे मी सर्वसाधारणपणे आभारी आहे, ज्याची मी सर्वसाधारणपणे आभारी आहे, ज्याची मी सर्वसाधारणपणे आभारी आहे, ज्याची मी सर्वसाधारणपणे आभारी आहे, ज्याची मी सर्वसाधारणपणे आभारी आहे, ज्याची मी सर्वसाधारणपणे आभारी आहे, ज्याची मी सर्वसाधारणपणे आभारी आहे, त्या सर्वांच्या आभारी आहे. काम, इंटरनेट. मी फक्त काही शब्दांबरोबर कोण आहे याबद्दल आपण फारशी परिचित होऊ शकत नाही, परंतु मी तुम्हाला वाचण्यास प्रोत्साहित करतो, आपले कार्य पूर्ण करण्यासाठी आपले स्वतःचे प्रकल्प तयार करताना आपण मला वाचणे आणि समजणे सुरू ठेवत असताना आपण मला ओळखता. जोपर्यंत आपले प्राध्यापक किंवा शिक्षक आपल्याला काही नियुक्त करीत नाहीत तोपर्यंत या पुस्तकाचे कोणतेही गृहपाठ होणार नाही, परंतु आपण वाचताच प्रकल्पांचे पोर्टफोलिओ तयार करण्यास मी तुम्हाला खूप प्रोत्साहित करतो, तसेच आपण जे शिकलात ते आपण कसे लागू करू शकता हे दर्शविणारा कॅपस्टोन प्रकल्प. माझा कॅपस्टोन प्रोजेक्ट हा या पुस्तकात वाचत असलेल्या बर्‍याच गोष्टींचा आधार आहे, कारण त्यात माझ्या मागील प्रकल्पांमधील कोड, मी तयार केलेला आणि हाताने पद्धतशीरपणे लिहिण्यास शिकलेला कोड आणि बर्‍याच कल्पना आणि टिप्स ज्याने मला अशा एका साध्या अॅपवर स्पिनिंग केले आहे की आपण आपल्या मित्राने किंवा आपल्या कुटुंबाचा वापर करू शकता अशा एका लोकप्रिय अॅपप्रमाणेच, ज्या आपण आपल्या मित्राला किंवा आपल्या कुटुंबाचा वापर करू शकता अशा लोकप्रिय अॅपसारखे वागू शकतील.

हे पुस्तक काय आहे: हे पुस्तक उदाहरणाद्वारे ट्यूटोरियल आहे. आपण येथे कोड शोधू शकता, कोड कसे शिकता यावे यासाठी सूचना, डीबगिंग कोड आणि फिक्सिंग त्रुटी, समस्यानिवारण चरण, आपला कोड कसा जतन करायचा याविषयी सूचना, आपला कोड तोडल्यास, आपला कोड सुरक्षित करा, आपला कोड सुरक्षित करा, आपली कोड तयार करा, आणि आपल्या स्वत: ला का आहे, आणि आपण स्वत: ला का आहे, आणि आपण स्वत: ला का आहे, ज्यास आपण स्वत: ला का आहे, आणि आपण स्वत: ला जोपर्यंत एक अर्थपूर्ण आहे, ज्याची मी एक समजूत काढू शकता, ज्याची आपण स्वत: ची कल्पना आहे, ज्याची मी कल्पना आहे, ज्याची मी कल्पना आहे, ज्याची मी एक समजूत काढली आहे, ज्याची मी एक समजूत काढली आहे, ज्याची मी एक समजूत काढली आहे, जसे की मी स्वत: ला का आहे, ज्याची मी एक समजूतदारपणा आहे, ज्याची मी एक समजूत काढली आहे, ज्याची मी एक समजूत काढली आहे, ज्याची मी एक समजूत काढली आहे, ज्याची मी एक समजूत काढली आहे, ज्याची मी एक समजूत काढली आहे, आपण आपल्या शेवटच्या वापरकर्त्यांसाठी, आपल्या वेबसाइटच्या अभ्यागतांसाठी शक्य तितक्या आकर्षक होण्यासाठी परिपूर्ण सर्वोत्कृष्ट प्रकाशात तयार केलेले सॉफ्टवेअर म्हणून. या पुस्तकात, मी व्यासपीठ तसेच सुरक्षा म्हणून वेबवर लक्ष केंद्रित करून सॉफ्टवेअर डिझाइनची बरीच उदाहरणे दर्शवितो. आम्ही बॅकअप आणि स्क्रिप्टिंग वैशिष्ट्यांसह युनिक्स शेलचा वापर करून मूलभूत प्रकल्प तयार करुन शिकण्याचा अनुभव सुरू करू. त्यानंतर, आम्ही एक मूलभूत ब्लॉग वेबसाइटचे परीक्षण करू, आमच्या ब्लॉगला फोटो आणि व्हिडिओ वैशिष्ट्यांसह श्रेणीसुधारित करू तसेच विनामूल्य सॉफ्टवेअर वापरुन सुरक्षा सोल्यूशन्स वापरण्यासाठी या वैशिष्ट्यांचा वापर करू आणि प्लगजेबल ऑथेंटिकेशन मॉड्यूल (पीएएम) वापरून आमचा सर्व्हर सुरक्षित करू. त्यानंतर आम्ही फाइल हाताळणी आणि प्रक्रिया, व्हिडिओ संपादन, व्हॉईस डोनेशन, बारकोड स्कॅनिंग आणि ऑप्टिकल वर्ण ओळख, इतर संकल्पनांसह पुनरावलोकन करू. मार्गात आम्ही एपीआयची तपासणी करू जे आम्हाला विनामूल्य आणि सशुल्क पर्यायांसह आमचे सॉफ्टवेअर अधिक उपयुक्त आणि सुरक्षित बनविण्यात मदत करेल. वाटेत, आम्ही बंदुक आणि रिपीटर डिझाइन, बुर्ज आणि ड्रोन डिझाइन आणि इतर प्रिन्सिपल्ससह बंदुक आणि शस्त्रे डिझाइन आणि मॅन्युफॅक्चरिंग सारख्या भौतिक सुरक्षा आणि अतिरेकी साधने शोधू आणि आम्ही आमच्या सॉफ्टवेअरचे रक्षण करण्यासाठी आणि स्वत: ची संरक्षण आणि रेजिलिएनिटी दर्शविण्यासाठी विद्यमान नेटवर्कवर आमच्या सॉफ्टवेअरसह समाकलित करू. आम्ही गेम्स, 2 डी आणि 3 डी रेंडरिंग इंजिन तयार करण्याच्या मार्गावर ब्रेक घेऊ आणि सिलिकॉन रबरमध्ये अनुक्रमे मूलभूत आयामी रेंडरिंग सॉफ्टवेअर आणि इलेक्ट्रॉनिक व्हायब्रिंग मालिशर कास्टच्या प्रकरणात एम्बेड केलेल्या हार्डवेअरसह कार्य करू. मार्गात, आम्ही आमचे सॉफ्टवेअर अधिक चांगले सुरक्षित करण्यासाठी आधीपासून उपलब्ध मशीन लर्निंग सोल्यूशन्स देखील वापरू. आम्ही प्रक्रिया सुव्यवस्थित आणि सुरक्षित करण्यासाठी वेबसाठी उपलब्ध स्टॉक टूल्स देखील वापरू. हे पुस्तक वेब अनुप्रयोग तयार करण्यात आणि संगणक आणि एम्बेडेड मेकॅनिकल सिस्टमच्या व्यावसायिक नेटवर्कसह एकत्रित करण्याच्या आपल्या यशाचे मार्गदर्शक आहे आणि एकूणच सॉफ्टवेअर तयार करण्यासाठी मार्गदर्शक आणि पार्श्वभूमी ज्ञान किंवा मागील अनुभव नसलेले एम्बेड केलेले हार्डवेअर.

हे पुस्तक काय नाही: आपल्याकडे खरोखर एखादी वेबसाइट हवी असल्यास, आपण फक्त एक साधे स्टोअर सेट अप करू शकता आणि आपल्याला आवश्यक असलेल्या गोष्टीची विक्री करू शकता, ब्लॉग पोस्ट करू शकता, फोटो किंवा व्हिडिओ पोस्ट करू शकता किंवा अन्यथा कोडची एक ओळ लिहिल्याशिवाय. हे पुस्तक तसे नाही. हे पुस्तक आपल्याला आधीपासून सापडलेल्या कोणत्याही सॉफ्टवेअरपेक्षा अधिक उपयुक्त, पूर्णपणे वैशिष्ट्यीकृत, कार्यशील आणि सुरक्षित सॉफ्टवेअर कसे तयार करावे हे शिकवेल, कारण ते अद्याप प्रोटोटाइप असलेले नवीनतम सॉफ्टवेअर तैनात करते, जुन्या कंपन्या ऑपरेट करतात अशा प्रमाणात चालविणे महाग असू शकते आणि जे लोक खरोखर काहीही करत नाहीत अशा लोकांसाठी पैसे कमविण्यासाठी सेट केलेल्या बॅकवर्ड, कॉन्व्हॉल्टेड कंपन्यांना आवाहन करत नाहीत. आपण या पुस्तकाचे बारकाईने अनुसरण केल्यास, आपल्याला कोड, संशोधन कोड लिहायचा असेल, आपले स्वतःचे अ‍ॅप्स तयार करायचे असतील आणि आपण जे काही करता त्यावरून आपण पैसे कमवाल. मी या पुस्तकातून सुरुवातीच्या टप्प्यातही पैसे कमवतो, कारण यात लोकांना आवश्यक माहिती असते आणि त्यांना वाचण्याची इच्छा असते आणि जेव्हा ते माझे अ‍ॅप्स खरेदी करतात किंवा वापरतात तेव्हा आधीच खरेदी करतात. हे पुस्तक आपल्यासाठी एक अ‍ॅप तयार करणार नाही, परंतु ते आपल्याला योग्य दिशेने निर्देशित करेल आणि आपल्याला आवश्यक असलेल्या साधनांसह आणि वेबसाठी सॉफ्टवेअर तयार करण्यात आपले स्वतःचे यश सुलभ करेल अशा कौशल्ये आणि टिप्ससह, आपल्याला एक उदाहरण म्हणून लिहिण्याची आवश्यकता आहे, आपण आणि आपले समर्थक, क्लायंट, मित्र, कुटुंब, कंत्राटदार आणि समर्थकांसाठी एकत्रितपणे तयार केले जावे.

आपण काय शिकाल: हे पुस्तक आपल्याला सॉफ्टवेअर, खरोखर कार्यशील, उपयुक्त सॉफ्टवेअर, मीडिया रेकॉर्डिंग, फेशियल रिकग्निशन, मशीन रीड करण्यायोग्य झोन बारकोड स्कॅनिंग, वेब एपीआय प्रमाणीकरण, रेकॉर्ड आणि व्हिडिओ आणि फोटो प्रस्तुत करण्यासाठी आणि ब्लूटूथ आणि जवळील फील्ड (एनएफसी) संप्रेषण सारख्या संदेशांची देवाणघेवाण कशी करावी हे शिकवेल. हे पुस्तक आपल्याला नेटवर्किंग संगणक कसे वापरावे, डेबियन लिनक्सवर लक्ष केंद्रित करणे, आपल्या सॉफ्टवेअरला अखंड, स्वयंचलित ब्रीझ स्थापित करणे आणि बॅक अप करण्यासाठी बॅश कोड कसा तयार करायचा हे शिकवेल, डायनॅमिक संदेश देण्यासाठी पायथन कोड कसा तयार करावा, बूट्सट्रॅपद्वारे तयार करा आणि इंटरएक्ट्सद्वारे इंटरबॅक्ट्सद्वारे तयार करा, जे नेटवर्क्स तयार करा, नेटवर्क्स तयार करा आणि इंटरएक्ट्स फॉर इंटरफेक्ट्स फॉर इंटरएक्टिव्ह आपले सॉफ्टवेअर सुरक्षित ठेवण्यासाठी इतर उद्दीष्टे, आयडी स्कॅनिंग, प्रतिमा आणि व्हिडिओ संयम, डेटा मायक्रोट्रॅन्सेक्शन, पेमेंट प्रोसेसिंग, क्रिप्टोकरन्सी ट्रेडिंग, एसिंक्रोनस कार्ये आणि बरेच काही. सोल्डर, वायर आणि थ्रीडी प्रिंट तसेच कास्ट मटेरियल वापरुन, बॅटरी, चार्जर्स, मायक्रोकंट्रोलर, सर्किट्स, मोटर्स आणि सेन्सरसह आपले स्वतःचे ब्लूटूथ डिव्हाइस कसे तयार करावे हे आपण शिकाल. मी itive डिटिव्ह मॅन्युफॅक्चरिंग आणि टूल आणि डाय मेकिंगसाठी लागू 3 डी डिझाइन प्रिन्सिपल्सचे प्रदर्शन करेन, जेणेकरून आपण आपले स्वतःचे एम्बेड केलेले, एकात्मिक बॅटरी, चार्जर्स, इलेक्ट्रॉनिक सर्किट्स आणि फंक्शनल आउटपुटसह हार्डवेअर डिव्हाइस तयार करण्यास सक्षम आहात. आणि त्यांना ब्लूटूथ आणि वेबसह नेटवर्क करा. विशेषतः, आम्ही दोन केस स्टडीज, एक कंपन करणारे मालिशर आणि होममेड बंदुक, दोन्ही ओपनस्कॅडमध्ये प्रोग्राम केलेले, जे ग्राफिकल इंटरफेस किंवा कमांड लाइन युटिलिटी म्हणून उपलब्ध आहेत आणि वेगवान निकालांसाठी वेबमध्ये समाकलित केले जाऊ शकतात. पूर्वीचा अनुभव न घेता ग्राउंड अपमधून वेबसाइट कशी तयार करावी आणि तैनात कशी करावी हे आपण शिकाल, ते कार्यशील, सुरक्षित, सुंदर, उपयुक्त आणि सर्वात महत्वाचे म्हणजे व्यावहारिक बनवा. साइट सुरक्षित आणि अधिक व्यावहारिक बनविण्यासाठी मशीन लर्निंग आणि संगणक व्हिजन कसे वापरावे, आपल्या वेबसाइटवरून व्हिडिओ आणि ऑडिओ रेकॉर्ड करा, आपला आवाज दान करा, संगीत तयार करा आणि उपयुक्त नमुने तयार करण्यासाठी ऑडिओ मॉड्युलेट करा आणि आपल्या सर्व वेबसाइट्सचा लाभ घेण्यासाठी आपल्या सर्व उपयुक्त माहितीसाठी आणि आपल्या व्यवसायात अधिक महत्त्वपूर्ण माहिती देण्यासाठी आणि लोकांच्या अधिक महत्त्वाच्या नेटवर्क तयार करण्यासाठी आवाज कसा खंडित करावा आणि लोकांच्या अधिक महत्त्वपूर्ण माहितीसाठी आपल्याशी थेट संबंध जोडता येईल. या पुस्तकाचे माध्यम, सुरक्षा आणि मशीन लर्निंगवर सर्वात जास्त लक्ष केंद्रित केले जाईल, जे योग्य वापरकर्त्यांना गुंतवून आणि चुकीच्या गोष्टींना वास्तववादी, व्यावहारिक, हातांवर आणि स्वयंचलित आणि बळकट असताना गुंतवून ठेवून चुकीच्या गोष्टींना विचलित करून वेबसाठी उपयुक्त सॉफ्टवेअर तयार करण्यात मदत करणारे प्रमुख तीन घटक आहेत. हे पुस्तक युनिक्स, विशेषत: डेबियन (उबंटू), बॅश शेल, पायथन, एचटीएमएल, सीएसएस, जावास्क्रिप्ट आणि पायथनसाठी अनेक उपयुक्त सॉफ्टवेअर पॅकेजेस तसेच जीआयटी आणि एफएफएमपीईजी सारख्या उपयुक्त बॅश सॉफ्टवेअर शिकवते. क्रिप्टोकरन्सीला स्वयंचलितपणे कसे व्यापार करावे हे देखील मी आपल्याला शिकवीन आणि क्रिप्टोकरन्सीमध्ये किंवा नियमित डेबिट कार्डमधून देयके देईन आणि आपण असे करणे निवडल्यास आपल्या अभ्यागतांना आपल्या कमाईचा वाटा भरला. जाहिरातींद्वारे आपल्या वेबसाइटवरून पैसे कसे कमवायचे, शोध इंजिनसाठी आपला अ‍ॅप कसा तयार करावा आणि वेगवान बनवायचा हे मी शिकवीन, आपले ग्राहक आपल्याला जे शोधण्यासाठी शोधतील त्या पहिल्या क्रमांकावर आहेत आणि शक्य तितक्या सामान्य शोधात क्रमवारीत आहेत. मी आपले सॉफ्टवेअर कसे विकावे, त्याची जाहिरात कशी करावी, आपल्या सेवा शोधत असलेल्या ग्राहकांना आवाहन कसे करावे आणि आधीपासून अस्तित्त्वात असलेल्या मार्गांद्वारे इंटरनेटवर स्वत: साठी नाव तयार करीन, स्वस्त आहे आणि चांगले कार्य करा. आपल्यासाठी कार्य करणार्‍या क्लाउड कॉम्प्युटरवरील आपला डेटा कसा जतन करायचा आणि आपला डेटा स्वस्तपणे जतन कसा करावा, आपल्या वापरकर्त्यांना काय हवे आहे आणि आपल्याला काय हवे आहे हे वेबसाइटची योजना कशी तयार करावी आणि आपल्या वापरकर्त्यांना आपल्या साइटवर आपल्या फोनवर टॅप करून आपल्या वेबसाइटवर फक्त आपल्या वेबसाइटवर परत आणण्यासाठी आपल्या वापरकर्त्यांना कसे गुंतवून ठेवावे हे शिकवतो. हे पुस्तक मजकूरापासून फोटोपासून व्हिडिओपर्यंत ऑडिओपर्यंत मोठ्या प्रमाणात माध्यमांचे प्रकाशित करणे आणि वितरित करण्याच्या व्यावहारिकतेवर लक्ष केंद्रित करेल, अंतिम वापरकर्त्यांवर (आपला ग्राहक) चांगली छाप पाडते आणि वेबसाइट तयार करण्यासाठी आपण स्वत: ला कोणत्याही प्रकारे विकले आहे, जे आपले प्रतिनिधी आहे आणि केवळ आपले सॉफ्टवेअर आणि आपली कंपनी शक्य आहे. कोडिंग टिप्स, मेकअप आणि फोटोग्राफी, मॉडेलिंग आणि अभिनय यासारख्या व्यावहारिक व्यर्थतेपासून आपण माझ्याकडून काही टिपा आणि युक्त्या देखील शिकू शकाल, जे आपल्यास आणि आपल्या कंपनीला आपल्याकडे उपलब्ध असलेल्या सर्व साधनांचा वापर करून उत्कृष्ट संभाव्य प्रकाशात चित्रित करण्यासाठी महत्वाचे असेल, जेव्हा आपल्या सॉफ्टवेअरला आवश्यक असेल तितकी सामग्री वितरित करणे आवश्यक असेल तर अधिक प्रयत्न करणे आवश्यक आहे. या पुस्तकाला "प्रॅक्टिकल असे म्हणतातWeb 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 वर्धितता, प्रतिमा मथळा आणि प्रतिमांमधून तयार केलेली भविष्यवाणी मेट्रिक्स, जसे की एक अस्सल, संगणक-हस्तांतरण प्रतिमा किंवा एक ऑप्टिकल कॉपी (प्रतिमेचा फोटो, किंवा मुद्रित फोटो, जेव्हा ते आपल्या संगणकावर अवलंबून असेल तर ते कदाचित आपल्या संगणकावर अवलंबून असते. चेहरा आपण एक सर्व्हर संगणक बनवू शकता, जो सामान्यत: एक वापरकर्तानाव आणि पासकोड विचारेल आणि कदाचित प्रत्येक नवीन लॉगिन किंवा नवीन आयपी पत्त्यासाठी पुष्टीकरण टोकनसह, परंतु आपण मोठ्या प्रमाणात तयार करीत असाल तर, मूलभूतपणे सुरक्षित आणि शक्तिशाली सॉफ्टवेअर, हे आपल्या सॉफ्टवेअरचे कोणतेही सॉफ्टवेअर आहे. जो कोणी निर्दोषपणे सुरक्षित आहे तो सॉफ्टवेअर तयार करतो त्याला याचा अर्थ काय आहे याचा काही अर्थ आहे. सॉफ्टवेअर मूळतः असुरक्षित आहे कारण आम्ही त्यात प्रवेश करण्यासाठी वापरत असलेली डिव्हाइस आणि खाती नेहमीच आमच्या विल्हेवाट लावत नसतात, ते सॉफ्टवेअरसाठी वाईट हेतू असलेल्या कोणाच्याही हाती असू शकतात आणि म्हणूनच सॉफ्टवेअरला स्वतःच धोका असू शकतो. या पुस्तकाचे हे लक्ष आहे. नेटवर्क संगणक डीफॉल्टनुसार लांब की टोकनसह सुरक्षित केले जाते, ज्याला आणि एसएसएच किंवा सुरक्षित शेल की म्हणतात आणि अन्यथा वेब सर्व्हरसह सर्वोत्तम सुरक्षित आहे, कारण वेब सर्व्हर सर्व्हरवरच चालणार्‍या कला सुरक्षा साधनांची स्थिती तसेच मुक्त प्रवेश प्रदान करते. वेब सर्व्हरला वापरकर्त्याच्या वेब ब्राउझरमध्ये प्रवेश आहे, जो वापरकर्त्याच्या डिव्हाइसचा सर्वात शक्तिशाली भाग आहे, कारण वापरकर्ता नेटवर्किंग सॉफ्टवेअरमध्ये प्रवेश करू शकतो. हे टूलकिट मजकूर, आपण पहात असलेले वेबपृष्ठे प्रस्तुत करू शकते आणि प्रतिमा, ऑडिओ आणि व्हिडिओ देखील रेकॉर्ड करू शकते (एखाद्या चेहर्याचा किंवा स्टेट आयडीचा फोटो), ब्लूटूथ रेडिओ डिव्हाइस वाचू आणि लिहू शकतो, आणि जवळच्या फील्ड ट्रान्सपॉन्डर टॅग्ज, स्वस्त की, स्टिकर, रिंग्स आणि अगदी वॉल्ड्स टू वॅल टू वॉल्डसह वाचू शकतो आणि लिहू शकतो. साइट. आपल्या विल्हेवाटातील सर्व साधने वापरुन, या पुस्तकासह आपण एक सुरक्षित वेबसाइट तयार करण्यासाठी ज्ञानासह स्वत: ला सुसज्ज कराल आणि एकूणच एक सुरक्षित नेटवर्क संगणक प्रणाली जी आपल्यासाठी कार्य करते, आपली बोली लावते आणि दिसते आणि वाटते

कोठे सुरू करावे: मी हे पुस्तक किंवा कोणत्याही विभागासह, आपल्याला आवश्यक असलेल्या अचूक कोडवर सोडण्याचे आपले स्वागत आहे, खासकरून आपल्याकडे कोडिंगचा अनुभव असल्यास किंवा वरील कोणत्याही साधनांपैकी काही मी या पुस्तकात तपशीलवार वर्णन करीत आहे तसेच वापर प्रकरणे आणि त्यातील व्यावहारिक उदाहरणांचे दस्तऐवजीकरण करीत आहे. आपल्याकडे लेखन कोडचा अनुभव नसल्यास, हे पुस्तक आपल्यासाठी योग्य आहे हे सुनिश्चित करण्यासाठी मी हे सर्व पुस्तक वाचण्याची शिफारस करतो आणि विशेषत: मागील विभाग वाचा. हे पुस्तक आपल्यासाठी योग्य नसल्यास, एखाद्या मित्राला किंवा नातेवाईकांना भेट देण्याचा विचार करा ज्याला स्वतः वेब विकासाबद्दल शिकण्यात रस असेल आणि ते परत कर्ज घेण्याचा आणि त्यांच्याकडून शिकण्याचा विचार करा जिथे मी तुम्हाला शिक्षक म्हणून अयशस्वी झालो, किंवा इतर शिक्षकांनी माझ्यासमोर केले. आपण जिथे कराल तिथे प्रारंभ करा, आपण उपयुक्त अ‍ॅप तयार करण्याचा विचार केल्यास या पुस्तकाचा प्रत्येक भाग उपयुक्त ठरेल आणि विचार करा की उत्कृष्ट अॅप्स अंतिम वापरकर्त्याच्या लक्षात ठेवून तयार केले आहेत: आपला ग्राहक जाणून घ्या. आता आपण मला ओळखत आहात, आपल्याला हे पुस्तक माहित आहे आणि आपण प्रारंभ करण्यास तयार आहात. प्रारंभ करण्यासाठी, संगणक घ्या (अगदी बॉक्स स्टोअरमधील सर्वात स्वस्त लॅपटॉप, Amazon मेझॉन किंवा जुने डेस्कटॉप कार्य करते आणि आपल्यासाठी कार्य करते अशा प्रकारे सेट करा.

हे पुस्तक कसे वाचावे: मजकूर हायलाइट केलेला आहे, हे दर्शविते की मजकूर कमांड प्रॉम्प्टमध्ये आहे, जिथे आपण चालवलेला कोड आपण लिहाल. कमांड प्रॉमप्ट मोठ्या प्रमाणात कीबोर्डवर केंद्रित आहे आणि क्लिक करणे आवश्यक नाही, आपल्या वर्कफ्लोला वेग वाढविणे आणि आपल्यावर गोष्टी सुलभ करणे आवश्यक आहे.

प्रारंभ करणे: चला आत जाऊया. आम्ही स्थानिक मशीनवर कोड तयार करुन प्रारंभ करू आणि इंटरनेटशी कनेक्ट केलेली वेबसाइट तयार न करता प्रारंभ करू. हे प्रारंभ करणे अधिक सुरक्षित आहे, काहीच किंमत नाही आणि आपल्यासाठी सोपे आहे. आपल्या ऑपरेटिंग सिस्टमवर अवलंबून, बॅश शेलमध्ये जाणे थोडे वेगळे असेल. मॅक ओएससाठी, मी या टप्प्यावर व्हर्च्युअल मशीन स्थापित करण्याची शिफारस करतो, कारण आपल्याला व्हर्च्युअल मशीनसह सर्वात अनुकूलता मिळेल. व्हर्च्युअलबॉक्स आणि पॅरालल्स सारख्या विविध प्रदाते आपल्यासाठी व्हर्च्युअल मशीन चालवू शकतात, जरी आपण वेगवान, सुव्यवस्थित अनुभव तयार करण्यासाठी शिफारस केलेल्या मूळ वातावरणाचा वापर करण्यास प्राधान्य दिल्यास, उबंटू थेट मशीनवर स्थापित करणे देखील शक्य आहे. मी शिफारस करतो की आपण लिनक्स किंवा विंडोज वापरत असल्यास, प्रकल्प तयार करणे सोपे आहे. आपले टर्मिनल उघडा, आपण तंदुरुस्त दिसताच आकाराचे समायोजित करा आणि चरण 2 नंतर प्रारंभ करा. जर आपण विंडोज वापरत असाल तर कृपया चरण 1 चे अनुसरण करा.

चरण 1: - केवळ विंडोज वापरकर्ते विंडोजमध्ये, प्रशासक म्हणून ओपन कमांड प्रॉम्प्ट डब्ल्यूएसएल -इस्टॉल

चरण 2: - येथे सुरू ठेवा, आपण विंडोज वापरत नसल्यास येथे चरण 1 वगळा ओपन टर्मिनलमध्ये, (आपल्या ओएसवर अवलंबून, विंडोजमध्ये उबंटू म्हणतात, मॅक किंवा लिनक्समधील टर्मिनल किंवा तत्सम नाव), एक प्रकल्प तयार करुन प्रारंभ करा. आम्ही हे Mkdir कमांडसह करतो, जे निर्देशिका तयार करते. आपल्याला आपला प्रकल्प संचयित करण्यासाठी डिरेक्टरी तयार करण्याची आवश्यकता असल्यास, ज्याची शिफारस केली जाते, निर्देशिकेत बदलण्यासाठी सीडी कमांड वापरा आणि

सीडी/पथ/टू/डिरेक्टरी - मार्ग म्हणजे आपल्या गंतव्य निर्देशिकापूर्वी फोल्डर्स (फायली), आपला डीफॉल्ट पथ ~ किंवा/मुख्यपृष्ठ/वापरकर्तानाव आहे (जेथे वापरकर्तानाव आपले वापरकर्तानाव आहे). डीफॉल्ट निर्देशिकेत बदलण्यासाठी, सीडी किंवा सीडी टाइप करा एमकेडीआयआर उदाहरण - निर्देशिकेच्या नावाने "उदाहरण" बदला

आता आपल्याकडे आपल्या प्रकल्पासाठी एक कार्यरत निर्देश आहे. आपल्याला वेगळ्या मशीनवर स्विच करणे किंवा आपण लिहिलेले कोड तैनात करणे आवश्यक असल्यास ही निर्देशिका जतन करणे इतके महत्वाचे आहे की ते वेबसाठी तयार आहे, आम्ही पुढील काही चरणांमध्ये आपल्या निर्देशिकेचा बॅक अप घेण्यासाठी एक स्क्रिप्ट तयार करू. परंतु स्क्रिप्ट तयार केल्याने थोडासा कोड लागतो आणि शक्य तितक्या उपयुक्त होण्यासाठी कोड स्वयंचलित करणे आवश्यक आहे. तर प्रथम स्क्रिप्ट तयार करण्यासाठी स्क्रिप्ट तयार करूया. स्क्रिप्ट तयार करुन आणि ती कार्यान्वित करण्यायोग्य बनवून प्रारंभ करूया. आम्ही यासाठी एसयूडीओ, सीएचएमओडी आणि टच वापरू आणि स्क्रिप्टला "ascript" वर कॉल करू.

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

आता आम्ही स्क्रिप्ट तयार केली आहे, ती कार्यान्वित करण्यायोग्य बनविली आहे आणि ती संपादित करण्यास तयार आहोत. नॅनो एक मजकूर संपादक आहे जो आपल्याला क्लिक न करता मजकूर संपादित करू देतो, जे ग्राफिकल यूजर इंटरफेस वापरण्यापेक्षा खूप सोपे आहे. नॅनोसह फाईल संपादित करण्यासाठी, नॅनो आणि नंतर फाईलचा मार्ग वापरा. स्क्रिप्ट बनवणारी स्क्रिप्ट तयार करण्यासाठी, ती आपली स्क्रिप्ट प्रथम स्थानावर बनवण्यासारखे आहे. आम्ही वरील प्रमाणेच कोड वापरू, स्क्रिप्टचे नाव, "एस्क्रिप्ट" वितर्क पॅरामीटरसह, $ 1 बदलून. हे आम्हाला फक्त एस्क्रिप्ट न्यूजक्रिप्ट टाइप करून स्क्रिप्टला कॉल करू देते, ज्या क्षणी आम्ही आपल्या स्क्रिप्टच्या नावाने "न्यूज्रिप्ट" ची जागा बदलून कोणतीही नवीन स्क्रिप्ट तयार करू शकतो. नॅनो मधील कोड असावा:

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

आणि नॅनो बंद करण्यासाठी, आम्ही कंट्रोल की धरून ठेवू शकतो आणि एक्स दाबा, त्यानंतर आम्ही फाईल जतन करीत आहोत हे दर्शविण्यासाठी आणि रिटर्न दाबा. आता स्क्रिप्ट संपादित करण्यासाठी या तीन आज्ञा टाइप करण्याऐवजी आम्ही पुन्हा स्क्रिप्ट संपादित करण्यासाठी एसयूसीआरएसीएआरआयएस एएसस्क्रिप्ट टाइप करण्यास सक्षम होऊ. हे कार्य करते! आणि कोणतीही नवीन स्क्रिप्ट शेलमध्ये कॉल करून सहज चालविली जाऊ शकते. चला आता आपले कार्य जतन करूया: आमची नवीन स्क्रिप्ट जतन करण्यासाठी बॅकअप स्क्रिप्ट लिहू आणि नंतर बॅकअप स्क्रिप्टचा बॅक अप घेताना आमच्या प्रोजेक्ट डिरेक्टरीमध्ये त्याचा बॅक अप घ्या.

sudo ascript backup

आता, नॅनो मध्ये:

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

आपण एमकेडीआयआर सह तयार केलेल्या प्रकल्पाचा मार्ग/मार्ग/डिरेक्टरी आहे. नंतर आम्ही लूप आणि सूचीसह यासारख्या पुनरावृत्ती पथांची कॉपी कशी करावी हे शिकू, जे कमी कोड आहे, परंतु आता ते सोपे ठेवू आणि काही ओळी असू द्या. ही स्क्रिप्ट चालविण्यासाठी आणि आपला कोड बॅकअप करण्यासाठी, नॅनोमध्ये फाईल कंट्रोल+एक्स, वाय आणि रिटर्नसह जतन करा आणि खाली आपल्या शेलमध्ये टाइप करा

backup

हे पुस्तक वाचताना आणि शेलमध्ये अनुसरण करताना आपल्याला संकेतशब्दासाठी सूचित केले असल्यास, कृपया आपला वापरकर्ता संकेतशब्द योग्यरित्या प्रविष्ट करा, आपल्याला कमांड पुन्हा चालविण्यापूर्वी आपल्याकडे तीन प्रयत्न करा. आपण कमांड पुन्हा तयार करण्यासाठी वर आणि खाली बाण वापरू शकता आणि त्या संपादित करू शकता, आपल्याला दोनदा काहीही चालवावे लागेल. कमांड निवडण्यासाठी अधूनमधून वर आणि खाली दाबा, उजवीकडे, डाव्या बाणांसह कमांड संपादित करण्यापूर्वी आणि की तसेच कीबोर्ड हटवा, आणि रिटर्नसह चालवा.

अभिनंदन! आपण आपल्या कार्यरत निर्देशिकेत दोन महत्त्वपूर्ण शेल स्क्रिप्टचा बॅक अप घेणारी एक छान बॅकअप स्क्रिप्ट तयार करण्यास व्यवस्थापित केले. प्रकल्प मोठा होत असताना आम्ही नंतर गोष्टी हलवू शकतो, परंतु हे आत्ताच कार्य करते. चला क्लाऊडमध्ये बॅक अप घेण्याकडे जाऊया, आम्ही यासाठी गीथब वापरू (जरी बॅकअपसाठी असंख्य इतर गिट सोल्यूशन्स आहेत, ते सर्व काही समान आहेत.) गिट हे एक वेरजन कंट्रोल सॉफ्टवेअर आहे जे आपण आपल्या सॉफ्टवेअरला सर्व्हरवर बनवताना आपल्या सॉफ्टवेअरवर संपादनांचा बॅक अप घेऊ देते, तर आपल्या संकेतशब्दाच्या मागे किंवा कीच्या मागे आपल्या सॉफ्टवेअरच्या संपूर्ण प्रती डाउनलोड करण्यास सक्षम करते. आपले सॉफ्टवेअर जतन करण्यात हे महत्त्वपूर्ण आहे, विशेषत: आम्ही सिक्युरिटी लिनक्स घटनांमध्ये स्थलांतर करतो जेव्हा कधीकधी कोडची एक ओळ अयशस्वी होते तेव्हा खंडित होते, आपल्याला लॉक आउट केले जाते तर आपला कोड स्वयंचलितपणे बॅक अप घेण्याची संधी न मिळाल्यास आपला कोड बॅक अप घेतला जाऊ शकत नाही, जे आम्ही कव्हर करू.

आपण या टप्प्यावर आधीपासून उबंटू व्हर्च्युअल मशीन वापरत नसल्यास, मी याक्षणी उबंटू व्हर्च्युअल मशीनचा वापर करून मला परतफेड करतो कारण कार्यरत वेबसाइट तयार करण्यासाठी आणि आपल्या संगणकावर खोल शिक्षण ऑपरेशन्स तयार करण्यासाठी आवश्यक सर्व पॅकेजेस स्थापित करताना हे आपले जीवन सुलभ करेल. आम्ही नजीकच्या भविष्यात कोड एका वेब सर्व्हरवर हलवू, परंतु आमच्या वेब सर्व्हरच्या मागे कमीतकमी काही स्तर फिशिंगला प्रतिरोधक आहेत याची खात्री करुन घ्यायची आहे आणि हे करण्यासाठी अनेक लिनक्स पॅकेजेस वापरतात. आपण अद्याप मॅक ओएस वापरू इच्छित असल्यास, आवश्यक पॅकेजेस ऑनलाइन शोधण्यासाठी आणि स्थापित करण्यासाठी आपले स्वागत आहे, परंतु या पुस्तकात किंवा मालिकेत प्रत्येक पॅकेजसाठी पर्याय असू शकत नाहीत.

कमांड सुडो एस्क्रिप्ट बॅकअप चालवून बॅकअप स्क्रिप्टसह आमचे कार्य करण्यासाठी काही आज्ञा जोडू.

# …

पुन्हा एकदा, जतन करण्यासाठी एक्स नियंत्रित करा.

आता आम्हाला या प्रकल्पासाठी काही वेळ कॉन्फिगरेशन करण्याची आवश्यकता आहे. कारण हा लवकरच एक गिट प्रकल्प असेल, आम्ही प्रत्येक वेळी गिट रेपॉजिटरीमधून तैनात करतो तेव्हा आम्हाला प्रत्येक कमांड टाइप करण्याची आवश्यकता नाही, परंतु जेव्हा आम्ही आमच्या उपयोजन स्क्रिप्ट लिहितो तेव्हा आम्हाला याची हँग मिळेल. प्रारंभ करण्यासाठी, आम्ही सुनिश्चित करूया की आम्ही योग्य निर्देशिकेत आहोत आणि गिट रेपॉजिटरी आरंभ करा आणि एसएसएच की व्युत्पन्न करा.

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

आम्ही एसएसएच-कीजेन टाइप केल्यानंतर, नवीन की .ssh नावाच्या फोल्डर अंतर्गत होम फोल्डरमध्ये जतन केली जावी. त्याला आयडी_आरएसए.पब म्हणतात. चला ही की शोधू आणि ती कॉपी करूया. ते पाहण्यासाठी,

cd ~
cat .ssh/id_rsa.pub

शेवटच्या कमांडद्वारे परत केलेला मजकूर कॉपी करा आणि आपल्या खात्यात एसएसएच की जोडण्यापूर्वी आपल्या गिट प्रदात्यासह (आदर्शपणे गीथब) खाते तयार करा. एकदा आपल्याकडे खाते असल्यास, मेनूमध्ये प्रवेश अंतर्गत एसएसएच आणि जीपीजी की मध्ये आपली एसएसएच की जोडण्यापूर्वी वरच्या उजव्या मेनूवर क्लिक करा आणि सेटिंग्ज प्रविष्ट करा. एक एसएसएच की जोडा निवडा आणि नवीन रेपॉजिटरी तयार करण्यासाठी गीथबला जतन करण्यापूर्वी आणि त्यास एक शीर्षक देऊन आणि त्यास एक शीर्षक देऊन आपले जोडा. हे इतर जीआयटी प्रदात्यांसाठी समान आहे, आपल्याला त्यांचे दस्तऐवजीकरण वाचण्याची आवश्यकता असेल. नवीन रेपॉजिटरी कॉन्फिगरेशनमध्ये, आपल्या रेपॉजिटरीला वर्णनात्मक नाव द्या आणि आपण ते प्रकाशित करू इच्छिता की नाही ते ठरवा आणि अद्याप समावेशासाठी कोणत्याही फायली कॉन्फिगर करणे सुनिश्चित करा. एकदा रेपॉजिटरी तयार झाल्यानंतर, क्लोनला एसएसएच URL सह कॉपी करा आणि खालील कमांडमध्ये पेस्ट करा.

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

आता आपण सीडीसह आपल्या रेपॉजिटरीकडे परत जाऊ शकता, आपण यासह परिचित व्हाल. बॅकअपसह आता आपली बॅकअप स्क्रिप्ट वापरुन पहा

छान! आता आम्ही खरोखर कोडिंग मिळवू शकतो. चला आता जंगो स्थापित करूया की आम्हाला बॅश आणि गिटवर चांगली पकड आहे. जॅंगो आम्हाला आपोआप आमच्या सॉफ्टवेअरचा बॅक अप घेऊ देईल, बॅश हे देखील करू शकतात परंतु जांगोची एक सोपी सुरक्षित अंमलबजावणी असावी (ती अक्षम केली जाऊ शकते आणि अधिक सहजपणे कॉन्फिगर केली जाऊ शकते).

उबंटूमध्ये सॉफ्टवेअर स्थापित करण्यासाठी, आम्ही सूडो एपीटी-गेट कमांड वापरू. प्रथम, आमच्याकडे आधीपासून असलेले सॉफ्टवेअर अद्यतनित करू आणि श्रेणीसुधारित करूया. हे सुडो एपीटी-गेट अपडेट आणि सुडो एपीटी-गेट अपग्रेड -वाय सह केले जाऊ शकते. पुढे, पायथन आणि आमचे आभासी वातावरण, आमच्या कोडचे मुख्यपृष्ठ, खालील कमांडसह स्थापित करूया: सुडो pt प्ट-गेट पायथन-आयएस-पायथॉन 3 पायथन 3-व्हेनव्ह स्थापित करा

उबंटू उदाहरणात सॉफ्टवेअर इंस्टॉलेशनच्या बाबतीत आपल्याला जॅंगोबरोबर जाणे आवश्यक आहे. विंडोज आणि लिनक्ससाठी हे बर्‍यापैकी सरळ असले पाहिजे, परंतु मॅकसाठी आपल्याला व्हर्च्युअलबॉक्स किंवा पॅरालल्स डेस्कटॉप सारख्या विनामूल्य किंवा सशुल्क आभासी वातावरणाचा वापर करून व्हर्च्युअल मशीन आणि लिनक्स स्थापित करण्याची इच्छा असू शकते आणि उबंटू वातावरण सेटअप करण्यासाठी वरील चरण पुन्हा तयार करावे. उबंटू या प्रकरणात गंभीर आहे कारण हे वेबसाइट्स चालवणारे सॉफ्टवेअर आहे आणि यामुळे त्यांना उपरोक्त सर्व सॉफ्टवेअरसह वेबसाइट्स होस्ट करण्यास सक्षम करते.

चला जंगो मध्ये खोदू.

सीडीसह पुन्हा आमच्या निर्देशिकेत:

python -m venv venv # जेथे कोड संग्रहित केला जातो तेथे आभासी वातावरण तयार करते
source venv/bin/activate # आभासी वातावरण सक्रिय करते
django-admin startproject mysite . # जिथे मायसाईट हा प्रकल्प आहे मी माझ्या सध्याच्या निर्देशिकेत प्रारंभ करीत आहे.

जॅंगो नुकताच आम्हाला प्रारंभ करीत आहे, कारण जॅंगो वेब सर्व्हरचे होस्ट करीत आहे आणि मूलभूत स्थानिक वेबसाइट मिळविण्यासाठी आम्हाला आवश्यक असलेले सर्व काही करत आहे. आता आम्ही जॅंगो स्थापित केले आहे, आम्हाला कसे आवश्यक आहे हे कार्य करण्यासाठी सेटिंग्ज थोडीशी संपादित करूया. प्रथम, एक नवीन अ‍ॅप तयार करूया

python manage.py startapp feed

आपल्या लक्षात येईल पहिल्या अ‍ॅपला फीड म्हणतात. अ‍ॅपला आपल्या आवडीनुसार म्हटले पाहिजे आणि आम्ही नवीन अ‍ॅप्स तयार करू, परंतु प्रत्येक अ‍ॅपचे नाव प्रत्येक वेळी कोडमध्ये अ‍ॅपचा संदर्भ घेतल्यास सुसंगत असणे आवश्यक आहे. नवीन अ‍ॅप जोडण्यासाठी, आम्ही स्टार्टप्रोजेक्ट, त्यानंतरच्या अ‍ॅपमध्ये नावाच्या अ‍ॅपने तयार केलेल्या इतर निर्देशिकेत सेटिंग्ज.पीपी नेहमीच संपादित करू. नॅनो वापरणे,

nano app/settings.py

सेटिंग्जमध्ये, स्थापित_अॅप्स शोधा आणि [] 3 ओळींमध्ये विभक्त करा. रिकाम्या मध्यभागी असलेल्या चार जागा वापरणे, 'फीड' किंवा आपल्या अ‍ॅपचे नाव जोडा. सेटिंग्जचा हा विभाग.

INSTALLED_APPS = [
    'feed',
]

आम्ही विसरण्यापूर्वी, जंगो कार्यरत आहे याची चाचणी घेऊया. पायथन मॅनेज.पी रन सर्व्हर 0.0.0.0:8000 कमांड वापरुन, आम्ही सर्व्हर चालवू शकतो आणि नंतर संगणकावर वेब ब्राउझरमध्ये नेव्हिगेट करू शकतो.

आता, पायथन कोड लिहिण्यास खोदूया. जांगोचे तीन मुख्य घटक आहेत, ते सर्व पूर्णपणे कोडद्वारे चालवतात. घटकांना मॉडेल, व्ह्यू आणि टेम्पलेट म्हणतात आणि वेबपृष्ठ वापरकर्त्यास वितरित करण्यापूर्वी प्रत्येक अनुक्रमे उच्च आणि खालच्या पातळीवर आहे.

मॉडेल हा कोड आहे जो पुनर्प्राप्त, क्रमवारी आणि प्रस्तुत करण्यासाठी डेटाबेसमध्ये माहिती संचयित करतो.

मॉडेल कसे प्रस्तुत केले जाते, हाताळले जाते आणि सुधारित केले जाते हे दृश्य ठरवते, जवळजवळ प्रत्येक दृश्य थेट मॉडेलचा वापर करेल.

टेम्पलेट हा एचटीएमएल कोड आहे ज्यात काही अतिरिक्त घंटा आणि टेम्पलेट भाषा म्हणतात. टेम्पलेट हे दृश्याने प्रस्तुत केले आहे जेथे ते पायथन कोड आणि मॉडेल आणि माहिती (यूएसयूएल स्ट्रिंग्स आणि पूर्णांक) सारख्या संदर्भात भरलेले आहे.

जांगोचे इतर घटक देखील आहेत, यासह परंतु इतकेच मर्यादित नाही:

सेटिंग्ज, जी आम्ही चर्चा केल्याप्रमाणे अ‍ॅप कॉन्फिगर करते.

URL, जे वेब अनुप्रयोगाच्या विशिष्ट भागांमध्ये प्रवेश मिळविण्यासाठी वापरकर्त्याने अनुसरण केलेले नमुने आहेत.

फॉर्म, जे सर्व्हरला पाठविलेली माहिती डेटाबेस तसेच वापरकर्त्यास कशी दिली जाते हे परिभाषित करते. सर्व्हरच्या बाजूला प्रक्रिया करण्याच्या माहितीचा हा पाया आहे आणि संगणक स्टोअर, विशेषत: मजकूर तार, संख्या आणि सत्य/खोटे बुलियन (सामान्यत: चेकबॉक्सेस) कोणत्याही प्रकारची माहिती स्वीकारू शकतात.

पायथन आणि एचटीएमएलमधील एचटीएमएल कोड आणि टेम्पलेट भाषा आणि टेम्पलेट भाषा असलेले टेम्पलेट्स, म्हणजे पायथन माहिती एचटीएमएल कोड म्हणून दिली जाऊ शकते जी कोणीही प्रवेश करू शकते आणि वेबसाइटवर प्रवेश करू शकते, जे वेबवर प्रवेश करण्यायोग्य आहे आणि सर्व्हरच्या जवळ नसलेल्या रिमोट डिव्हाइसवर विविध हेतूसाठी उपयुक्त आहे.

स्थिर फायली, ज्या सामान्यत: जावास्क्रिप्ट असतात आणि सर्व्हर सर्व्ह करते आणि टेम्पलेटशी जोडलेली आहे.

मीडिया फायली, ज्या सर्व्हर सर्व्ह करतात किंवा बाह्यरित्या होस्ट केल्या जातात किंवा होस्टिंगसाठी दुसर्‍या सर्व्हरवर (बादली) प्रक्रिया करण्यापूर्वी सर्व्हरवर लिहिलेले किंवा फक्त सर्व्हरवर लिहिलेले आहेत.

मिडलवेअर, जे कोडचे तुकडे आहे जे प्रत्येक दृश्यासारखे एकाच वेळी चालविले जाते आणि दृश्यात "समाविष्ट" मानले जाते.

संदर्भ प्रोसेसर, जे प्रत्येक दृश्याच्या संदर्भात प्रक्रिया करतात आणि अतिरिक्त संदर्भ जोडण्यासाठी वापरले जातात.

चाचण्या, जे वापरकर्त्याने दृश्य प्रस्तुत होण्यापूर्वी काही विशिष्ट आवश्यकता उत्तीर्ण करतात हे सत्यापित करते.

ग्राहक, जे वेबसॉकेट कसे हाताळतात आणि संप्रेषणास कसे प्रतिसाद देतात हे सांगणारे ग्राहक.

प्रशासन, जे मॉडेल्स नोंदणीसाठी वापरले जाते जेणेकरून ते जॅंगो अ‍ॅडमिन पृष्ठामध्ये तपशीलवार हाताळले जाऊ शकतात, जेथे डेटाबेस ग्राफिकल इंटरफेसद्वारे दिले जाऊ शकते.

भाजी किंवा कोशिंबीर बनवण्यासाठी उपयुक्त अशी एक वनस्पती, जी जॅंगो कोडचे असिंक्रोनस कार्ये परिभाषित करते, पुढील कार्य किंवा कोडच्या ओळीवर जाण्यापूर्वी त्वरित चालू होऊ शकते.

जांगोमध्ये इतर बरेच घटक असू शकतात, ज्यावर आपण येथे तपशीलवार चर्चा करू. जॅंगोला अधिक कार्यशील बनविण्याचे बरेच मार्ग आहेत, वेबसॉकेट्स जोडणे, जे वेगवान आहेत, सुव्यवस्थित संप्रेषण चॅनेल, भाजी किंवा कोशिंबीर बनवण्यासाठी उपयुक्त अशी एक वनस्पती, जी एसिन्क्रोनस कार्ये कार्यान्वित करते, आणि जॅंगो वाढविण्यासाठी सॉफ्टवेअरच्या इतर तुकड्यांचा, विशेषत: व्ह्यू फंक्शन्समध्ये, जेथे बहुतेक कोड अंमलात आणले जातात. दृश्य कार्ये महत्त्वाची आहेत कारण ते सहसा विशिष्ट URL पॅटर्न किंवा सर्व्हरच्या एका विभागाशी संबंधित असलेल्या कोडचा प्रत्येक तुकडा घोषित करतात.

प्रथम, आपण दृश्य कार्ये एक्सप्लोर करूया. दृश्यात वापरल्या जाणार्‍या कोड दर्शविणार्‍या आयातीसह पहा आणि नियमित फंक्शन परिभाषा किंवा वर्ग वापरून परिभाषित केले जातात. सर्वात सोपी दृश्ये फंक्शन डेफिनेशन डीईएफ द्वारे परिभाषित केली जातात आणि मूलभूत टेम्पलेटसह HTTPRESPONSE परत करा. "हॅलो वर्ल्ड" मजकूर परत करण्यासाठी मूलभूत दृश्य परिभाषित करून प्रारंभ करूया. लक्षात ठेवा की प्रत्येक वेळी आपण डीफ सारख्या विधानानंतर कोड जोडता, जर, तर, इत्यादी, आपण आपल्या फंक्शनवर अर्ज करू इच्छित असलेल्या प्रत्येक आधीच्या परिभाषासाठी आपल्याला 4 जागा जोडणे आवश्यक आहे. या प्रत्येकाचा लवकरच अर्थ काय आहे त्यात आपण प्रवेश करू.

आमच्या साइटच्या निर्देशिकेतून, नॅनो वापरुन फीड/व्ह्यू.पी फाइल संपादित करा आणि फाईलच्या शेवटी खालील ओळी जोडा.

from django.http import HttpResponse

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

ओपनिंग आणि क्लोजिंगसह दर्शविलेल्या मजकूर स्ट्रिंगसह जॅंगोचा httpresponse प्रतिसाद देतो. प्रत्येक वेळी जेव्हा आपण एखाद्या फंक्शन किंवा क्लासमध्ये माहिती पास करता, विनंती किंवा स्ट्रिंग सारख्या, आपल्याला कंस (, उघडणे आणि बंद करणे) वापरण्याची आवश्यकता असेल.

आम्हाला अद्याप आपले मत पाहण्याची गरज नाही. अर्थात, आम्ही सर्व्हरला सांगितले नाही की जिथे दृश्य अगदी आहे, आम्हाला अद्याप दृश्य प्रस्तुत केले पाहिजे अशा मार्गाची व्याख्या करणे आवश्यक आहे. अ‍ॅप/url.py मधील मूलभूत मार्ग परिभाषित करून प्रारंभ करूया आणि आम्ही नंतर पथ गटात जाऊ.

अ‍ॅप/url.py मध्ये, आम्ही नुकत्याच तयार केलेल्या दृश्यास प्रारंभानंतर आयात स्टेटमेन्टनंतर एक ओळ जोडा.

from feed import views as feed_views

आता, दृश्य नमुना परिभाषित करूया. पहा नमुन्यांमध्ये तीन घटक आहेत, पथ घटक, जे सर्व्हरमध्ये सर्व्हरमध्ये अस्तित्त्वात आहे असे सर्व्हरला सांगते (वापरकर्त्याने वेबपृष्ठामध्ये प्रवेश करण्यासाठी नेव्हिगेशन बारमध्ये टाइप केलेला URL पथ), दृश्य घटक जेथे दृश्य निर्दिष्ट केले आहे आणि दृश्यासाठी एक मैत्रीपूर्ण नाव आहे जेणेकरून टेम्पलेटसाठी अधिक आवश्यक आहे की ते बदलले जाऊ शकते आणि जर ते नाव बदलले असेल तर ते बदलले जाऊ शकते आणि जर ते नाव बदलले असेल तर ते बदलले जाऊ शकते आणि जर ते नाव बदलले असेल तर त्याचे नाव बदलले जाऊ शकते. अशा प्रकारे गोष्टी करणे आणि लवचिक बनणे अर्थपूर्ण आहे, कारण आपला कोडबेस एक सतत बदलणारा वातावरण असेल ज्यास लवचिकता आणि सुधारणेची आवश्यकता आहे जेणेकरून मौल्यवान आणि कार्य करणे सोपे आहे. आपले दृश्य कसे दिसेल ते येथे आहे, आपण हे urlpatters = [अ‍ॅप/urls.py चा विभाग जोडू शकता. वर वर्णन केलेल्या तीन घटकांसह आणि पथ नावाचे फंक्शनसह दृश्याचे नमुना परिभाषित केले गेले आहे. आपली URL नमुने एक यादी आहे, म्हणून त्यातील प्रत्येक वस्तू स्वल्पविरामाने संपवण्याची खात्री करा, कारण हे प्रत्येकास वेगळे करते. प्रत्येक आयटमने पुन्हा एकदा नवीन ओळीवर जावे, त्यापूर्वी पुन्हा चार स्पेससह, सेटिंग्ज.पीपी मधील अ‍ॅप प्रमाणेच. वेब सर्व्हरच्या रूट डिरेक्टरीवर चालणारे दृश्य तयार करण्यासाठी आम्ही रिक्त स्ट्रिंग फंक्शनसह दृश्याचा पहिला घटक परिभाषित करू. आपली url.py आता यासारखे दिसले पाहिजे:

from feed import views as feed_views

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

पूर्णपणे स्थिर असलेल्या जॅंगोसह वेबसाइट तयार करण्याचा हा आधार आहे. अधिक डायनॅमिक वेबसाइट तयार करण्यासाठी जिथे आम्ही प्रतिमा, व्हिडिओ, ऑडिओ आणि बरेच काही माहिती कॅशिंग सुरू करू शकतो, आम्हाला मॉडेल वापरण्याची आवश्यकता आहे, जे आम्ही पुढे एक्सप्लोर करू. आत्तासाठी, आमचा कोड तपासू आणि सर्व्हर चालवू. त्रुटींसाठी कोड तपासण्यासाठी, चालवा:

python manage.py check

जर तेथे काही त्रुटी संदेश असतील तर आपण आपल्या अ‍ॅपमध्ये केलेल्या बदलांचे काळजीपूर्वक पुनरावलोकन केले पाहिजे आणि बाहेरील किंवा कमतरता नसलेली जागा, अतिरिक्त वर्ण, एक अप्रमाणित स्ट्रिंग, कोणतेही टायपो, चुकून हटविलेले वर्ण किंवा इतर काहीही यासारख्या गोष्टी निश्चित करणे आवश्यक आहे का ते पहा. त्रुटी संदेशाद्वारे वाचणे (आपल्याकडे असल्यास), आपण तयार केलेल्या किंवा एका लाइन नंबरसह आपण तयार केलेल्या फाईलचा मार्ग पाहण्यास सक्षम असावे, म्हणून त्या फाईल आणि लाइनकडे पहा आणि आपण तेथे असलेले काहीही निश्चित करू शकता का ते पहा. आपण समस्या निश्चित केल्यास, वरील कमांड पुन्हा चालवा. जेव्हा आपले सॉफ्टवेअर चालविण्यास तयार असेल आणि कार्यरत असेल तेव्हा आपल्याला आउटपुट "सिस्टम चेक ओळखले नाही की कोणतीही समस्या" दिसेल. आता आपण जाण्यास तयार आहात. यासह सर्व्हर चालवा:

python manage.py runserver 0.0.0.0:8000

आता एक वेब ब्राउझर उघडा आणि http: // लोकलहॉस्ट: 8000 वर नेव्हिगेट करा. आपण आपल्या दृश्यात कंसात परत केलेला मजकूर आणि httpresponse फंक्शनच्या कोटमध्ये परत पहावा. हे फक्त एक मूलभूत उदाहरण आहे, परंतु जर आपण हे आतापर्यंत बनविले तर आपल्याला लिनक्स, बॅश, पायथन आणि जॅंगो कसे कार्य करते याची मूलभूत माहिती समजली. चला काही डेटाबेस मॉडेलिंगमध्ये सखोल खोदू आणि माहिती संचयित करण्यासाठी पायथन वर्गाची शक्ती एक्सप्लोर करू. मग, आम्ही जावास्क्रिप्ट आणि मशीन लर्निंगचा वापर करून आमची साइट पूर्णपणे वैशिष्ट्यीकृत, लवचिक आणि सुरक्षित बनवण्यापूर्वी आम्ही एचटीएमएल आणि सीएसएस वर एक पकड मिळवू.

आपल्या अ‍ॅपच्या मॉडेलमध्ये वर्ग संग्रहित केले जातात. नॅनो वापरुन, अ‍ॅप/मॉडेल्स.पी.पी. वर्ग परिभाषासह एक वर्ग परिभाषित केला जातो आणि एक सुपरक्लास उत्तीर्ण केला जातो ज्याचा तो या प्रकरणात मॉडेल.मॉडलमध्ये वारसा मिळतो. वर्गाचे नाव वर्ग परिभाषा नंतर येते आणि वर्गाच्या परिभाषा नंतर ए: (कोलन) वापरल्या जातात, वर्गाशी जोडलेले विशेषता आणि कार्य परिभाषा खाली दर्शविण्यापूर्वी. आमच्या वर्गाला तो पुनर्प्राप्त करण्यासाठी वापरू शकतो आणि तो अद्वितीय ठेवण्यासाठी आम्ही वापरू शकतो आणि काही माहिती संचयित करण्यासाठी त्यास मजकूर फील्ड देखील आवश्यक आहे. नंतर आम्ही टाइमस्टॅम्प, फायली, बुलियन (आमच्या कोडला मॉडेलसह काय करावे याबद्दल निर्णय घेण्यास मदत करू शकणार्‍या खर्‍या किंवा चुकीच्या परिभाषा जोडू शकतो आणि त्यास क्रमवारी लावण्यासाठी वापरला जाऊ शकतो), सर्व्हरमध्ये लॉग इन केलेल्या वापरकर्त्यास मॉडेल बांधण्यासाठी आणि बरेच काही. चला खाली कोड अनपॅक करूया:

from django.db import models # आमच्या वर्गाची व्याख्या करण्यासाठी वापरली जाणारी आयात आणि त्याचे गुणधर्म आहेत
class Post(models.Model): # आमच्या वर्गाची स्वतःची व्याख्या
    id = models.AutoField(primary_key=True) # आमच्या मॉडेलचा आयडी, स्वयंचलितपणे व्युत्पन्न केलेली की जी आम्हाला मॉडेलची चौकशी करू देते, ते अद्वितीय ठेवते आणि मॉडेल तयार झाल्यावर आम्हाला मॉडेलशी संवाद साधण्याची आवश्यकता असते.
    text = models.TextField(default='') # आमचे वर्ग स्टोअर्सचे गुणधर्म, या प्रकरणात, काही मजकूर, रिक्त स्ट्रिंगवर डीफॉल्ट.

आम्ही पूर्ण करण्यापूर्वी फाइल बंद करा आणि जतन करा.

आमचा अॅप विकसित होत असताना आम्ही हा वर्ग अद्यतनित करतो तेव्हा आम्ही इतर बरीच फील्ड्स आणि पर्याय शोधू, परंतु काही मजकूर पोस्ट करण्यासाठी अ‍ॅप तयार करण्याची ही मूलभूत आवश्यकता आहे. तथापि, हे मॉडेल एकटे कार्य करणार नाही. आधी वर्णन केल्याप्रमाणे, आम्हाला हे मॉडेल कार्य करण्यासाठी सानुकूल दृश्य आणि सानुकूल URL पॅटर्नची आवश्यकता असेल आणि आम्हाला टेम्पलेटसह एक फॉर्म देखील आवश्यक असेल. प्रथम फॉर्म एक्सप्लोर करूया.

फॉर्म परिभाषित करण्यासाठी, नॅनोसह अ‍ॅप/फॉर्म.पीपी संपादित करा आणि खालील ओळी जोडा. आम्हाला दोन आयात, आमचे फॉर्म वर्ग तसेच आम्ही तयार केलेले मॉडेल (फीड.मॉडल्स.पोस्ट), मॉडेलसारखेच एक वर्ग परिभाषा आणि मेटा नावाच्या सबक्लाससह एक फील्ड आवश्यक आहे जे फॉर्मशी संवाद साधणार्‍या मॉडेलची व्याख्या करेल. फॉर्ममध्ये आरंभिक कार्य देखील असू शकते जे विनंती, मॉडेल किंवा अन्यथा माहितीच्या आधारे ते सेट करते, आम्ही नंतर हे शोधून काढू.

मॉडेल फॉर्म इतके उपयुक्त आहेत कारण ते एक मॉडेल तयार करू शकतात किंवा मॉडेल देखील संपादित करू शकतात, म्हणून आम्ही त्या दोघांसाठी वापरू. खाली फॉर्ममध्ये एक परिभाषित करूया.

from django import forms
from feed.models import Post

class PostForm(forms.ModelForm):
    text = forms.CharField(widget=forms.Textarea)
    class Meta:
        model = Post
        fields = ('text',)

हे एक फॉर्म आणि मॉडेल कसे दिसते याची मूलभूत माहिती आहे. या मॉडेल फॉर्मचा वापर पोस्ट इन्स्टंट करण्यासाठी किंवा संपादित करण्यासाठी केला जाऊ शकतो, त्यात समाविष्ट केलेला मजकूर बदलत आहे. आम्ही हा फॉर्म पुढील दृश्यात एकत्रित करण्याकडे पाहू. प्रथम, आपण स्थलांतर करू आणि डेटाबेस स्थलांतर करू जेणेकरून आमचा कोड जेव्हा तो चालतो तेव्हा मॉडेलशी संवाद साधू शकेल. हे करण्यासाठी, खालील आज्ञा चालवा:

python manage.py makemigrations
python manage.py migrate

हे कार्यवाही करण्यास एक मिनिट घेईल, परंतु एकदा ते झाल्यावर ते आपल्याला सॉफ्टवेअरमधील दृश्ये, मिडलवेअर किंवा इतर कोठेही मॉडेलमध्ये प्रवेश करण्यास अनुमती देईल. आपण आमचे मॉडेल पाहू शकू असे एक दृश्य देऊन पुढे जाऊया. फीड/व्ह्यू.पीपी संपादित करा आणि नमूद केल्याप्रमाणे खालील कोड जोडा. आपल्याला # चिन्हानंतर काहीही जोडण्याची आवश्यकता नाही, तो कोड अशा टिप्पण्या आहेत ज्या कोडबद्दल माहिती दर्शविण्यासाठी वापरल्या जातात. आम्ही आमचे मॉडेल दृश्यांमध्ये आयात करून आणि त्या संदर्भात जोडून प्रारंभ करू जिथे आम्ही ते प्रदर्शनासाठी सूची म्हणून टेम्पलेटमध्ये देऊ शकतो. पुढे, आम्ही एक टेम्पलेट जोडू जिथे आम्ही मॉडेलवर आधारित नवीन ऑब्जेक्ट तयार करण्यासाठी आणि सर्व्हरवर पोस्ट करण्यासाठी बटणासह फॉर्म आणि मॉडेल प्रस्तुत करू. हे गुंतागुंतीचे वाटते, म्हणून आपण फक्त चरण -चरण घेऊया. आम्ही दृश्य पूर्ण करण्यापूर्वी, एक टेम्पलेट तयार करूया जे फक्त मॉडेलला प्रस्तुत करते आणि शेलमध्ये नवीन पोस्ट तयार करून आम्ही ते पाहू शकतो हे सुनिश्चित करा. ते दृश्य कसे दिसावे ते येथे आहे:

    posts = Post.objects.all() # आतापर्यंत डेटाबेसमधील सर्व पोस्टची चौकशी करा

आम्ही तळाशी येईपर्यंत हे सर्व अगदी सोपे दिसते. रेन्डर, मागील उदाहरणाप्रमाणे एचटीटीपी प्रतिसादाऐवजी फंक्शनद्वारे परत केलेले मूल्य, नेहमीच त्याचे प्रथम इनपुट म्हणून विनंती घेते, संदर्भ स्वीकारते (या प्रकरणात डेटाबेसमधील पोस्ट्स), जे आता टेम्पलेटमध्ये प्रस्तुत केले जाऊ शकते आणि फंक्शनमध्ये परिभाषित टेम्पलेट परत करते. टेम्पलेट एक एचटीएमएल दस्तऐवज असणार आहे ज्यात जिन्जा 2 नावाच्या भाषेच्या थोड्याशा भाषेत आहे, जे पायथनची माहिती एचटीएमएलमध्ये देते.

टेम्पलेट तयार करणे सुरू करण्यासाठी, फीडमध्ये दोन निर्देशिका बनवा.

mkdir feed/templates
mkdir feed/templates/feed

पुढे, वरील निर्देशिकेत एक टेम्पलेट संपादित करा, फीड/टेम्पलेट्स/फीड आणि या उदाहरणासाठी कोड जोडा. या उदाहरणासाठी टेम्पलेट पाहूया.

हे एक अगदी सोपे टेम्पलेट आहे. हे एचटीएमएल टॅग उघडणे आणि बंद करणे, दस्तऐवज प्रकार टॅग, आख्यायिका शीर्षकासह एक बॉडी टॅग, एक ब्रेक टॅग, जो स्क्रीनवर एक छोटी ओळ जोडते आणि टेम्पलेटमधील परिच्छेद म्हणून पोस्टच्या सूचीतील प्रत्येक पोस्टला प्रस्तुत करते. पोस्ट प्रस्तुत करण्यासाठी हे सर्व काही आहे, परंतु अद्याप डेटाबेसमध्ये काहीही नाही. चला शेलसह काही तयार करूया. आम्ही मॅनेज.पीसह शेल चालवू शकतो

python manage.py shell

आता, आमचे पोस्ट मॉडेल आयात करूया

from feed.models import Post

पुढे, आम्ही स्ट्रिंगसह एक सोपी पोस्ट तयार करू आणि शेलमधून बाहेर पडा. जोपर्यंत तो वैध मजकूर आहे तोपर्यंत स्ट्रिंग काहीही असू शकते.

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

शेवटी, आम्हाला आमच्या फीडमध्ये एक URL नमुना जोडण्याची आवश्यकता आहे. कारण आमचा फीड अॅप एकाधिक URL वापरेल आणि आम्हाला फाइल आकार लहान ठेवायचा आहे, तर आमच्या फीड अ‍ॅपमध्ये एक स्थानिक url.py तयार करूया जे असे दिसते:

from django.urls import path
from . import views

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

आम्हाला बेस अ‍ॅपमध्ये url.py संपादित करणे देखील आवश्यक आहे, आम्ही ज्याला कॉल करण्याचा निर्णय घेतला, ही आम्ही तयार केलेली ही पहिली निर्देशिका होती. अ‍ॅप/अ‍ॅप.पीपी संपादित करा आणि URL नमुन्यांमध्ये खालील जोडा

from django.urls import include # शीर्षस्थानी
    # ... मागील कोड येथे

आता, जेव्हा आम्ही पायथन मॅनेज.पी रन सर्व्हरसह सर्व्हर चालवितो, तेव्हा आम्ही तयार केलेले पृष्ठ पाहू कारण आमच्याकडे डेटाबेसमधील आयटमसह मॉडेल, दृश्य आणि टेम्पलेट तसेच यूआरएल नमुना आहे. पुढे, आम्ही तयार केलेला फॉर्म अंमलात आणू आणि आमची स्वतःची पोस्ट तयार करण्यास प्रारंभ करूया. परंतु आम्ही जास्त कोड लिहिण्यापूर्वी, आम्ही आधी लिहिलेली स्क्रिप्ट वापरुन बॅकअप घेऊया, बॅकअप. ही स्क्रिप्ट शेलमध्ये चालवा, काही क्षण थांबा आणि सर्व कोड आमच्या गिट रेपॉजिटरीमध्ये बॅक अप घेतील.

backup

फॉर्मची अंमलबजावणी करणे तुलनेने सोपे आहे. आम्ही आमचा फॉर्म आयात करू, दृश्यात पोस्ट विनंती हँडलर जोडू आणि त्याच दृश्याकडे पुनर्निर्देशित करण्यापूर्वी डेटाबेसमध्ये पोस्ट जतन करू. आम्ही आधीपासूनच आयात केलेले पुनर्निर्देशित फंक्शन आणि दृश्य पद्धतीसाठी URL मिळविण्यासाठी रिव्हर्स नावाचे दुसरे फंक्शन वापरू शकतो. आम्ही यास 'फीड: फीड' या स्ट्रिंगसह क्वेरी करू कारण समाविष्ट केलेल्या नमुन्याचे नेमस्पेस फीड आहे आणि दृश्यास फीड देखील म्हणतात.

    posts = Post.objects.all() # आतापर्यंत डेटाबेसमधील सर्व पोस्टची चौकशी करा
    if request.method == 'POST': # पोस्ट विनंती हाताळा
        form = PostForm(request.POST) # फॉर्मचे एक उदाहरण तयार करा आणि त्यात डेटा जतन करा
        if form.is_valid(): # फॉर्म सत्यापित करा
            form.save() # नवीन ऑब्जेक्ट जतन करा
        return redirect(reverse('feed:feed')) # GET विनंतीसह त्याच URL वर पुनर्निर्देशित करा
        'form': PostForm(), # संदर्भात फॉर्म पास करणे सुनिश्चित करा जेणेकरून आम्ही ते प्रस्तुत करू.

आता, आम्हाला नवीन फॉर्मसाठी खाते देण्यासाठी टेम्पलेट अद्यतनित करण्याची आवश्यकता आहे. आम्ही हे वापरुन हे करू शकतो

एचटीएमएल मध्ये टॅग करा आणि सबमिट बटणासह एचटीएमएल टेम्पलेटमध्ये फॉर्म प्रस्तुत करणे. आम्हाला सीएसआरएफ टोकन देखील आवश्यक आहे, एक टोकन जे बाह्य साइटला प्रथम पृष्ठ लोड न करता फॉर्मवर पोस्ट करण्यापासून प्रतिबंधित करते.

चला हे खंडित करूया. येथे एक नवीन फॉर्म वर्ग, एक टोकन, स्वतः फॉर्म आणि सबमिट बटण आहे. खूप सोपे आहे, परंतु जेव्हा आपण त्याकडे लक्ष देतो तेव्हा कदाचित ते अधिक चांगले दिसू शकते. हे कार्य करते, आम्ही फॉर्मसह नवीन पोस्ट पोस्ट करू शकतो आणि त्या आता डेटाबेसमध्ये जतन केल्या आहेत. येथे काही गोष्टी चालू आहेत. आम्ही दस्तऐवज एचटीएमएल दस्तऐवज आहे हे घोषित करण्यासाठी एचटीएमएल टॅग वापरतो, फॉर्मसाठी टोकन प्रस्तुत करण्यासाठी आम्ही टेम्पलेट टॅग ({ %… %}) वापरतो आणि फॉर्म प्रस्तुत करण्यासाठी. आमच्याकडे ब्लॉक टॅग आणि टेम्पलेट टॅग वापरुन मजकूर प्रस्तुत करण्यासाठी एक लूप देखील आहे. ब्लॉक टॅग खरोखर महत्वाचे आहेत कारण आम्ही टेम्पलेटचे विभाग त्यांच्यासह कसे प्रस्तुत केले जातात हे आम्ही परिभाषित करू शकतो आणि टेम्पलेट टॅग आमच्या कोडमध्ये व्हेरिएबल्स कसे ठेवतात याचा आधार आहे.

आता आम्हाला आपला अॅप अधिक चांगले दिसण्याची आवश्यकता आहे, कारण आता ते खरोखर मूलभूत दिसत आहे. आम्ही हे सीएसएस वापरुन, इनलाइन किंवा दस्तऐवजातील प्रत्येक ऑब्जेक्टशी जोडलेल्या वर्गांमध्ये करू शकतो. सीएसएस खरोखर छान आहे कारण ते पृष्ठावरील प्रत्येक गोष्ट ते कसे दिसते हे सांगते आणि ते खरोखर चांगले दिसू शकते. अशी काही लायब्ररी आहेत जी हे करू शकतात, परंतु माझी वैयक्तिक जा बूटस्ट्रॅप आहे.

बूटस्ट्रॅप त्यांच्या वेबसाइटवरून डाउनलोड केले जाऊ शकते,getbootstrap.com/? एकदा तेथे एकदा, इंस्टॉलेशन डॉक्स वाचण्यासाठी बटण दाबा आणि सीडीएन सेक्शनद्वारे समाविष्ट करा कोड कॉपी करा. आपल्याला आपल्या एचटीएमएल दस्तऐवजाच्या शीर्षस्थानी, हेड नावाच्या टॅगमध्ये या कोडची आवश्यकता असेल. तसेच, पुढे जा आणि बेस टेम्पलेट तयार करू जेणेकरून आम्हाला प्रत्येक टेम्पलेटमध्ये हे दुवे पुन्हा तयार करण्याची आवश्यकता नाही.

एमकेडीआयआर टेम्पलेट्ससह टेम्पलेट्स नावाची एक नवीन निर्देशिका बनवा आणि नंतर टेम्पलेट्स/बेस एचटीएमएल संपादित करा.

हे यासारखे दिसले पाहिजे:

सीएसएस आणि जावास्क्रिप्ट, .css आणि .js फायली कॉपी करण्याचे सुनिश्चित करा, कारण भविष्यात आमची साइट अधिक कार्यशील करण्यासाठी आम्हाला जावास्क्रिप्टची आवश्यकता असेल.

आता, बॅश शेलवर परत जाऊ आणि द्रुत कमांड चालवू. लक्षात ठेवा, आपल्याला कधीही आभासी वातावरणात प्रवेश करण्याची आवश्यकता असल्यास, स्त्रोत VENV/BIN/सक्रिय करा. हे आपल्याला पायथन पॅकेजेस स्थानिक पातळीवर अशा प्रकारे स्थापित करू देईल ज्यामुळे jjango त्यांना प्रवेश करू शकेल. जॅंगो बूटस्ट्रॅप वर्गांद्वारे व्युत्पन्न केलेले आमचे फॉर्म देण्यासाठी आम्ही क्रिस्पी फॉर्म नावाचे पायथन पॅकेज वापरू. आम्ही खालील कमांडसह हे डाउनलोड करू शकतो

pip install django-crispy-forms

एकदा हे स्थापित झाल्यानंतर ते सेटिंग्जमध्ये जोडा.

    # … मागील कोड येथे

आता, आमच्या फीड टेम्पलेटमध्ये, आम्ही काही गोष्टी काढू शकतो. चला दस्तऐवजाची सुरूवात आणि शेवट काढू आणि विस्तार आणि ब्लॉक परिभाषा वापरुन आमच्या बेस टेम्पलेटमधून वारशासह त्यास पुनर्स्थित करूया. तसेच, आम्ही फॉर्ममध्ये लोडसह टेम्पलेट फिल्टर आयात आणि टेम्पलेट फिल्टर जोडू. शेवटी, फॉर्मच्या बटणावर बूटस्ट्रॅप वर्ग जोडूया जेणेकरून ते अधिक बटणासारखे दिसू शकेल. हे यासारखे दिसले पाहिजे:

सुंदर! तो आधीपासूनच थोडासा कोड आहे. पुढे, आम्ही याची चाचणी घ्यावी आणि हे सुनिश्चित केले पाहिजे की आम्ही सर्व काही छान दिसत आहे आणि सर्व काही व्यवस्थित कार्यरत आहे याची खात्री देखील करा. मागील सूचनांनुसार सर्व्हर चालवा आणि साइट ठीक दिसते आणि कार्य करते हे सुनिश्चित करा. छान काम! आपण पुढील चरणात जाण्यास तयार आहात, ज्यामध्ये आम्ही समान URL, फॉर्म, दृश्ये आणि टेम्पलेट्स वापरुन वापरकर्ता लॉगिन कार्यक्षमता जोडू. बेस टेम्पलेट महत्त्वपूर्ण आहे आणि आम्ही त्यात सुधारणा करणे आणि आवश्यकतेनुसार बदल करणे सुरू ठेवू, परंतु आता वापरकर्त्यांना वापरकर्तानाव आणि पासकोडसह लॉग इन करण्यास सक्षम करून, आमच्या साइटला अधिक सुरक्षित ठेवण्यावर लक्ष केंद्रित करूया आणि अखेरीस आणखी एक महत्त्वाची माहिती जी आपला अ‍ॅप सुरक्षित ठेवण्यास मदत करेल आणि केवळ आपल्या स्वतःच्या खात्यात प्रवेश करण्यायोग्य.

हे करण्यासाठी, आम्हाला जंगोमध्ये तयार केलेले वापरकर्ता मॉडेल वापरण्याची आवश्यकता आहे. वापरकर्ता मॉडेल एक डेटाबेस मॉडेल आहे, आमच्या पोस्ट प्रमाणे, वापरकर्त्यास वेबसाइटवर लॉग इन करण्यासाठी प्रस्तुत केले जाऊ शकते. भविष्यात, आम्ही साइट इंटरनेटवर तैनात करण्यापूर्वी, आम्ही हे मॉडेल त्यास इतर मॉडेल्ससह वाढवू आणि फिशिंगला प्रतिरोधक असलेल्या लॉगिनसाठी अतिरिक्त सुरक्षा उपाय तयार करू. आम्ही जंगो प्रदान केलेल्या काही लॉगिन फॉर्ममध्ये अंगभूत वापरून प्रारंभ करू. प्रथम, आपण एक नवीन अ‍ॅप तयार करूया जे आम्ही मूलभूत लॉगिन पृष्ठासाठी टेम्पलेट्स आणि दृश्ये प्रस्तुत करू. आम्ही पिनकोड, चेहर्यावरील ओळख, जवळील फील्ड कम्युनिकेशन, बाह्य डिव्हाइस, मल्टी फॅक्टर प्रमाणीकरण आणि फिंगरप्रिंट ओळख यासह अॅप सुरक्षित करण्यासाठी सतत लॉगिन आव्हानांचे प्रतिनिधित्व करण्यासाठी इतर अ‍ॅप्स देखील तयार करू.

आम्ही अ‍ॅप सुरू करण्याबद्दल आधीच बोललो आहोत. आमच्या निर्देशिकेतून, आभासी वातावरणाच्या आत, पास मॅनेज.पी हे युक्तिवाद

python manage.py startapp users

आता आमच्याकडे नवीन अॅपसाठी निर्देशिका असावी. वापरकर्त्याच्या लॉगिनशी संबंधित त्या निर्देशिकेत एक दृश्य तयार करुन प्रारंभ करूया. जॅंगोने वापरकर्त्याच्या लॉगिनसाठी दृश्ये तयार केली आहेत, परंतु हे आमच्यासाठी योग्य होणार नाहीत कारण आम्हाला सानुकूल दृश्याची आवश्यकता आहे, जे शक्यतो परिभाषासह केले जाते.

या दृश्यात, आम्ही पोस्ट विनंतीची तपासणी करून प्रारंभ करू, विनंती पास करून. जंगोमधून आयात केलेल्या लॉगिनफॉर्मला पास करा, वापरकर्ता खाते प्रमाणित करा आणि आमच्या फीड अ‍ॅपवर पुनर्निर्देशित करण्यापूर्वी वापरकर्त्यास लॉग इन करू.

वापरकर्ते/व्ह्यूएस.पी मध्ये, खालील कोड जोडा

        username = request.POST['username'] # पोस्ट विनंतीवरून वापरकर्तानाव आणि संकेतशब्द मिळवा
        password = request.POST['password'] # वापरकर्त्यास प्रमाणीकृत करा

मूलभूत लॉगिन दृश्यासाठी आपल्याला हे सर्व आवश्यक आहे. आता, बेस टेम्पलेट वाढवून दृश्यासाठी एक फॉर्म तयार करूया. आम्ही वापरकर्त्यांच्या फोल्डरमधील टेम्पलेट्ससाठी नवीन निर्देशिका तयार करुन प्रारंभ करू.

mkdir users/templates
mkdir users/templates/users

आता, आम्ही वापरकर्ते/टेम्पलेट्स/वापरकर्ते/लॉगिन एचटीएमएल संपादित करण्यास सक्षम असावे. आम्ही तिथे असताना, आम्ही वापरकर्त्यास साइन अप करण्याची परवानगी देण्यासाठी एक टेम्पलेट तयार करू.

nano users/templates/users/login.html

आता, टेम्पलेटमध्ये,

हे लॉगिन टेम्पलेटची मूलभूत माहिती आहे. हे खरोखर संरचनेच्या इतर टेम्पलेटप्रमाणेच आहे, परंतु जेव्हा ते प्रस्तुत केले जाते तेव्हा ते थोडेसे वेगळे दिसते. रजिस्टर. एचटीएमएल नावाचे आणखी एक समान टेम्पलेट तयार करण्यासाठी आम्ही हा कोड कॉपी करू शकतो, जिथे आम्ही शब्द बदलू आणि आम्ही तयार केलेला नवीन फॉर्म वापरू. प्रथम टेम्पलेट बनवूया. वापरकर्ते/टेम्पलेट्स/वापरकर्ते/नोंदणी. एचटीएमएल संपादित करा आणि खालील कोड जोडा:

आता, आमच्या वापरकर्त्याच्या नोंदणीसाठी एक फॉर्म तयार करूया आणि आम्ही मॉडेलसह आमचे वापरकर्ता लॉगिन श्रेणीसुधारित करण्यापूर्वी दृश्यांकडे परत जाऊया. आम्ही हा फॉर्म प्रारंभ करण्यासाठी मूलभूत बनवू, परंतु भविष्यात करार आणि कॅप्चा यासारख्या अधिक तपशील आणि सुरक्षा वैशिष्ट्यांचा समावेश करू. नॅनो वापरकर्त्यांसह/फॉर्म.पीसह फॉर्म संपादित करा आणि खालील कोड जोडा.

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

तर आमच्याकडे येथे आणखी एक फॉर्म आहे, जो अगदी सहजपणे कार्य करतो. हा वापरकर्तानाव, ईमेल आणि संकेतशब्द तसेच पुष्टीकरण संकेतशब्द फील्डसह वापरकर्ता नोंदणी फॉर्म आहे. लक्षात घ्या की हा फॉर्म नियमित फॉर्म वाढवत नाही. फॉरम क्लास, हा एक मॉडेल फॉर्म आहे ज्याचा अर्थ असा आहे की त्यात मेटा आहे. एका फील्डची व्याख्या फक्त समान केली गेली आहे आणि वर्ग मेटा मॉडेलची व्याख्या करतो जो फॉर्मच्या उर्वरित माहितीशी संबंधित आहे जो फॉर्मशी लिहिला जाईल. यापैकी बहुतेक आधीपासूनच जंगोच्या युजरक्रिएशनफॉर्ममध्ये अंगभूत आहे, म्हणून आम्ही ते वर्गासाठी आधार म्हणून (कंसात पास) वापरू.

पुढे, आम्ही वापरकर्त्याची नोंदणी करण्याच्या दृश्याचे परीक्षण करू, आता आमच्याकडे एक फॉर्म आणि टेम्पलेट आहे. हे नवीन पोस्ट दृश्य प्रमाणेच एक मोडेलफॉर्म आहे. वापरकर्ते/व्ह्यूएस.पीई संपादित करा आणि खालील कोड जोडा:

# … आयात

आम्हाला वापरकर्त्याने नोंदणीकृत करणे आवश्यक आहे, परंतु आमच्याकडे अधिक माहिती असणे आवश्यक आहे. आम्हाला वापरकर्त्याने नोंदणी केल्याचा वेळ, साइटवर किती वेळ होता, त्यांच्याबद्दल काही माहिती, चरित्र, टाइमझोन इ. सारख्या काही माहिती देखील जाणून घ्यायची आहे, तसेच प्रत्येक वापरकर्त्यास वापरकर्ता मॉडेल आणि विशेषता पोस्टसाठी आम्हाला आमचे फीड मॉडेल, पोस्ट, पोस्ट करणे आवश्यक आहे. ते करण्यासाठी, आम्ही दोन्ही अ‍ॅप्समध्ये मॉडेल्स.पीपी अद्यतनित करू. चला फीड मॉडेल संपादित करून प्रारंभ करूया. हे आता असे दिसले पाहिजे:

from django.db import models # … आयात
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # या ओळीत जोडा

फाईलमध्ये जोडलेल्या दुसर्‍या ओळीकडे लक्ष द्या. ही एक परदेशी की आहे, जी प्रत्येक पोस्टला प्रत्येक पोस्टच्या एका वापरकर्त्यास श्रेय देईल, जेणेकरून आम्ही हे सुनिश्चित करू शकतो की आम्ही वापरकर्ता-प्रति-वापरकर्त्याच्या आधारावर पोस्ट जतन करतो आणि वापरकर्त्यास श्रेय न देता कोणतेही पोस्ट तयार केले जाऊ शकत नाही. आम्ही या परदेशी की हे प्रतिनिधित्व करीत असलेल्या वर्गासह परिभाषित करतो, वापरकर्त्यांसह पोस्ट हटविली गेली आहेत हे सुनिश्चित करण्यासाठी एक हटवा युक्तिवाद, आवश्यक असल्यास वापरकर्त्यास काढू शकतो हे सुनिश्चित करण्यासाठी आणि आम्ही आधीपासून तयार केलेल्या पोस्टवरील वापरकर्त्याच्या अभावासाठी सामावून घेण्यासाठी आणि वापरकर्त्याने तयार केलेल्या पोस्ट ऑब्जेक्ट्सचा संदर्भ घेण्यासाठी आम्ही वापरू शकतो. हे संबंधित नाव, पोस्टचे लेखक, पोस्टचे लेखक, आम्हाला पोस्ट स्वतः पोस्ट केलेले वापरकर्ता देते. आम्ही आता वापरकर्त्यास वापरकर्ता.पोस्ट.आणि (), किंवा लेखक.पोस्ट.आणि () चालवून तयार केलेली पोस्ट मिळवू शकतो.

आता, आमच्या लॉगिनला अधिक लवचिक बनवूया. आम्ही साइटवर लॉगिनची परवानगी किती वेळा मर्यादित करू, हे अगदी सोपे आहे. आम्ही आमचा अ‍ॅप विकसित करत असताना प्रत्येक वापरकर्त्याबद्दल काही माहिती देखील संचयित करण्यास प्रारंभ करूया. वापरकर्ते/मॉडेल्स.पीपी संपादित करीत आहे, खालील कोड जोडा.

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

लक्षात घ्या की हे मॉडेल पोस्ट मॉडेलसारखेच आहे. आमच्याकडे अतिरिक्त आयात, टाइमझोन आहे, जे आम्हाला डेटटाइम फील्डवर डीफॉल्ट सेट करण्यास अनुमती देईल आणि आमच्याकडे पोस्टसारखे एक कॅरेक्टरफिल्ड आणि टेक्स्टफिल्ड देखील आहे. या सर्व टाइमस्टॅम्पचा वापर केल्याने आम्हाला साइट सुरक्षित करण्यात आणि त्याचा वापर समजण्यास मदत होते आणि मजकूर फील्ड आम्हाला वेबसाइटवर प्रत्येक वापरकर्त्याबद्दल किंवा लेखकाबद्दल माहिती देऊ देते. ओनटोनफिल्ड हा एकमेव किरकोळ विचार असावा, तो फोरगिन्की सारखाच वर्तन करतो परंतु त्यानंतरच्या मॉडेलमध्ये फक्त एकच आहे. अशाप्रकारे, वापरकर्त्याकडे फक्त एक प्रोफाइल आहे, तर त्यांच्याकडे बर्‍याच पोस्ट असू शकतात.

आता, आमचे लॉगिन सुधारू आणि प्रोफाइलसाठी खात्यात दृश्ये नोंदणी करूया. प्रथम, वापरकर्ते/व्ह्यूएस.पीई संपादित करा आणि रजिस्टर दृश्यावर लक्ष केंद्रित करा:

# … आयात
            Profile.objects.create(user=user) # वापरकर्त्यासाठी प्रोफाइल तयार करण्यासाठी ही ओळ जोडण्याची खात्री करा

हे कोणतीही माहिती न भरता वापरकर्त्यासाठी फक्त एक प्रोफाइल तयार करते. आता, आम्ही खात्री करू इच्छितो की वापरकर्ता खाते बर्‍याचदा लॉग इन केले जाऊ शकत नाही, किंवा कमीतकमी संकेतशब्द बर्‍याचदा प्रयत्न केला जाऊ शकत नाही, म्हणून लॉगिन दृश्य अद्यतनित करूया.

# … आयात
        if user and user.profile.can_login < timezone.now(): # लक्षात ठेवा की आता वापरकर्ता लॉग इन करू शकतो की नाही हे आम्ही तपासतो
        else: # जर लॉगिन यशस्वी झाले नाही,
            user = User.objects.filter(username=username).first() # हा एक भाग आहे जिथे आम्ही वापरकर्त्यांना प्रोफाइल अद्यतनित करतो
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # म्हणून ते काही सेकंदात पुन्हा लॉग इन करू शकत नाहीत

हे सुरक्षिततेचे मूलभूत मूलभूत आहे. साइट प्रत्येक संभाव्य संकेतशब्द संयोजनाचा प्रयत्न करीत आहे किंवा एकाच वेळी त्यापैकी काही देखील असुरक्षित नसल्याचे सुनिश्चित करा. हे सामान्य वापरकर्त्यास निराश होणार नाही ज्याला त्यांचे पासकोड माहित आहे आणि काही डिव्हाइसवर फक्त लॉग इन केले आहे, परंतु हे असंख्य फिशिंग रोबोट्स अ‍ॅपच्या बाहेर ठेवेल. लक्षात घ्या की आम्ही व्हेरिएबल, कॅन_लॉगिनसह एक आयएफ स्टेटमेंट जोडले आहे, जो भूतकाळातील वेळ असावा आणि त्याच वापरकर्तानावाचा वापर करून प्रत्येक अयशस्वी लॉगिनसह अद्यतनित करा. अशाप्रकारे, एक दुर्भावनायुक्त वापरकर्ता द्रुतगतीने कोठेही संकेतशब्द अंदाज लावण्यास सक्षम नाही. डेटटाइम.टाइमडेल्टा () मधील सेकंदांची संख्या देखील अद्यतनित केली जाऊ शकते आणि अधिक सेकंदांसह वेबसाइट अधिक लवचिक असेल परंतु थोडी कमी वापरण्यायोग्य असेल. मी प्रारंभ करण्यासाठी 15 ची शिफारस करतो.

लक्षात ठेवा, आम्ही आपले कार्य वाचविण्यासाठी एक बॅकअप स्क्रिप्ट तयार केली आहे, म्हणून आपण सर्व काही जतन केले आहे हे सुनिश्चित करण्यासाठी पुढे जाऊ आणि आपल्याकडे जे काही आहे ते बॅक अप घेऊया. आज्ञा चालवा:

sudo backup

पुन्हा एकदा, हे आतापर्यंत आपले कार्य जतन करेल. आपले कार्य जतन करण्यासाठी मी वारंवार बॅकअप चालवण्याची शिफारस करतो आणि आपणास कदाचित बॅकअप जॉब स्वयंचलितपणे चालवायचे असेल. आपण क्रोन नावाच्या युनिक्स युटिलिटीचा वापर करून हे करू शकता. ही उपयुक्तता सक्रिय करण्यासाठी, खालील कमांड चालवा आणि आपला संकेतशब्द प्रविष्ट करा:

sudo crontab -e

आपण आधीपासूनच नॅनोसाठी पर्याय 1 निवडलेला नसल्यास, मजकूर संपादक आपण आधीपासून परिचित असावे आणि एरो की वापरुन फाईलच्या तळाशी स्क्रोल करा. खालील ओळ जोडा:

0 * * * * sudo backup

क्रोन फॉरमॅट मिनिट, तास, महिन्याचा दिवस, महिना, आठवड्याचा दिवस वापरतो, जेथे एक * किंवा एक आज्ञा कधी चालवायची हे प्रतिनिधित्व करते. मिनिटासाठी 0 आणि * उर्वरित पर्यायांसाठी, आम्ही मिनिटाच्या सुरूवातीस प्रत्येक तासाच्या पहिल्या मिनिटाला कमांड चालवू शकतो. हे आम्हाला स्वयंचलितपणे कोडचा बॅक अप घेऊ देते. सूडोसह कार्यान्वित केल्यावर क्रोनच्या सर्व नोकर्‍या रूट म्हणून चालवतात, म्हणून आम्हाला दर तासाला संकेतशब्द टाइप करण्याची आवश्यकता नाही.

संकेतशब्द न वापरता आमच्या कोडचा बॅक अप घेणे सुलभ करण्यासाठी, आमच्या बॅकअप आदेशासाठी संकेतशब्द अक्षम करूया. आम्ही खालील कमांड कार्यान्वित करून आणि संकेतशब्द प्रविष्ट करून हे करू:

sudo visudo

आता, फाईलच्या तळाशी स्क्रोल करू आणि दुसरी ओळ जोडा:

ALL ALL=NOPASSWD: /bin/backup

हे आम्हाला संकेतशब्दशिवाय कोणत्याही वापरकर्त्याच्या रूपात "बॅकअप" कमांड चालवू देते. याचे स्वरूप सोपे आहे, फक्त "सर्व = nopasswd:/bin/" या ओळीचा उपसर्ग आहे आणि कमांडसह समाप्त करा, उदाहरणार्थ/बिन/बॅकअप, जे/usr/bin/मध्ये अस्तित्वात आहे.

आता, ईमेलसह कार्य करण्यास प्रारंभ करूया. वेबसाइट्ससाठी ईमेल खरोखर महत्त्वपूर्ण आहे, कारण वेबसाइट अधिक सुरक्षित ठेवण्याचा हा एक मार्ग आहे, वापरकर्ते वास्तविक लोक आहेत आणि ग्राहकांना बाजारपेठेतील उत्पादने किंवा सेवा देखील आहेत. बरेच लोक जे वारंवार इंटरनेट करतात ते दररोज त्यांचे ईमेल तपासतात आणि त्यांना स्वारस्य असलेल्या उत्पादने आणि सेवांबद्दल सर्व प्रकारचे विपणन ईमेल प्राप्त करतात. जेव्हा जॅंगो वेबसाइटवर ईमेल सक्षम करण्याची वेळ येते तेव्हा काही पर्याय असतात आणि आपल्यासाठी जे काही चांगले कार्य करते ते निवडण्याचे आपले स्वागत आहे.

प्रथम, आपण ईमेल सेवेसाठी पैसे देऊ शकता जे आपल्याला आपल्या डोमेनवरून ईमेल पाठविण्यास सक्षम करेल आणि कमीतकमी कोड आवश्यक आहे. या ऑफर करणार्‍या बर्‍याच सेवा आहेत, जसे की Google वर्कस्पेस, सेंडिनब्ल्यू, मेलगन आणि बरेच काही.

अन्यथा, आपण स्क्रॅचपासून आपल्या सर्व्हरमध्ये आपली स्वतःची ईमेल सेवा तयार करणे चांगले आहे. मी या पर्यायाची शिफारस करतो, जरी तो अधिक कोड असला तरी आणि विशेष होस्टिंगची आवश्यकता असू शकते. आपण बहुधा आपल्या घराच्या संगणकावरून मेल सर्व्हर सुरू करण्यास सक्षम राहणार नाही, म्हणून आपण क्लाऊडमध्ये सर्व्हर सुरू करण्यापूर्वी आणि आत आमचा स्वतःचा मेल सर्व्हर तयार करण्यापूर्वी ईमेल पाठविण्यासाठी कॉन्फिगरेशन आणि कोडची तपासणी करूया.

प्रथम, खालील कमांडसह सेटिंग्ज.पीपी संपादित करा:

nano app/settings.py

जेथे अ‍ॅप आपण स्टार्टअॅपसह तयार केलेल्या अ‍ॅपचे नाव आहे.

खालील ओळी जोडा:

SITE_NAME = 'Django App'

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_ADDRESS = username@server.com'
EMAIL_HOST_USER = 'username'
EMAIL_HOST_PASSWORD = config['EMAIL_HOST_PASSWORD']
DEFAULT_FROM_EMAIL = '{} <{}>'.format(SITE_NAME, EMAIL_HOST_USER)

जेव्हा आपण आपला अ‍ॅप उपयोजित करण्यास तयार असाल तेव्हा हे बदलण्याची खात्री करा, आम्ही नंतर पुन्हा पुन्हा भेट देऊ. ईमेल_ड्रेस सेटिंग आपण पाठवू इच्छित ईमेल असावे आणि सर्व्हरसाठी व्युत्पन्न केलेल्या संकेतशब्दावर संकेतशब्द (ईमेल_होस्ट_पॅसवर्ड) सेट केला जावा. सेटिंग्ज.पीपी मधील या ओळींच्या वरील खालील लॉजिकचा वापर करून मी कोडच्या बाहेर ठेवण्यासाठी कॉन्फिगरेशन फाईलमधून संकेतशब्द लोड करतो:

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

त्यानंतर, मी खालीलप्रमाणे नॅनो वापरुन /etc/config.json मध्ये कॉन्फिगरेशनसह एक JSON फाईल सेट केली आहे.

फाईल संपादित करण्यासाठी:

sudo nano /etc/config.json

खालील ओळी जोडा:

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

आम्ही कॉन्फिगरेशन फाइल संपादित करणे आणि आम्ही अ‍ॅपमध्ये वापरत असलेल्या सर्व संकेतशब्द आणि की जोडणे सुरू ठेवू. आत्तासाठी, पायथनचा वापर करून ईमेल कसा पाठवायचा हे द्रुतपणे तपासूया. प्रथम, आम्ही आमच्या वापरकर्त्यांना पाठवू शकणार्‍या सत्यापन ईमेलसाठी एक टेम्पलेट तयार करू आणि ते वापरकर्ता टेम्पलेट्स निर्देशिकेत ठेवू. हे टेम्पलेट एचटीएमएलमध्ये लिहिले जाईल.

nano users/templates/users/verification_email.html

हे ईमेल बर्‍यापैकी सोपे आहे. हे वापरकर्त्याचा संदर्भ, साइटसाठी बेस URL आणि वापरकर्त्याचे ईमेल सत्यापित करण्यासाठी वापरलेले वापरकर्ता आयडी आणि टोकन घेते. टेम्पलेट प्रस्तुत करण्यासाठी आम्ही काही पायथन कोड लिहिण्यापूर्वी सेटिंग्ज.पीपी मध्ये बेस URL परिभाषित करण्याचे सुनिश्चित करा. पुढे जा आणि सुरूवातीच्या जवळ अ‍ॅप/सेटिंग्ज.पी वर खालील ओळी जोडा.

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

BASE_URL = PROTOCOL + '://' + DOMAIN

अखेरीस, जेव्हा आपली साइट इंटरनेटसाठी तयार असेल आणि आपण ती तैनात करता तेव्हा आपण साइटचे प्रतिनिधित्व करण्यासाठी आपण खरेदी केलेले डोमेन नाव म्हणून आपले डोमेन परिभाषित करू इच्छित आहात. हे असे नाव आहे जे आपण आपल्या साइटवर प्रवेश करण्यासाठी नवबारमध्ये टाइप कराल. आत्तासाठी, आपण डोमेन रिक्त सोडू शकता किंवा प्लेसहोल्डर वापरू शकता. आपण आपल्या निवडीच्या साइटवर आपण आपल्या साइटला देऊ इच्छित असलेल्या नावावर साइट_नाव देखील बदलू इच्छित आहात.

आम्ही ईमेल पाठविण्यापूर्वी, एक टोकन जनरेटर तयार करू जेणेकरून आमच्याकडे खाते सक्रियकरण टोकन असू शकेल जे कधीही कालबाह्य होत नाही. आम्ही हे खालीलप्रमाणे दिसणारे खाते सक्रियकरण टोकन तयार आणि आयात करून हे करू शकतो. फाईल संपादित करा:

nano users/tokens.py

खालील कोड जोडा:

from django.contrib.auth.tokens import PasswordResetTokenGenerator
import six
class TokenGenerator(PasswordResetTokenGenerator):
    def _make_hash_value(self, user, timestamp):
        return (
            six.text_type(user.pk) + six.text_type(timestamp)
        )
account_activation_token = TokenGenerator()
unsubscribe_token = TokenGenerator()

हे मूलभूत टोकन जनरेटर एक टोकन व्युत्पन्न करतो आम्ही वापरकर्त्यास URL मध्ये पाठवू शकतो आणि वापरकर्ता त्यांचे ईमेल सत्यापित करण्यासाठी आणि त्यांचे खाते सक्रिय करण्यासाठी वापरू शकतो.

पुढे, ईमेल कसे पाठवायचे ते पाहूया. नॅनो वापरणे, वापरकर्ते/ईमेल.पी.पी.

nano users/email.py

सत्यापन एचटीएमएल ईमेल पाठविणे असे दिसेल:

from django.contrib.auth import get_user_model
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.core.mail import EmailMultiAlternatives
from django.shortcuts import render
from .tokens import account_activation_token
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.template import Template, Context
from django.conf import settings
import traceback

def send_verification_email(user):
    User = get_user_model()
    mail_subject = '[{}] Activate your account.'.format(settings.SITE_NAME)
    html_message = render_to_string('users/verification_email.html', {
        'user': user,
        'domain': settings.DOMAIN,
        'protocol': 'https',
        'uid': urlsafe_base64_encode(force_bytes(user.pk)),
        'token': account_activation_token.make_token(user),
    })
    send_html_email(user, mail_subject, html_message)

हे बर्‍यापैकी सोपे आहे. आम्हाला ईमेल पाठविणे आवश्यक असलेली कार्ये, टेम्पलेट्स आणि आमच्या सेटिंग्जसह ईमेल प्रस्तुत करणे आणि नंतर आम्ही टेम्पलेटच्या नावाने ईमेल परिभाषित करतो आणि फंक्शनचा वापर करून वापरकर्त्यास पाठवितो. आपल्या लक्षात येईल की आम्ही मेल पाठविण्यासाठी कार्य परिभाषित केलेले नाही, SEND_HTML_EMAIL, अद्याप, म्हणून आम्ही आधीपासूनच वापरकर्त्यांना/ईमेल.पी.पी. मध्ये जोडलेल्या कोडच्या खाली लिहू.

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

हे थोडे अधिक जटिल आहे आणि आम्ही अद्याप हा सर्व कोड चालविण्यास तयार नाही. लक्षात घ्या आम्ही एक unsub_link परिभाषित करीत आहोत, वापरकर्ता आमच्या ईमेलमधून सदस्यता रद्द करण्यासाठी वापरू शकतो. हे महत्वाचे आहे, कारण वापरकर्त्यांना कोणत्याही वेळी पाहू इच्छित नाही तोपर्यंत आमच्या ईमेलची निवड रद्द करण्याची आवश्यकता असेल. आम्ही आमच्या संदेशासाठी एक मजकूर पर्याय देखील जोडतो, जो एचटीएमएल संदेश एचटीएमएल टॅगचा आहे. शेवटी, आम्ही ईमेल पाठविला की नाही हे आम्ही तपासतो आणि ते तसे झाले नाही तर आम्ही वापरकर्त्याच्या प्रोफाइलमध्ये चिन्हांकित करतो की त्यांचे ईमेल वैध नाही.

चला वापरकर्त्याच्या मॉडेल्सकडे परत जाऊया जेणेकरून आम्ही हे सर्व कार्य करू. आम्हाला सदस्यता रद्द करण्यासाठी दुवा व्युत्पन्न करण्यासाठी फंक्शन परिभाषित करणे आवश्यक आहे आणि वापरकर्त्याचे ईमेल वैध नाही हे चिन्हांकित करण्यासाठी बुलियन फील्ड परिभाषित करणे आवश्यक आहे.

प्रथम, वापरकर्त्यांच्या/मॉडेलच्या शीर्षस्थानी खालील आयात जोडा.

nano users/models.py
# …

पुढे, टोकन बनविण्यासाठी वापरकर्ता मॉडेलमध्ये फंक्शन्स जोडू आणि ईमेल सक्रिय करण्यासाठी वापरलेले टोकन तसेच वापरकर्ता त्यांचे मेल यशस्वीरित्या प्राप्त करीत आहे की नाही हे जतन करण्यासाठी फील्ड देखील तपासूया. पुन्हा वापरकर्ते/मॉडेलमध्ये, मॉडेलच्या शेवटी खालील कोड जोडा (इंडेंटेड कोड)

# …
            TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # 30 दिवस वैध

हे बर्‍यापैकी सोपे आहे, आम्ही एक टोकन तयार करण्यासाठी एक टाइमस्टॅम्पसाईनर वापरतो, जो एक मूलभूत क्रिप्टोग्राफी साधन आहे जो विशिष्ट वेळेनंतर कालबाह्य होईल आणि ते वैध आहे की नाही हे तपासण्यासाठी आम्ही दुसरे फंक्शन देखील वापरतो. आम्ही ही टोकन दोनदा, एकदा ईमेल सत्यापित करण्यासाठी आणि एकदा सदस्यता रद्द करण्यासाठी दुव्यासाठी वापरतो.

आता आपल्याकडे हे आहे, आपल्याला शेवटचे काम करण्याची आवश्यकता आहे ती म्हणजे दृश्यात. वापरकर्ते/view.py मध्ये, ईमेल पत्ता सत्यापित करण्यासाठी आणि सदस्यता रद्द करण्यासाठी दृश्ये जोडू.

nano users/views.py

प्रथम, खालील आयात जोडा. मी काही अतिरिक्त फेकले जेणेकरून आम्हाला नंतर अधिक आयात करण्याची गरज नाही.

from .email import send_verification_email # सत्यापन ईमेल पाठविण्याचे कार्य आयात करण्याचे सुनिश्चित करा

आपल्याकडे यापैकी काही आयात आधीपासूनच असू शकते, परंतु त्या पुनरावृत्ती करण्यास दुखापत होत नाही. आपल्याला सत्यापन ईमेल पाठविण्याचे कार्य तसेच वापरकर्त्यांकडून खाते_अक्टिवेशन_टोकन आयात करण्याची आवश्यकता आहे. टोकन्स, इतर आयातीसह.

आता, फाईलच्या तळाशी खालील कोड जोडा:

        # त्यांना सदस्यता घ्या
    # अन्यथा लॉगिन पृष्ठावर पुनर्निर्देशित करा
# SENDWELMEMELEMAIL (विनंती, वापरकर्ता)

हा बरीच कोड आहे. चला तो तोडूया. प्रथम कार्य, स्वच्छ आणि साधे, मेलिंग सूचीमधून वापरकर्त्यास सदस्यता रद्द करते. दुसरे फंक्शन त्यांचे ईमेल सक्रिय करते आणि आपल्या लक्षात येईल की मी एक टिप्पणी केलेले कार्य, सेंडवेलक्लेममेल जोडले आहे. स्वागत ईमेल पाठविण्यासाठी ईमेल टेम्पलेट आणि फंक्शन डेफिनेशन वापरण्याचे आपले स्वागत आहे, मी अद्याप अद्याप नाही. मी टाकलेले शेवटचे कार्य महत्वाचे आहे, कारण सक्रियकरण ईमेल कालबाह्य होतात. म्हणूनच, आम्हाला काही वेळा सक्रियकरण ईमेलचे पुनर्स्थित करण्याची आवश्यकता आहे. आम्ही यासाठी एक मूलभूत फॉर्म वापरू शकतो आणि सत्यापन ईमेल पाठविण्यासाठी फंक्शनला कॉल करू शकतो. आम्ही हे करण्यापूर्वी, रजिस्टर व्ह्यूमध्ये फंक्शन कॉल जोडून हे प्रथम स्थानावर पाठवत असल्याचे सुनिश्चित करूया. रजिस्टर दृश्यात पुनर्निर्देशित होण्यापूर्वी ही ओळ जोडा, डीफ रजिस्टर, वापरकर्ते/व्ह्यूएस.पी.

nano users/views.py
# … (नंतर) डीफ रजिस्टर (विनंती):
# … (आधी) पुनर्निर्देशित (

आपल्याला त्या कोड स्निपेटमध्ये प्रथम आणि शेवटच्या ओळी जोडण्याची आवश्यकता नाही, फक्त रजिस्टर व्ह्यू वापरकर्त्यास सत्यापन ईमेल पाठवते हे सुनिश्चित करा. हे यासारखे दिसले पाहिजे:

# … आयात
            send_verification_email(user) # ही ओळ जोडण्याची खात्री करा!

आता, सक्रियकरण ईमेल पुन्हा पाठविण्यासाठी आम्हाला एक फॉर्म जोडण्याची आवश्यकता आहे. वापरकर्ते/फॉर्म.पी मध्ये, खालील फॉर्म जोडा:

# … (आयात)

आम्हाला या रीसँड ईमेल सक्रियण फॉर्मशी संबंधित टेम्पलेटची देखील आवश्यकता असेल. चला हे टेम्पलेट जोडू. फाईल संपादित करा:

nano users/templates/users/resend_activation.html

पुढे, फाईलमध्ये खालील कोड जोडा.

हे, खूप आहे! आता, जेव्हा आम्ही आमच्या सर्व्हरवर कोड उपयोजित करतो, तेव्हा आम्ही एचटीएमएल ईमेल पाठविण्यास आणि ईमेलमध्ये क्लिकसह वापरकर्ता खाती सक्रिय करण्यास सक्षम होऊ. आम्हाला कदाचित एक साधे स्वागत ईमेल पाठवायचा असेल, म्हणून ते कसे करावे ते पाहूया. परत वापरकर्ते/ईमेल.पी, खालील कोड जोडा:

def sendwelcomeemail(user):
    User = get_user_model()
    html = open('{}/users/welcome_email.html'.format(settings.BASE_DIR)).read()
    subject = 'Welcome to ' + settings.SITE_NAME + ', {{ username }}!'
    template = Template(html)
    subjtemplate = Template(subject)
    context = Context({'username': user.username, 'base_url': settings.BASE_URL, 'model_name': 'Daisy Holton, 'site_name': settings.SITE_NAME})
    renderedtemplate = template.render(context)
    subjcontext = Context({'username': user.username})
    subjrenderedtemplate = subjtemplate.render(subjcontext)
    send_html_email(user, subjrenderedtemplate, renderedtemplate)

तसेच, ही सर्व माहिती देण्यासाठी आम्हाला टेम्पलेटची आवश्यकता असेल. माझ्या वेबसाइटवर, टेम्पलेट खालील दिसत आहे, परंतु आपल्या आवडीनुसार त्याचे स्वरूपन करण्यासाठी आपले स्वागत आहे.

लक्षात घ्या की आमच्याकडे क्लोजिंग बॉडी किंवा एचटीएमएल टॅग नाहीत, कारण जेव्हा आम्ही एचटीएमएल सदस्यता रद्द करा दुवा जोडतो तेव्हा आम्ही हे जोडतो. हे महत्वाचे आहेत, परंतु आम्ही त्यांना दोनदा परिभाषित करू इच्छित नाही.

मग पुढे काय आहे? आम्ही खूप पुढे आलो आहोत. खरोखर, आम्ही सर्व्हरवर साइट उपयोजित करण्यास तयार असावे. आम्ही @login_required डेकोरेटर जोडू शकतो आणि आमची दृश्ये सुरक्षित करू शकतो, वापरकर्ता साइन अप घेऊ शकतो, अनुरूप ईमेल पाठवू शकतो आणि कॅशे माहिती कॅशे करू शकतो, जो वेबसाइट संबंधित राहण्यासाठी काय करण्याची आवश्यकता आहे याचा आधार आहे. आम्ही आणखी काही उपयुक्त वैशिष्ट्ये जोडू आणि नंतर आमचा कोड रिमोट सर्व्हरवर उपयोजित करण्यासाठी, मेल सर्व्हर, डोमेन कॉन्फिगरेशन आणि आमच्या साइटला सुरक्षित आणि योग्य करण्यासाठी फिल्टर सेट करण्यासाठी एक आधार तयार करू.

आम्हाला संकेतशब्द रीसेट व्ह्यू देखील आवश्यक आहे, म्हणून खरोखर द्रुतपणे ते जोडू. संकेतशब्द रीसेट व्ह्यूमध्ये बिल्टमध्ये अंगभूत काही फंक्शन्समध्ये तुटलेले आहे, परंतु आम्ही आमचे स्वतःचे दृश्य, ईमेल टेम्पलेट, फॉर्म आणि यूआरएल नमुने कसे लिहावे ते पाहू. वापरकर्ते/व्ह्यू.पी मध्ये दृश्य कसे दिसते ते येथे आहे

# ... आयात

हा फॉर्म जॅंगोमध्ये अंगभूत आहे, परंतु संकेतशब्द रीसेट, वापरकर्ते/टेम्पलेट्स/वापरकर्ते/संकेतशब्द_रेसेट_कॉन्फर्म.एचटीएमएलची पुष्टी करण्यासाठी आम्हाला टेम्पलेटची आवश्यकता आहे.

आमच्याकडे एक साधा फॉर्मसह संकेतशब्द रीसेट ईमेल पाठविण्यासाठी टेम्पलेट देखील आहे, वापरकर्ते/टेम्पलेट्स/वापरकर्ते/संकेतशब्द_रेसेट. एचटीएमएल

ईमेलचे टेम्पलेट स्वतःच सोपे आहे, ही एक मूलभूत HTML फाइल आहे जी संकेतशब्द रीसेट करण्यासाठी दुवा प्रस्तुत करते, वापरकर्ते/टेम्पलेट्स/वापरकर्ते/संकेतशब्द_रेसेट_मेल. एचटीएमएल. जॅंगो आपोआप या फाईलचे स्पष्टीकरण करेल.

आम्हाला आणखी दोन टेम्पलेट्स देखील आवश्यक आहेत. प्रथम ईमेल पाठविला गेला आहे याची पुष्टी करणे. यापूर्वीची दृश्ये जंगोमध्ये आहेत, म्हणून आम्हाला फक्त त्यांना url.py मध्ये संबोधित करणे आवश्यक आहे. हे टेम्पलेट वापरकर्ते/टेम्पलेट्स/वापरकर्ते/संकेतशब्द_रेसेट_डोन. एचटीएमएल येथे आहे

आणि शेवटी, संकेतशब्द रीसेट पूर्ण झाल्याची पुष्टी करण्यासाठी, वापरकर्ते/टेम्पलेट्स/वापरकर्ते/संकेतशब्द_रेसेट_कॉम्प्लेट. एचटीएमएल

आता, आम्हाला या दृश्यांसाठी URL नमुन्यांची आवश्यकता आहे. वापरकर्ते/url.py मध्ये, खालील URL नमुने जोडा:

    # ... मागील URL येथे

चार टेम्पलेट्स, हे बरेच आहे! परंतु आता आम्ही वेब ब्राउझरकडून आवश्यक असलेल्या कोणत्याही वेळी वापरकर्त्याचा संकेतशब्द रीसेट करण्यास सक्षम असल्याची खात्री करू शकतो.

मला समजले की हा बरीच कोड आहे. जर ते आपल्या डोक्यावर थोडेसे वाटत असेल तर ते ठीक आहे. आपण सुधारित कराल, आपली समज सुधारेल आणि आपण लवकरच कोडसह अधिक सक्षम व्हाल. आपण पूर्णपणे हरवले असल्यास, मी नंतर या सॉफ्टवेअरवर परत येण्याची शिफारस करतो की स्वयं-वेगवान शिकणे ऑनलाईन कोड कोर्स ऑनलाईन. हे सहसा प्रारंभ करण्यास मोकळे असतात आणि जेव्हा आपण या प्रकल्पात परत येता तेव्हा यशस्वी होण्यासाठी आवश्यक असलेल्या प्रत्येक गोष्टीद्वारे आपले मार्गदर्शन करतात. आपण पुढे चालू ठेवण्यास तयार आहात असे आपल्याला वाटत असल्यास, पुढे, आम्ही आपला कोड रिमोट सर्व्हरवर उपयोजित करणे आणि मेल सर्व्हर सेट करणे तसेच बॅशचा वापर करून आपली उपयोजन स्वयंचलितपणे कव्हर करू जेणेकरून आपण नेहमी काही सोप्या आदेशांसह एक नवीन प्रकल्प सेट करू शकता.

रिमोट सर्व्हरवर तैनात करण्यापूर्वी आम्हाला शेवटची गोष्ट करणे आवश्यक आहे की आमच्या साइटला थोडे अधिक सुरक्षित करा. आपल्या लक्षात येईल की लॉगिन दृश्य केवळ एक वापरकर्तानाव आणि संकेतशब्द घेते आणि तेथे मल्टी फॅक्टर प्रमाणीकरण किंवा एक वेळ कोड नाही. हे एक सोपे निराकरण आहे आणि त्याच कोडसह आम्ही आमची साइट मजकूर संदेश पाठवू शकतो आणि सर्व्हरवर पाठविलेल्या मजकूर संदेशास प्रतिसाद देखील देऊ शकतो. प्रारंभ करण्यासाठी, आम्ही पुन्हा वापरकर्त्याच्या मॉडेल्समध्ये जाऊ आणि एक टाइमस्टॅम्प स्वाक्षरी जोडू जे प्रत्येक लॉगिनचे प्रतिनिधित्व करेल. आम्ही वापरकर्त्याच्या मॉडेलमध्ये एक अद्वितीय, फिरणारे अभिज्ञापक देखील जोडू जे आमच्या लॉगिनमध्ये अतिरिक्त सुरक्षा जोडण्यासाठी वापरले जाईल. वापरकर्ता मॉडेल्स, वापरकर्ते/मॉडेल्स.पी.पी., खालील कोड जोडा:

# यूयूआयडी, टाइमस्टॅम्प स्वाक्षरी आणि यूआरएल जनरेटर (रिव्हर्स) आयात करण्याचे सुनिश्चित करा
    # हा कोड येथे जोडा
    # आणि हे कार्य जोडा
            TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # 3 मिनिटांसाठी वैध

आपले वापरकर्ते/मॉडेल्स. टिप्पण्यांव्यतिरिक्त ( #सह ओळींवरील कोड) याव्यतिरिक्त हे दिसत असल्याचे सुनिश्चित करा. हे तोडणे, हे सोपे आहे. आमच्याकडे काही आयात आहे, एक टाइमस्टॅम्पसिग्नर जो क्रिप्टोग्राफिक उपयुक्तता आहे जो एक सुरक्षित कोड व्युत्पन्न करू शकतो आणि तो वैध आहे याची खात्री करण्यासाठी ती सत्यापित करू शकते, फक्त एकदाच वापरली गेली आहे, आणि विशिष्ट सेकंदांपेक्षा जुनी नाही. आम्ही एक यूयूआयडी देखील वापरतो, जो एक अद्वितीय अभिज्ञापक आहे जो आमच्या वापरकर्त्यास टोकनच्या स्वाक्षर्‍यामध्ये ओळखतो आणि ज्या URL मध्ये टोकन वापरकर्त्यास पाठविला जातो. आम्ही हे मूलभूत क्रिप्टोग्राफी दोन घटक प्रमाणीकरण दृश्य तयार करण्यासाठी वापरू. आम्ही दुसरे काहीही करण्यापूर्वी, आपण स्थलांतर चालवूया जेणेकरून आमचे वापरकर्ता मॉडेल अद्यतनित केले जातील. मॅनेज.पीच्या निर्देशिकेत, स्थलांतर करण्यासाठी आणि पूर्ण करण्यासाठी खालील आज्ञा चालवा.

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

हे महत्वाचे आहे कारण प्रत्येक वेळी आम्ही मॉडेलमध्ये बदल करतो तेव्हा आम्हाला मॉडेल वापरण्यापूर्वी आपल्याला सारण्या तयार करण्याची आणि डीफॉल्टसह डेटाबेस अद्यतनित करण्याची आवश्यकता असते.

पुढे, दुय्यम प्रमाणीकरण दृश्याकडे पुनर्निर्देशित करण्यासाठी आमचे लॉगिन दृश्य सुधारूया. वापरकर्ते/व्ह्यूएस.पीमध्ये, लॉगिन फंक्शन काढा आणि आम्ही नुकत्याच वापरकर्त्याच्या मॉडेल्समध्ये व्युत्पन्न केलेल्या URL वर पुनर्निर्देशित करा.

# … आयात
        if user and user.profile.can_login < timezone.now(): # लक्षात ठेवा की आता वापरकर्ता लॉग इन करू शकतो की नाही हे आम्ही तपासतो
            # येथे असलेले ऑथ_लॉगिन फंक्शन काढा
                return redirect(user.profile.create_auth_url()) # टीप आम्ही येथे नवीन URL वर पुनर्निर्देशित करतो
            else: # जर वापरकर्ता मल्टी-फॅक्टर प्रमाणीकरण वापरत नसेल तर फक्त त्यांना लॉग इन करा.
        else: # जर लॉगिन यशस्वी झाले नाही,
            user = User.objects.filter(username=username).first() # हा एक भाग आहे जिथे आम्ही वापरकर्त्यांना प्रोफाइल अद्यतनित करतो
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # म्हणून ते काही सेकंदात पुन्हा लॉग इन करू शकत नाहीत

तर हे अगदी सोपे आहे, जेव्हा आम्ही ते तयार करतो तेव्हा आपल्याकडे दोन घटक प्रमाणीकरण दृश्याकडे पुनर्निर्देशित करण्याचा एक मार्ग आहे. वापरकर्त्याने फोन नंबर जोडला नसेल तर आमच्याकडे फॉलबॅक देखील आहे. आम्ही लवकरच फोन नंबर जोडण्यासाठी मूलभूत दृश्य जोडू आणि लवकरच मजकूर संदेशासह लॉग इन करू.

प्रथम, आम्हाला आमच्या कोडमधून मजकूर संदेश पाठविण्याचा सोपा मार्ग आवश्यक आहे. हे करण्यासाठी, आम्ही बर्‍याच एपीआयमधून निवडू शकतो, परंतु माझ्या मते सर्वात सोपा म्हणजे ट्विलीओ. ते छोट्या प्रकल्पांसाठी चांगली किंमत तसेच मोठ्या प्रमाणात सूट देखील देतात. ट्विलीओ डॉट कॉमवर एक खाते तयार करा, आपल्या प्रोजेक्टबद्दल काही तपशील भरा, फोन नंबर खरेदी करा आणि आपल्या एपीआय की आपल्या सेटिंग्जमध्ये कॉपी करा. त्यानंतर, हा कोड नवीन फाईल अंतर्गत जोडा, वापरकर्ते/एसएमएस.पी.

nano users/sms.py
# सर्व आवश्यक पॅकेजेस आयात करा
# हा कोड ट्विलीओसह मजकूर पाठवितो
# बर्‍याच अंकांसह नंबर मिळविण्यासाठी सहाय्यक फंक्शन
# वापरकर्त्यास सत्यापित करण्यासाठी मजकूर पाठवा
# या फंक्शनसह वापरकर्त्यास कोणताही मजकूर पाठवा
# या फंक्शनसह कोड सत्यापित करा
# वेळ सत्यापित करा

आपल्या की आपल्या कीसह या ओळी जोडून आपली सेटिंग्ज योग्यरित्या बदलण्याची खात्री करा:

# आपल्या ट्विलीओ डॅशबोर्डवरून हे कॉपी करण्याचे सुनिश्चित करा
AUTH_VALID_MINUTES = 3 # एकदा टीएफए पृष्ठ इन्स्टंट केल्यावर किती मिनिटांची संख्या सक्रिय होते

प्रथम, आम्हाला आमच्या दोन घटक प्रमाणीकरण दृश्यांसाठी फॉर्मची आवश्यकता असेल. वापरकर्ते/फॉर्म.

# … आयात
# आमचा फोन नंबर प्रविष्ट करण्यासाठी एक फॉर्म
# प्रमाणीकरणासाठी एक फॉर्म

पुढे, वापरकर्त्यांमधील दृश्ये/व्ह्यूएस.पीई तयार करूया

# … आयात

या दोन्ही दृश्यांसाठी आम्हाला टेम्पलेट्सची देखील आवश्यकता असेल. प्रथम एमएफए टेम्पलेट जोडा.

nano users/templates/users/mfa.html

टेम्पलेटमध्ये हा HTML कोड जोडा

हे खूपच स्वत: चे स्पष्टीकरणात्मक आहे. फॉर्म एकतर कोड किंवा रिक्त कोड पाठवितो आणि आम्हाला रिक्त कोड प्राप्त झाल्यास आम्ही कोड पाठवितो त्या दृश्यात आपल्या लक्षात येईल. मग आमच्याकडे फक्त दोन सबमिट बटणे आहेत आणि अशा प्रकारे आम्ही एकतर बटणासह कोड पाठवू शकतो. पुढे, आम्ही फोन नंबर जोडण्यासाठी एक साधा फॉर्म जोडू.

nano users/templates/users/mfa_onboarding.html

खालील एचटीएमएल जोडा:

हा फॉर्म खूपच सोपा आहे, तो आम्ही तयार केलेला फोन नंबर फॉर्म प्रस्तुत करतो आणि वापरकर्त्यास फोन नंबर जोडू देतो.

हे खरोखर चांगले दिसते! जोपर्यंत सर्व काही योग्यरित्या सेट केले जात नाही तोपर्यंत आम्ही URL नमुने जोडताच आम्ही संदेश पाठविण्यास आणि वापरकर्त्यास त्यांच्या फोन नंबरसह लॉग इन करण्यास सक्षम असावे. आम्हाला सेट अप करण्याची शेवटची गोष्ट म्हणजे एक प्रोफाइल दृश्य आहे जेणेकरून वापरकर्त्याने लॉग इन केल्याशिवाय त्यांचा फोन नंबर बदलू शकतो हे आम्ही सुनिश्चित करू शकतो. तसेच, अखेरीस आम्ही "स्टॉप टू रेट" पर्याय जोडू इच्छितो, जेणेकरून वापरकर्ता भविष्यातील मजकूर संदेशांची निवड रद्द करू शकेल.

चला वापरकर्त्यांना/व्ह्यूएस.पी मध्ये प्रोफाइल दृश्य जोडू. हे दृश्य वापरकर्त्याचे बायो, ईमेल, वापरकर्तानाव आणि फोन नंबर अद्यतनित करेल तसेच मल्टी फॅक्टर प्रमाणीकरण सक्षम करण्यास आम्हाला अनुमती देईल. प्रथम, आम्हाला वापरकर्ते/फॉर्ममध्ये आणखी दोन फॉर्म आवश्यक असतील.

# ... आयात

पुढे, आम्ही हे दोन्ही फॉर्म वापरण्यासाठी एक दृश्य तयार करू शकतो. वापरकर्ते/व्ह्यूएस.पीई संपादित करा आणि दृश्यात जोडा.

# या आयात जोडा

आम्हाला या दृश्यासाठी टेम्पलेट देखील आवश्यक आहे.

nano users/templates/users/profile.html

आपल्या लक्षात येईल की हा बर्‍यापैकी सोपा फॉर्म आहे, परंतु त्यामध्ये काही जावास्क्रिप्ट आहे जे अद्यतनित झाल्यामुळे फॉर्मची सामग्री आपोआप पोस्ट करते. हे असणे उपयुक्त आहे, म्हणून आपण प्रत्येक वेळी सबमिट न करता संपादने करण्यास सक्षम आहात.

पुढे, आम्हाला यूआरएल पॅटर्समध्ये या सर्व दृश्यांचे प्रतिनिधित्व करणार्‍या यूआरएलची आवश्यकता आहे. वापरकर्ते/url.py संपादित करा आणि हा कोड जोडा:

# … मागील कोड, आयात
# … आम्ही पूर्वी प्रविष्ट केलेल्या URL नमुने, पुढील तीन ओळी जोडा

आमच्या प्रकल्पाची चाचणी घेण्यासाठी आता चांगली वेळ आहे. पण प्रथम, दुसरा बॅकअप चालवूया.

backup

आणि सर्व्हर चालवा. आम्ही लिनक्स सर्व्हरवर उपयोजित करण्यापूर्वी खात्यावर दोन घटक प्रमाणीकरण सक्षम करणे चांगली कल्पना आहे. आम्ही आमच्या प्रोफाइल URL,/वापरकर्ते/प्रोफाइल/वर जात आहोत आणि आमचा फोन नंबर प्रविष्ट केल्यानंतर प्रमाणीकरण सक्षम करण्यासाठी बॉक्स तपासत आहोत आणि नंतर फॉर्म सबमिट करतो.

python manage.py runserver localhost:8000

आपल्या वेब ब्राउझरवर जाऊन वेबपृष्ठास भेट द्या, मी या उदाहरणात Google Chrome वापरत आहे आणि URL https: // लोकल होस्ट: 8000/खाती/प्रोफाइल/प्रविष्ट करीत आहे

आवश्यक असल्यास आपण लॉग इन करण्यास सक्षम असाल आणि दोन घटक प्रमाणीकरण सक्षम कराल.

या प्रकल्पाला चालण्यासाठी सर्व्हरची आवश्यकता आहे जेणेकरून ते खरोखर मेल पाठवू शकेल. परंतु प्रथम, आम्हाला त्रुटी पाहण्याचा मार्ग आवश्यक आहे. आपल्या लक्षात येईल की आपण डीबग मोडमध्ये सर्व्हर चालवत असल्यास, सेटिंग्ज.डेबग ट्रूच्या बरोबरीने, सर्व्हर आपोआप त्रुटी दर्शवितो. डीबग मोड न वापरता त्रुटी दर्शविण्यासाठी, जे उत्पादन सर्व्हरवर असुरक्षित आहे, आम्ही त्यासाठी एक दृश्य जोडावे. आम्हाला हाताळण्यास सक्षम असणे आवश्यक असलेल्या सर्वात महत्वाच्या त्रुटी म्हणजेः

त्रुटी 500 - आमच्या कोडसह एक समस्या त्रुटी 404 - एक पृष्ठ जे सापडले नाही (तुटलेली URL) त्रुटी 403 - परवानगी नाकारली त्रुटी

या त्रुटी हाताळण्यासाठी एक नवीन अ‍ॅप जोडू या, ज्याला त्रुटी म्हणतात.

python manage.py startapp errors

हे सेटिंग्जमध्ये जोडा.

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

त्रुटी दृश्ये, टेम्पलेट्स आणि थोड्या मिडलवेअरशिवाय आम्हाला हे सर्व आवश्यक आहे. चला त्याप्रमाणे परिभाषित करूया:

# येथे आपले दृश्ये तयार करा.

पुढे, या त्रुटी हाताळण्यासाठी मिडलवेअर परिभाषित करूया. आम्ही आमच्या मिडलवेअरच्या नावाने प्रथम सेटिंग्ज.पीमध्ये मिडलवेअर_क्लासेसमध्ये जोडून हे करू.

    # ... मागील मिडलवेअर

पुढे, मिडलवेअर जोडू.

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

आम्ही थ्रेडिंग लोकल वापरुन सध्याचा अपवाद मिळविण्यासाठी एक फंक्शन जोडतो, जे आमच्या कोडमधील कोणत्याही त्रुटी शोधण्यात आम्हाला मदत करते. टेम्पलेट्सच्या बाबतीत, आम्हाला फक्त एकाची आवश्यकता आहे, कारण आम्ही दृश्यात गतिकरित्या शीर्षक परिभाषित करतो. टेम्पलेटला फक्त शीर्षक आणि "ट्रेस" प्रस्तुत करणे आवश्यक आहे, संदर्भातून आमची त्रुटी ट्रेसबॅक.

nano errors/templates/errors/error.html

हे अद्याप आमचे सर्वात सोपा टेम्पलेट आहे, परंतु आमच्या प्रकल्पातील त्रुटी पाहणे किती सोपे आहे. पुढे, सेटिंग्जमध्ये डीबग अक्षम करूया.

nano app/settings.py

ही ओळ जिथे सत्य आहे तेथे शोधा आणि ती चुकीच्या ठिकाणी बदला

DEBUG = False

पुढे जा आणि आता अ‍ॅपचा बॅकअप घ्या. आम्ही रिमोट लिनक्स सर्व्हरवर उपयोजित करण्यास तयार आहोत आणि तेथून वैशिष्ट्ये जोडत राहतो.

sudo backup

आम्ही हा कोड सर्व्हरवर पोस्ट करण्यापूर्वी, आम्ही विचारात घ्यावे की कोडसह काही समस्या असू शकतात. केसच्या आधारे, त्यांना पोस्ट केलेल्या माहिती स्वीकारणार्‍या साइट्समध्ये स्पॅम पोस्ट करणे आणि स्पॅम काढून टाकण्यात अडचण असेल. हे त्वरित होऊ नये, परंतु जर ते घडत असेल तर आम्ही नंतर साइटवर स्वयंचलितपणे स्पॅम कसे मध्यम करावे आणि रोबोट्सला साइटवर प्रवेश करणे अधिक कठोर बनवू, यासह वापरकर्त्याची खाती कशी निष्क्रिय करावी आणि वापरकर्त्याची ओळख त्यांच्या शोधात किंवा बायोमेट्रिक स्कॅनसह सत्यापित करा, जसे की फिंगरप्रिंट किंवा चेहर्याचा मान्यता.

आम्ही तपासणी केलेल्या मल्टी फॅक्टर प्रमाणीकरणाच्या उदाहरणाकडे पहात आहात, उत्पादनांमध्ये गोष्टी वेगळ्या असू शकतात. आम्ही लॉगिन मर्यादित कसे आहोत आणि टोकनची मुदत कशी घेतो ते पहा. जर रोबोट साइटवर प्रवेश करत असतील तर दोन घटक प्रमाणीकरण अधिक कठीण असू शकते कारण ते वापरकर्ता त्याच वेळी कोड प्रविष्ट करू शकतात. याचा सामना करण्यासाठी, आम्ही फोन नंबरसह मल्टी फॅक्टर ऑथेंटिकेशनचा वापर करतो तेव्हा आम्ही साइटशी कसा संवाद साधतो हे घोषित करून, वापरकर्त्याच्या मॉडेल्समध्ये एक मॉडेल वापरूया. आम्ही ईमेलसह प्रमाणित करण्यासाठी एक पर्याय देखील जोडू. नॅनोसह वापरकर्ता मॉडेल संपादित करून प्रारंभ करा.

nano users/models.py

आम्ही ज्या मॉडेल जोडत आहोत तेच दिसले पाहिजे. आम्हाला आयडी संचयित करण्यासाठी कोणत्याही पद्धती, फक्त व्हेरिएबल्सची आवश्यकता नाही, वापरकर्ता, टाइमस्टॅम्प, कालबाह्यता, लांबी आणि कोणत्याही मल्टी फॅक्टर प्रमाणीकरण (फोन किंवा ईमेलवर पाठविलेल्या 123456 सारख्या कोड) विरूद्ध प्रयत्न).

# वेबसाइटवर लॉग इन करण्यासाठी वापरलेला एक मूलभूत टोकन

चला आमच्या वापरकर्त्यासाठी एक विशेषाधिकार देखील जोडूया आणि आम्ही अखेरीस विशेषाधिकारित वापरकर्त्यांना स्वयंचलितपणे नोंदविण्याआधी स्थलांतर करण्यापूर्वी ते आत्ताच मॅन्युअली सेट करू. वापरकर्त्याच्या मॉडेल्समध्ये, प्रोफाइलमध्ये ही ओळ जोडा:

    vendor = models.BooleanField(default=False)

डेटाबेसमधील कोणत्याही बदलांप्रमाणेच, आम्ही जेंगोमध्ये मॉडेल.पी फाईल संपादित करतो तेव्हा कोणत्याही वेळी स्थलांतर करणे आणि डेटाबेस स्थलांतर करणे आवश्यक आहे. लक्षात ठेवा, हे करण्यासाठी आम्ही प्रथम स्त्रोत वापरतो (जर टर्मिनल उघडल्यापासून ते आधीच वापरले गेले नसेल तर) आणि नंतर स्थलांतर करण्यासाठी आणि स्थलांतर करण्यासाठी पायथन मॅनेज.पीपी.

cd project-directory-you-named # (आवश्यक असल्यास)

आत्तासाठी, आपण शेल वापरुन विक्रेते म्हणून तयार केलेली कोणतीही खाती आपण नोंदवू शकता.

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

आता हे टोकन वापरण्यासाठी आमचे मल्टी फॅक्टर प्रमाणीकरण दृश्य विकसित करूया. प्रथम, आम्हाला आमच्या एमएफए मदतनीस युटिलिटीज सुधारित करण्याची आवश्यकता आहे. नॅनो वापरणे,

nano users/mfa.py
from django.utils import timezone
import random
import datetime
from django.conf import settings
from feed.middleware import get_current_request
from django.contrib import messages
from .email import send_html_email
import traceback
from .models import MFAToken

account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
source_phone = settings.PHONE_NUMBER

def send_text(target_phone, text):
    from twilio.rest import Client
    try:
        client = Client(account_sid, auth_token)
        if len(target_phone) >= 11:
            message = client.messages.create(
                to=target_phone,
                from_=source_phone,
                body=text + ' Text STOP to cancel.')
    except:
        messages.warning(get_current_request(), 'There was an error sending the message.')
        print(traceback.format_exc())

def get_num_length(num, length):
    n = ''
    for x in range(length):
        n = n + str(num)
    return int(n)

def send_verification_text(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_user_text(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)))

def send_verification_email(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))

def send_user_text(user, text):
    send_text(user.profile.phone_number, text)

def check_verification_code(user, token, code):
    token.attempts = token.attempts + 1
    profile = user.profile
    result = (token != None and code != '' and token.token == code and (token.expires > timezone.now()) and token.attempts <= settings.MFA_TOKEN_ATTEMPTS)
    if token.attempts < 3 and result:
        profile.verification_code_length = 6
    elif token.attempts > 1 and not result:
        profile.verification_code_length = profile.verification_code_length + 2
        if profile.verification_code_length > settings.MFA_TOKEN_LENGTH: profile.verification_code_length = settings.MFA_TOKEN_LENGTH
    token.save()
    profile.save()
    return result
# वापरकर्त्यास त्यांचा ईमेल किंवा फोन नंबर वापरुन प्रमाणित करा
    token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # URL मध्ये पास केलेल्या मूल्याद्वारे टोकन फिल्टर (एक यूआयडी)
    if not token: token = MFAToken.objects.create(user=User.objects.filter(profile__uuid=username).first(), uid=username, expires=timezone.now() + datetime.timedelta(seconds=115)) # जर हे सत्र तयार झाले नसेल तर ते तयार करा
    user = User.objects.filter(id=token.user.id).first() # टोकनमधून वापरकर्त्यास मिळवा
    if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # जर ते आधीपासूनच प्रमाणीकृत असतील तर त्यांना लॉग इन करा
    if not user: raise PermissionDenied() # कोणताही वापरकर्ता सापडला नाही तर नाकारू
    if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # ऑथ टोकन तपासा
        auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # वापरकर्त्यास आधीपासूनच लॉग इन केलेले नसल्यास लॉग इन करा
        user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # त्यांच्या मल्टी फॅक्टर प्रमाणीकरणावर कालबाह्यता सेट करा
        return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # वापरकर्त्यास पुढील पृष्ठावर पुनर्निर्देशित करा
    if not user.profile.mfa_enabled: # एमएफए सक्षम आहे की नाही ते तपासा
        if not check_verification_time(user, token): # वेळ तपासा
            user.profile.mfa_enabled = False # फोन नंबर साफ करा
            user.profile.enable_two_factor_authentication = True # एमएफए सक्षम करा
            user.profile.phone_number = '+1' # फोन नंबर अक्षम करा
            user.profile.save() # प्रोफाइल जतन करा
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # त्यांचा एमएफए सक्षम नसल्यास वापरकर्त्यास लॉग इन करा
    if request.method == 'POST' and not fraud_detect(request, True): # विनंती पोस्ट विनंती असल्यास
        form = TfaForm(request.POST) # फॉर्म इन्स्टंट करा
        code = str(form.data.get('code', None)) # कोड मिळवा
        if code and code != '' and code != None: # हे रिक्त नाही याची खात्री करा
            token_validated = user.profile.check_auth_token(usertoken) # ऑथ टोकन तपासा
            is_verified = check_verification_code(user, token, code) # कोड तपासा
            if token_validated: # जर सर्वकाही
                if is_verified: # क्रमाने आहे
                    user.profile.mfa_enabled = True # एमएफए सक्षम करा (आधीपासून सक्षम नसल्यास)
                    auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # वापरकर्त्यास लॉग इन करा
                    for key, value in request.GET.items(): # पुढील पॅरामीटरसाठी क्वेरीस्ट्रिंग तयार करा (जर असेल तर)
                        return HttpResponseRedirect(next) # पुनर्निर्देशित
            elif not token_validated: # जर टोकन अवैध असेल तर
            if p.mfa_attempts > 3: # जर बरेच प्रयत्न केले गेले तर
            if form.data.get('send_email', False): # ईमेल पाठवा (किंवा मजकूर)
    # फॉर्म प्रस्तुत करा (विनंत्या मिळविण्यासाठी)

आम्ही या कोडमध्ये जोडत असताना, ईमेल पाठविण्यासाठी फंक्शन आयात करण्याचे सुनिश्चित करा. फाईलच्या शीर्षस्थानी, वापरकर्ता दृश्य (इतर आयातीसह), जोडा

from .mfa import send_verification_email as send_mfa_verification_email

यापैकी कोणतेही कार्य करण्यापूर्वी आता आम्हाला ते कार्य लिहिण्याची आवश्यकता आहे. हे आमचे पाठविलेले ईमेल फंक्शन वाढवावे आणि सत्यापन कोडसह वापरकर्त्यास फक्त ईमेल पाठवावे.

nano users/mfa.py
def send_verification_email(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))

तर हे सर्व उत्कृष्ट कार्य करते, आता आमच्याकडे एक मल्टी फॅक्टर ऑथेंटिकेशन सिस्टम आहे जी लॉग इन करण्यासाठी फोन नंबर किंवा ईमेलवर अवलंबून आहे. परंतु आम्हाला काढण्याचा एक मार्ग देखील आवश्यक आहे किंवा जे आमच्या अटींसह सहकार्य करीत नाहीत अशा वापरकर्त्यांना लपवून ठेवा. हे स्पॅमर्स, रोबोट्स किंवा आमच्या कार्यासाठी चांगले नसलेले कोणीही असू शकतात. माझ्या वेबसाइटवरील वापरकर्त्यांच्या देखरेखीसाठी माझ्याकडे असलेल्या दृश्याकडे पहा:

# आयात
from .tests import is_superuser_or_vendor # आम्हाला ही चाचणी तयार करण्याची आवश्यकता असेल
    # वापरकर्त्यांची यादी मिळवा
    return render(request, 'users/users.html', { # टेम्पलेटमध्ये वापरकर्त्यांना परत करा

लक्षात घ्या की हा कोड चाचणीचा वापर करतो, आम्हाला ही चाचणी चाचणी.पी फाईलमध्ये घोषित करण्याची आणि ती आयात करण्याची आवश्यकता आहे. वापरकर्ते/चाचण्यांचे संपादन.

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

हे वापरकर्ते/वापरकर्त्यांसह संयुक्तपणे आहे. एचटीएमएल टेम्पलेट, जे असे काहीतरी दिसते:

लक्षात घ्या की टेम्पलेटमध्ये आणखी एक टेम्पलेट, वापरकर्ते/user.html. सबटेम्प्लेट असलेले टेम्पलेट वापरताना आणि विस्तार न वापरताना, अंडरस्कोर जोडणे ही चांगली कल्पना () टेम्पलेट्स वेगळे करण्यासाठी फाईलचे नाव वाढविण्यापूर्वी.

लक्षात घ्या की हे बरीच जिन्जा आहे, आपल्याकडे या सर्व व्हेरिएबल्स परिभाषित नसतील. पण हा माझा कोड दिसत आहे.

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

आम्हाला टॉगल_एक्टिव्ह.एचटीएमएल, आणखी एक सबटेम्पलेट देखील आवश्यक आहे. हे टेम्पलेट एक फॉर्म असावा जो वापरकर्ता सक्रिय आहे की नाही हे टॉगल करण्यास परवानगी देतो.

आम्हाला वापरकर्ता क्रियाकलाप टॉगल करण्यासाठी एक दृश्य आणि योग्य URL नमुने देखील जोडण्याची आवश्यकता असेल. आम्ही तिथे असताना, आम्हाला आवश्यक असल्यास वापरकर्त्यास हटविण्यासाठी एक दृश्य जोडा.

# आयात
    success_url = '/' # यश URL वर पुनर्निर्देशित
    def test_func(self): # वापरकर्ता सुपरयूझर असल्यास आणि हटविण्याची परवानगी असल्यास चाचणी घ्या

हे आवश्यक असल्यास हे व्यावहारिक असले तरीही, वापरकर्त्यास हटविणे बहुतेक वेळा आवश्यक नसावे, परंतु आम्हाला ते डिसमिस करण्याची आवश्यकता असल्यास साइटला भेट देणार्‍या वापरकर्त्यांची दृश्यमानता टॉगल करू शकतो.

आम्ही जोडलेले URL नमुने यासारखे दिसतात. नॅनो सह, वापरकर्ते/url.py संपादित करा आणि या ओळी जोडा:

nano users/urls.py

"]" परंतु सुरूवातीनंतर "[" नंतर, वापरकर्त्याच्या दृश्यांमधील मार्गांच्या सूचीत रेषा जाव्यात.

# …
# …

आता, साइटचा बॅक अप घेण्याची खात्री करा जेणेकरून आपण ते कार्य करत राहू त्या वेब सर्व्हरवर आपण ते डाउनलोड करू शकता. कमांड लाइन वरून,

sudo backup

आता आमच्या साइटचा बॅक अप घेतला आहे.

तर आता आमच्याकडे आणखी काही उपयुक्त वैशिष्ट्ये आहेत. पण इथल्या मोठ्या चित्राचे काय? हा कोड अद्याप इंटरनेटवरून प्रवेशयोग्य नाही, आमच्याकडे अद्याप मेल सर्व्हर नाही आणि विशेषाधिकारित वापरकर्त्यांना प्रमाणीकरणासाठी सुरक्षित प्रोटोकॉलसह साइट एक्सप्लोर करण्यात मदत करण्यासाठी आम्हाला सर्वसमावेशक सत्यापन प्रक्रिया तसेच गुळगुळीत लेआउट समाविष्ट करण्यासाठी आमच्या अ‍ॅपचा विस्तार करणे आवश्यक आहे.

आम्ही या सर्वांकडे जाऊ. आत्तासाठी सर्वात महत्वाची गोष्ट म्हणजे हा कोड ऑनलाईन मिळत आहे, जो आम्ही उबंटू सर्व्हरवरील काही बाशच्या ओळींसह करू शकतो. आपल्याकडे घरी सर्व्हर नसल्यास आणि आपल्याला पोर्ट उघडण्याची परवानगी देणारी व्यवसाय इंटरनेट सदस्यता असल्याशिवाय आपल्याला यासाठी सर्व्हर भाड्याने देण्याची आवश्यकता असेल. मी माझ्या अपार्टमेंटमध्ये स्थापित केलेल्या एचपी झेड 440 वर वैयक्तिकरित्या माझी वेबसाइट चालवितो, परंतु व्हर्च्युअल प्रायव्हेट सर्व्हर (व्हीपीएस) भाड्याने घेणे मूलभूत आवश्यकतेसाठी हे सहसा स्वस्त असते.

लक्षात ठेवा की आपण आता चालवित असलेला कोड तुलनेने पातळ आहे, आपण उत्पादन तयार करण्यासाठी जे वापरण्यास तयार आहे त्याआधी आपण देखरेख करणे आणि सुधारणे आवश्यक आहे. आपण इंटरनेटसह काय करता याची काळजी घ्या याची खात्री करा, आपण ही साइट लिनक्स सर्व्हरवर वेबवर सार्वजनिकपणे तैनात करत असल्यास हे सुनिश्चित करा, आपल्या वेबसाइटसह अवांछित संवाद अवरोधित करण्याची आपली योजना आहे. ही कदाचित प्रथम समस्या उद्भवणार नाही, परंतु मशीन लर्निंग, कृत्रिम बुद्धिमत्ता आणि संगणक दृष्टी यासह आम्ही यास सामोरे जाण्यासाठी विविध उपायांकडे लक्ष देऊ. जेव्हा ही एक समस्या बनते, तेव्हा समाधानासाठी या मजकूरात आणखी पहा.

व्हीपीएस भाड्याने देण्याच्या बाबतीत, आपण जाऊ शकता अशा बर्‍याच ठिकाणी आहेत. Google क्लाऊडमध्ये व्हीपीएस सर्व्हर, आयओनोस, कमाटेरा, Amazon मेझॉन एडब्ल्यूएस आणि अधिक प्रदाता क्लाउड सर्व्हर सोल्यूशन्स ऑफर करतात जे आमच्या गरजा भागवतील.

आपल्याला त्यांच्या फॉर्ममधून क्लिक करणे आवश्यक आहे आणि प्रारंभ करण्यासाठी एक योजना निवडण्याची आवश्यकता आहे. आपण कोणत्याही प्रदात्यासह मूलभूत योजनेसह जाऊ शकता, परंतु हे सुनिश्चित करा की प्रदाता आपल्याला ईमेल पाठविण्यासाठी पोर्ट मेल सर्व्हर पोर्ट उघडण्याची परवानगी देतो (हे पोर्ट 587 आणि पोर्ट 25 असावे), काही प्रदाते हे पोर्ट अवरोधित करतात. आतापर्यंत मला आयओनोस आणि कमाटेरा यांचा उत्तम अनुभव मिळाला आहे, हे दोघेही मला अमर्यादित ईमेल पाठविण्याची परवानगी देतील आणि त्यांची किंमत खूपच स्वस्त आहे.

आपण आपल्या नवीन सर्व्हरशी एसएसएच किंवा सिक्युर शेल नावाच्या प्रोटोकॉलवर कनेक्ट व्हाल, जे आपल्या वैयक्तिक संगणकावरून आपल्या वैयक्तिक संगणकाप्रमाणेच सर्व्हरसह दूरस्थपणे इंटरफेस करण्याची परवानगी देते. जेव्हा आपण सर्व्हर सेट करता तेव्हा होस्टिंग प्रदाता आपल्याला एसएसएच की जोडण्यास सांगेल किंवा ते आपल्याला एक वापरकर्तानाव आणि संकेतशब्द देतील. कोड संपादित करण्यासाठी आपण कमांड लाइनमधून सर्व्हरवर कसे लॉग इन कराल हे एसएसएच की आहे. एसएसएच की व्युत्पन्न करण्यासाठी खालील एसएसएच-कीजेन पर्याय वापरा.

ssh-keygen

फाईल जतन करा आणि आपल्याला आवश्यक असल्यास त्यास अधिलिखित करा, आपल्याकडे आधीपासून नसल्यास आपल्या एसएसएच की फिरविणे चांगले आहे. आता, आपण आपली एसएसएच की पाहण्यासाठी खालील कमांड वापरू शकता. आपण ते आपल्या रिमोट सर्व्हरवर कॉपी करू इच्छित असाल जेणेकरून आपण ते प्रमाणीकृत करण्यासाठी वापरू शकता.

cat ~/.ssh/id_rsa.pub

ती कमांड टाइप करताना आपण एसएसएच की पाहण्यास सक्षम नसल्यास ("एसएसएच-आरएसए एएए" ने प्रारंभ होणारी अंक आणि अक्षरे एक लांब स्ट्रिंग) आरएसए की तयार करण्याचा प्रयत्न करा (ते अधिक सुरक्षित आहेत, म्हणून मी त्यांचा वापर करण्याचा सल्ला देतो.) खालील कोड 4096 बिट आरएसए एसएसएच की व्युत्पन्न करेल.

ssh-keygen -t rsa -b 4096

उबंटू चालविणारा व्हीपीएस तयार करा, तथापि आपण हे करण्याची योजना आखली आहे. एकदा आपण प्रदाता वेबसाइटवर (कमाटेरा डॉट कॉम, आयओनोस डॉट कॉम किंवा तत्सम) फॉर्मवर क्लिक करून व्हीपीएस तयार केल्यानंतर, आपल्याला लॉग इन करायचे आहे. हे करण्यासाठी, आपल्या आयपी पत्त्यासह एसएसएच कमांड वापरा (xxx.xx.xx.xx सारखा पत्ता). आम्ही तयार केलेल्या सर्व्हरवरील डीफॉल्ट वापरकर्तानावबद्दल देखील आपल्याला संवेदनशील असणे आवश्यक आहे, उदाहरणार्थ, उबंटू.

ssh ubuntu@XX.XX.XX.XX

आपल्याला संकेतशब्द विचारला जाऊ शकतो, जर आपल्याला संकेतशब्द विचारला गेला असेल तर तो प्रविष्ट करा. आम्ही डीफॉल्ट वापरकर्तानाव वापरणार नाही, तर नवीन वापरकर्ता तयार करुन आणि त्यांच्या खात्यात एसएसएच की जोडून प्रारंभ करूया.

चला नवीन एसएसएचडी_कॉन्फिग फाइल जोडून प्रारंभ करूया, जी सर्व्हरला एसएसएच कशी वापरावी हे सांगते.

nano sshd_config
# ही एसएसएचडी सर्व्हर सिस्टम-वाइड कॉन्फिगरेशन फाइल आहे.  पहा
# अधिक माहितीसाठी sshd_config (5).
# हे एसएसएचडी पथ =/यूएसआर/लोकल/एसबीआयएन:/यूएसआर/लोकल/बिन:/यूएसआर/एसबीआयएन:/यूएसआर/बिन:/एसबीआयएन:/बिन:/यूएसआर/गेम्ससह संकलित केले गेले होते.
# डीफॉल्ट sshd_config सह शिप केलेल्या पर्यायांसाठी वापरलेली रणनीती
# ओपनश हे त्यांच्या डीफॉल्ट मूल्यासह पर्याय निर्दिष्ट करणे आहे जेथे जेथे
# शक्य, परंतु त्यांना टिप्पणी द्या.  बिनधास्त पर्याय अधिलिखित
# डीफॉल्ट मूल्य.
# पोर्ट 22
# अ‍ॅड्रेस फॅमिली कोणत्याही
# ऐकवणी 0.0.0.0
# ऐकण्याची सूचना ::
# होस्टकी/इत्यादी/एसएसएच/एसएसएच_हॉस्ट_आरएसए_के
# होस्टकी/इ
# होस्टकी/इत्यादी/एसएसएच/एसएसएच_हॉस्ट_ड 25519_की
# सिफर आणि कींग
# Rekyleimit डीफॉल्ट काहीही नाही
# लॉगिंग
# Syslogfacility auth
# लॉगलवेल माहिती
# प्रमाणीकरण:
# लॉगिंग्रासेटाइम 2 मी
# परमिट्रूटलोगिन निषिद्ध-पासवर्ड
# स्ट्रीटमोड्स होय
# मॅक्सअथट्री 6
# कमाल 10
# भविष्यात डीफॉल्टनुसार .ssh/प्राधिकृत_की 2 ची दुर्लक्ष करण्याची अपेक्षा करा.
# प्राधिकृत प्रिन्सिपल्स फाइल काहीही नाही
# प्राधिकृत केकॉमांड काहीही नाही
# प्राधिकृत केकॉमांड्यूझर कोणीही नाही
# हे कार्य करण्यासाठी आपल्याला/etc/ssh/ssh_nownown_hosts मधील होस्ट की देखील आवश्यक असतील
# होस्टबेस्ड ऑथेंटिकेशन क्र
# आपण विश्वास ठेवत नसल्यास होय मध्ये बदला ~/.ssh/ज्ञात_होस्ट
# होस्टबेस्ड ऑथेंटिकेशन
# दुर्लक्ष कराकॉनोस्ट्स नं
# वापरकर्त्याचे ~/.rhosts आणि ~/. शॉस्ट फायली वाचू नका
# अज्ञानी होय
# टनेड स्पष्ट मजकूर संकेतशब्द अक्षम करण्यासाठी, येथे नाही वर बदला!
# परमिट कॉम्पॅसवर्ड्स क्र
# आव्हान-प्रतिसाद संकेतशब्द सक्षम करण्यासाठी होय मध्ये बदला (यासह सावधगिरी बाळगा
# काही पीएएम मॉड्यूल आणि थ्रेड्स)
# केर्बेरोस पर्याय
# केर्बेरोसॅथेंटिकेशन क्र
# केर्बेरोसॉरलोकलपसडब्ल्यूडी होय
# केर्बेरोस्टिकटक्लेनअप होय
# केर्बेरोजेटफस्टोकन क्र
# जीएसएसएपीआय पर्याय
# Gssapiauthentication नाही
# Gssapicleanupcredentials होय
# Gssapistrictaceptorcheck होय
# Gssapikeyexchange नाही
# पीएएम प्रमाणीकरण, खाते प्रक्रिया सक्षम करण्यासाठी हे 'होय' वर सेट करा,
# आणि सत्र प्रक्रिया. हे सक्षम केले असल्यास, पीएएम प्रमाणीकरण होईल
# केबीडिन्टरॅक्टिव्हिएटिकेशन आणि द्वारे परवानगी द्या
# संकेतशब्द ऑथेंटिकेशन.  आपल्या पीएएम कॉन्फिगरेशनवर अवलंबून,
# केबीडिन्टरॅक्टिव्हिएटिकेशनद्वारे पीएएम प्रमाणीकरण बायपास करू शकते
# "परमिट्रूटलोगिन विना-पासवर्ड" ची सेटिंग.
# आपल्याला फक्त पीएएम खाते आणि सत्र धनादेशांशिवाय चालवायचे असल्यास
# पीएएम प्रमाणीकरण, नंतर हे सक्षम करा परंतु संकेतशब्द ऑथेंटिकेशन सेट करा
# आणि 'नाही' चे केबीडिन्टरॅक्टिव्हिएटेशन.
# होय परवानगी द्या होय
# होय परवानगी द्या होय
# गेटवेपोर्ट्स क्र
# X11displayoffset 10
# X11uselocalhost होय
# परवानगी होय
# प्रिंटलास्टलॉग होय
# TCPKEEPALIVE होय
# पेर्मिटसरेन्व्हायरनमेंट क्र
# कम्प्रेशन विलंब
# क्लायंटिव्हइंटरव्हल 0
# क्लायंटिव्हकॉन्टमॅक्स 3
# Usedns नाही
# Pidfile /run/sshd.pid
# मॅक्सस्टार्टअप्स 10: 30: 100
# परमिटनेल नाही
# Chrootdirectory काहीही नाही
# व्हर्जन अडेन्डम काहीही नाही
# डीफॉल्ट बॅनर मार्ग नाही
# क्लायंटला लोकॅल पर्यावरण व्हेरिएबल्स पास करण्याची परवानगी द्या
# कोणत्याही उपप्रणालीचे डीफॉल्ट अधिलिखित करा
# प्रति-वापरकर्त्याच्या आधारावर ओव्हरराइडिंग सेटिंग्जचे उदाहरण
# वापरकर्ता अनॉन्कव्हीएस जुळवा
# X11 फॉरवर्डिंग क्र
# परवानगी द्या
# परमिट्टी क्र
# फोर्सकॉमांड सीव्हीएस सर्व्हर

लक्षात ठेवा, फाईल सेव्ह करण्यासाठी Ctrl+x आणि y. पुढे, आरंभिक नावाची एक मूलभूत स्क्रिप्ट लिहू (सर्व आमच्या वापरकर्त्याच्या डीफॉल्ट होम डिरेक्टरीमध्ये).

nano initialize

या ओळी फाईलमध्ये जोडा, बदलूनआपल्या एसएसएच की सह आपल्याला मांजर वापरुन आढळले. (.ssh/id_rsa.pub)

# !/बिन/बॅश

या फाईलमधून आपल्याला चालण्यासाठी, आपण लाइनद्वारे प्रारंभ करूया. पहिली ओळ कंपाईलरला सांगते की ही बॅश स्क्रिप्ट आहे. मग आम्ही अवलंबन स्थापित करीत आहोत, एसएसएचडी_कॉन्फिगला योग्य निर्देशिकेत कॉपी करीत आहोत, एसएसएच रीस्टार्ट करीत आहोत, रूटसाठी एसएसएच की व्युत्पन्न करीत आहोत, वापरकर्त्याला 'टीम' जोडत आहोत (आपण यासाठी आपल्या नावाचे नाव निवडू शकता, त्यांच्या नावासह अ‍ॅड्यूझर कमांडचा वापर करा आणि आता अपंग संकेतशब्द वापरा). आम्ही एसयूडीओ ग्रुपमध्ये टीम देखील जोडतो, त्यांची एसएसएच की व्युत्पन्न करतो, अधिकृत की आणि त्यांच्या देखील आमची की जोडतो आणि त्यांची की मुद्रित करतो. हा नवीन वापरकर्ता आम्ही साइटवर कसा लॉग इन करतो.

नवीन टर्मिनलमध्ये, पुढे जा आणि सर्व्हर पुन्हा उघडा.

ssh team@XX.XX.XX.XX

आपल्याकडे एसएसएच की असल्याने आपल्याला यावेळी संकेतशब्दाची आवश्यकता नाही. साइट अधिक सुरक्षित ठेवण्यासाठी आम्ही संकेतशब्दासह लॉगिन देखील अक्षम केले आहे.

आता, हा सर्व्हर त्यावर कोणतीही माहिती नसताना पूर्णपणे रिक्त प्रारंभ करतो. चला आमच्या प्रोजेक्टला गिटमधून क्लोन करून प्रारंभ करूया जेणेकरून आम्ही ते रिमोट मशीनवर डाउनलोड आणि चालवू शकू. एसएसएच वर कनेक्ट केलेल्या रिमोट सर्व्हरवर प्रथम आपली एसएसएच की मुद्रित करा:

cat ~/.ssh/id_rsa.pub

पुढे, आमच्या गिट रेपॉजिटरी सेट करण्यापूर्वी आम्ही केलेल्या गिट सेटिंग्जमध्ये ही की पेस्ट करा. आम्ही आता आमचा प्रकल्प थेट सर्व्हरवर क्लोन करू शकतो. आपण प्रथम स्थानिक पातळीवर या प्रकल्पाचा बॅक अप घेतला असल्याचे सुनिश्चित करा जेणेकरून ते डाउनलोड करण्यासाठी गिट सर्व्हरवर आहे.

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

परिपूर्ण. आता सर्व फायली येथे आहेत. आम्ही त्यांना एलएस सह पाहू शकतो

ls

आता, सर्व्हर सेट करण्यास प्रारंभ करूया. प्रथम, आपल्या प्रोजेक्ट निर्देशिकेत आम्ही प्रकल्पासाठी वापरलेल्या साध्या, संस्मरणीय नावामध्ये कॉपी करा.

cp -r yourproject whatyoucalledit

जिथे "व्हॉटिओकॅलडिट" हे आपल्या प्रकल्पाचे नवीन नाव आहे. पुढे, आम्हाला सर्व्हर सेट अप करण्यासाठी मूलभूत उपयुक्तता तयार करण्याची आवश्यकता आहे. आम्ही ही उपयुक्तता जतन करू आणि भविष्यात वापरू. ही उपयुक्तता तयार करण्यासाठी, आम्ही स्क्रिप्ट कसे संपादित करतो हे परिभाषित करण्यासाठी वापरकर्ता बायनरी तयार करूया. बॅश वापरणे, संपादन/usr/bin/ascript

sudo nano /usr/bin/ascript

तेथे सुडो वापरण्याची खात्री करा जेणेकरून आपल्याकडे फाईल संपादित करण्याची परवानगी आहे. फाईलमध्ये या ओळी जोडा:

# !/बिन/बॅश
    echo "# !/बिन/बॅश ">>/usr/bin/$ 1

लक्षात ठेवा ही स्क्रिप्ट एक युक्तिवाद, स्क्रिप्टचे नाव $ 1 म्हणून घेते. प्रथम ते फाईल अस्तित्त्वात आहे की नाही हे तपासते किंवा अन्यथा ते तयार करते, स्क्रिप्टला बॅश असल्याचे घोषित करण्यासाठी प्रथम ओळ जोडते, त्याच्या परवानग्या बदलतात, संपादित करतात आणि त्याचे नाव /इत्यादी /एएससीआरसीटीमध्ये जोडते ज्यामुळे आम्ही तयार करीत असलेल्या स्क्रिप्टची नावे संग्रहित करू शकतात. जर फाईल आधीपासून अस्तित्वात असेल तर फक्त परवानग्या बदला आणि ते संपादित करा. फाईल जतन करा आणि पुढे आम्ही त्या परवानग्या बदलू. जोपर्यंत आपण ही स्क्रिप्ट वापरत नाही तोपर्यंत आम्हाला पुन्हा ते करण्याची गरज नाही.

sudo chmod a+x /usr/bin/ascript

परिपूर्ण. आता सेटअप नावाची स्क्रिप्ट तयार करूया. प्रथम, आपल्याला भारावून टाकण्यासाठी नाही, परंतु माझी सेटअप स्क्रिप्ट कशी दिसते ते पहा. आपल्या प्रकल्पात ही स्क्रिप्ट कशी दिसली पाहिजे यावर आम्ही चालत जाऊ, आपल्याला माझ्या स्क्रिप्टमधील प्रत्येक गोष्टीची सुरुवात करण्यासाठी आवश्यक नाही.

# !/बिन/बॅश
# sudo chmod a+x स्क्रिप्ट्स/यूजरटअप
# ./scripts/usersetup
# एसएसएच-कीजेन
# प्रकल्प निर्देशिका
# लॉग कमांड
# नॅनो कॉन्फिगरेशन
# गिट कॉन्फिगरेशन
# अद्यतनित करा आणि स्थापित करा
# क्लॅमाव अँटीव्हायरस सक्षम करा
# होस्टनाव सेट करा
# सेटअप पोस्टग्रेस
# सेटअप डेटाबेस बॅकअप
# आयपीटीएबल्स अक्षम करा
# बिटडेफेंडर स्थापित करा
# सेटअप पोस्टफिक्स
# डीआरएस तयार करा
# व्हर्च्युलेनव्ह सेटअप
# अवलंबन मिळवा आणि तयार करा
# फायरवॉल नियम सेट करा
# पायपीआय अवलंबित्व स्थापित करा
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# पिप स्थापित ओपनसीव्ही-पायथॉन == 4.5.5.64
# पीआयपी ओपनसीव्ही-कॉन्ट्रिब-पायथॉन == 4.5.5.64 स्थापित करा
# सर्टबॉट स्थापित करा
# सर्टबॉट चालवा
# मेल सर्व्हर रीलोड करा
# कॉपी प्रमाणपत्रे
# sudo cp /etc/LETSENCRYPT/live/femmebabe.com/privkey.pem Privekey.pem
# sudo cp /etc/Letsencrypt/live/femmebabe.com/cert.pem cert.pem
# पॅच व्हॅनव्ही
# वापरकर्ता सेटिंग्ज सेट करा
# परवानग्या सेट करा
# sudo chown -r कार्यसंघ: वापरकर्ते/var/run/run/
# सुडो कॅव्हन रूट: रूट/रन/सुडो/टीएस -आर
# sudo chmod 664 db.sqlite3
# sudo chown www-data: वापरकर्ते db.sqlite3
# कॉन्फिगरेशन कॉपी करा आणि परवानग्या सेट करा
# सेटअप डेटाबेस
# पीएएम कॉन्फिगरेशन इंजेक्ट करा आणि सदोष एसएसएच कॉन्फिगरेशन काढा
# sudo sed -i '' -e '$ d' /etc/pam.d/sshd
# sudo sed -i '' -e '$ d' /etc /प्रोफाइल
# बिन स्क्रिप्ट्स कॉपी करा आणि परवानग्या सेट करा
# सेवा रीलोड करा आणि सक्षम करा
# अपाचे मॉड्यूल सक्षम करा
# sudo a2dismod MPM_EVENT
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# डीफॉल्ट साइट अक्षम करा
# आमची साइट सक्षम करा
# रीलोड डिमन आणि रीस्टार्ट अपाचे, पोस्टफिक्स आणि ओपनडकीम
# परवानग्या सेट करा
# स्वॅप कॉन्फिगरेशन
# आयएनटी मथळा इंजिन
# सेटअप गिट
# डोमेन कॉन्फिगरेशनसाठी आयपीव्ही 6 आणि ओपनडकीम दर्शवा
# सेटअप पूर्ण झाले

हे बरेच सेटअप आहे! थोडक्यात, हा कोड कमांडस, नॅनो आणि गिट कॉन्फिगर करतो, फायलींवर प्रती, डाउनलोड आणि स्थापित करतो उबंटू एपीटी पॅकेजेस, पायथन अवलंबन, पोस्टफिक्स कॉन्फिगर करते, पोस्टफिक्स कॉन्फिगर करते (डेटाबेस सर्व्हर) आणि डेटाबेस कॉन्फिगर करते, यूएफडब्ल्यू (अनइम्पिलेटेड फायरवॉल, आयपीटीएटीएस डीओ डाउनलोड करते) सर्व्हर सेट अप करते, कॉन्फिगरेशन स्थापित करते, एसआरपी सुरू करते आणि सक्षम करते, स्वॅपचे वाटप करते, परवानग्या सेट करते आणि आयपी, आयपीव्ही 6 पत्ता आणि ओपनडकीम की मुद्रित करते. बर्‍यापैकी सोपे आहे, परंतु ते बर्‍याच कोडसारखे दिसते. आम्हाला यापैकी बर्‍याच गोष्टींची आवश्यकता नाही कारण आमच्याकडे अवलंबन नाही, आम्ही भाजी किंवा कोशिंबीर बनवण्यासाठी उपयुक्त अशी एक वनस्पती, भाजी किंवा कोशिंबीर बनवण्यासाठी उपयुक्त अशी एक वनस्पती किंवा डेफ्ने वापरत नाही, परंतु प्रारंभ करण्यासाठी आम्ही त्यापैकी काही स्थापित करू. लक्षात घ्या की या कोडमध्ये अनेक वेळा डोमेन घोषित केले आहे.

आम्हाला डोमेन नाव (जे एक लहान वार्षिक फी आहे) खरेदी करण्याची आवश्यकता असेल. मी डोमेन खरेदी करण्यासाठी स्क्वेअरस्पेसची शिफारस करतो, त्यांचे लेआउट अंतर्ज्ञानी आणि वापरण्यास सुलभ आहे. आपण आपल्या आवडीचे कोणतेही डोमेन खरेदी करू शकता, परंतु मी या उदाहरणात डोमेन फेमेमेबे.कॉम वापरत आहे. एकदा आपण एखादे डोमेन विकत घेतल्यानंतर, स्क्वेअरस्पेस डीएनएस कॉन्फिगरेशन पॅनेलकडे जा आणि आयपी पत्त्याद्वारे सर्व्हरवर आपले डोमेन दर्शविणारा एक रेकॉर्ड जोडा. हे यासारखे दिसले पाहिजे:

@ A xx.xx.xx.xx

होस्ट म्हणून @ ऑपरेटरसह, म्हणजे या डोमेन अंतर्गत सर्व सबडोमेन आणि रूट डोमेन सर्व सर्व्हरकडे पुनर्निर्देशित करेल. घोषित करण्यासाठी आणखी रेकॉर्ड आहेत, परंतु एकदा आम्ही मेल पाठविण्यास तयार झाल्यावर आम्ही याकडे जाऊ शकतो. लक्षात ठेवा, आपण सर्व्हरकडून यशस्वीरित्या मेल पाठविण्यास सक्षम होण्यास कित्येक दिवस लागू शकतात. आम्ही सेट करीत असलेल्या डीएनएस रेकॉर्डचा प्रसार करण्यास वेळ लागेल.

असं असलं तरी, आम्हाला प्रारंभ करण्याची एकमेव रेकॉर्ड म्हणजे एक रेकॉर्ड. तर आता आम्ही आमच्या प्रकल्पानुसार खालील स्क्रिप्ट भरू शकतो आणि ते चालवू शकतो.

आम्हाला मूलभूत प्रगतीसाठी जे आवश्यक आहे ते स्थापित करण्यासाठी लहान सेटअप स्क्रिप्टसह प्रारंभ करूया. आम्ही अद्याप इतक्या अवलंबन किंवा पोस्टग्रेएसक्यूएल वापरणार नाही, आम्ही फक्त एक मूलभूत HTTP सर्व्हर सुरू करू आणि ते पूर्ण झाल्यावर प्रमाणित करण्याची चिंता करू. लक्षात ठेवा, एचटीटीपीएस प्रमाणपत्र मिळविण्यासाठी आणि सर्व्हर सुरक्षितपणे चालविण्यासाठी, आम्हाला सर्व्हरसह भाड्याने देण्याची आवश्यकता आहे. आत्तासाठी, या फाईलमधील "टीम" आपल्या वापरकर्त्याच्या नावाने आपल्या प्रकल्पाच्या निर्देशिकेसह "दिर" बदला आणि <> टॅगमध्ये आपले ईमेल आणि डोमेन पुरव.

याव्यतिरिक्त, आम्ही हा कोड चालवण्यापूर्वी, आम्हाला होस्टिंग प्रदाता समर्थन देणा fire ्या फायरवॉलमध्ये सेटिंग्ज बदलण्याची आवश्यकता आहे. सहसा हे आपल्या होस्टिंग प्रदात्याच्या 'नेटवर्क' टॅबमध्ये असते किंवा आपण सेल्फ होस्टिंग असल्यास, हे आपल्या राउटरच्या 'पोर्ट फॉरवर्डिंग' विभागात आहे. आपण सेल्फ होस्टिंग वापरत असल्यास आपल्या सर्व्हर मशीनच्या पत्त्यासह आपल्या राउटरद्वारे आपल्याला स्थिर आयपी देखील सेट करू इच्छित आहात. वाचन/लेखन प्रवेशासाठी आपल्याला खालील पोर्ट उघडण्याची आवश्यकता असेल.

22 (एसएसएच) 25 (मेल) 587 (मेल) 110 (मेल क्लायंट) 80 (एचटीटीपी) 443 (एचटीटीपीएस)

# !/बिन/बॅश
# लॉग कमांड
# नॅनो कॉन्फिगरेशन
# गिट कॉन्फिगरेशन
# अद्यतनित करा आणि स्थापित करा
# क्लॅमाव अँटीव्हायरस सक्षम करा
# होस्टनाव सेट करा
# सेटअप डेटाबेस बॅकअप
# आयपीटीएबल्स अक्षम करा
# व्हर्च्युलेनव्ह सेटअप
# सर्टबॉट स्थापित करा
# सर्टबॉट चालवा
# वापरकर्ता सेटिंग्ज सेट करा
# परवानग्या सेट करा
# sudo chown -r कार्यसंघ: वापरकर्ते/var/run/run/
# सुडो कॅव्हन रूट: रूट/रन/सुडो/टीएस -आर
# सेवा रीलोड करा आणि सक्षम करा
# अपाचे मॉड्यूल सक्षम करा
# रीलोड डिमन आणि रीस्टार्ट अपाचे, पोस्टफिक्स आणि ओपनडकीम
# डोमेन कॉन्फिगरेशनसाठी आयपीव्ही 6 आणि ओपनडकीम दर्शवा

हा कोड चालवण्यापूर्वी, आपण खरेदी केलेले डोमेन सर्व्हरशी कनेक्ट केलेले असल्याचे सुनिश्चित करा. हे करण्यासाठी, आपल्या स्थानिक मशीनवर टर्मिनल उघडा आणि आपल्या डोमेनसह ही आज्ञा चालवा:

ping femmebabe.com # पिंग नंतर येथे आपले डोमेन घाला

जर सर्व चांगले दिसत असेल आणि सर्व्हर प्रतिसाद पाठवत असेल तर आम्ही स्क्रिप्ट चालविण्यास आणि पॅकेजेस स्थापित करण्यास तसेच प्रारंभ करण्यास, आमच्या अपाचे सर्व्हरला प्रारंभ, सक्षम आणि प्रमाणित करण्यास तयार आहोत.

पोस्टफिक्स कॉन्फिगर करण्यासाठी हे सर्व सेटअप आवश्यक नाही, आम्ही नंतर त्या सेटअपकडे पाहू. आत्तासाठी, हा सेटअप कोड चालवा आणि आपला सर्व्हर स्थापित आणि प्रमाणित करण्यास काही मिनिटे लागतील. पुन्हा एकदा, आपण खरेदी केलेल्या नावानुसार स्क्रिप्टमध्ये नाव, ईमेल आणि डोमेन नाव पुनर्स्थित करण्याचे सुनिश्चित करा.

आता सर्व्हरची तरतूद केली गेली आहे, आपण कोणत्याही वेब ब्राउझरमध्ये URL वर जाऊ शकता आणि सर्व्हर एचटीटीपीएस चालवित आहे हे सुनिश्चित करण्यासाठी तपासू शकता. ते नसल्यास, डीएनएस रेकॉर्ड पकडण्यासाठी थोड्या वेळासाठी प्रतीक्षा करण्याचा प्रयत्न करा आणि नंतर प्रमाणपत्र प्रमाणपत्र पुन्हा प्रयत्न करण्यासाठी खालील कमांड चालवा:

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

जोपर्यंत आपण सर्वकाही योग्यरित्या कॉन्फिगर केले आहे तोपर्यंत आपण आपला कोड कार्यरत आहे आणि थेट वेबपृष्ठ प्रदर्शित करीत आहे हे जाणून घेण्यासाठी आपण अपाचेच्या डीफॉल्ट पृष्ठावर प्रवेश करण्यास सक्षम असावे. पुढे, आमचा डीफॉल्ट डीबग मोड उत्पादनात बदलण्यासाठी सेटिंग्ज.पीपी संपादित करूया. आम्ही सेटिंग्जमध्ये डोमेन तसेच अंतर्गत आयपीएस देखील कॉन्फिगर करू.

nano yourproject/settings.py

सेटिंग्जमध्ये, या ओळी बदला/जोडा.

# साइट कॉन्फिगरेशन

आता, आम्हाला अपाचे 2 कॉन्फिगर करणे आवश्यक आहे. चला आम्ही या ओळीसह तैनात करू अशी कॉन्फिगरेशन फाइल संपादित करूया:

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

या कॉन्फिगरेशन फाईलमध्ये आमचे डोमेन नाव आणि वापरकर्त्याचे आणि प्रकल्पाचे नाव असावे. मी डोमेन नाव फेमेमेबेब.कॉम, वापरकर्तानाव कार्यसंघ आणि फेमेबाबे नावाचा प्रकल्प वापरत आहे.

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>

आपला सर्व्हर कॉन्फिगर करताना या उदाहरण कोडमध्ये प्रकल्प, निर्देशिका आणि डोमेनचे नाव पुनर्स्थित करण्याचे सुनिश्चित करा. आता, आम्हाला डीफॉल्ट साइट अक्षम करण्याची आवश्यकता आहे. हे बॅश वापरुन केले जाऊ शकते.

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

पुढे, आम्ही डीफॉल्ट साइट सक्षम करू शकतो आणि बॅशचा वापर करून अपाचे 2 रीलोड करू शकतो. /Etc/apache2/साइट्स-उपलब्ध/मध्ये संपादित करताना आपण घोषित केलेल्या फाईलच्या नावाने फेमेबाबे पुनर्स्थित करणे लक्षात ठेवा.

sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2

नेव्हबारमधील आपल्या डोमेनवर परत जा. आपण आपल्या वेब ब्राउझरमध्ये कॉन्फिगर केलेली साइट आपण पहावी. अभिनंदन! आपण ते न पाहिल्यास, आपल्याला काही बदल करण्याची आवश्यकता असू शकते. आपल्या प्रकल्पातील सेटिंग्ज, अपाचे कॉन्फिगरेशन आणि आपल्याकडे काही त्रुटी नसल्याचे सुनिश्चित करा आणि त्रुटींसाठी प्रकल्प तपासण्यासाठी खालील कमांड चालवा.

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

आपल्याकडे आपल्या पायथन प्रकल्पात त्रुटी असल्यास, ते जेथे आहेत तेथे त्यांना शोधा आणि त्यांना निराकरण करा. आपल्या सर्व चुका कोठे आहेत यावर अवलंबून आपण पाहू शकणार नाही, म्हणून जर आपल्याकडे "पॉप्युलेट रींट्रंट नाही" असे म्हणणारी त्रुटी असल्यास, त्रुटी उघडकीस आणण्यासाठी आभासी वातावरणात, रेजिस्ट्री.पीमध्ये खालील फाईल संपादित करा.

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

Line 83 वर स्क्रोल करा, जिथे ही रनटाइम त्रुटी वाढविली आहे (रनटाइम एरर ("पॉप्युलेट () रींट्रंट नाही") वाढवा आणि या ओळीच्या आधी एक टिप्पणी जोडा, नंतर त्याच इंडेंटेशनसह, सेल्फ.अॅप_कॉन्फिग्स = {}. हे असे दिसते:

                # अ‍ॅपकॉन्फिग.रेडी () चालू टाळण्यासाठी रींट्रंट कॉलस प्रतिबंधित करा
                # दोनदा पद्धती.
# रनटाइम एरर वाढवा ("पॉप्युलेट () रींट्रंट नाही")

त्यानंतर आपण पुन्हा प्रकल्प तपासू शकता आणि त्रुटी उघडकीस आणू शकता.

python manage.py check

मग आपण त्रुटी पाहू शकता आणि त्यास निराकरण करू शकता. जेव्हा आपण ते निश्चित केले आणि कोड कोणत्याही त्रुटीशिवाय संकलित करतो, तेव्हा फाइल परत बदलण्याची खात्री करा जेणेकरून ते असे दिसते:

                # अ‍ॅपकॉन्फिग.रेडी () चालू टाळण्यासाठी रींट्रंट कॉलस प्रतिबंधित करा
                # दोनदा पद्धती.
# सेल्फ.अॅप_कॉन्फिग्स = {}

सर्व्हर ऑनलाईन असेल तर, जेव्हा आम्ही त्यात आणखी काही बदल करतो, तेव्हा सर्व्हर रीलोड करण्यासाठी आम्हाला खालील कमांड वापरण्याची आवश्यकता आहे:

sudo systemctl reload apache2

छान! पण मेल पाठविण्याबद्दल काय? ईमेल पाठविणे सुरू करण्यासाठी, आम्हाला प्रथम डोमेन कॉन्फिगरेशन अद्यतनित करण्याची आवश्यकता असेल. हे स्क्वेअरस्पेसमधील आपल्या डीएनएस पॅनेलमध्ये किंवा आपण निवडलेल्या कोणत्याही डोमेन नावाच्या निबंधकात असावे. आम्हाला कॉन्फिगरेशन स्थापित करणे आणि जोडणे देखील आवश्यक आहे आणि काही कमांड चालवण्याची आवश्यकता आहे.

प्रथम, सर्व्हरचा आयपीव्ही 6 पत्ता घेऊया. त्यानंतर आम्ही आपले डीएनएस उघडू आणि रेकॉर्ड जोडू.

सर्व्हरचा आयपीव्ही 6 पत्ता मिळविण्यासाठी, हा आदेश वापरा:

ip -6 addr

आता आम्ही डीएनएस सेटिंग्जमध्ये खालील रेकॉर्ड जोडू शकतो. माझे रेकॉर्ड असे दिसत आहेत. तथापि, आपल्या रेकॉर्डसाठी, आपण आयपी पत्ता आपल्या आयपीसह पुनर्स्थित करावा (75.147.182.214 नाही, ते माझे आहे). मागील आदेशासह सापडलेल्या आपल्या आयपीव्ही 6 पत्त्याच्या जागी आपले डोमेन देखील जोडा (आपण माझे, फे 80 :: 725 ए: एफएफएफ: एफएफएफ: फे 49: 3E02) वापरू शकत नाही. आत्तासाठी डोमेनकीबद्दल काळजी करू नका, जेव्हा आम्ही पोस्टफिक्स, मेल सर्व्हर, ओपेन्डकीमसह सेट अप करतो आणि की मुद्रित करतो तेव्हा हे तयार केले जाते. आम्ही हे शेवटचे कॉन्फिगर करू.

@ अ एन/ए 75.147.182.214

@ एमएक्स 10 fememebabe.com

@ पीटीआर एन/ए fememebabe.com

@ Txt एन/ए Txt @ v = spf1 MX IP75.147.182.214IP6: FE80 :: 725A: fff: Fe49: 3e02 ~ सर्व

डीफॉल्ट._बीमी Txt एन/ए v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg

_डमार्क Txt एन/ए व्ही = डीएमएआरसी 1; पी = काहीही नाही

SENDONLY._DOMAINKEY Txt एन/ए

आता, आम्हाला पोस्टफिक्ससाठी काही चिकाटी कॉन्फिगरेशन जोडण्याची आवश्यकता आहे. आपण वापरत असलेल्या डोमेन नावासह आम्ही डोमेन नाव, fememebabe.com पुनर्स्थित करीत असल्याचे सुनिश्चित करणे आवश्यक आहे. ओएस स्थापित करण्यासाठी सर्व कॉन्फिगरेशन फायली एक -एक पाहू आणि आमच्या प्रोजेक्टमध्ये कॉन्फिगरेशन नावाच्या निर्देशिकेत स्थापित करूया.

nano config/etc_postfix_main.cf

हा मजकूर फाईलमध्ये जोडा

# टिप्पणी केलेल्या, अधिक पूर्ण आवृत्तीसाठी /usr/share/postfix/main.cf.dist पहा
# डेबियन विशिष्ट: फाईलचे नाव निर्दिष्ट केल्यास प्रथम कारणीभूत ठरेल
# नाव म्हणून वापरल्या जाणार्‍या त्या फाईलची ओळ.  डेबियन डीफॉल्ट
# /etc /मेलनाव आहे.
# Myorigin = /etc /मेलनाव
# जोडणे .ोमेन हे एमयूएचे कार्य आहे.
# "विलंबित मेल" चेतावणी व्युत्पन्न करण्यासाठी पुढील ओळ अनकॉममेंट
# विलंब_वारिंग_टाइम = 4 एच
# पहा
# ताजी स्थापना.
# टीएलएस पॅरामीटर्स
# मिल्टर कॉन्फिगरेशन

पुढील कॉन्फिगरेशन!

nano config/etc_postfix_master.cf

या ओळी जोडा:

# 
# पोस्टफिक्स मास्टर प्रक्रिया कॉन्फिगरेशन फाइल.  स्वरूपातील तपशीलांसाठी
# फाईलच्या, मास्टर (5) मॅन्युअल पृष्ठ पहा (आज्ञा: "मॅन 5 मास्टर" किंवा
# ऑनलाईन: http://www.postfix.org/master.5.html).
# 
# ही फाईल संपादित केल्यानंतर "पोस्टफिक्स रीलोड" कार्यान्वित करण्यास विसरू नका.
# 
# =====================================================================================================
# सेवा प्रकार खाजगी अप्रिय क्रूट वेकअप मॅक्सप्रोक कमांड + आर्गेस
# (होय) (होय) (नाही) (कधीही नाही) (100)
# =====================================================================================================
# एसएमटीपी इनट एन - वाय - 1 पोस्टस्क्रीन
# एसएमटीपीडी पास - - वाय - - एसएमटीपीडी
# डीएनएसब्लॉग युनिक्स - - वाय - 0 डीएनएसब्लॉग
# tlsproxy UNIX - - y - 0 tlsproxy
# एक निवडा: केवळ लूपबॅक क्लायंटसाठी किंवा कोणत्याही क्लायंटसाठी सबमिशन सक्षम करा.
# 127.0.0.1: submission inet n - y - - एसएमटीपीडी
# -ओ syslog_name = पोस्टफिक्स/सबमिशन
# -ओ एसएमटीपीडी_टीएलएस_सुरिटी_लेव्हल = एन्क्रिप्ट
# -ओ एसएमटीपीडी_एसएएसएल_एयूयूटी_अन करण्यायोग्य = होय
# -ओ एसएमटीपीडी_टीएलएस_एथ_ऑनली = होय
# -ओ एसएमटीपीडी_रेजेक्ट_अनलिस्टेड_रेसिपिएंट = नाही
# -ओ एसएमटीपीडी_क्लिएंट_रेस्ट्रीक्शन्स = $ mua_client_restrictions
# -ओ एसएमटीपीडी_हेलो_रेस्ट्रीक्शन = $ mua_helo_restrictions
# -ओ एसएमटीपीडी_सेंडर_रेस्ट्रीक्शन = $ mua_sender_restrictions
# -ओ एसएमटीपीडी_रेसिपिएंट_रेस्ट्रीशन =
# -ओ एसएमटीपीडी_रेले_रेस्ट्रीक्शन्स = परमिट_सॅसल_अथेंटिकेटेड, नाकार
# -ओ मिल्टर_मॅक्रो_डेमोन_नाव = मूळ
# एक निवडा: केवळ लूपबॅक क्लायंटसाठी किंवा कोणत्याही क्लायंटसाठी एसएमटीपीएस सक्षम करा.
# 127.0.0.1: एसएमटीपीएस इनट एन - वाय - - एसएमटीपीडी
# एसएमटीपीएस इनट एन - वाय - - एसएमटीपीडी
# -ओ syslog_name = पोस्टफिक्स/एसएमटीपी
# -ओ एसएमटीपीडी_टीएलएस_डब्ल्यूआरएपरमोड = होय
# -ओ एसएमटीपीडी_एसएएसएल_एयूयूटी_अन करण्यायोग्य = होय
# -ओ एसएमटीपीडी_रेजेक्ट_अनलिस्टेड_रेसिपिएंट = नाही
# -ओ एसएमटीपीडी_क्लिएंट_रेस्ट्रीक्शन्स = $ mua_client_restrictions
# -ओ एसएमटीपीडी_हेलो_रेस्ट्रीक्शन = $ mua_helo_restrictions
# -ओ एसएमटीपीडी_सेंडर_रेस्ट्रीक्शन = $ mua_sender_restrictions
# -ओ एसएमटीपीडी_रेसिपिएंट_रेस्ट्रीशन =
# -ओ एसएमटीपीडी_रेले_रेस्ट्रीक्शन्स = परमिट_सॅसल_अथेंटिकेटेड, नाकार
# -ओ मिल्टर_मॅक्रो_डेमोन_नाव = मूळ
# 628 inet n - y - - qmqpd
# क्यूएमजीआर युनिक्स एन - एन 300 1 ओक्यूएमजीआर
# -ओ एसएमटीपी_हेलो_टाइमआउट = 5 -ओ एसएमटीपी_कॉननेक्ट_टाइमआउट = 5
# 
# ====================================================================================
# नॉन-पोस्टफिक्स सॉफ्टवेअरचे इंटरफेस. मॅन्युअलची खात्री करुन घ्या
# नॉन-पोस्टफिक्स सॉफ्टवेअरची पृष्ठे त्याला कोणते पर्याय हवे आहेत हे शोधण्यासाठी.
# 
# खालील बर्‍याच सेवा पोस्टफिक्स पाईप (8) वितरण वापरतात
# एजंट.  $ {प्राप्तकर्त्याबद्दल माहितीसाठी पाईप (8) मॅन पृष्ठ पहा
# आणि इतर संदेश लिफाफा पर्याय.
# ====================================================================================
# 
# मेलड्रॉप. तपशीलांसाठी पोस्टफिक्स मेलड्रॉप_रेडमे फाइल पहा.
# मुख्य. सीएफ मध्ये देखील निर्दिष्ट करा: मेलड्रॉप_डेस्टिनेशन_रेसिपिएंट_लिमिट = 1
# 
# 
# ====================================================================================
# 
# अलीकडील सायरस आवृत्त्या विद्यमान "एलएमटीपी" मास्टर.सीएफ प्रविष्टी वापरू शकतात.
# 
# सायरस.कॉन्फमध्ये निर्दिष्ट करा:
# एलएमटीपी सीएमडी = "एलएमटीपीडी -ए" ऐका = "लोकल होस्ट: एलएमटीपी" प्रोटो = टीसीपी 4
# 
# खालीलपैकी एक किंवा अधिक मुख्य. सीएफ मध्ये निर्दिष्ट करा:
# मेलबॉक्स_ट्रान्सपोर्ट = एलएमटीपी: आयएनईटी: लोकल होस्ट
# व्हर्च्युअल_ट्रान्सपोर्ट = एलएमटीपी: आयएनईटी: लोकल होस्ट
# 
# ====================================================================================
# 
# सायरस 2.1.5 (आमोस गौक्स)
# मुख्य. सीएफ मध्ये देखील निर्दिष्ट करा: सायरस_डेस्टिनेशन_रेसिपिएंट_लिमिट = 1
# 
# सायरस युनिक्स - एन एन - - पाईप
# ध्वज = डीआरएक्स वापरकर्ता = सायरस आर्गव्ही =/सायरस/बिन/डिलिव्हरी -ई -आर $ {प्रेषक} -एम $ {विस्तार} $ {वापरकर्ता}
# 
# ====================================================================================
# सायरस मार्गे प्रसूतीचे जुने उदाहरण.
# 
# ओल्ड -सायरस युनिक्स - एन एन - - पाईप
# ध्वज = आर वापरकर्ता = सायरस आर्गव्ही =/सायरस/बिन/डिलिव्हरी -ई -एम $ {विस्तार} $ {वापरकर्ता}
# 
# ====================================================================================
# 
# कॉन्फिगरेशन तपशीलांसाठी पोस्टफिक्स uucp_readme फाइल पहा.
# 
# 
# इतर बाह्य वितरण पद्धती.
# 

आणि ओपनडकीम कॉन्फिगरेशन. ओपेंडकिम त्यांना अधिक सुरक्षित करण्यासाठी डोमेन की सह ईमेल सर्व्हर ओळखते. त्याशिवाय, मेलवर स्वाक्षरी नाही आणि कदाचित ते इनबॉक्समध्ये बनवू शकत नाही.

nano config/etc_default_opendkim

या ओळी जोडा:

# टीपः ही एक वारसा कॉन्फिगरेशन फाइल आहे. हे ओपेन्डकीम द्वारे वापरले जात नाही
# सिस्टमडी सेवा. कृपया मधील संबंधित कॉन्फिगरेशन पॅरामीटर्स वापरा
# त्याऐवजी /etc/opendkim.conf.
# 
# पूर्वी, एखादी व्यक्ती येथे डीफॉल्ट सेटिंग्ज संपादित करेल आणि नंतर कार्यान्वित करेल
# /lib/opendkim/opendkim.service.gerate येथे सिस्टमड ओव्हरराइड फायली व्युत्पन्न करण्यासाठी
# /etc/systemd/system/opendkim.service.d/override.conf आणि
# /etc/tmpfiles.d/opendkim.conf. हे अद्याप शक्य असले तरी आता ते आहे
# /etc/opendkim.conf मध्ये थेट सेटिंग्ज समायोजित करण्याची शिफारस केली.
# 
# Demon_opts = ""
# यासह युनिक्स सॉकेट वापरण्यासाठी/var/spool/postfix/run/opendkim वर बदला
# क्रोट मध्ये पोस्टफिक्स:
# रुंदिर =/वर/स्पूल/पोस्टफिक्स/रन/ओपेंडकिम
# 
# वैकल्पिक सॉकेट निर्दिष्ट करण्यासाठी बिनधास्त
# लक्षात घ्या की हे सेट केल्याने ओपनडकीम.कॉन्फमधील कोणतेही सॉकेट मूल्य अधिलिखित होईल
# डीफॉल्ट:
# पोर्ट 54321 वर सर्व इंटरफेस ऐका:
# सॉकेट = इनेट: 54321
# पोर्ट 12345 वर लूपबॅकवर ऐका:
# सॉकेट = इनेट: 12345@लोकलहोस्ट
# पोर्ट 12345 वर 192.0.2.1 वर ऐका:
# सॉकेट = इनट: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf

या ओळी जोडा:

# डीफॉल्ट_प्रोसेस_लिमिट = 100
# डीफॉल्ट_क्लिएंट_लिमिट = 1000
# सेवा प्रक्रियेसाठी डीफॉल्ट व्हीएसझेड (व्हर्च्युअल मेमरी आकार) मर्यादा. हे प्रामुख्याने आहे
# ते खाण्यापूर्वी मेमरी गळती करणार्‍या प्रक्रिया पकडण्याचा आणि मारण्याचा हेतू आहे
# सर्वकाही.
# डीफॉल्ट_व्हीएसझेड_लिमिट = 256 मी
# लॉगिन वापरकर्ता अंतर्गतरित्या लॉगिन प्रक्रियेद्वारे वापरला जातो. हे सर्वात अविश्वासू आहे
# डोव्हकोट सिस्टममधील वापरकर्ता. त्यात कशावरही प्रवेश नसावा.
# डीफॉल्ट_लॉगिन_यूझर = डोव्हनल
# अंतर्गत वापरकर्त्याचा वापर अप्रिय प्रक्रियेद्वारे केला जातो. ते वेगळे असले पाहिजे
# लॉगिन वापरकर्ता, जेणेकरून लॉगिन प्रक्रिया इतर प्रक्रियेस अडथळा आणू शकत नाही.
# डीफॉल्ट_इन्टर्नल_यूझर = डोव्हकोट
    # पोर्ट = 143
    # पोर्ट = 993
    # एसएसएल = होय
  # नवीन प्रक्रिया सुरू करण्यापूर्वी हाताळण्यासाठी कनेक्शनची संख्या. सामान्यत:
  # फक्त उपयुक्त मूल्ये 0 (अमर्यादित) किंवा 1. 1 अधिक सुरक्षित आहेत, परंतु 0
  # वेगवान आहे. <डॉक/विकी/लॉगिनप्रोसेस.टीएक्सटी>
  # सेवा_कॉन्ट = 1
  # अधिक कनेक्शनची प्रतीक्षा करत राहण्यासाठी प्रक्रियेची संख्या.
  # प्रक्रिया_मिन_एव्हल = 0
  # आपण सर्व्हिस_कॉन्ट = 0 सेट केल्यास कदाचित आपल्याला हे वाढविणे आवश्यक आहे.
  # vsz_limit = $ default_vsz_limit
    # पोर्ट = 110
    # पोर्ट = 995
    # एसएसएल = होय
    # पोर्ट = 587
  # आपण वरील UNIX सॉकेट वापरू शकत नसल्यास केवळ INET श्रोता तयार करा
  # inet_listener lmtp {
    # संपूर्ण इंटरनेटसाठी एलएमटीपी दृश्यमान बनविणे टाळा
    # पत्ता =
    # पोर्ट =
  # }
  # बहुतेक मेमरी एमएमएपी () आयएनजी फायलींवर जाते. आपल्याला हे वाढवण्याची आवश्यकता असू शकते
  # आपल्याकडे प्रचंड मेलबॉक्सेस असल्यास मर्यादा.
  # vsz_limit = $ default_vsz_limit
  # कमाल. आयएमएपी प्रक्रियेची संख्या (कनेक्शन)
  # प्रक्रिया_लिमिट = 1024
  # कमाल. पीओपी 3 प्रक्रियेची संख्या (कनेक्शन)
  # प्रक्रिया_लिमिट = 1024
  # कमाल. एसएमटीपी सबमिशन प्रक्रियेची संख्या (कनेक्शन)
  # प्रक्रिया_लिमिट = 1024
  # Auth_socket_path डीफॉल्टनुसार या यूजरडीबी सॉकेटवर निर्देशित करते. हे सामान्यत: आहे
  # डोव्हकोट-एलडीए, डोव्हडम, शक्यतो आयएमएपी प्रक्रिया इ. द्वारे वापरलेले वापरकर्ते
  # या सॉकेटला पूर्ण परवानग्या सर्व वापरकर्तानावांची यादी मिळविण्यात सक्षम आहेत आणि
  # प्रत्येकाच्या यूजरडीबी लुकअपचे निकाल मिळवा.
  # 
  # डीफॉल्ट 0666 मोड कोणालाही सॉकेटशी कनेक्ट करण्याची परवानगी देतो, परंतु
  # यूजरडीबी लुकअप्स केवळ यशस्वी होईल जर यूजरडीबीने "यूआयडी" फील्ड परत केले तर
  # कॉलर प्रक्रियेच्या यूआयडीशी जुळते. तसेच कॉलरची यूआयडी किंवा जीआयडी जुळल्यास
  # सॉकेटचे यूआयडी किंवा गिड लुकअप यशस्वी होते. इतर काहीही अपयशी ठरते.
  # 
  # सर्व वापरकर्त्यांना शोधण्यासाठी कॉलरला पूर्ण परवानग्या देण्यासाठी, मोडमध्ये सेट करा
  # 0666 आणि डोव्हकोटपेक्षा दुसरे काहीतरी कर्नल अंमलात आणू देते
  # परवानग्या (उदा. 0777 प्रत्येकास पूर्ण परवानग्या अनुमती देतात).
  # ऑथ वर्कर प्रक्रिया डीफॉल्टनुसार रूट म्हणून चालविली जाते, जेणेकरून ते प्रवेश करू शकेल
  # /etc/सावली. हे आवश्यक नसल्यास, वापरकर्त्याने बदलले पाहिजे
  # $ default_internal_user.
  # वापरकर्ता = मूळ
  # डिक्ट प्रॉक्सी वापरल्यास, मेल प्रक्रियेस त्याच्या सॉकेटमध्ये प्रवेश असावा.
  # उदाहरणार्थ: मोड = 0660, गट = व्हीमेल आणि ग्लोबल मेल_एक्सेस_ ग्रुप्स = व्हीमेल
    # मोड = 0600
    # वापरकर्ता =
    # गट =

पुन्हा एकदा, आपण निवडलेल्या डोमेनसह या सर्व फायली, femmebabe.com मधील डोमेन पुनर्स्थित करण्याचे सुनिश्चित करा. पुढील फाईल संपादित करा, डोव्हकोटची कॉन्फिगरेशन,

nano config/etc_dovecot_dovecot

आणि या ओळी जोडा

## डोव्हकोट कॉन्फिगरेशन फाइल
# आपण घाईत असल्यास, http://wiki2.dovecot.org/quickconfigration पहा
# "डोव्हकॉन्फ -एन" कमांड बदललेल्या सेटिंग्जचे क्लीन आउटपुट देते. ते वापरा
# डोव्हकोट मेलिंग सूचीवर पोस्ट करताना फायली कॉपी आणि पेस्ट करण्याऐवजी.
# '# 'चारित्र्य आणि त्या नंतरचे सर्व काही टिप्पण्या म्हणून मानले जाते. अतिरिक्त जागा
# आणि टॅबकडे दुर्लक्ष केले जाते. आपण यापैकी एक स्पष्टपणे वापरू इच्छित असल्यास, ठेवा
# value inside quotes, eg.: key = "# चार आणि ट्रेलिंग व्हाइटस्पेस "
# बर्‍याच (परंतु सर्वच नाही) सेटिंग्ज भिन्न प्रोटोकॉल आणि/किंवा द्वारे अधिलिखित केल्या जाऊ शकतात
# स्त्रोत/गंतव्य आयपी विभागांमध्ये सेटिंग्ज ठेवून, उदाहरणार्थ:
# प्रोटोकॉल आयएमएपी}}, स्थानिक 127.0.0.1 {}, रिमोट 10.0.0.0/8 {}
# प्रत्येक सेटिंगसाठी डीफॉल्ट मूल्ये दर्शविली जातात, त्यास बिनधास्त करणे आवश्यक नाही
# ते. हे यासारखे अपवाद आहेत: कोणतेही विभाग नाहीत (उदा. नेमस्पेस {})
# किंवा प्लगइन सेटिंग्ज डीफॉल्टनुसार जोडल्या जातात, ती केवळ उदाहरणे म्हणून सूचीबद्ध आहेत.
# कॉन्फिगरेशनवर आधारित वास्तविक डीफॉल्टसह पथ देखील फक्त एक उदाहरणे आहेत
# पर्याय. येथे सूचीबद्ध केलेले पथ कॉन्फिगरेशन -प्रीफिक्स =/यूएसआरसाठी आहेत
# -sysconfdir =/etc-लोकलस्टेटेडर =/var
# स्थापित प्रोटोकॉल सक्षम करा
# आयपीएस किंवा होस्टची एक स्वल्पविराम विभक्त यादी जिथे कनेक्शनसाठी ऐकावे.
# "*" सर्व आयपीव्ही 4 इंटरफेसमध्ये ऐकते, "::" सर्व आयपीव्ही 6 इंटरफेसमध्ये ऐकते.
# आपण नॉन-डीफॉल्ट पोर्ट किंवा आणखी काही जटिल निर्दिष्ट करू इच्छित असल्यास,
# CONF.D/मास्टर.कॉन्फ संपादित करा.
# ऐका = *, ::
# रनटाइम डेटा कोठे संचयित करायचा बेस निर्देशिका.
# बेस_डिर =/var/run/dovecot/
# या उदाहरणाचे नाव. मल्टी-इन्स्टन्स सेटअप डोव्हडम आणि इतर आदेशांमध्ये
# कोणत्या उदाहरणाचा वापर केला आहे हे निवडण्यासाठी -i <extance_name> वापरू शकता (एक पर्यायी
# to -c <config_path>). उदाहरण नाव डोव्हकोट प्रक्रियेत देखील जोडले आहे
# पीएस आउटपुटमध्ये.
# उदाहरण_नाव = डोव्हकोट
# ग्राहकांसाठी अभिवादन संदेश.
# लॉगिन_ग्रेटिंग = डोव्हकोट सज्ज.
# विश्वसनीय नेटवर्क श्रेणीची जागा विभक्त केलेली यादी. यामधून कनेक्शन
# आयपींना त्यांचे आयपी पत्ते आणि पोर्ट अधिलिखित करण्याची परवानगी आहे (लॉगिंगसाठी आणि
# प्रमाणीकरण तपासणीसाठी). अक्षम_प्लेनटेक्स्ट_आथ देखील दुर्लक्ष केले जाते
# हे नेटवर्क. सामान्यत: आपण येथे आपले आयएमएपी प्रॉक्सी सर्व्हर निर्दिष्ट कराल.
# login_trusted_networks =
# लॉगिन प्रवेश चेक सॉकेट्सची जागा विभक्त केलेली यादी (उदा. टीसीपीडब्ल्यूआरएपी)
# लॉगिन_एक्सेस_सॉकेट्स =
# प्रॉक्सी_मायबेसह = होय प्रॉक्सी गंतव्य यापैकी कोणत्याही आयपीशी जुळत असल्यास, करू नका
# प्रॉक्सींग हे सामान्यपणे आवश्यक नाही, परंतु गंतव्यस्थान असल्यास उपयुक्त ठरू शकते
# आयपी उदा. लोड बॅलेन्सरचा आयपी.
# Auth_proxy_ सेल्फ =
# अधिक व्हर्बोज प्रक्रिया शीर्षके दर्शवा (पीएस मध्ये). सध्या वापरकर्त्याचे नाव आणि
# आयपी पत्ता. प्रत्यक्षात आयएमएपी प्रक्रिया कोण वापरत आहेत हे पाहण्यासाठी उपयुक्त
# (उदा. सामायिक मेलबॉक्सेस किंवा समान यूआयडी एकाधिक खात्यांसाठी वापरली असल्यास).
# Verbose_proctitle = नाही
# डोव्हकोट मास्टर प्रक्रिया बंद झाल्यावर सर्व प्रक्रिया मारल्या पाहिजेत.
# हे "नाही" वर सेट करणे म्हणजे डोव्हकोटशिवाय श्रेणीसुधारित केले जाऊ शकते
# विद्यमान क्लायंट कनेक्शन बंद करण्यास भाग पाडत आहे (जरी ते देखील असू शकते
# अपग्रेड असल्यास एक समस्या उदा. सुरक्षा निराकरणामुळे).
# शटडाउन_क्लियंट्स = होय
# शून्य नसल्यास, डोव्हडम सर्व्हरवर या बर्‍याच कनेक्शनद्वारे मेल कमांड चालवा,
# त्याऐवजी त्यांना थेट त्याच प्रक्रियेत चालवण्याऐवजी.
# doveadm_worker_count = 0
# युनिक्स सॉकेट किंवा होस्ट: डोव्हडम सर्व्हरशी कनेक्ट करण्यासाठी वापरले जाणारे पोर्ट
# doveadm_socket_path = डोव्हडम-सर्व्हर
# डोव्हकोटवर जतन केलेल्या पर्यावरण व्हेरिएबल्सची जागा विभक्त केलेली यादी
# स्टार्टअप आणि त्याच्या सर्व मुलांच्या प्रक्रियेकडे खाली गेले. आपण देखील देऊ शकता
# की = मूल्य जोड्या नेहमी विशिष्ट सेटिंग्ज सेट करण्यासाठी.
# इम्पोर्ट_न्व्हायरनमेंट = टीझेड
## 
## शब्दकोष सर्व्हर सेटिंग्ज
## 
# शब्दकोष की = मूल्य याद्या संचयित करण्यासाठी वापरला जाऊ शकतो. हे कित्येक द्वारे वापरले जाते
# प्लगइन. शब्दकोषात थेट किंवा ए मध्ये प्रवेश केला जाऊ शकतो
# शब्दकोष सर्व्हर. खालील डिक ब्लॉक नकाशे नावे यूआरआयची नावे
# जेव्हा सर्व्हर वापरला जातो. त्यानंतर या स्वरूपात यूआरआय वापरून संदर्भित केले जाऊ शकते
# "प्रॉक्सी :: <नाव>".
  # कोटा = मायएसक्यूएल: /etc/dovecot/dovecot-dict-sql.conf.ext
# बर्‍याच वास्तविक कॉन्फिगरेशन खाली समाविष्ट केले जाते. फाईलनावे आहेत
# प्रथम त्यांच्या एएससीआयआय मूल्यानुसार क्रमवारी लावली आणि त्या क्रमाने विश्लेषित केली. 00-प्रीफिक्स
# फाईलनावे मध्ये ऑर्डरिंग समजणे सुलभ करण्यासाठी आहे.
# एक कॉन्फिगरेशन फाईल देखील त्रुटी न देता समाविष्ट करण्याचा प्रयत्न करू शकतो
# ते सापडले नाही:
# डोव्हकोटला सर्व इनपुट कनेक्शन ऐकण्याची परवानगी देते (आयपीव्ही 4 / आयपीव्ही 6)

डोव्हकोट वापरकर्त्यासाठी संकेतशब्द जोडा:

nano config/etc_dovecot_passwd

कोलनच्या आधी फाईलचा पहिला भाग वापरकर्तानाव आहे. शेवटचा भाग, "आपला पासवर्ड", आपण आपला मेल सर्व्हर देऊ इच्छित असलेला संकेतशब्द दर्शवितो.

team:{plain}yourpassword

पुढे, ओपनडकीम कॉन्फिगरेशन

nano config/etc_opendkim.conf

आणि या ओळी जोडा:

# स्वाक्षरी आणि सत्यापित करण्यासाठी ही एक मूलभूत कॉन्फिगरेशन आहे. ते सहज असू शकते
# मूलभूत स्थापनेनुसार अनुकूलित. ओपेन्डकीम.कॉन्फ (5) आणि पहा
# /usr/share/doc/opendkim/examples/opendkim.conf.sample पूर्ण करण्यासाठी
# उपलब्ध कॉन्फिगरेशन पॅरामीटर्सचे दस्तऐवजीकरण.
# Loghwy नाही
# सामान्य स्वाक्षरी आणि सत्यापन पॅरामीटर्स. डेबियनमध्ये, "पासून" हेडर आहे
# ओव्हरसाइन्ड, कारण बहुतेकदा ही प्रतिष्ठा प्रणालीद्वारे वापरली जाणारी ओळख की असते
# आणि अशा प्रकारे काहीसे सुरक्षा संवेदनशील.
# डोमेन, निवडकर्ता आणि की (आवश्यक) साइन इन करणे. उदाहरणार्थ, स्वाक्षरी करा
# निवडकर्ता "2020" (2020._domainkey.example.com) सह डोमेन "उदाहरण.कॉम" साठी,
# /etc/dkimkeys/example.private मध्ये संग्रहित खाजगी की वापरणे. अधिक दाणेदार
# सेटअप पर्याय/यूएसआर/शॅर/डोक /ओपेन्डकिम/रिडम.ओपेन्डकिममध्ये आढळू शकतात.
# डोमेन उदाहरण.कॉम
# निवडकर्ता 2020
# कीफाइल /etc/dkimkeys/example.private
# डेबियनमध्ये, ओपेन्डकीम वापरकर्ता "ओपेन्डकीम" म्हणून चालते. जेव्हा 007 चा उमास्क आवश्यक असतो
# एमटीए सह स्थानिक सॉकेट वापरणे जे सॉकेटमध्ये प्रवेश नसलेले म्हणून प्रवेश करतात
# वापरकर्ता (उदाहरणार्थ, पोस्टफिक्स). आपल्याला गटात वापरकर्ता "पोस्टफिक्स" जोडण्याची आवश्यकता असू शकते
# त्या प्रकरणात "ओपेंडकिम".
# एमटीए कनेक्शनसाठी सॉकेट (आवश्यक). जर एमटीए क्रूट तुरूंगात असेल तर,
# सॉकेट प्रवेशयोग्य आहे हे सुनिश्चित करणे आवश्यक आहे. डेबियनमध्ये, पोस्टफिक्स चालू आहे
# /var/spool/postfix मध्ये एक chroot, म्हणून एक UNIX सॉकेट असणे आवश्यक आहे
# खाली शेवटच्या ओळीवर दर्शविल्याप्रमाणे कॉन्फिगर केलेले.
# सॉकेट लोकल: /run/opendkim/opendkim.sock
# सॉकेट इनेट: 8891@लोकलहोस्ट
# सॉकेट इनेट: 8891
# होस्ट ज्यासाठी सत्यापित करण्याऐवजी स्वाक्षरी करावी, डीफॉल्ट 127.0.0.1 आहे. पहा
# अधिक माहितीसाठी ओपन्डकीम (8) चा ऑपरेशन विभाग.
# अंतर्गत होस्ट 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
# ट्रस्ट अँकर डीएनएससेक सक्षम करतो. डेबियनमध्ये, ट्रस्ट अँकर फाइल प्रदान केली जाते
# पॅकेज डीएनएस-रूट-डेटाद्वारे.
# नेमसर्व्हर्स 127.0.0.1
# संदेशांवर स्वाक्षरी करण्यासाठी वापरल्या जाणार्‍या पत्त्यांमधून डोमेनचा नकाशा
# अंतर्गत होस्टचा एक संच ज्याच्या मेलवर स्वाक्षरी करावी
nano config/etc_default_opendkim

आणि या ओळी जोडा

# टीपः ही एक वारसा कॉन्फिगरेशन फाइल आहे. हे ओपेन्डकीम द्वारे वापरले जात नाही
# सिस्टमडी सेवा. कृपया मधील संबंधित कॉन्फिगरेशन पॅरामीटर्स वापरा
# त्याऐवजी /etc/opendkim.conf.
# 
# पूर्वी, एखादी व्यक्ती येथे डीफॉल्ट सेटिंग्ज संपादित करेल आणि नंतर कार्यान्वित करेल
# /lib/opendkim/opendkim.service.gerate येथे सिस्टमड ओव्हरराइड फायली व्युत्पन्न करण्यासाठी
# /etc/systemd/system/opendkim.service.d/override.conf आणि
# /etc/tmpfiles.d/opendkim.conf. हे अद्याप शक्य असले तरी आता ते आहे
# /etc/opendkim.conf मध्ये थेट सेटिंग्ज समायोजित करण्याची शिफारस केली.
# 
# Demon_opts = ""
# यासह युनिक्स सॉकेट वापरण्यासाठी/var/spool/postfix/run/opendkim वर बदला
# क्रोट मध्ये पोस्टफिक्स:
# रुंदिर =/वर/स्पूल/पोस्टफिक्स/रन/ओपेंडकिम
# 
# वैकल्पिक सॉकेट निर्दिष्ट करण्यासाठी बिनधास्त
# लक्षात घ्या की हे सेट केल्याने ओपनडकीम.कॉन्फमधील कोणतेही सॉकेट मूल्य अधिलिखित होईल
# डीफॉल्ट:
# पोर्ट 54321 वर सर्व इंटरफेस ऐका:
# सॉकेट = इनेट: 54321
# पोर्ट 12345 वर लूपबॅकवर ऐका:
# सॉकेट = इनेट: 12345@लोकलहोस्ट
# पोर्ट 12345 वर 192.0.2.1 वर ऐका:
# सॉकेट = इनट: 12345@192.0.2.1

जेव्हा आम्ही आमचा पोस्टफिक्स सर्व्हर सेट करण्यास तयार असतो, तेव्हा आम्ही योग्य डोमेन नाव एम्बेड केलेल्या खाली खाली कोड चालवू. स्क्रिप्ट तयार करुन प्रारंभ करा

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

आता, नॅनोमध्ये, मजकूर संपादक, ही फाईल संपादित करा जेणेकरून त्यात फेम्मेबाब.कॉम ऐवजी आपले डोमेन नाव समाविष्ट आहे.

# !/बिन/बॅश
# सेटअप पोस्टफिक्स

आता, पोस्टफिक्स, ओपेन्डकिम आणि डोव्हकोट कॉन्फिगर करण्यासाठी पूर्ण केलेली स्क्रिप्ट चालवा.

./scripts/postfixsetup

एकदा ही स्क्रिप्ट चालू झाल्यावर, ती मुद्रित करते शेवटची ओळ कॉपी करा आणि आपल्या डीएनएस कॉन्फिगरेशनमध्ये पेस्ट करा. सुरक्षित मेल पाठविताना आपले डोमेन ओळखण्यासाठी वापरली जाणारी ही ओपन्डकिम की आहे.

छान! काही दिवसातच, आपण सर्व्हरकडून मेल पाठविण्यास सक्षम असावे परंतु सर्वकाही योग्यरित्या कॉन्फिगर केले आहे.

आपण आपल्या मेल सर्व्हरसाठी नुकतेच डीएनएस कॉन्फिगर केले असल्यास, रेकॉर्ड अद्यतनित करण्यासाठी 72 तासांपेक्षा कमी वेळ लागेल. हे सहसा बरेच जलद असते. हा आदेश वापरुन आपला सर्व्हर कार्य करीत आहे की नाही हे आपण तपासू शकता, आपला ईमेल पुरविला:

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

जर सर्व काही योग्यरित्या कार्य करत असल्याचे दिसत असेल तर आपण आपल्या सर्व्हरसह ईमेल पाठविण्यास सक्षम असावे. जर ते कार्य करत नसेल तर त्रुटी काय असू शकते हे पाहण्यासाठी लॉगकडे पाहण्याचा प्रयत्न करा.

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

हे सर्व्हरद्वारे पाठविल्या जाणार्‍या मेलबद्दल वर्बोज माहिती देईल आणि ती योग्यरित्या कार्य करीत आहे की नाही. आपण आपल्या इनबॉक्समध्ये ईमेल देखील पाहण्यास सक्षम असावे, जर तेथे नसेल तर आपले स्पॅम फोल्डर तपासा.

आपल्याला आपल्या सेटिंग्जमध्ये आपल्या सेटिंग्ज कॉन्फिगर करणे देखील आवश्यक आहे. आपला ईमेल सर्व्हर आपल्या जॅंगो अॅप, प्रोजेक्टशी बोलू शकेल. आपल्या सेटिंग्जमध्ये या ओळी जोडा किंवा पुनर्स्थित करा

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

लक्षात घ्या की आम्ही संकेतशब्द मिळविण्यासाठी कॉन्फिगरेशन फाइल वापरत आहोत. फाईलच्या अगदी सुरूवातीस, सारख्या सेटिंग्जमध्ये ही फाईल लोड करूया.:

# कॉन्फिगरेशन उघडा आणि लोड करा

चला ही फाईल तयार करू आणि त्यात एक गुप्त की तसेच मेल संकेतशब्द जोडू. एक गुप्त की व्युत्पन्न करण्यासाठी, शेवटी आपल्याला जे काही आवडते त्यासह ही आज्ञा वापरा:

openssl rand -base64 64

आता, ओपनएसएल व्युत्पन्न केलेल्या मजकूराची कॉपी करा आणि /etc/config.json संपादित करा

sudo nano /etc/config.json

गुप्त की म्हणून व्युत्पन्न केलेल्या कीसह आपल्या फाईलमध्ये खालील ओळी जोडा.

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

जेएसओएन फॉरमॅट वापरण्यास सोपी आणि सोपी आहे, आम्ही आमच्या प्रकल्पात आम्ही वापरू इच्छित असलेल्या इतर कळा देखील अशा प्रकारे घोषित करू शकतो आणि त्यांना आमच्या प्रोजेक्ट निर्देशिकेपासून वेगळे ठेवू शकतो जेणेकरून इतर वापरकर्ते त्यांना लिहू शकत नाहीत आणि म्हणूनच ते केवळ आमच्या प्रोजेक्ट डिरेक्टरीमधून वाचले जाऊ शकत नाहीत. एपीआय कींसाठी ही सराव करण्याची शिफारस केली जाते, त्यापैकी आम्ही येथे काही पेक्षा जास्त वापरू.

सर्व काही जतन झाले आहे हे सुनिश्चित करण्यासाठी आपण आपल्या प्रकल्पाचा बॅक अप घेऊ इच्छित आहात आणि आपण यापुढे सर्व्हर भाड्याने घेऊ इच्छित नसले तरीही आपण नंतर आपले कार्य पुनर्प्राप्त करण्यास सक्षम व्हाल.

sudo backup

आता, वेब सर्व्हर वरून एचटीएमएल ईमेल पाठविण्याचा प्रयत्न करा, कमांड लाइन वरून एक पाठवत आहे. शेलमध्ये आपल्या वापरकर्त्याच्या उदाहरणाची चौकशी करा आणि त्या वापरकर्त्यास जॅंगोद्वारे एचटीएमएल ईमेल पाठवा. शार्लोट, कोडमधील माझे नाव आपल्या वापरकर्तानावात बदला.

python manage.py shell
from django.contrib.auth.models import User
u = User.objects.get(username='Charlotte')
from users.email import send_welcome_email
send_welcome_email(u)
exit()

प्रथम आज्ञा कार्य करत नसल्यास, वापरण्याची खात्री करा

source venv/bin/activate

प्रदान केलेले सर्व काही योग्यरित्या सेट केले गेले आहे, आता आपल्या वेब अ‍ॅपद्वारे पाठविलेल्या आपल्या मेलबॉक्समध्ये आपल्याला आता स्वागत आहे. चांगली नोकरी! आपण खूप लांब आला आहात.

मला हे जोडायचे होते, जर आपण यासारख्या प्रकल्पावर काम करत असताना कोणत्याही त्रुटींसह संघर्ष करत असाल तर उत्तरे शोधण्यात आणि मदतीसाठी विचारण्यास अजिबात संकोच करू नका. गूगल, इतर शोध इंजिनपैकी, प्रोग्रामिंग मदतीसाठी शोधण्यासाठी उत्तम संसाधने आहेत. आपल्याला मिळत असलेल्या त्रुटीचा शोध घ्या आणि इतर लोक समस्येचे निराकरण कसे करतात हे आपण पाहण्यास सक्षम असाल. तसेच, माझे, आपले शिक्षक (शिक्षक, प्राध्यापक, ट्यूटर्स), प्रोग्रामिंग मदतीसाठी उपलब्ध असलेल्या इंटरनेटवरील कोणतेही समवयस्क किंवा आपण अनुभवत असलेल्या समस्यांचे निराकरण करण्यासाठी या पुस्तकाचा किंवा इतर संसाधनांचा पुन्हा सल्ला घ्या. मला हे समजले आहे की हे सोपे नाही, परंतु आपण आतापर्यंत वाचले आहे आणि कोणताही कोड लिहित नाही तरीही आपण स्क्रॅचमधून वेब अ‍ॅप तयार करण्याबद्दल बरेच काही शिकत आहात. स्वत: ला पाठीवर थाप द्या, आपण एक चांगले काम करत आहात.

ही तिसरी आवृत्ती वेब विकास मार्गदर्शक वाचण्यासाठी वेळ दिल्याबद्दल धन्यवाद. भविष्यातील आवृत्त्यांमध्ये, मी दस्तऐवजाच्या सुरूवातीस चर्चा केलेल्या अधिक महत्त्वाच्या उदाहरणांचा समावेश करेन आणि आम्ही सॉफ्टवेअर आणि हार्डवेअर विकासाच्या जगात बरेच खोलवर डुबकी मारू. जे येणार आहे त्यासाठी संपर्कात रहा आणि अविश्वसनीय सॉफ्टवेअर कसे तयार करावे हे मी तुम्हाला शिकवण्यास उत्सुक आहे. पुढील आवृत्तीत भेटू!






Ойр дөхөм
Хуудас 1
Үсрэх
Бүрэн нийтлэлийг үзнэ үү
Үргэлжлүүлэн унших

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай



Three Thirteen Online Free Play three thirteen online for free. Invite a Friend Join a Game ***.
Мөр: клуб

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


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

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


Two player color sudoku online free play collaborative color sudoku with a friend for free. Invite a Friend Join a Game ***.
Мөр: клуб

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


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


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


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


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


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


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


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


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


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


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


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


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


хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


what's the best way to boil eggs?


here is a simple method to boil eggs:


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

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

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

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

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


.

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


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


the most common side effects of birth control pills include:


1. Nausea

2. Breast tenderness

3. Headaches

4. Weight gain

5. Mood changes

6. Spotting or breakthrough bleeding

7. Changes in libido 

8. Acne 

9. Bloating 


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

.

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


How do I host a web server from my home?


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


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


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


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


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


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


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


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


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


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


хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


How do I write a professional blog post?


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

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

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

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

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

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

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

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

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

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

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай



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


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


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


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


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


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


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


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


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


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


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

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


What are the benefits to having a security camera?


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


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


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


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


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


хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


why is it safer to wear a mask in public?


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


.

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


is sugar really unhealthy?


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


.

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


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


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


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


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


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


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


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


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


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


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


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


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


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


хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


How do I write a good book?


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


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


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


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


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


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


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


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


хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


What causes migraine and how are they treated?


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


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


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

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

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

4. Practicing relaxation techniques such as deep breathing or meditation

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

6. Getting regular exercise and maintaining a healthy diet


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

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


How do I build a mail server with postfix?


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


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


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


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


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


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


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


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

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай



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


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


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


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

.

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


How do i wear deadlock?


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


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


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


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


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


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


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


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

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


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


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


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


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


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


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


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


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

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


Why do people implant nfc implants in their hands?


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


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


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


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


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


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


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


Мөр: клуб

хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай


How is the crypto market growing so quickly?


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


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


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


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


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


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


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


хамт Daisy / Харагдац | Худалдан авах | Криптоцурьтэй хамт худалдаж аваарай




https://glamgirlx.com -


(Зураг татаж авахын тулд товш эсвэл товшино уу)
Мэргэжлийн үзвэр үйлчилгээ, зураг, видео, Audio, Audio, ID-ийн болон энгийн тоглоом, ID сканнердах, түүнчлэн ID сканнердах, сканнердах, суулгагч үйлчилгээ.

Энэ хаягийг ашиглан би bitcoin-д үзүүрийг орхи. 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE

© Glam Girl X 2025

Үйлчилгээний нөхцөл