উদাহরণস্বরূপ ব্যবহারিক ওয়েব ভিত্তিক গভীর শিক্ষা এবং সুরক্ষা

Daisyএর প্রোফাইল ফটো

দ্বারা Daisy

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

উদাহরণস্বরূপ ব্যবহারিক ওয়েব ভিত্তিক গভীর শিক্ষা এবং সুরক্ষা তৃতীয় সংস্করণ শার্লট হার্পার জুলাই 3, 2024 3 জুন, 2025 আপডেট/রূপান্তরিত

ফোরওয়ার্ড:

ওয়েবে বিল্ডিং সফ্টওয়্যারটিতে সুরক্ষা বিবেচনাগুলি যে কোনও ওয়েব বিকাশকারীদের পরিকল্পনা এবং সম্পাদনের একটি গুরুত্বপূর্ণ অংশ যা একটি প্রোটোটাইপ ইঞ্জিনিয়ারিংয়ের সময় নির্ভরযোগ্য, স্থিতিশীল এবং ব্যবহারিক উদ্দেশ্যে দরকারী। এইচটিএমএল, জাভাস্ক্রিপ্ট, এবং সিএসএসের পাশাপাশি পাইথন, সি/সি ++, জাভা এবং বাশ বাস্তবায়নকারী ব্যাকএন্ড সফ্টওয়্যার বাস্তবায়নের সাথে ডিওএম (ডকুমেন্ট অবজেক্ট মার্কআপ) এর সাথে ওয়েব বিকাশকারীদের বিভিন্ন ধরণের প্রকল্প তৈরি করার জন্য স্বাধীনতা এবং শক্তি প্রদান করে যা ব্যবহার এবং কার্যকারিতা এবং কার্যকারিতা সরবরাহ করে, এবং স্বাচ্ছন্দ্য সরবরাহ করে, এবং সুবিধার্থে চিত্রগুলি সরবরাহ করে, সময় বা ইন্টারনেটে কিছু সম্পন্ন করুন, সাধারণত একটি টাচস্ক্রিন স্মার্টফোন ডিভাইসে। বেশিরভাগ লোকেরা এমনকি স্ক্র্যাচ থেকে কোনও ওয়েবসাইট তৈরি করতে চাইলে কোথায় শুরু করবেন তাও জানেন না, তারা অন্য ব্যক্তির ওয়েবসাইটে শুরু করে এবং কার্যকারিতা, নির্ভরযোগ্যতা, ব্যবহারের স্বাচ্ছন্দ্যে এবং বিশেষত সৃজনশীলতার মধ্যে সীমাবদ্ধ কিছু তৈরি করতে ঝোঁক রাখতেন যখন তারা তাদের নিষ্পত্তি করার জন্য দরকারী কিছু তৈরি করার জন্য এবং বিশেষত ব্যয়বহুল সাবস্ক্রিপশনগুলির জন্য অর্থ নষ্ট করার জন্য অর্থকে নষ্ট করে দেওয়ার জন্য অর্থকে নষ্ট করে দেওয়ার জন্য অর্থ নষ্ট করার জন্য অর্থ ব্যয় করতে পারে এমন কিছু তৈরি করতে পারে। আপনার যদি এই বইটি পড়ার জন্য কয়েক মিনিট সময় থাকে এবং আমি আপনাকে কী শিখাতে চাই তা শিখতে পারি, বা এমনকি আমার সাথে ব্যক্তিগতভাবে আপনার লক্ষ্যগুলি সম্পর্কে কথা বলতে এবং সঠিক দিকনির্দেশে কিছুটা দিকনির্দেশনা পেতে এবং আপনার নিজের সফ্টওয়্যারটি কোড শিখতে এবং লিখতে শিখতে অনুপ্রাণিত হন, এই বইটি বাড়িতে নিয়ে যান এবং পরবর্তী প্রভাবশালী, শক্তিশালী, প্রবাহিত এবং গুরুত্বপূর্ণ ওয়েব অ্যাপ্লিকেশন তৈরি করার জন্য কিছুটা সময় নির্ধারণ করুন, যা আপনার এবং আপনার কাছে সমস্ত ওয়েবসাইট যা আপনার কাছে এবং মেটায়।

আমার সম্পর্কে: আমি সি/সি ++, জাভা, পাইথন, এইচটিএমএল, সিএসএস এবং জাভাস্ক্রিপ্টে বিস্তৃত অভিজ্ঞতা সহ একটি সফটওয়্যার বিকাশকারী। আমি এমন ওয়েবসাইটগুলি তৈরি করি যা লোকেরা ব্যবহার করতে চায়, ঘুরে দেখতে চায় এবং এমনকি সময় শিখতে, পুনরায় তৈরি করতে এবং হত্যা করার জন্য ব্যবহার করে আসক্ত হয় এবং সবচেয়ে গুরুত্বপূর্ণভাবে আমি সফ্টওয়্যার বিক্রি করি। আপনি কীভাবে কোনও ওয়েবসাইট দেখতে এবং কার্যকারিতা করতে চেয়েছিলেন সে সম্পর্কে যদি আপনার ধারণা থাকে তবে আপনি আমাকে সমর্থন করতে ইচ্ছুক ছিলেন যাতে আমি আপনার সাথে দেখা করার সময় আমার নিজের চাহিদা পূরণ করতে পারি এবং আপনি নিজেই কোনও ওয়েবসাইট চালানোর ব্যয়গুলি কভার করতে ইচ্ছুক, আমি আপনাকে পরবর্তী ইউটিউব, টিকটোক, টুইটার, গুগল বা এমনকি একটি উচ্চ-প্রযুক্তি সুরক্ষা অ্যাপ্লিকেশন তৈরি করতে পারি আপনি কেবল অ্যাক্সেস করতে পারেন। আমার সময় আপনাকে বিক্রি করার চেষ্টা করার পরিবর্তে, আমি আপনার কেনার চেষ্টা করছি: আমি আপনাকে ইতিমধ্যে বিদ্যমান তথ্যের সাথে একটি অ্যাপ (ওয়েবসাইট) তৈরি করার জন্য আপনাকে কথা বলতে চাই এবং আপনাকে যে কোনও ক্ষেত্রের ক্ষেত্রে সফল ক্যারিয়ারের নেতৃত্বদানকারী একটি স্বাধীন সফটওয়্যার বিকাশকারী, উদ্যোক্তা হতে হবে তা শিখিয়ে দিতে চাই। এবং আমাকে পরিষ্কার হতে দিন, আমি আপনাকে যে শিক্ষা দিচ্ছি তা অনানুষ্ঠানিক হবে। আপনি স্কুলে যেতে পারেন এবং একটি আনুষ্ঠানিক শিক্ষার সাথে এই সমস্ত কিছু শিখতে পারেন, বা এমনকি স্কুলে এই বইটি পড়তে পারেন, আপনার অ্যাসাইনমেন্টগুলি সম্পূর্ণ করতে পারেন এবং আপনার শিক্ষা থেকে একটি দুর্দান্ত চুক্তি সরিয়ে নিতে পারেন, তবে আমি আপনাকে আনুষ্ঠানিকভাবে হট সিটে রাখব না এবং আপনাকে অ্যাসাইনমেন্টগুলি সম্পূর্ণ করতে বলব না। আমি আপনার অধ্যাপক নই, আপনি আমাকে এমন এক বন্ধুর মতো ভাবতে পারেন যিনি আপনাকে নিজের ব্যক্তিগত সাফল্যের দ্বারা চালিত ক্যারিয়ারের দিকে পরিচালিত করতে চান। এবং আমি আপনাকে সাফল্য বিক্রি করছি না, আপনার এটি আপনার সময়ের সাথে কিনতে হবে। কোডে শেখার একটি খাড়া শেখার বক্ররেখা রয়েছে এবং এটি কখনই সহজ ছিল না, বা এমনকি হওয়ার কথাও ছিল না। আপনি নিজেরাই যতটা সম্ভব কঠোর পরিশ্রম করতে হবে এবং চেষ্টা করে ব্যর্থ হওয়া চালিয়ে যেতে হবে এবং নিজেকে অ্যাপ্লিকেশনগুলি শিখতে এবং তৈরি করতে হতাশ হলেও আবার চেষ্টা করুন এবং আবার চেষ্টা করুন। এটি নিজেই কোডের প্রকৃতিতে। কোডটি একটি সংকলক দ্বারা পরিচালিত হয় যা প্রোগ্রামার ত্রুটি বার্তা দেওয়ার জন্য ডিজাইন করা হয়েছে এবং এগুলি আপনাকে কীভাবে কোড করতে শেখায়, এমনকি যদি আপনি কেবল আপনার অনুসন্ধান ইঞ্জিনে ত্রুটিটি অনুলিপি করে এবং অন্যান্য ব্যক্তির উদাহরণগুলি পড়তে থাকেন। এবং আমি অবশ্যই বলতে পারি, আপনাকে অ্যাপ্লিকেশন তৈরির জন্য অত্যন্ত ধনী, স্মার্ট, সফল, বা এমনকি বিশদমুখী বা সংগঠিত হওয়ার দরকার নেই। কম্পিউটার আপনার জন্য সেই সংস্থার যত্ন নেয়। আপনাকে কেবল ট্রায়াল এবং ত্রুটির মধ্য দিয়ে অধ্যবসায় করতে হবে, ফোকাস বজায় রাখতে হবে এবং আপনি যা করেন তাতে কঠোর পরিশ্রম করতে হবে এবং আপনি যা করেন তার সম্পূর্ণরূপে আপনার খুব সফল ক্যারিয়ার থাকবে।

আমি কে: আমি বুঝতে পারি যে শেষ বিভাগটি শেখার বিষয়ে আরও বেশি ছিল এবং আপনার এই বইটি থেকে একটি উপায় গ্রহণ করা। আমি ঠিক কে? এটি একটি জটিল প্রশ্ন। আমি নিজেই এই বিষয়ে অস্পষ্ট, যেহেতু আমি চিকিত্সা পরিস্থিতিতে ভুগছি যা আমার পক্ষে কখনও কখনও এই বইটি কোড করা বা লেখার পক্ষে কঠিন করে তুলতে পারে, যখন সামাজিকীকরণ এবং পরিচয়ের সমস্যাগুলির সাথে চ্যালেঞ্জগুলি উপস্থাপন করে যা আমার জীবনকে পরিচয় করিয়ে দেওয়ার সময় আমার জীবনকে আরও কঠিন করে তোলে। সংক্ষেপে, আপনি যদি এই বইটি পড়ছেন তবে আপনি এটি বাড়িতে এনেছেন কারণ আপনি এটির মাধ্যমে উল্টে গিয়েছিলেন এবং এটি দরকারী বলে মনে করেছিলেন, বা এমনকি আপনি যদি এটি কেবল এ পর্যন্ত পড়েন তবে আপনার কাছে আমি একজন মনের মত ব্যক্তি যিনি আপনাকে যা কিছু করেন তাতে আপনাকে সফল হতে দেখতে চাই। আমি নিজেই একজন প্রকৌশলী, একজন সফটওয়্যার বিকাশকারী এবং একজন শিক্ষার্থী এবং আমি এই বইটি অন্য শিক্ষার্থীদের জন্য লিখছি যারা সফ্টওয়্যারটির একটি হ্যান্ডবুক পেয়ে তাদের জীবনকে আরও সহজ করে তুলতে চান তাদের জীবনকে আরও সহজ করে তুলতে চান যা তাদের জীবনকে আরও সহজ করে তোলে যা একটি বড় ধাঁধার মতো ফিট করে এমন একটি কাজ, দরকারী, বৃহত, কার্যকরী, সম্মিলিত এবং আকর্ষক অ্যাপ্লিকেশনকে ব্যবসায়ের লাইন নির্বিশেষে চালিত করতে পারে। মূলত, আমি এটিই করি: আমি নিজেকে এবং অন্যান্য লোকদের সফল হতে সহায়তা করার জন্য অ্যাপস তৈরি করি। আমিও একজন লেখক, যদিও এটি আমার প্রথম প্রকাশনা যা আমি আমার পোর্টফোলিওকে একটি দরকারী নথিতে একসাথে রাখার জন্য সম্পূর্ণ করার ইচ্ছা করি এবং আমিও একজন শিল্পী। আমি আপনাকে এটি স্বীকার করব, আমি এক অদ্ভুত ব্যক্তি। আমি নিখুঁত নই, আমি আইনটি নিয়ে এমনকি আমাকে কলেজ এবং বিশ্ববিদ্যালয়গুলি ছেড়ে চলে যেতে এবং আরও সাফল্যের সাথে নিজের জন্য একটি নাম দেওয়ার চেষ্টা করার জন্য রাজ্যগুলি ছেড়ে চলে যেতে নেতৃত্ব দিয়েছি। আমি জন্মের দ্বারা একজন মহিলা, আমি মেকআপ পরে থাকি, নিজের ছবি তুলি, পোশাক এবং অন্যান্য মহিলাদের পোশাক পরে থাকি এবং আমি প্রকৃতির দ্বারা একজন মহিলা হিসাবে নিজেকে সচেতন থাকি। অতীতে অন্যান্য লোকের সাথে আমার সমস্যা ছিল যা ওয়েব অ্যাপস লেখার এবং তৈরির সাথে লড়াইয়ের দিকে পরিচালিত করে এবং আমি ক্ষমা চাইছি যে আমি আপনার হাতে এই বইটি শীঘ্রই পেতে পারিনি: আপনার এটির দরকার ছিল। আপনি এমন কোডটি পড়তে এবং লিখতে চাইবেন যা আমার মতো দেখতে এবং আমার মতো কাজ করে এবং একই জিনিসটি আরও ভাল করে, কারণ আপনি যদি এই বইটি কেনার পরিবর্তে আপনার কীবোর্ডটি ম্যাশ করার পরিবর্তে এই বইটি কেনার সামর্থ্য রাখেন যেমন আমি কেবল নিজের জন্য অর্থ জিজ্ঞাসা করার জন্য একটি বই তৈরি করতে পারি, আপনার জীবনে আপনার সফল হওয়ার জন্য আপনার প্রয়োজনীয় সংস্থান রয়েছে। আমার পরিবার বেড়ে ওঠা, স্বাস্থ্য পরিস্থিতি, চিকিত্সক, মিডিয়া এবং আইন এবং আমার কোডটি একটি বিভক্ত এবং হতাশ বিশ্বে নারীবাদ এবং মহিলা প্রকৃতি যে সংগ্রামকে গভীরভাবে প্রতিফলিত করে তা নিয়ে আমার সমস্ত ধরণের সমস্যা ছিল। যাইহোক, এই বইটি এমন একটি বিষয় যা আমি গভীরভাবে যত্নশীল, আমার বাচ্চা, আমার পোর্টফোলিও এবং আমার জীবিকা, তাই আপনি যখন পাঠ্যটি বাড়িতে নিয়ে যান এবং সাবধানতার সাথে আমার কাছ থেকে শেখার জন্য এটি সম্পর্কে ছিঁড়ে ফেলি তখন আমি আপনার বিবেচনার প্রশংসা করি। দয়া করে মনে রাখবেন আমি নিখুঁত নই, এই বইয়ের ত্রুটি, সংশোধন এবং নতুন সংস্করণ থাকবে এবং আমার লেখার সাথে একটি সফল অভিজ্ঞতা অর্জনের জন্য আপনাকে আপনার যৌক্তিক মস্তিষ্কের সাথে সেরা হিসাবে ভাবতে হবে। এছাড়াও, বুঝতে পারি যে লেখার সময় আপনি যখন চ্যালেঞ্জের মুখোমুখি হন তখনও আমি আপনার পক্ষে ভাল। এটির মতো ভাবুন: আপনি যখন ডিজিটাল স্পেসে সম্ভবত কল্পনা করতে পারেন এমন কিছু করার জন্য আপনি যখন কোনও কম্পিউটার সিস্টেম ভাড়া নিতে পারেন তখন আপনার মুখোমুখি সমস্ত তথ্য সংরক্ষণ করুন, বিশ্লেষণ করুন এবং এটি সংগঠিত করুন এবং এটি বুঝতে পারবেন, আপনি যে তথ্যগুলি খাচ্ছেন এবং এমনকি প্রকাশ করছেন তার সাথে অনিবার্যভাবে সমস্যার মুখোমুখি হবেন। আমি আপনাকে এটি বলছি কারণ আমি একই সমস্যার মুখোমুখি হয়েছি। এই বইটি আপনার নিজের ঝুঁকিতে ব্যবহার করুন, আপনার সম্প্রদায়ের এবং আপনার কাছে নিরাপদ সেটিংয়ের মধ্যে সফ্টওয়্যার তৈরির জন্য উপলব্ধ সম্প্রদায়ের সাথে কাজ করুন এবং আপনি যখন ব্যর্থ হন বা এমনকি ভুল উপায়ে সফল হন তখন ব্যক্তিগতভাবে জিনিসগুলি গ্রহণ করবেন না: আমি কেন আপনাকে এই পাঠ্যটি সরিয়ে ফেলতে পারি না এমন একটি পথের দিকে যেতে পারে যা আমি আপনাকে প্রচার করতে সহায়তা করতে পারি এবং কেন আপনাকে এই পাঠ্যটি সরিয়ে ফেলতে সহায়তা করতে পারে যা আমি সমস্তই ধ্বংস হয়ে যায়, টর্নিংয়ে চলে যেতে পারি যা আমি সমস্ত কিছুতে সহায়তা করতে পারি, আমরা কাজ করব, ইন্টারনেট। আমি কেবল কয়েকটি শব্দের সাথে আমি কার সাথে আছি তার সাথে আপনি খুব বেশি পরিচিত নাও হতে পারেন, তবে আমি আপনাকে পড়তে উত্সাহিত করি, আপনি আপনার কাজ শেষ করার জন্য আপনার নিজের প্রকল্পগুলি তৈরি করার সময় আপনি আমাকে পড়তে এবং বুঝতে চালিয়ে যাওয়ার সাথে সাথে আমাকে জানতে পারবেন। এই বইয়ের সাথে কোনও হোমওয়ার্ক থাকবে না, যতক্ষণ না আপনার অধ্যাপক বা শিক্ষকরা আপনাকে কোনও নিয়োগ দেয় না, তবে আপনি যেমন পড়েন তেমন প্রকল্পগুলির একটি পোর্টফোলিও তৈরি করতে আমি আপনাকে অত্যন্ত উত্সাহিত করি, পাশাপাশি আপনি কীভাবে শিখেছেন তা কীভাবে প্রয়োগ করতে পারেন তা প্রদর্শন করে একটি ক্যাপস্টোন প্রকল্প। আমার ক্যাপস্টোন প্রকল্পটি আপনি এই বইটিতে যা পড়বেন তার বেশিরভাগের ভিত্তি, কারণ এটি আমার পূর্ববর্তী প্রকল্পগুলি থেকে কোড অন্তর্ভুক্ত করেছে, আমি তৈরি করেছি এবং হাত দিয়ে পদ্ধতিগতভাবে লিখতে শিখেছি এবং বিভিন্ন ধরণের ধারণা এবং টিপস যা আমাকে এমন একটি সাধারণ অ্যাপ্লিকেশনটিতে সফল করতে সহায়তা করেছে যেখানে আমি সম্পূর্ণরূপে বৈশিষ্ট্যযুক্ত এবং আপনার কাছে একটি জনপ্রিয় অ্যাপের মতো ব্যবহার করতে পারেন এবং আপনার পরিবার ব্যবহার করতে পারে এমন একটি জনপ্রিয় অ্যাপ্লিকেশনটি দেখতে পারেন, আপনি ইন্টারনেটে।

এই বইটি কী: এই বইটি উদাহরণস্বরূপ একটি টিউটোরিয়াল। আপনি এখানে কোডটি খুঁজে পেতে পারেন, কোড শিখতে পারেন, ডিবাগিং কোড এবং ত্রুটিগুলি সংশোধন করার তথ্য, সমস্যা সমাধানের পদক্ষেপগুলি, কীভাবে আপনার কোডটি ব্যাক আপ করতে এবং সংরক্ষণ করতে হবে সে সম্পর্কে নির্দেশাবলী, আপনার কোডটি ভেঙে দেয়, আপনার কোডটি সুরক্ষিত করে, আপনার কোডটি তৈরি করে, এবং আপনার কাছে কেন এই মতামত রয়েছে, এবং আপনি কেন এটি একটি অর্থবোধক, এবং আপনি কেন এই বুদ্ধি পাবেন, এবং আপনি কীভাবে এই বুদ্ধি পাবেন, এবং কেন আপনি এই বিষয়বস্তু পাবেন, সে সম্পর্কে নির্দেশাবলী কীভাবে আপনার কোডটি সুরক্ষিত করে, এবং আপনার কাছে রয়েছে, আপনার শেষ ব্যবহারকারীদের, আপনার ওয়েবসাইটের দর্শকদের কাছে যথাসম্ভব সবচেয়ে আকর্ষণীয় হওয়ার জন্য আপনি পরম সেরা আলো তৈরি করেছেন। এই বইটিতে, আমি প্ল্যাটফর্মের পাশাপাশি সুরক্ষা হিসাবে ওয়েবে ফোকাস সহ সফ্টওয়্যার ডিজাইনের বেশ কয়েকটি উদাহরণ প্রদর্শন করব। আমরা ব্যাকআপ এবং স্ক্রিপ্টিং বৈশিষ্ট্যগুলি সহ ইউনিক্স শেল ব্যবহার করে একটি বেসিক প্রকল্প তৈরি করে শেখার অভিজ্ঞতা শুরু করব। তারপরে, আমরা একটি বেসিক ব্লগ ওয়েবসাইট পরীক্ষা করব, ফটো এবং ভিডিও বৈশিষ্ট্যগুলির সাথে আমাদের ব্লগকে আপগ্রেড করব পাশাপাশি ফ্রি সফ্টওয়্যার ব্যবহার করে সুরক্ষা সমাধানগুলি ব্যবহার করতে এই বৈশিষ্ট্যগুলি ব্যবহার করব এবং প্লাগেবল প্রমাণীকরণ মডিউল (পিএএম) ব্যবহার করে আমাদের সার্ভারটি সুরক্ষিত করব। এরপরে আমরা অন্যান্য ধারণার মধ্যে ফাইল হ্যান্ডলিং এবং প্রসেসিং, ভিডিও সম্পাদনা, ভয়েস অনুদান, বারকোড স্ক্যানিং এবং অপটিক্যাল চরিত্রের স্বীকৃতি অন্বেষণ করব। পথে আমরা এপিআই পরীক্ষা করব যা আমাদের সফ্টওয়্যারকে আরও কার্যকর এবং সুরক্ষিত করতে, বিনামূল্যে এবং অর্থ প্রদানের বিকল্পগুলি সহ আমাদের সহায়তা করবে। পথে, আমরা শারীরিক সুরক্ষা এবং জঙ্গি সরঞ্জামগুলি যেমন আগ্নেয়াস্ত্র এবং যুদ্ধের নকশা এবং উত্পাদন সহ ব্যারেল এবং রিপিটার ডিজাইন, বুড়ি এবং ড্রোন ডিজাইন এবং অন্যান্য প্রিন্সিপালদের সাথে আমাদের সফ্টওয়্যারটি রক্ষা করতে এবং স্ব -প্রতিরক্ষা এবং রেজিলিয়েন্স প্রদর্শনের জন্য বিদ্যমান নেটওয়ার্কে আমাদের সফ্টওয়্যারটির সাথে সংহত করব। আমরা গেমস, 2 ডি এবং 3 ডি রেন্ডারিং ইঞ্জিনগুলি তৈরির পথে বিরতি নেব এবং যথাক্রমে সিলিকন রাবারে বেসিক ডাইমেনশনাল রেন্ডারিং সফ্টওয়্যার এবং একটি বৈদ্যুতিন কম্পনকারী ম্যাসেজার কাস্টের কেস স্টাডি উদাহরণগুলিতে এম্বেডড হার্ডওয়্যার দিয়ে কাজ করব। পথে, আমরা আমাদের সফ্টওয়্যারটি আরও ভালভাবে সুরক্ষিত করার জন্য ইতিমধ্যে উপলব্ধ মেশিন লার্নিং সলিউশনগুলিও নিয়োগ করব। প্রক্রিয়াটি প্রবাহিত করতে এবং সুরক্ষিত করার জন্য আমরা ওয়েবে উপলব্ধ স্টক সরঞ্জামগুলিও নিয়োগ করব। এই বইটি একটি ওয়েব অ্যাপ্লিকেশন তৈরি করতে এবং এটি কম্পিউটার এবং এম্বেড থাকা যান্ত্রিক সিস্টেমগুলির একটি পেশাদার নেটওয়ার্কের সাথে সংহত করার ক্ষেত্রে আপনার সাফল্যের গাইড এবং সামগ্রিকভাবে কোনও পটভূমি জ্ঞান বা পূর্ববর্তী অভিজ্ঞতা ছাড়াই বিল্ডিং সফ্টওয়্যার এবং এম্বেড থাকা হার্ডওয়্যার সম্পর্কিত একটি গাইড।

এই বইটি কী নয়: আপনি যদি সত্যিই কোনও ওয়েবসাইট রাখতে চান তবে আপনি কেবল একটি সাধারণ স্টোর সেট আপ করতে পারেন এবং আপনার যা প্রয়োজন তা বিক্রি করতে পারেন, একটি ব্লগ পোস্ট করতে পারেন, ফটো বা ভিডিও পোস্ট করতে পারেন বা অন্যথায় কখনও কোডের একক লাইন না লিখে। এই বইটি তা নয়। এই বইটি আপনাকে কীভাবে এমন সফ্টওয়্যার তৈরি করতে শিখিয়ে দেবে যা আপনি ইতিমধ্যে খুঁজে পেতে পারেন এমন কোনও সফ্টওয়্যার থেকে আরও কার্যকর, সম্পূর্ণ বৈশিষ্ট্যযুক্ত, কার্যকরী এবং সুরক্ষিত, কারণ এটি সর্বশেষতম সফ্টওয়্যার যা এখনও প্রোটোটাইপস রয়েছে, এটি একটি স্কেল পুরানো সংস্থাগুলিতে চালানো ব্যয়বহুল হতে পারে এবং পিছনের দিকে আবেদন করে না, যারা সত্যই কিছু করছে না তাদের জন্য অর্থোপার্জনের জন্য সেট আপ করা হয়। আপনি যদি এই বইটি নিবিড়ভাবে অনুসরণ করেন তবে আপনি কোড লিখতে, গবেষণা কোড, নিজের অ্যাপ্লিকেশনগুলি তৈরি করতে চাইবেন এবং আপনি যা করেন তা থেকে অর্থ উপার্জন করবেন। আমি এই বইটি থেকে এমনকি প্রাথমিক পর্যায়েও অর্থ উপার্জন করব, কারণ এতে লোকেদের প্রয়োজনীয় তথ্য রয়েছে এবং পড়তে চায় এবং তারা যখন আমার অ্যাপ্লিকেশনগুলি কিনে বা ব্যবহার করে তখন ইতিমধ্যে কিনে থাকে। এই বইটি আপনার জন্য কোনও অ্যাপ তৈরি করবে না, তবে এটি আপনাকে সঠিক দিকে নির্দেশ করবে এবং আপনার প্রয়োজনীয় সরঞ্জামগুলি এবং ওয়েবের জন্য সফ্টওয়্যার তৈরির ক্ষেত্রে আপনার নিজের সাফল্যকে সহজতর করবে এমন দক্ষতা এবং টিপস দিয়ে আপনাকে সজ্জিত করবে, কোডের প্রতিটি লাইন দিয়ে আপনাকে একটি উদাহরণ হিসাবে লিখতে হবে, আপনাকে এবং আপনার সমর্থকদের, অতিথি, বন্ধু, পরিবার, দর্শনার্থী, ঠিকাদারদের জন্য একত্রে তৈরি করার জন্য প্রস্তুত।

আপনি কি শিখবেন: এই বইটি আপনাকে কীভাবে সফ্টওয়্যার তৈরি এবং বিক্রয় করতে হবে, সত্যই কার্যকরী, দরকারী সফ্টওয়্যার, মিডিয়া রেকর্ডিং, মুখের স্বীকৃতি, মেশিন রিডেবল জোন বারকোড স্ক্যানিং, ভিডিও এবং ফটোগুলি রেন্ডার করার জন্য ওয়েব এপিআই এবং ব্লুটুথ এবং নিকটবর্তী ফিল্ড (এনএফসি) যোগাযোগের মতো বার্তাগুলি বিনিময় করতে শিখিয়ে দেবে। এই বইটি আপনাকে কীভাবে একটি নেটওয়ার্ক কম্পিউটার ব্যবহার করতে হবে, ডেবিয়ান লিনাক্সকে কেন্দ্র করে, কীভাবে আপনার সফ্টওয়্যারটি একটি বিরামবিহীন, স্বয়ংক্রিয় বাতাস ইনস্টল করা এবং ব্যাক আপ করার জন্য বাশ কোড তৈরি করতে হয়, কীভাবে পাইথন কোড তৈরি করতে হয় কীভাবে গতিশীল বার্তাগুলি পরিবেশন করার জন্য পাইথন কোড তৈরি করতে হয়, অন্য কোনও বুটস স্টাইলে ব্যবহার করে সিএসএসএস স্টাইলগুলি ব্যবহার করে এবং নেটওয়ার্কের মাধ্যমে ইন্টারেক্টিভ, ইন্টারেক্টিভের মাধ্যমে, ইন্টারেক্টিভ ডিভাইসগুলির মাধ্যমে, ইন্টারেক্টিভ ডিভাইসগুলির মাধ্যমে, ইন্টারেক্টিভ ডিভাইসগুলি তৈরি করুন, কীভাবে তৈরি করবেন, উদ্দেশ্য, আইডি স্ক্যানিং, চিত্র এবং ভিডিও সংযোজন, আপনার সফ্টওয়্যার সুরক্ষিত রাখতে ডেটা মাইক্রোট্রান্সেকশন, অর্থ প্রদানের প্রক্রিয়াকরণ, ক্রিপ্টোকারেন্সি ট্রেডিং, অ্যাসিনক্রোনাস টাস্ক এবং আরও অনেক কিছু। আপনি কীভাবে ব্যাটারি, চার্জার, মাইক্রোকন্ট্রোলার, সার্কিট, মোটর এবং সেন্সর সহ সোল্ডার, ওয়্যার এবং থ্রিডি প্রিন্টেড পাশাপাশি কাস্ট উপকরণ ব্যবহার করে নিজের ব্লুটুথ ডিভাইসগুলি তৈরি করবেন তা শিখবেন। আমি অ্যাডিটিভ ম্যানুফ্যাকচারিং এবং টুল এবং ডাই মেকিংয়ের ক্ষেত্রে প্রয়োগ 3 ডি ডিজাইন প্রিন্সিপালগুলি প্রদর্শন করব, তাই আপনি ইন্টিগ্রেটেড ব্যাটারি, চার্জার, বৈদ্যুতিন সার্কিট এবং কার্যকরী আউটপুট সহ আপনার নিজের এম্বেডড, হার্ডওয়্যার ডিভাইসগুলি উত্পাদন করতে সক্ষম হন। এবং তাদের ব্লুটুথ এবং ওয়েব দিয়ে নেটওয়ার্ক করুন। বিশেষত, আমরা দুটি কেস স্টাডি পরীক্ষা করব, একটি কম্পনকারী ম্যাসেজার এবং একটি হোমমেড আগ্নেয়াস্ত্র, উভয়ই ওপেনস্ক্যাডে প্রোগ্রাম করা, যা গ্রাফিকাল ইন্টারফেস বা কমান্ড লাইন ইউটিলিটি হিসাবে উপলব্ধ এবং দ্রুত ফলাফলের জন্য একটি ওয়েবে সংহত করা যেতে পারে। আপনি কীভাবে পূর্বের অভিজ্ঞতা ছাড়াই গ্রাউন্ড থেকে কোনও ওয়েবসাইট তৈরি এবং স্থাপন করবেন তা শিখবেন, এটিকে কার্যকরী, সুরক্ষিত, সুন্দর, দরকারী এবং সবচেয়ে গুরুত্বপূর্ণভাবে ব্যবহারিক করে তুলবেন। আপনার ওয়েবসাইট থেকে কোনও সাইটকে সুরক্ষিত এবং আরও ব্যবহারিক, রেকর্ড ভিডিও এবং অডিও করতে, আপনার ভয়েস দান করুন, সঙ্গীত তৈরি করুন এবং দরকারী নমুনাগুলি তৈরি করতে অডিওকে সংশোধন করতে এবং কীভাবে আপনার ওয়েবসাইটগুলির সর্বোত্তম সম্ভাব্য নেটওয়ার্ক তৈরি করতে অন্য ওয়েবসাইটগুলি তৈরি করতে পারেন যাতে আপনাকে আরও গুরুত্বপূর্ণ তথ্যগুলি ভাগ করে নেওয়ার জন্য সরাসরি লিঙ্ক করতে পারেন এবং আরও গুরুত্বপূর্ণ তথ্যগুলি ভাগ করে নেওয়ার জন্য সরাসরি লিঙ্ক করতে পারেন এবং কীভাবে আপনি কীভাবে আপনার কাছে সরাসরি যোগাযোগ করতে পারেন তা শিখতে শিখবেন। এই বইটি মিডিয়া, সুরক্ষা এবং মেশিন লার্নিংয়ের উপর সবচেয়ে বেশি কেন্দ্রীভূত হবে, যা প্রধান তিনটি উপাদান যা আপনাকে সঠিক ব্যবহারকারীদের জড়িত করে এবং ভুলগুলি এমনভাবে ছিন্ন করে যা বাস্তববাদী, ব্যবহারিক, হাতের উপর এবং আকর্ষণীয় অবস্থায়ও স্বয়ংক্রিয় এবং দৃ ur ়তার সাথে ভুলগুলি ছিন্ন করে ওয়েবের জন্য দরকারী সফ্টওয়্যার তৈরি করতে সহায়তা করবে। এই বইটি ইউনিক্স, বিশেষত ডিবিয়ান (উবুন্টু), বাশ শেল, পাইথন, এইচটিএমএল, সিএসএস, জাভাস্ক্রিপ্ট এবং অনুরোধের মতো পাইথনের জন্য বেশ কয়েকটি দরকারী সফ্টওয়্যার প্যাকেজ, পাশাপাশি গিট এবং এফএফএমপিইজি -র মতো দরকারী বাশ সফ্টওয়্যার শেখায়। আপনি কীভাবে স্বয়ংক্রিয়ভাবে ক্রিপ্টোকারেন্সি বাণিজ্য করতে পারি, এবং ক্রিপ্টোকারেন্সিতে বা নিয়মিত ডেবিট কার্ড থেকে অর্থ প্রদান গ্রহণ করব, এমনকি যদি আপনি এটি করতে চান তবে আপনার দর্শকদের আপনার উপার্জনের একটি অংশ প্রদান করার সময়ও আমি আপনাকে শিখিয়ে দেব। আমি আপনাকে কীভাবে বিজ্ঞাপনের মাধ্যমে আপনার ওয়েবসাইট থেকে অর্থ উপার্জন করতে পারি, কীভাবে অনুসন্ধান ইঞ্জিনগুলির জন্য আপনার অ্যাপটি প্রস্তুত করতে এবং এটি দ্রুত করা যায়, আপনার গ্রাহকরা আপনাকে কী সন্ধান করতে অনুসন্ধান করবেন তার জন্য প্রথম র‌্যাঙ্কিংয়ে স্থান দেওয়া এবং যতটা সম্ভব সাধারণ অনুসন্ধানগুলিতে র‌্যাঙ্কিং করা উচিত তা আমি শিখিয়ে দেব। আমি আপনাকে কীভাবে আপনার সফ্টওয়্যারটি বিক্রি করতে, এটির বিজ্ঞাপন দেওয়া, আপনার পরিষেবাগুলির সন্ধানকারী ক্লায়েন্টদের কাছে আবেদন করতে এবং ইতিমধ্যে বিদ্যমান এমন সুযোগের মাধ্যমে নিজের জন্য একটি নাম তৈরি করতে শিখিয়ে দেব যা ইতিমধ্যে বিদ্যমান রয়েছে, সস্তা এবং ভাল কাজ করে। আমি আপনাকে শিখিয়ে দেব যে কীভাবে আপনার জন্য কাজ করে এমন ক্লাউড কম্পিউটারগুলিতে আপনার ডেটা সংরক্ষণ করা যায় এবং আপনার ডেটা সস্তাভাবে সংরক্ষণ করা যায়, কীভাবে আপনার ব্যবহারকারীরা যা চান এবং কী চান তা করে এমন একটি ওয়েবসাইট কীভাবে তৈরি করতে হবে এবং কীভাবে আপনার ব্যবহারকারীদের আপনার সাইটে তাদের ফোনে একটি ট্যাপ রেখে আপনার ব্যবহারকারীদের কেবল আপনার ওয়েবসাইটকে পিছনে আনার জন্য আপনার ওয়েবসাইটের পিছনে আনার জন্য একটি ট্যাপ রেখে আপনার ব্যবহারকারীদের কীভাবে নিযুক্ত করা যায় তা বোতামের পিছনে আনুন। এই বইটি প্রচুর পরিমাণে মিডিয়া প্রকাশ ও বিতরণের ব্যবহারিকতার উপর ফোকাস করবে, পাঠ্য থেকে শুরু করে ভিডিও থেকে অডিও পর্যন্ত, শেষ ব্যবহারকারীদের (আপনার ক্লায়েন্টেল) এর উপর একটি ভাল ধারণা তৈরি করে এবং আপনি যে কোনও ওয়েবসাইট তৈরি করার জন্য নিজেকে যে কোনও উপায়ে বিক্রি করছেন, এমন একটি অ্যাপ্লিকেশন যা আপনার এবং আপনাকে কেবল প্রতিনিধি করে তোলে এবং আপনার সফ্টওয়্যারটি সেরা উপায়ে ভাল দেখায়। আপনি আমার কাছ থেকে কয়েকটি টিপস এবং কৌশলও শিখবেন, কোডিং টিপস থেকে, মেকআপ এবং ফটোগ্রাফি, মডেলিং এবং অভিনয় হিসাবে ব্যবহারিক ভ্যানিটি এবং আরও অনেক কিছু, যা আপনার কাছে উপলব্ধ সমস্ত সরঞ্জাম ব্যবহার করে নিজেকে এবং আপনার সংস্থাকে সর্বোত্তম আলোতে চিত্রিত করার জন্য গুরুত্বপূর্ণ হবে যখন আপনার কাছে আরও বেশি চেষ্টা করার জন্য আপনার সফ্টওয়্যারগুলির একটি স্বাস্থ্যকর ভারসাম্য উপস্থাপনের জন্য প্রয়োজনীয় সামগ্রী বিতরণ করার সময় আপনার কাছে উপলব্ধ সমস্ত সরঞ্জাম ব্যবহার করে। এই বইটিকে "ব্যবহারিক" বলা হয়ওয়েব ভিত্তিক গভীর শিক্ষা এবং সুরক্ষা উদাহরণ দ্বারা "একটি কারণ হিসাবে: এটি কোড শেখার সাথে বিশেষত ওয়েবের জন্য বিশেষত সুরক্ষার উপর দৃষ্টি নিবদ্ধ করে, একটি ব্যবহারিক দৃষ্টিকোণ থেকে, ওয়ার্কিং কোডের উদাহরণ সহ পাঠ্যটিতে বর্ণিত ব্যবহারিক উদ্দেশ্যগুলি পরিবেশন করে। এই পাঠ্যের শিক্ষণ উপাদানটি আপনাকে মডান্ট, ইমেজের জন্য কীভাবে পরিচালনা করতে হবে তা দেখাবে, ইমেজটি আমি কীভাবে পরিচালনা করবেন বর্ধিতকরণ, চিত্রের ক্যাপশনিং এবং চিত্রগুলি থেকে প্রাপ্ত পূর্বাভাস মেট্রিকগুলির মতো অন্যান্য কাজ যেমন একটি খাঁটি, কম্পিউটার-স্থানান্তরিত চিত্র হিসাবে বা একটি চিত্রের একটি ছবি, বা মুদ্রিত ফটো) এটি যখন আপনার কাছে সঞ্চারিত হতে পারে তবে এটি আপনার কাছে উপস্থিত হতে পারে তবে এটি ব্যবহার করে। আপনার মুখটি একটি সার্ভার কম্পিউটারকে এই নিরাপদ করতে পারে, এমন একটি কম্পিউটার যা আপনাকে ব্যবহারকারীর নাম এবং পাসকোডের জন্য জিজ্ঞাসা করতে পারে, সম্ভবত প্রতিটি নতুন লগইন বা নতুন আইপি ঠিকানার জন্য একটি নিশ্চিতকরণ টোকেন সহ, তবে আপনি যদি কোনও সফ্টওয়্যারকে খুব কাছেই করেন না এমন কোনও সফ্টওয়্যারটি আপনার কাছে যথেষ্ট পরিমাণে তৈরি করতে পারেন, তবে এটি আপনার পক্ষে খুব বেশি কোনও সফ্টওয়্যার তৈরি করতে পারে। ব্যবহার)। যে কেউ সফ্টওয়্যার তৈরি করে যা অনবদ্য সুরক্ষিত তা এর অর্থ কী তা বোঝায়। সফ্টওয়্যার সহজাতভাবে অনিরাপদ কারণ আমরা এটি অ্যাক্সেস করতে যে ডিভাইসগুলি এবং অ্যাকাউন্টগুলি ব্যবহার করি সেগুলি সর্বদা আমাদের নিষ্পত্তি হয় না, তারা সফ্টওয়্যারটির জন্য অসুস্থ অভিপ্রায় সহ যে কারও হাতে থাকতে পারে এবং তাই সফ্টওয়্যারটি নিজেই একটি ঝুঁকি তৈরি করতে পারে। এটি এই বইয়ের ফোকাসের কিছু। একটি নেটওয়ার্কযুক্ত কম্পিউটার ডিফল্টরূপে একটি দীর্ঘ কী টোকেন দিয়ে সুরক্ষিত হয়, বলা হয় এবং এসএসএইচ বা সুরক্ষিত শেল কী এবং অন্যথায় একটি ওয়েব সার্ভারের সাথে সুরক্ষিত হয়, কারণ ওয়েব সার্ভারটি নিজেই সার্ভারে চলমান আর্ট সুরক্ষা সরঞ্জামগুলির ওপেন অ্যাক্সেসের পাশাপাশি স্টেট সরবরাহ করে। ওয়েব সার্ভারে ব্যবহারকারীর ওয়েব ব্রাউজারে অ্যাক্সেস রয়েছে, যা যুক্তিযুক্তভাবে ব্যবহারকারীর ডিভাইসের সবচেয়ে শক্তিশালী অংশ, কারণ এটি সেই জায়গা যেখানে ব্যবহারকারী নেটওয়ার্ক সফ্টওয়্যার অ্যাক্সেস করতে পারে। এই টুলকিটটি পাঠ্য রেন্ডার করতে পারে, আপনি যে ওয়েবপৃষ্ঠাগুলি দেখেন সেগুলিও দেখতে পারে এবং চিত্রগুলি, অডিও এবং ভিডিও (যেমন কোনও মুখের বা কোনও রাষ্ট্রের আইডির ফটোগুলির মতো) রেকর্ড করতে পারে, ব্লুটুথ রেডিও ডিভাইসগুলিতে পড়তে এবং লিখতে পারে এবং ফিল্ড ট্রান্সপন্ডার ট্যাগগুলি, সস্তা কী কার্ডগুলি, ফোবস, রিংগুলি, রিংগুলি এবং এমনকি চিপ ইমপ্লান্টগুলির সাথে পাঠাতে পারে এবং এটি পড়তে পারে এবং এটি লিখতে পারে এবং এটি লিখতে পারে। আপনার নিষ্পত্তি করার সমস্ত সরঞ্জাম ব্যবহার করে, এই বইটি দিয়ে আপনি নিজেকে একটি সুরক্ষিত ওয়েবসাইট তৈরির জন্য জ্ঞান দিয়ে সজ্জিত করবেন এবং সামগ্রিকভাবে একটি সুরক্ষিত নেটওয়ার্ক কম্পিউটার সিস্টেম যা আপনার জন্য কাজ করে, আপনার বিডিং করে, এবং চেহারা এবং অনুভব করে

কোথায় শুরু করবেন: আপনার প্রয়োজনীয় সঠিক কোডটি দিয়ে আমি এই বইটি বা কোনও বিভাগের সাথে শুরু করে যে বিভাগটি শুরু করি তা ছাড়িয়ে যেতে আপনাকে স্বাগতম, বিশেষত যদি আপনার আগে কোডিংয়ের অভিজ্ঞতা বা পূর্বোক্ত সরঞ্জামগুলির কোনওটির অভিজ্ঞতা থাকে তবে আমি এই বইটিতে বিশদভাবে বর্ণনা করব পাশাপাশি ব্যবহারের কেস এবং এর ব্যবহারিক উদাহরণগুলি ডকুমেন্ট করার জন্য। আপনার যদি কোড লেখার অভিজ্ঞতা না থাকে তবে আমি আপনাকে এই বইটি পড়ার জন্য সুপারিশ করছি এবং বিশেষত আপনাকে এই বইটি আপনার পক্ষে সঠিক কিনা তা নিশ্চিত করার জন্য পূর্ববর্তী বিভাগগুলি পড়ার পরামর্শ দিচ্ছেন। যদি এই বইটি আপনার পক্ষে সঠিক না হয় তবে এটি এমন কোনও বন্ধু বা আত্মীয়কে উপহার দেওয়ার বিষয়টি বিবেচনা করুন যিনি নিজেরাই ওয়েব বিকাশ সম্পর্কে শিখতে আগ্রহী হতে পারেন এবং এমনকি এটি orrow ণ নেওয়া এবং তাদের কাছ থেকে শেখার জন্য বিবেচনা করুন যেখানে আমি আপনাকে একজন শিক্ষক হিসাবে ব্যর্থ করেছিলাম, বা অন্য শিক্ষকরা আমার আগে করেছিলেন। আপনি যেখানেই যাবেন শুরু করুন, আপনি যদি কোনও দরকারী অ্যাপ্লিকেশন তৈরি করতে চান তবে এই বইয়ের প্রতিটি অংশ কার্যকর হবে এবং বিবেচনা করুন যে সেরা অ্যাপ্লিকেশনগুলি শেষ ব্যবহারকারীকে মনে রেখে নির্মিত হয়েছে: আপনার গ্রাহককে জানুন। এখন আপনি আমাকে জানেন, আপনি এই বইটি জানেন এবং আপনি শুরু করতে প্রস্তুত। শুরু করার জন্য, একটি কম্পিউটার ধরুন (এমনকি একটি বক্স স্টোর, অ্যামাজন বা একটি পুরানো ডেস্কটপ থেকে সস্তার ল্যাপটপও কাজ করে এবং এটি এমনভাবে সেট আপ করে যা আপনার পক্ষে কাজ করে।

এই বইটি কীভাবে পড়বেন: পাঠ্য হাইলাইট করা হয়েছে, বোঝায় যে পাঠ্যটি একটি কমান্ড প্রম্পটে অন্তর্ভুক্ত, যেখানে আপনি চালানো কোডটি লিখবেন। কমান্ড প্রম্পটটি ভারী কীবোর্ডকে কেন্দ্র করে এবং আপনার কর্মপ্রবাহকে দ্রুততর করে এবং আপনার উপর জিনিসগুলি আরও সহজ করে তোলার জন্য কোনও ক্লিক করার জন্য খুব কম প্রয়োজন।

শুরু করা: আসুন ডুব দিন We আমরা একটি স্থানীয় মেশিনে কোড তৈরি করে শুরু করব এবং ইন্টারনেটে সংযুক্ত কোনও ওয়েবসাইট তৈরি না করেই শুরু করব। এটি শুরু করা নিরাপদ, কিছুই ব্যয় করে না এবং এটি আপনার পক্ষে সহজ। আপনার অপারেটিং সিস্টেমের উপর নির্ভর করে, বাশ শেলটিতে প্রবেশ করা কিছুটা আলাদা হবে। ম্যাক ওএসের জন্য, আমি এই মুহুর্তে একটি ভার্চুয়াল মেশিন ইনস্টল করার পরামর্শ দিচ্ছি, কারণ আপনি ভার্চুয়াল মেশিনের সাথে সর্বাধিক সামঞ্জস্যতা পাবেন। ভার্চুয়ালবক্স এবং প্যারালেলগুলির মতো বিভিন্ন সরবরাহকারী আপনার জন্য ভার্চুয়াল মেশিন চালাতে পারে, যদিও আপনি যদি একটি স্থানীয় পরিবেশ ব্যবহার করতে পছন্দ করেন যা দ্রুত, প্রবাহিত অভিজ্ঞতা তৈরি করার জন্য প্রস্তাবিত হয় তবে আপনি যদি মেশিনে সরাসরি মেশিনে ইউবুন্টু ইনস্টল করাও সম্ভব। আপনি যদি লিনাক্স বা উইন্ডোজ ব্যবহার করছেন যা আমি সুপারিশ করি তবে কোনও প্রকল্প তৈরি করা বেশ সহজ হওয়া উচিত। আপনার টার্মিনালটি খুলুন, আপনি উপযুক্ত হিসাবে সাইজিংটি সামঞ্জস্য করুন এবং দ্বিতীয় ধাপ অনুসরণ করুন। আপনি যদি উইন্ডোজ ব্যবহার করছেন তবে দয়া করে পদক্ষেপ 1 অনুসরণ করুন।

পদক্ষেপ 1: - কেবল উইন্ডোজ ব্যবহারকারীরা উইন্ডোজে, প্রশাসক এবং প্রকার হিসাবে ওপেন কমান্ড প্রম্পট ডাব্লুএসএল -ইনস্টল

পদক্ষেপ 2: - আপনি যদি উইন্ডোজ ব্যবহার না করেন তবে এখানে চালিয়ে যান, বা এখানে 1 ধাপ এড়িয়ে যান একটি খোলা টার্মিনালে, (আপনার ওএসের উপর নির্ভর করে, উইন্ডোজে উবুন্টু, ম্যাক বা লিনাক্সে টার্মিনাল বা অনুরূপ নাম), একটি প্রকল্প তৈরি করে শুরু হয়। আমরা এটি এমকেডির কমান্ড দিয়ে করি, যা একটি ডিরেক্টরি তৈরি করে। আপনার প্রকল্পটি সংরক্ষণ করার জন্য যদি আপনার কোনও ডিরেক্টরি তৈরি করতে হয়, যা প্রস্তাবিত হয়, ডিরেক্টরিতে পরিবর্তন করতে সিডি কমান্ডটি ব্যবহার করুন এবং এবং

সিডি/পাথ/থেকে/ডিরেক্টরি - পাথ হ'ল ফোল্ডারগুলি (ফাইলগুলি) যা আপনার গন্তব্য ডিরেক্টরিটির আগে, আপনার ডিফল্ট পাথ ~ বা/হোম/ব্যবহারকারীর নাম (যেখানে ব্যবহারকারীর নাম আপনার ব্যবহারকারীর নাম)। ডিফল্ট ডিরেক্টরিতে পরিবর্তন করতে, সিডি বা সিডি টাইপ করুন ~ এমকেডির উদাহরণ - ডিরেক্টরিটির নাম সহ "উদাহরণ" প্রতিস্থাপন করুন

এখন আপনার প্রকল্পের জন্য একটি কার্যকরী ডিরেক্টরি রয়েছে। এই ডিরেক্টরিটি সংরক্ষণ করা এত গুরুত্বপূর্ণ যে আপনার যদি অন্য কোনও মেশিনে স্যুইচ করতে বা আপনার লেখা কোডটি স্থাপন করতে হয় যাতে এটি ওয়েবের জন্য প্রস্তুত থাকে তবে আমরা পরবর্তী কয়েকটি পদক্ষেপে আপনার ডিরেক্টরিটি ব্যাক আপ করার জন্য একটি স্ক্রিপ্ট তৈরি করব। তবে স্ক্রিপ্ট তৈরি করতে কিছুটা কোড লাগে এবং কোডটি যথাসম্ভব দরকারী হওয়ার জন্য স্বয়ংক্রিয় করা দরকার। সুতরাং আসুন প্রথমে স্ক্রিপ্টগুলি তৈরি করতে একটি স্ক্রিপ্ট তৈরি করি। আসুন স্ক্রিপ্ট তৈরি করে এবং এটিকে কার্যকরযোগ্য করে তোলে। আমরা এর জন্য সুডো, সিএইচএমড এবং স্পর্শ ব্যবহার করব এবং স্ক্রিপ্টটিকে "অ্যাসিপ্ট" বলব।

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

এবং ন্যানো বন্ধ করতে, আমরা কন্ট্রোল কীটি ধরে রাখতে পারি এবং এক্স টিপতে পারি, তারপরে আমরা ফাইলটি সংরক্ষণ করছি এবং রিটার্নকে আঘাত করতে পারি তা বোঝাতে y। এখন কোনও স্ক্রিপ্ট সম্পাদনা করার জন্য এই তিনটি কমান্ড টাইপ করার পরিবর্তে, আমরা আবার স্ক্রিপ্টটি সম্পাদনা করতে সুডো এস্ক্রিপ্ট টাইপ করতে সক্ষম হব। এই কাজ! এবং যে কোনও নতুন স্ক্রিপ্ট এটিকে শেলটিতে কল করে সহজেই চালানো যেতে পারে। আসুন এখনই আমাদের কাজটি সংরক্ষণ করুন: আসুন আমাদের নতুন স্ক্রিপ্টটি সংরক্ষণ করতে একটি ব্যাকআপ স্ক্রিপ্ট লিখি এবং তারপরে ব্যাকআপ স্ক্রিপ্টটি ব্যাক আপ করার সময় এটি আমাদের প্রকল্প ডিরেক্টরিতে ব্যাক আপ করুন।

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

শেষ কমান্ড দ্বারা ফিরে আসা পাঠ্যটি অনুলিপি করুন এবং আপনার অ্যাকাউন্টে এসএসএইচ কী যুক্ত করার আগে আপনার গিট সরবরাহকারীর (আদর্শভাবে গিটহাব) সাথে একটি অ্যাকাউন্ট তৈরি করুন। আপনার একবার অ্যাকাউন্ট হয়ে গেলে, উপরের ডান মেনুতে ক্লিক করুন এবং মেনুতে অ্যাক্সেসের অধীনে এসএসএইচ এবং জিপিজি কীগুলিতে আপনার এসএসএইচ কী যুক্ত করার আগে সেটিংস প্রবেশ করুন। একটি এসএসএইচ কী যুক্ত করুন নির্বাচন করুন এবং একটি নতুন সংগ্রহস্থল তৈরি করতে গিটহাবে সংরক্ষণ এবং ফিরে আসার আগে এটিকে আটকানো এবং এটিকে একটি শিরোনাম দিয়ে আপনার যুক্ত করুন। এটি অন্যান্য গিট সরবরাহকারীদের জন্য অনুরূপ, আপনাকে তাদের ডকুমেন্টেশন পড়তে হবে। নতুন সংগ্রহস্থল কনফিগারেশনে, আপনার ভান্ডারকে একটি বর্ণনামূলক নাম দিন এবং আপনি এটি প্রকাশ করতে চান কিনা তা স্থির করুন এবং এখনও অন্তর্ভুক্তির জন্য কোনও ফাইল কনফিগার করার বিষয়টি নিশ্চিত করুন। একবার সংগ্রহস্থল তৈরি হয়ে গেলে, এসএসএইচ ইউআরএল দিয়ে ক্লোনটি অনুলিপি করুন এবং এটি নিম্নলিখিত কমান্ডে আটকান।

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

এখন আপনি সিডি দিয়ে আপনার সংগ্রহস্থলে ফিরে যেতে পারেন, আপনি এটির সাথে পরিচিত হবেন। ব্যাকআপ সহ এখনই আপনার ব্যাকআপ স্ক্রিপ্টটি ব্যবহার করে দেখুন

মহান! এখন আমরা সত্যিই কোডিং পেতে পারি। আসুন এখন জ্যাঙ্গো ইনস্টল করুন যে আমাদের কাছে বাশ এবং গিটের উপর ভাল উপলব্ধি রয়েছে। জ্যাঙ্গো আমাদের স্বয়ংক্রিয়ভাবে আমাদের সফ্টওয়্যার ব্যাক আপ করতে দেবে, বাশ এটিও করতে পারে তবে জ্যাঙ্গোর একটি সহজ নিরাপদ বাস্তবায়ন হওয়া উচিত (এটি অক্ষম এবং আরও সহজেই কনফিগার করা যেতে পারে)।

উবুন্টুতে সফ্টওয়্যার ইনস্টল করতে, আমরা সুডো এপিটি-গেট কমান্ডটি ব্যবহার করব। প্রথমে আসুন আমরা ইতিমধ্যে থাকা সফ্টওয়্যারটি আপডেট এবং আপগ্রেড করি। এটি সুডো এপিটি-গেট আপডেট এবং সুডো এপিটি-গেট আপগ্রেড -y দিয়ে করা যেতে পারে। এরপরে, আসুন পাইথন এবং আমাদের ভার্চুয়াল পরিবেশ, আমাদের কোডের হোম, নিম্নলিখিত কমান্ড সহ ইনস্টল করুন: সুডো অ্যাপ্ট-গেট পাইথন-আইএস-পাইথন 3 পাইথন 3-ভেনভ ইনস্টল করুন

উবুন্টু উদাহরণে সফ্টওয়্যার ইনস্টলগুলির ক্ষেত্রে জ্যাঙ্গোর সাথে যেতে আপনার এটিই দরকার। উইন্ডোজ এবং লিনাক্সের জন্য এটি মোটামুটি সোজা হওয়া উচিত, তবে ম্যাকের জন্য আপনি ভার্চুয়ালবক্স বা প্যারালেলস ডেস্কটপের মতো একটি নিখরচায় বা প্রদত্ত ভার্চুয়াল পরিবেশ ব্যবহার করে এটিতে একটি ভার্চুয়াল মেশিন এবং লিনাক্স ইনস্টল করতে এবং উবুন্টু পরিবেশ সেটআপ করার জন্য উপরের পদক্ষেপগুলি পুনরায় তৈরি করতে চাইতে পারেন। উবুন্টু এই ক্ষেত্রে সমালোচিত কারণ এটি ওয়েবসাইটগুলি চালিত সফ্টওয়্যার এবং এটি তাদের উপরোক্ত সমস্ত সফ্টওয়্যার সহ ওয়েবসাইটগুলি হোস্ট করতে সক্ষম করে।

আসুন জ্যাঙ্গোতে খনন করা যাক।

আমাদের ডিরেক্টরিতে আবার সিডি সহ:

python -m venv venv # ভার্চুয়াল পরিবেশ তৈরি করে যেখানে কোড সংরক্ষণ করা হয়
source venv/bin/activate # ভার্চুয়াল পরিবেশ সক্রিয় করে
django-admin startproject mysite . # যেখানে মাইসাইটটি সেই প্রকল্পটি আমি আমার বর্তমান ডিরেক্টরিতে শুরু করছি।

জ্যাঙ্গো সবেমাত্র আমাদের শুরু করছে, কারণ জ্যাঙ্গো ওয়েব সার্ভারটি হোস্ট করছে এবং একটি বেসিক স্থানীয় ওয়েবসাইট আপ এবং চলমান করার জন্য আমাদের প্রয়োজনীয় সমস্ত কিছু করছে। এখন যেহেতু আমরা জ্যাঙ্গো ইনস্টল করেছি, আমাদের কীভাবে প্রয়োজন তা কার্যকর করার জন্য সেটিংসটি কিছুটা সম্পাদনা করুন। প্রথমত, আসুন একটি নতুন অ্যাপ্লিকেশন তৈরি করা যাক

python manage.py startapp feed

আপনি লক্ষ্য করবেন প্রথম অ্যাপটিকে ফিড বলা হয়। অ্যাপ্লিকেশনটিকে আপনার পছন্দ মতো কল করা উচিত এবং আমরা নতুন অ্যাপ্লিকেশন তৈরি করব, তবে প্রতিটি অ্যাপ্লিকেশনটির নামটি প্রতিবার কোডটিতে রেফারেন্স করার সময় অবশ্যই সামঞ্জস্যপূর্ণ হতে হবে। একটি নতুন অ্যাপ্লিকেশন যুক্ত করতে, আমরা সর্বদা সেটিংস সম্পাদনা করব P ন্যানো ব্যবহার করে,

nano app/settings.py

সেটিংসে, ইনস্টলড_এপসগুলি সন্ধান করুন এবং []] কে 3 লাইনে আলাদা করুন। খালি কেন্দ্রের লাইনে চারটি স্পেস ব্যবহার করে, 'ফিড' বা আপনার অ্যাপ্লিকেশনটির নাম যুক্ত করুন। সেটিংস.পি এর এই বিভাগটি দেখতে হবে:

INSTALLED_APPS = [
    'feed',
]

আমরা ভুলে যাওয়ার আগে, আসুন পরীক্ষা করি যে জ্যাঙ্গো কাজ করছে। পাইথন ম্যানেজ.পি রানসার্ভার 0.0.0.0:8000 কমান্ডটি ব্যবহার করে আমরা সার্ভারটি চালাতে পারি এবং তারপরে কম্পিউটারে একটি ওয়েব ব্রাউজারে নেভিগেট করতে পারি যা কোডটি http: // লোকালহোস্ট: 8000 এ চালাচ্ছে এবং একটি উদাহরণ ওয়েবপৃষ্ঠা (এটি কাজ করে!) কন্ট্রোল সি দিয়ে সার্ভারটি ছাড়ুন, অন্য কোনও কমান্ডের মতোই।

এখন, কিছু পাইথন কোড লেখার জন্য খনন করা যাক। জ্যাঙ্গোর তিনটি প্রধান উপাদান রয়েছে, এগুলি সমস্তই সম্পূর্ণ কোড দ্বারা চালিত। উপাদানগুলিকে মডেল, ভিউ এবং টেমপ্লেট বলা হয় এবং ওয়েবপৃষ্ঠাটি ব্যবহারকারীর কাছে পৌঁছে দেওয়ার আগে প্রতিটি যথাক্রমে উচ্চতর এবং নিম্ন স্তরে থাকে।

মডেলটি এমন কোড যা পুনরুদ্ধার, বাছাই এবং রেন্ডারিংয়ের জন্য ডাটাবেসে তথ্য সঞ্চয় করে।

ভিউটি সিদ্ধান্ত নেয় যে কীভাবে মডেলটি রেন্ডার করা হয়, ম্যানিপুলেটেড এবং সংশোধিত হয়, প্রায় প্রতিটি দৃশ্য সরাসরি একটি মডেল ব্যবহার করবে।

টেমপ্লেটটি হ'ল এইচটিএমএল কোড যা কিছু অতিরিক্ত বেল এবং হুইসেলগুলি টেমপ্লেট ভাষা বলে। টেমপ্লেটটি ভিউ দ্বারা রেন্ডার করা হয় যেখানে এটি পাইথন কোড এবং প্রসঙ্গে যেমন মডেল এবং তথ্য (ইউসাল স্ট্রিং এবং পূর্ণসংখ্যা) ভিউ থেকে পূর্ণ হয়।

জ্যাঙ্গোর অন্যান্য উপাদানগুলিও রয়েছে, তবে সীমাবদ্ধ নয়:

সেটিংস, যা আমরা আলোচনা হিসাবে অ্যাপটি কনফিগার করে।

ইউআরএলগুলি, যা এমন নিদর্শন যা ব্যবহারকারী ওয়েব অ্যাপ্লিকেশনটির নির্দিষ্ট অংশগুলিতে অ্যাক্সেস অর্জন করতে অনুসরণ করে।

ফর্মগুলি, যা সার্ভারে প্রেরিত তথ্য কীভাবে পরিচালনা করা হয় এবং ডাটাবেসে পাশাপাশি ব্যবহারকারীর কাছে রেন্ডার করা হয় তা নির্ধারণ করে। এগুলি সার্ভার সাইডে তথ্যের প্রক্রিয়াজাতকরণের ভিত্তি এবং কম্পিউটার স্টোরগুলি যে কোনও ধরণের তথ্য গ্রহণ করতে পারে, বিশেষত উল্লেখযোগ্যভাবে পাঠ্য স্ট্রিং, সংখ্যা এবং সত্য/মিথ্যা বুলিয়ান (সাধারণত চেকবক্স)।

টেমপ্লেটগুলি, যা এইচটিএমএল কোড এবং টেমপ্লেট ভাষা এবং পাইথন এবং এইচটিএমএল এর মধ্যে ব্যবধানটি পূরণ করে, যার অর্থ পাইথন তথ্য এইচটিএমএল কোড হিসাবে পরিবেশন করা যেতে পারে যা যে কেউ অ্যাক্সেস করতে পারে এবং সীমাবদ্ধ অ্যাক্সেস সহ একটি ওয়েবসাইটকে সুরক্ষিত করতে পারে, যখন ওয়েবে কোডের কাছে অ্যাক্সেসযোগ্য করে তোলে এবং একটি দূরবর্তী ডিভাইসে বিভিন্ন উদ্দেশ্যে দরকারী যা সার্ভারের কাছে থাকতে হবে না।

স্ট্যাটিক ফাইলগুলি, যা সাধারণত জাভাস্ক্রিপ্ট এবং এটি লাইব্রেরিগুলি যা সার্ভারটি পরিবেশন করে এবং টেমপ্লেটের সাথে যুক্ত থাকে।

মিডিয়া ফাইলগুলি, যা সার্ভারটি পরিবেশন করে বা বাহ্যিকভাবে হোস্ট করা হয়, বা হোস্টিংয়ের জন্য অন্য সার্ভারে (একটি বালতি) পোস্ট করার আগে সার্ভারে লিখিত।

মিডলওয়্যার, যা কোডের টুকরো যা প্রতিটি দৃশ্যের মতো একই সময়ে চালিত হয় এবং ভিউতে "অন্তর্ভুক্ত" হিসাবে বিবেচিত হয়।

প্রসঙ্গ প্রসেসর, যা প্রতিটি দৃশ্যের প্রসঙ্গ প্রক্রিয়া করে এবং অতিরিক্ত প্রসঙ্গ যুক্ত করতে ব্যবহৃত হয়।

পরীক্ষাগুলি, যা ব্যবহারকারী বা অনুরোধটি ভিউ রেন্ডার করার আগে নির্দিষ্ট প্রয়োজনীয়তাগুলি পাস করে তা যাচাই করে।

গ্রাহকরা, যা ওয়েবসাইটগুলি কীভাবে পরিচালনা করে এবং যোগাযোগের প্রতিক্রিয়া জানায় তা নির্দেশ করে।

অ্যাডমিন, যা মডেলগুলি নিবন্ধ করতে ব্যবহৃত হয় যাতে এগুলি জ্যাঙ্গো অ্যাডমিন পৃষ্ঠার মধ্যে বিশদভাবে ম্যানিপুলেট করা যায়, যেখানে ডাটাবেসটি গ্রাফিকাল ইন্টারফেসের মাধ্যমে পরিচালিত হতে পারে।

সেলারি, যা জ্যাঙ্গো কোডের অ্যাসিঙ্ক্রোনাস টাস্কগুলি সংজ্ঞায়িত করে তা অবিলম্বে পরবর্তী টাস্ক বা কোডের লাইনে এগিয়ে যাওয়ার আগে চলতে শুরু করতে পারে।

জ্যাঙ্গোর আরও অনেক উপাদান থাকতে পারে, যা আমরা এখানে বিস্তারিত আলোচনা করব। জ্যাঙ্গোকে আরও কার্যকরী করে তোলার প্রচুর উপায় রয়েছে, ওয়েবসকেটগুলি যুক্ত করে, যা দ্রুত, প্রবাহিত যোগাযোগ চ্যানেল, সেলারি, যা অ্যাসিনক্রোনাস কাজগুলি সম্পাদন করে এবং জ্যাঙ্গোকে প্রসারিত করার জন্য অন্যান্য অনেকগুলি সফ্টওয়্যার টুকরো টুকরো করে, বিশেষত ভিউ ফাংশনগুলিতে, যেখানে বেশিরভাগ কোড কার্যকর করা হয়। দেখুন ফাংশনগুলি কী কারণ তারা সাধারণত নির্দিষ্ট URL প্যাটার্ন বা সার্ভারের একটি বিভাগের জন্য নির্দিষ্ট কোডের প্রতিটি টুকরো ঘোষণা করে।

প্রথমত, আসুন ভিউ ফাংশনগুলি অন্বেষণ করুন। ভিউ ফাংশনগুলি আমদানি ডোনোটিং কোড দিয়ে শুরু হয় যা ভিউতে ব্যবহৃত হবে এবং নিয়মিত ফাংশন সংজ্ঞা বা ক্লাস ব্যবহার করে সংজ্ঞায়িত করা হয়। সহজ দর্শনগুলি ফাংশন সংজ্ঞা ডিএফ দ্বারা সংজ্ঞায়িত করা হয় এবং একটি বেসিক টেম্পলেট সহ একটি httpresponse ফেরত দেয়। "হ্যালো ওয়ার্ল্ড" পাঠ্যটি ফেরত দেওয়ার জন্য একটি প্রাথমিক দৃষ্টিভঙ্গি সংজ্ঞায়িত করে শুরু করা যাক। মনে রাখবেন যে প্রতিবার আপনি ডিফের মতো বিবৃতি পরে কোড যুক্ত করেন, যদি, যখন, যখন, ইত্যাদির জন্য, আপনাকে আপনার ফাংশনে প্রয়োগ করতে চান এমন প্রতিটি পূর্ববর্তী সংজ্ঞাগুলির জন্য আপনাকে 4 টি স্পেস যুক্ত করতে হবে। আমরা শীঘ্রই এর প্রতিটি অর্থের মধ্যে প্রবেশ করব।

আমাদের সাইটের ডিরেক্টরি থেকে, ফিড/ভিউ.পি ফাইলটি ন্যানো ব্যবহার করে সম্পাদনা করুন এবং ফাইলের শেষে নিম্নলিখিত লাইনগুলি যুক্ত করুন।

from django.http import HttpResponse

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

জ্যাঙ্গোর httpresponse একটি পাঠ্য স্ট্রিং দিয়ে সাড়া দেয়, খোলার এবং বন্ধের সাথে চিহ্নিত '। প্রতিবার আপনি যখন কোনও ফাংশন বা শ্রেণিতে তথ্য পাস করেন, যেমন অনুরোধ বা স্ট্রিংয়ের মতো, আপনাকে বন্ধনী (, খোলার এবং বন্ধ) ব্যবহার করতে হবে।

আমাদের এখনও আমাদের দৃষ্টিভঙ্গি দেখার দরকার নেই। অবশ্যই, আমরা সার্ভারটিকে বলিনি যেখানে ভিউটি ঠিক সেখানে রয়েছে, আমাদের এখনও এমন একটি পথ নির্ধারণ করতে হবে যার মাধ্যমে ভিউটি রেন্ডার করা উচিত। আসুন অ্যাপ্লিকেশন/urls.py এ একটি প্রাথমিক পাথ সংজ্ঞায়িত করে শুরু করা যাক, এবং আমরা পরে পাথ গ্রুপগুলিতে প্রবেশ করব।

অ্যাপ্লিকেশন/urls.py এ, আমরা সবেমাত্র তৈরি করা দৃশ্যটি আমদানি করার পরে আমদানি বিবৃতিগুলির পরে একটি লাইন যুক্ত করুন।

from feed import views as feed_views

এখন, আসুন ভিউ প্যাটার্নটি সংজ্ঞায়িত করা যাক। ভিউ প্যাটার্নগুলির তিনটি উপাদান রয়েছে, পাথ উপাদান, যা সার্ভারকে জানায় যেখানে সার্ভারের মধ্যে দৃশ্যটি রয়েছে (ইউআরএল পথটি ব্যবহারকারীরা ওয়েবপৃষ্ঠায় প্রবেশের জন্য নেভিগেশন বারে টাইপ করে), ভিউ উপাদানটি যেখানে দৃশ্যটি নির্দিষ্ট করা হয়েছে, এবং অন্যটির নামটি তৈরি করার জন্য এটি অন্যের নামটি তৈরি করার জন্য সহজভাবে তৈরি করা যায়, যাতে এটির নামটি তৈরি করা যায়, তবে এটির নামটি তৈরি করা সহজ হয়, তবে এটি অন্যের নামটি তৈরি করতে পারে। এইভাবে জিনিসগুলি করা এবং নমনীয় হওয়ার বিষয়টি বোধগম্য হয়, কারণ আপনার কোডবেসটি একটি পরিবর্তিত পরিবেশ হবে যা মূল্যবান এবং কাজ করা সহজ হওয়ার জন্য নমনীয়তা এবং ইম্প্রোভাইজেশন প্রয়োজন। আপনার দৃশ্যটি দেখতে কেমন হবে তা এখানে, আপনি এটি urlpatterns = [অ্যাপ্লিকেশন/urls.py এর বিভাগে যুক্ত করতে পারেন। ভিউ প্যাটার্নটি উপরে বর্ণিত তিনটি উপাদান এবং পাথ নামে একটি ফাংশন দিয়ে সংজ্ঞায়িত করা হয়েছে। আপনার ইউআরএল নিদর্শনগুলি একটি তালিকা, সুতরাং সর্বদা তাদের মধ্যে প্রতিটি আইটেমকে কমা দিয়ে শেষ করার বিষয়টি নিশ্চিত করুন, কারণ এটি প্রতিটিকে পৃথক করে। প্রতিটি আইটেমটি আবারও একটি নতুন লাইনে যেতে হবে, এর আগে আবার চারটি স্পেস সহ, ঠিক সেটিংসের অ্যাপের মতো। ওয়েব সার্ভারের মূল ডিরেক্টরিতে চালিত এমন একটি দৃশ্য তৈরি করতে আমরা খালি স্ট্রিং ফাংশন দিয়ে ভিউয়ের প্রথম উপাদানটি সংজ্ঞায়িত করব। আপনার urls.py এখন এই মত দেখা উচিত:

from feed import views as feed_views

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

এটি জ্যাঙ্গো সহ একটি ওয়েবসাইট তৈরি করার ভিত্তি যা সম্পূর্ণ স্থির। আরও একটি গতিশীল ওয়েবসাইট তৈরি করার জন্য যেখানে আমরা চিত্র, ভিডিও, অডিও এবং আরও অনেক কিছুর মতো ক্যাশে তথ্য শুরু করতে পারি, আমাদের মডেলগুলি ব্যবহার করতে হবে, যা আমরা পরবর্তী অন্বেষণ করব। আপাতত, আসুন আমাদের কোডটি পরীক্ষা করে সার্ভারটি চালান। ত্রুটিগুলির জন্য কোডটি পরীক্ষা করতে, চালান:

python manage.py check

যদি কোনও ত্রুটি বার্তা থাকে তবে আপনার অ্যাপ্লিকেশনটিতে আপনি যে পরিবর্তনগুলি করেছেন তা সাবধানতার সাথে পর্যালোচনা করা উচিত এবং দেখুন যে কোনও বহিরাগত বা অভাবের জায়গা, একটি অতিরিক্ত চরিত্র, একটি খালি স্ট্রিং, কোনও টাইপো, কোনও দুর্ঘটনাক্রমে মুছে ফেলা চরিত্র বা অন্য কোনও কিছু স্থির করার দরকার আছে কিনা। ত্রুটি বার্তার মাধ্যমে পড়া (যদি আপনার একটি থাকে), আপনি একটি লাইন নম্বর সহ আপনি তৈরি বা সম্পাদিত কোনও ফাইলের পথ দেখতে সক্ষম হবেন, সুতরাং সেই ফাইল এবং লাইনটি দেখুন এবং দেখুন আপনি সেখানে কিছু ঠিক করতে পারেন কিনা। আপনি যদি সমস্যাটি স্থির করে থাকেন তবে উপরের কমান্ডটি আবার চালান। যখন আপনার সফ্টওয়্যার চালানোর জন্য প্রস্তুত এবং কাজ করছে, আপনি আউটপুটটি দেখতে পাবেন "সিস্টেম চেক কোনও সমস্যা চিহ্নিত করেনি।" এখন আপনি যেতে প্রস্তুত। সাথে সার্ভারটি চালান:

python manage.py runserver 0.0.0.0:8000

এখন একটি ওয়েব ব্রাউজার খুলুন এবং http: // লোকালহোস্ট: 8000 এ নেভিগেট করুন। আপনার দৃষ্টিতে HTTPREPSONS ফাংশনের প্রথম বন্ধনীতে ফিরে আসা পাঠ্যটি দেখতে হবে। এটি কেবল একটি প্রাথমিক উদাহরণ, তবে আপনি যদি এটি এ পর্যন্ত তৈরি করে থাকেন তবে আপনি লিনাক্স, বাশ, পাইথন এবং জ্যাঙ্গো কীভাবে কাজ করেন তার মূল বিষয়গুলি আপনি বুঝতে পারেন। আসুন কিছু ডাটাবেস মডেলিংয়ের আরও গভীরভাবে খনন করি এবং তথ্য সংরক্ষণের ক্ষেত্রে পাইথন শ্রেণীর শক্তি অন্বেষণ করি। তারপরে, আমরা জাভাস্ক্রিপ্ট এবং মেশিন লার্নিং ব্যবহার করে আমাদের সাইটটিকে পুরোপুরি বৈশিষ্ট্যযুক্ত, নমনীয় এবং সুরক্ষিত করার আগে আমরা এইচটিএমএল এবং সিএসএসে একটি গ্রিপ পেতে শুরু করব।

ক্লাসগুলি আপনার অ্যাপ্লিকেশনটির মডেল.পিগুলিতে সংরক্ষণ করা হয়। ন্যানো ব্যবহার করে, অ্যাপ্লিকেশন/মডেলস.পি সম্পাদনা করুন এবং একটি নতুন ক্লাস যুক্ত করুন। একটি শ্রেণি শ্রেণীর সংজ্ঞা দিয়ে সংজ্ঞায়িত করা হয় এবং এটি একটি সুপারক্লাস পাস করা হয় যা এটি এই ক্ষেত্রে মডেলগুলিতে উত্তরাধিকার সূত্রে প্রাপ্ত হয় M মডেল। শ্রেণীর নামটি শ্রেণীর সংজ্ঞা পরে আসে এবং শ্রেণীর সংজ্ঞা এ: (কোলন) ব্যবহার করা হয়, শ্রেণীর সাথে আবদ্ধ বৈশিষ্ট্য এবং ফাংশন সংজ্ঞাগুলি নীচে চিহ্নিত করার আগে। আমাদের শ্রেণীর একটি আইডি দরকার যা আমরা এটি পুনরুদ্ধার করতে এবং এটি অনন্য রাখতে ব্যবহার করতে পারি এবং কিছু তথ্য সঞ্চয় করার জন্য এটির একটি পাঠ্য ক্ষেত্রও প্রয়োজন। পরে আমরা একটি টাইমস্ট্যাম্প, ফাইল, বুলিয়ান (সত্য বা মিথ্যা সংজ্ঞা যা আমাদের কোডটি মডেলটির সাথে কী করা উচিত সে সম্পর্কে সিদ্ধান্ত নিতে সহায়তা করতে পারে এবং এটি বাছাই করতে ব্যবহার করা যেতে পারে) যুক্ত করতে পারি, এটি একটি ব্যবহারকারীকে সার্ভারে লগইন করা ব্যবহারকারীকে বেঁধে রাখার একটি উদাহরণ এবং আরও অনেক কিছু। নীচের কোডটি আনপ্যাক করা যাক:

from django.db import models # আমদানি যা আমাদের শ্রেণি সংজ্ঞায়িত করতে ব্যবহৃত হয় এবং এটি বৈশিষ্ট্যগুলি
class Post(models.Model): # আমাদের শ্রেণীর সংজ্ঞা নিজেই
    id = models.AutoField(primary_key=True) # আমাদের মডেলের আইডি, একটি স্বয়ংক্রিয়ভাবে উত্পন্ন কী যা আমাদের মডেলটিকে জিজ্ঞাসা করতে দেয়, এটি অনন্য রাখতে দেয় এবং যখন এটি তৈরি হয়ে গেলে মডেলটির সাথে আমাদের যোগাযোগ করা দরকার তখন কার্যকর হয়।
    text = models.TextField(default='') # আমাদের শ্রেণীর স্টোরগুলি বৈশিষ্ট্যটি, এক্ষেত্রে কিছু পাঠ্য, খালি স্ট্রিংয়ে ডিফল্ট।

আমরা শেষ করার আগে যেমন করেছি তেমন ফাইলটি বন্ধ করুন এবং সংরক্ষণ করুন।

আমাদের অ্যাপটি বিকশিত হওয়ার সাথে সাথে আমরা এই ক্লাসটি আপডেট করার সময় আমরা আরও অনেক ক্ষেত্র এবং বিকল্পগুলি অন্বেষণ করব, তবে কিছু পাঠ্য পোস্ট করার জন্য একটি অ্যাপ্লিকেশন তৈরি করার এটিই প্রাথমিক প্রয়োজনীয়তা। তবে এই মডেলটি একা কাজ করবে না। পূর্বে বর্ণিত হিসাবে, এই মডেলটি কাজ করতে আমাদের একটি কাস্টম ভিউ এবং কাস্টম ইউআরএল প্যাটার্নের প্রয়োজন হবে এবং আমাদের একটি টেমপ্লেটের পাশাপাশি একটি ফর্মেরও প্রয়োজন হবে। প্রথমে ফর্মটি অন্বেষণ করা যাক।

একটি ফর্ম সংজ্ঞায়িত করতে, অ্যাপ্লিকেশন/ফর্মগুলি সম্পাদনা করুন NANO সহ এবং নিম্নলিখিত লাইনগুলি যুক্ত করুন। আমাদের দুটি আমদানি প্রয়োজন, আমাদের ফর্ম ক্লাস, পাশাপাশি আমরা তৈরি করা মডেল (ফিড.মোডেলস.পোস্ট), মডেলের অনুরূপ একটি শ্রেণি সংজ্ঞা এবং মেটা নামক একটি সাবক্লাস সহ একটি ক্ষেত্র যা ফর্মটির সাথে যোগাযোগ করে মডেলটিকে সংজ্ঞায়িত করবে। ফর্মটিতে একটি সূচনা ফাংশনও থাকতে পারে যা অনুরোধ, মডেল বা অন্যথায় তথ্যের ভিত্তিতে এটি সেট আপ করে, আমরা এটি পরে অনুসন্ধান করব।

মডেল ফর্মগুলি এত দরকারী কারণ তারা একটি মডেল তৈরি করতে পারে বা একটি মডেল সম্পাদনা করতে পারে, তাই আমরা এগুলি উভয়ের জন্য ব্যবহার করব। আসুন নীচে ফর্মগুলিতে একটি সংজ্ঞায়িত করা যাক।

from django import forms
from feed.models import Post

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

এটি একটি ফর্ম এবং মডেল দেখতে কেমন তার মূল বিষয়। এই মডেল ফর্মটি এতে থাকা পাঠ্যটি পরিবর্তন করে কোনও পোস্ট ইনস্ট্যান্ট বা সম্পাদনা করতে ব্যবহার করা যেতে পারে। আমরা এই ফর্মটিকে পরবর্তী দৃশ্যে একীভূত করার দিকে নজর দেব। প্রথমে আসুন মাইগ্রেশনগুলি তৈরি করুন এবং ডাটাবেসটি স্থানান্তর করুন যাতে আমাদের কোডটি চলাকালীন মডেলটির সাথে ইন্টারঅ্যাক্ট করতে পারে। এটি করতে, নিম্নলিখিত কমান্ডগুলি চালান:

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

শেষ অবধি, আমাদের আমাদের ফিডে একটি ইউআরএল প্যাটার্ন যুক্ত করতে হবে। যেহেতু আমাদের ফিড অ্যাপ্লিকেশন একাধিক ইউআরএল ব্যবহার করবে এবং আমরা ফাইল আকারগুলি ছোট রাখতে চাই, আসুন আমরা আমাদের ফিড অ্যাপটিতে একটি স্থানীয় URLS.PY তৈরি করি যা দেখতে এটির মতো দেখাচ্ছে:

from django.urls import path
from . import views

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

আমাদের বেস অ্যাপ্লিকেশনটিতে urls.py সম্পাদনা করতে হবে, আমরা এটি কল করার সিদ্ধান্ত নিয়েছি, এটিই আমাদের তৈরি প্রথম ডিরেক্টরি ছিল। অ্যাপ্লিকেশন/অ্যাপ.পি সম্পাদনা করুন এবং ইউআরএল নিদর্শনগুলিতে নিম্নলিখিতগুলি যুক্ত করুন

from django.urls import include # শীর্ষে
    # ... পূর্ববর্তী কোড এখানে

এখন, যখন আমরা পাইথন ম্যানেজ.পি রানসার্ভারের সাথে সার্ভারটি চালাচ্ছি, তখন আমরা আমাদের তৈরি করা পৃষ্ঠাটি দেখতে পাব কারণ আমাদের কাছে ডাটাবেসের আইটেমগুলির সাথে মডেল, ভিউ এবং টেমপ্লেট পাশাপাশি ইউআরএল প্যাটার্ন রয়েছে। এরপরে, আসুন আমরা তৈরি করা ফর্মটি বাস্তবায়ন করি এবং আমাদের নিজস্ব পোস্ট তৈরি করা শুরু করি। তবে আমরা খুব বেশি কোড লেখার আগে আসুন আমরা এর আগে লেখা স্ক্রিপ্টটি ব্যবহার করে একটি ব্যাকআপ তৈরি করি, ব্যাকআপ। এই স্ক্রিপ্টটি শেলটিতে চালান, কয়েক মুহুর্ত অপেক্ষা করুন এবং সমস্ত কোডটি আমাদের গিট সংগ্রহস্থলে ব্যাক আপ করা হবে।

backup

ফর্মটি বাস্তবায়ন তুলনামূলকভাবে সহজ। আমরা আমাদের ফর্মটি আমদানি করব, ভিউতে একটি পোস্ট অনুরোধ হ্যান্ডলার যুক্ত করব এবং একই দৃশ্যে পুনর্নির্দেশের আগে ডাটাবেসে পোস্টটি সংরক্ষণ করব। আমরা ইতিমধ্যে আমদানি করা পুনঃনির্দেশ ফাংশনটি ব্যবহার করতে পারি এবং ভিউ প্যাটার্নের জন্য ইউআরএল পেতে বিপরীত নামক অন্য একটি ফাংশন। আমরা এটিকে 'ফিড: ফিড' স্ট্রিং দিয়ে জিজ্ঞাসা করব কারণ অন্তর্ভুক্ত প্যাটার্নের নাম স্থানটি হ'ল ফিড, এবং ভিউটিকে ফিডও বলা হয়।

    posts = Post.objects.all() # এখনও পর্যন্ত ডাটাবেসে সমস্ত পোস্ট জিজ্ঞাসা করুন
    if request.method == 'POST': # পোস্টের অনুরোধটি পরিচালনা করুন
        form = PostForm(request.POST) # ফর্মের একটি উদাহরণ তৈরি করুন এবং এতে ডেটা সংরক্ষণ করুন
        if form.is_valid(): # ফর্মটি বৈধ করুন
            form.save() # নতুন বস্তু সংরক্ষণ করুন
        return redirect(reverse('feed:feed')) # একটি জিইটি অনুরোধ সহ একই ইউআরএলে পুনর্নির্দেশ করুন
        'form': PostForm(), # ফর্মটি প্রসঙ্গে পাস করার বিষয়টি নিশ্চিত করুন যাতে আমরা এটি রেন্ডার করতে পারি।

এখন, আমাদের নতুন ফর্মের জন্য অ্যাকাউন্টে টেমপ্লেটটি আপডেট করতে হবে। আমরা ব্যবহার করে এটি করতে পারি

এইচটিএমএলে ট্যাগ করুন এবং একটি জমা বোতাম সহ এইচটিএমএল টেমপ্লেটে ফর্মটি রেন্ডারিং করুন। আমাদের একটি সিএসআরএফ টোকেনও প্রয়োজন, একটি টোকেন যা বাহ্যিক সাইটগুলিকে প্রথমে কোনও পৃষ্ঠা লোড না করে ফর্মটিতে পোস্ট করতে বাধা দেয়।

আসুন এটি ভেঙে দিন। একটি নতুন ফর্ম শ্রেণি, একটি টোকেন, ফর্ম নিজেই এবং একটি জমা বোতাম রয়েছে। বেশ সহজ, তবে আমরা যখন এটি একবার দেখে নিই, আমরা এটি আরও ভাল দেখায়। এটি কাজ করে, আমরা ফর্মটি সহ নতুন পোস্ট পোস্ট করতে পারি এবং সেগুলি এখন ডাটাবেসে সংরক্ষণ করা হয়। এখানে কয়েকটি জিনিস চলছে। আমরা ডকুমেন্টটি একটি এইচটিএমএল ডকুমেন্ট হিসাবে ঘোষণা করার জন্য এইচটিএমএল ট্যাগ ব্যবহার করি, ফর্মটির জন্য টোকেন রেন্ডার করতে আমরা একটি টেম্পলেট ট্যাগ ({ %… %}) ব্যবহার করি এবং ফর্মটি রেন্ডার করতে অন্যটি, {{…}}। ব্লক ট্যাগ এবং একটি টেম্পলেট ট্যাগ ব্যবহার করে পাঠ্যটি রেন্ডার করার জন্য আমাদের কাছে একটি লুপ রয়েছে। ব্লক ট্যাগগুলি সত্যই গুরুত্বপূর্ণ কারণ আমরা কীভাবে টেমপ্লেটের বিভাগগুলি তাদের সাথে রেন্ডার করা হয় তা নির্ধারণ করতে পারি এবং টেমপ্লেট ট্যাগগুলি কীভাবে আমরা আমাদের কোডে ভেরিয়েবলগুলি রাখি তার ভিত্তি।

এখন আমাদের আমাদের অ্যাপটিকে আরও ভাল দেখাতে হবে, কারণ আপাতত এটি সত্যিই মৌলিক দেখাচ্ছে। আমরা সিএসএস ব্যবহার করে, ইনলাইন, বা নথিতে প্রতিটি অবজেক্টের সাথে বাঁধা ক্লাসে এটি করতে পারি। সিএসএস সত্যিই দুর্দান্ত কারণ এটি পৃষ্ঠার সমস্ত কিছু এটি দেখতে কেমন হওয়া উচিত তা জানায় এবং এটিকে সত্যই সুন্দর দেখায়। কয়েকটি গ্রন্থাগার রয়েছে যা এটি করতে পারে তবে আমার ব্যক্তিগত যেতে বুটস্ট্র্যাপ।

বুটস্ট্র্যাপ তাদের ওয়েবসাইট থেকে ডাউনলোড করা যেতে পারে,getbootstrap.com/। সেখানে একবার, ইনস্টলেশন ডক্স পড়তে বোতামটি টিপুন এবং সিডিএন বিভাগের মাধ্যমে অন্তর্ভুক্ত থেকে কোডটি অনুলিপি করুন। আপনার এইচটিএমএল ডকুমেন্টের শীর্ষে এই কোডটির প্রয়োজন হবে, হেড নামক একটি ট্যাগে। এছাড়াও, আসুন আমরা এগিয়ে যাই এবং একটি বেস টেম্পলেট তৈরি করুন যাতে আমাদের প্রতিটি টেমপ্লেটে এই লিঙ্কগুলি পুনরায় তৈরি করার দরকার নেই।

এমকেডির টেম্পলেটগুলির সাথে টেমপ্লেট নামে একটি নতুন ডিরেক্টরি তৈরি করুন এবং তারপরে টেম্পলেটগুলি/বেস.এইচটিএমএল সম্পাদনা করুন।

এটি দেখতে এটির মতো হওয়া উচিত:

সিএসএস এবং জাভাস্ক্রিপ্ট, .css এবং .js ফাইলগুলি অনুলিপি করার বিষয়টি নিশ্চিত করুন, কারণ ভবিষ্যতে আমাদের সাইটটিকে আরও কার্যকরী করার জন্য আমাদের জাভাস্ক্রিপ্টের প্রয়োজন হবে।

এখন, আসুন বাশ শেলটিতে ফিরে আসুন এবং একটি দ্রুত কমান্ড চালাই। মনে রাখবেন, যদি আপনার কখনও ভার্চুয়াল পরিবেশ অ্যাক্সেস করতে হয় তবে উত্স ভেনভ/বিন/অ্যাক্টিভেট টাইপ করুন। এটি আপনাকে স্থানীয়ভাবে পাইথন প্যাকেজগুলি এমনভাবে ইনস্টল করতে দেয় যা জ্যাঙ্গোকে তাদের অ্যাক্সেস করতে দেয়। জ্যাঙ্গো বুটস্ট্র্যাপ ক্লাস দ্বারা উত্পাদিত আমাদের ফর্মগুলি দেওয়ার জন্য, আমরা ক্রিস্পি ফর্ম নামে একটি পাইথন প্যাকেজ ব্যবহার করব। আমরা নিম্নলিখিত কমান্ড দিয়ে এটি ডাউনলোড করতে পারি

pip install django-crispy-forms

এটি একবার ইনস্টল হয়ে গেলে, এটি সেটিংসে যুক্ত করুন P

    # … পূর্ববর্তী কোড এখানে

এখন, আমাদের ফিড টেমপ্লেটে ফিরে আমরা কিছু জিনিস সরিয়ে ফেলতে পারি। আসুন ডকুমেন্টের শুরু এবং শেষটি সরিয়ে ফেলুন এবং প্রসারিত এবং ব্লক সংজ্ঞা ব্যবহার করে আমাদের বেস টেম্পলেট থেকে উত্তরাধিকারের সাথে এটি প্রতিস্থাপন করুন। এছাড়াও, আমরা লোড সহ একটি টেম্পলেট ফিল্টার আমদানি এবং ফর্মটিতে একটি টেম্পলেট ফিল্টার যুক্ত করব। শেষ অবধি, আসুন এটি আরও একটি বোতামের মতো দেখতে ফর্মের বোতামে একটি বুটস্ট্র্যাপ ক্লাস যুক্ত করি। এটি দেখতে এই মত দেখা উচিত:

সুন্দর! এটি ইতিমধ্যে বেশ কিছুটা কোড। এরপরে, আমাদের এটি পরীক্ষা করে নেওয়া উচিত এবং নিশ্চিত হওয়া উচিত যে আমরা দেখতে পাচ্ছি যে সবকিছু সুন্দর দেখাচ্ছে এবং এটি নিশ্চিত হয়ে নিন যে সবকিছু সঠিকভাবে কাজ করছে। পূর্ববর্তী নির্দেশাবলী অনুসারে সার্ভারটি চালান এবং সাইটটি দেখতে ঠিক আছে এবং কাজ করে তা নিশ্চিত করুন। দুর্দান্ত কাজ! আপনি পরবর্তী পদক্ষেপে এগিয়ে যেতে প্রস্তুত, যাতে আমরা অনুরূপ ইউআরএল, ফর্ম, ভিউ এবং টেমপ্লেটগুলি ব্যবহার করে ব্যবহারকারীর লগইন কার্যকারিতা যুক্ত করব। বেস টেম্পলেটটি গুরুত্বপূর্ণ, এবং আমরা এটি সংশোধন করতে এবং প্রয়োজন মতো পরিবর্তনগুলি চালিয়ে যাব, তবে আপাতত আমাদের সাইটকে আরও সুরক্ষিত করার দিকে মনোনিবেশ করা যাক, ব্যবহারকারীদের একটি ব্যবহারকারীর নাম এবং পাসকোডের সাথে লগ ইন করতে সক্ষম করে এবং অবশেষে আরও গুরুত্বপূর্ণ তথ্য যা আপনার অ্যাপ্লিকেশনটিকে সুরক্ষিত রাখতে এবং আপনার নিজের অ্যাকাউন্টটি কেবল আপনার দ্বারা অ্যাক্সেসযোগ্য রাখতে সহায়তা করবে।

এটি করার জন্য, আমাদের জ্যাঙ্গোতে নির্মিত ব্যবহারকারী মডেলটি ব্যবহার করতে হবে। ব্যবহারকারী মডেলটি আমাদের পোস্টের মতো একটি ডাটাবেস মডেল, যা কোনও ব্যবহারকারীকে ওয়েবসাইটে লগ করতে পারে। ভবিষ্যতে, আমরা সাইটটি ইন্টারনেটে স্থাপন করার আগে, আমরা এই মডেলটিকে এটির জন্য দায়ী করা অন্যান্য মডেলগুলির সাথে প্রসারিত করব এবং ফিশিংয়ের প্রতিরোধী লগইনগুলির জন্য অতিরিক্ত সুরক্ষা ব্যবস্থা তৈরি করব। আমরা জ্যাঙ্গো সরবরাহ করে এমন কিছু লগইন ফর্মগুলি ব্যবহার করে শুরু করব। প্রথমে আসুন আমরা একটি নতুন অ্যাপ্লিকেশন তৈরি করি যা আমরা বেসিক লগইন পৃষ্ঠার জন্য টেমপ্লেটগুলি এবং ভিউগুলি রেন্ডার করতে ব্যবহার করব। পিনকোড, ফেসিয়াল স্বীকৃতি, কাছাকাছি ক্ষেত্র যোগাযোগ, বাহ্যিক ডিভাইস, মাল্টি ফ্যাক্টর প্রমাণীকরণ এবং ফিঙ্গারপ্রিন্ট স্বীকৃতি সহ অ্যাপ্লিকেশনটি সুরক্ষিত করার জন্য আমরা অব্যাহত লগইন চ্যালেঞ্জগুলির প্রতিনিধিত্ব করার জন্য অন্যান্য অ্যাপ্লিকেশনগুলিও তৈরি করব।

আমরা ইতিমধ্যে একটি অ্যাপ্লিকেশন শুরু করার কথা বলেছি। আমাদের ডিরেক্টরি থেকে, ভার্চুয়াল পরিবেশের অভ্যন্তরে, পাস করুন পরিচালনা করুন.পি এই যুক্তিগুলি

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

সুতরাং আমাদের এখানে আরও একটি ফর্ম রয়েছে, যা মোটামুটি সহজভাবে কাজ করে। এটি ব্যবহারকারীর নাম, ইমেল এবং পাসওয়ার্ড, পাশাপাশি একটি নিশ্চিত পাসওয়ার্ড ক্ষেত্র সহ একটি ব্যবহারকারী রেজিস্টার ফর্ম। মনে রাখবেন যে এই ফর্মটি নিয়মিত ফর্মগুলি প্রসারিত করে না Forfor ফরম ক্লাস, এটি একটি মডেল ফর্ম যার অর্থ এটিতে একটি মেটা রয়েছে। একটি ক্ষেত্রকে ঠিক একই সংজ্ঞায়িত করা হয়, এবং শ্রেণি মেটা মডেলটি সংজ্ঞায়িত করে ফর্মটি ফর্মটিতে লেখা হবে এমন বাকী তথ্যের সাথে সামঞ্জস্য করে। এর বেশিরভাগই ইতিমধ্যে জ্যাঙ্গোর ইউজারক্রেশনফর্মে অন্তর্নির্মিতভাবে বিদ্যমান, তাই আমরা এটি শ্রেণীর ভিত্তি হিসাবে ব্যবহার করব (প্রথম বন্ধনীতে পাস)।

এরপরে, আমরা কোনও ব্যবহারকারী নিবন্ধনের জন্য ভিউটি পরীক্ষা করব, এখন আমাদের একটি ফর্ম এবং একটি টেম্পলেট রয়েছে। এটি নতুন পোস্ট ভিউয়ের মতোই একটি মডেলফর্ম। ব্যবহারকারীদের/ভিউ.পি সম্পাদনা করুন এবং নিম্নলিখিত কোডটি যুক্ত করুন:

# … আমদানি

ব্যবহারকারীকে নিবন্ধিত করার জন্য আমাদের এটিই প্রয়োজন, তবে আমাদের আরও তথ্য থাকা উচিত। আমরা ব্যবহারকারী নিবন্ধিত হওয়ার সময়টি জানতে চাই, তারা কখন সাইটে শেষ হয়েছিল, তাদের সম্পর্কে কিছু তথ্য যেমন জীবনী, টাইমজোন ইত্যাদির মতো তথ্যও আমাদের ব্যবহারকারীর মডেল এবং বৈশিষ্ট্যযুক্ত পোস্টগুলির জন্য অ্যাকাউন্টের জন্য আমাদের ফিড মডেল, পোস্ট আপডেট করতে হবে। এটি করার জন্য, আমরা উভয় অ্যাপ্লিকেশনগুলিতে মডেলগুলি.পি আপডেট করব। ফিড মডেল সম্পাদনা করে শুরু করা যাক। এটি এখন এটির মতো দেখা উচিত:

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 এবং * বাকী বিকল্পগুলির জন্য 0 ব্যবহার করে আমরা মিনিটের শুরুতে প্রতি ঘন্টা প্রথম মিনিটে একটি কমান্ড চালাতে পারি। এটি আমাদের স্বয়ংক্রিয়ভাবে কোডটি ব্যাক আপ করতে দেয়। সুডো দিয়ে কার্যকর করা হলে ক্রনের সমস্ত কাজগুলি রুট হিসাবে রান করে, তাই আমাদের প্রতি ঘন্টা একটি পাসওয়ার্ড টাইপ করার প্রয়োজন হবে না।

পাসওয়ার্ড ব্যবহার না করে আমাদের কোডটি ব্যাক আপ করা সহজ করার জন্য, আসুন আমাদের ব্যাকআপ কমান্ডের জন্য পাসওয়ার্ডটি অক্ষম করি। আমরা নিম্নলিখিত কমান্ডটি সম্পাদন করে এবং একটি পাসওয়ার্ড প্রবেশ করে এটি করব:

sudo visudo

এখন, আসুন ফাইলের নীচে স্ক্রোল করুন এবং অন্য লাইন যুক্ত করুন:

ALL ALL=NOPASSWD: /bin/backup

এটি আমাদের পাসওয়ার্ড ছাড়াই কোনও ব্যবহারকারী হিসাবে "ব্যাকআপ" কমান্ডটি চালাতে দেয়। এর জন্য ফর্ম্যাটটি সহজ, কেবল "সমস্ত সমস্ত = নোপাসডাব্লুডি:/বিন/" এর সাথে লাইনটি উপসর্গ করুন এবং কমান্ডটি দিয়ে শেষ করুন, উদাহরণস্বরূপ/বিন/ব্যাকআপ, যা/ইউএসআর/বিন/এ বিদ্যমান।

এখন, ইমেল দিয়ে কাজ শুরু করা যাক। ওয়েবসাইটগুলির জন্য ইমেলটি সত্যই গুরুত্বপূর্ণ, কারণ এটি কোনও ওয়েবসাইটকে আরও সুরক্ষিত রাখার একটি উপায়, ব্যবহারকারীরা সত্যিকারের লোক এবং এমনকি গ্রাহকদের কাছে বাজারজাত পণ্য বা পরিষেবাগুলি যাচাই করার একটি উপায়। অনেক লোক যারা ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন welcomere

প্রথমত, আপনি এমন একটি ইমেল পরিষেবার জন্য অর্থ প্রদান করতে পারেন যা আপনাকে আপনার ডোমেন থেকে ইমেল প্রেরণ করতে সক্ষম করবে এবং ন্যূনতম কোডের প্রয়োজন। গুগল ওয়ার্কস্পেস, সেন্ডিনব্লু, মেলগান এবং আরও অনেক কিছুর মতো অনেকগুলি পরিষেবা রয়েছে।

অন্যথায়, আপনি স্ক্র্যাচ থেকে আপনার সার্ভারের মধ্যে নিজের ইমেল পরিষেবাটি তৈরি করা ভাল। আমি এই বিকল্পটি সুপারিশ করি, যদিও এটি আরও কোড এবং এটি বিশেষ হোস্টিংয়ের প্রয়োজন হতে পারে। আপনি সম্ভবত আপনার হোম কম্পিউটার থেকে কোনও মেল সার্ভার শুরু করতে সক্ষম হবেন না, সুতরাং আসুন আমরা ক্লাউডে একটি সার্ভার শুরু করার আগে এবং এর মধ্যে আমাদের নিজস্ব মেল সার্ভার তৈরি করার আগে ইমেল প্রেরণের জন্য কনফিগারেশন এবং কোড পরীক্ষা করি।

প্রথমত, নিম্নলিখিত কমান্ড সহ সেটিংস.পি সম্পাদনা করুন:

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 কনফিগারেশন সহ একটি জেএসএন ফাইল সেট আপ করেছি।

ফাইলটি সম্পাদনা করতে:

sudo nano /etc/config.json

নিম্নলিখিত লাইনগুলি যুক্ত করুন:

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

আমরা কনফিগারেশন ফাইলটি সম্পাদনা করতে এবং অ্যাপ্লিকেশনটিতে আমরা যে সমস্ত পাসওয়ার্ড এবং কীগুলি ব্যবহার করব সেগুলি যুক্ত করব। আপাতত, পাইথন ব্যবহার করে কীভাবে ইমেল প্রেরণ করবেন তা দ্রুত পরীক্ষা করা যাক। প্রথমে আসুন আমরা আমাদের ব্যবহারকারীদের কাছে প্রেরণ করতে পারি এমন একটি যাচাইকরণ ইমেলের জন্য একটি টেম্পলেট তৈরি করি এবং এটি ব্যবহারকারী টেম্পলেট ডিরেক্টরিতে রাখি। এই টেমপ্লেটটি এইচটিএমএলে লেখা হবে।

nano users/templates/users/verification_email.html

এই ইমেলটি মোটামুটি সহজ। এটি কোনও ব্যবহারকারীর প্রসঙ্গ, সাইটের জন্য বেস ইউআরএল এবং একটি ব্যবহারকারী আইডি এবং টোকেন যা ব্যবহারকারীর ইমেল যাচাই করতে ব্যবহৃত হয়। টেমপ্লেটটি রেন্ডার করার জন্য আমরা কিছু পাইথন কোড লেখার আগে সেটিংসে বেস ইউআরএল সংজ্ঞায়িত করার বিষয়টি নিশ্চিত করুন। এগিয়ে যান এবং অ্যাপ্লিকেশন/সেটিংস.পি -তে নিম্নলিখিত লাইনগুলি যুক্ত করুন, শুরুতে।

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

এই বেসিক টোকেন জেনারেটর একটি টোকেন উত্পন্ন করে আমরা ব্যবহারকারীকে একটি ইউআরএল প্রেরণ করতে পারি এবং ব্যবহারকারী তাদের ইমেল যাচাই করতে এবং তাদের অ্যাকাউন্টটি সক্রিয় করতে ব্যবহার করতে পারি।

এরপরে, আসুন কীভাবে একটি ইমেল প্রেরণ করবেন তা দেখুন। ন্যানো ব্যবহার করে, ব্যবহারকারী/ইমেল.পি সম্পাদনা করুন।

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)

এটি মোটামুটি সহজ। আমরা ইমেলটি প্রেরণ করতে, টেমপ্লেটগুলি এবং আমাদের সেটিংসের সাথে ইমেলটি রেন্ডার করার জন্য আমাদের প্রয়োজনীয় ফাংশনগুলি আমদানি করি এবং তারপরে আমরা টেমপ্লেটের নাম দ্বারা ইমেলটি সংজ্ঞায়িত করি এবং একটি ফাংশন ব্যবহার করে এটি ব্যবহারকারীর কাছে প্রেরণ করি। আপনি লক্ষ্য করবেন যে আমরা মেল প্রেরণের জন্য ফাংশনটি সংজ্ঞায়িত করি নি, প্রেরণ_হ্টমেল_মেইল, তবুও, আসুন আমরা ইতিমধ্যে ব্যবহারকারীদের/ইমেল.পি -তে যুক্ত হওয়া কোডের নীচে এটি লিখি

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

এটি কিছুটা জটিল, এবং আমরা এখনও এই সমস্ত কোড চালাতে প্রস্তুত নই। লক্ষ্য করুন আমরা একটি আনসুব_লিংক সংজ্ঞায়িত করছি, ব্যবহারকারী আমাদের ইমেলগুলি থেকে সাবস্ক্রাইব করতে ব্যবহার করতে পারে এমন লিঙ্কটি। এটি গুরুত্বপূর্ণ, কারণ ব্যবহারকারীরা যে কোনও সময় তাদের দেখতে না চাইলে আমাদের ইমেলগুলি থেকে বেরিয়ে আসতে সক্ষম হতে হবে। আমরা আমাদের বার্তার একটি পাঠ্য বিকল্পও যুক্ত করি, যা এইচটিএমএল ট্যাগগুলি ছিটিয়ে এইচটিএমএল বার্তা। শেষ অবধি, আমরা ইমেলটি প্রেরণ করেছি কিনা তা পরীক্ষা করে দেখি এবং যদি তা না হয় তবে আমরা ব্যবহারকারীর প্রোফাইলে চিহ্নিত করি যে তাদের ইমেলটি বৈধ নয়।

আসুন ব্যবহারকারী মডেলগুলিতে ফিরে যান যাতে আমরা এই সমস্ত কাজ করতে পারি। ব্যবহারকারীর ইমেলটি বৈধ নয় তা চিহ্নিত করতে আমাদের একটি ফাংশন সংজ্ঞায়িত করতে হবে এবং সাবস্ক্রাইব করার জন্য একটি লিঙ্ক তৈরি করতে হবে এবং একটি বুলিয়ান ক্ষেত্রটি সংজ্ঞায়িত করতে হবে।

প্রথমে ব্যবহারকারী/মডেল.পি শীর্ষে নিম্নলিখিত আমদানি যুক্ত করুন

nano users/models.py
# …

এরপরে, আসুন টোকেনটি তৈরি করতে ব্যবহারকারী মডেলটিতে ফাংশন যুক্ত করি এবং ইমেলটি সক্রিয় করতে ব্যবহৃত টোকেনটি পরীক্ষা করে পাশাপাশি ব্যবহারকারী সফলভাবে তাদের মেইল গ্রহণ করছে কিনা তা সংরক্ষণের জন্য ক্ষেত্রটি পরীক্ষা করে দেখুন। ব্যবহারকারী/মডেলগুলিতে আবার, মডেলের শেষে নিম্নলিখিত কোডটি যুক্ত করুন (ইন্ডেন্টেড কোড)

# …
            TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # 30 দিনের জন্য বৈধ

এটি মোটামুটি সহজ, আমরা একটি টাইমস্ট্যাম্পসাইনার ব্যবহার করি, যা একটি বেসিক ক্রিপ্টোগ্রাফি সরঞ্জাম, একটি টোকেন তৈরি করতে যা নির্দিষ্ট সময়ের পরে মেয়াদ শেষ হয়ে যাবে এবং আমরা এটি বৈধ কিনা তা যাচাই করতে অন্য একটি ফাংশনও ব্যবহার করি। আমরা এই টোকেনগুলি দু'বার ব্যবহার করি, একবার ইমেল যাচাই করতে এবং একবার সাবস্ক্রাইব লিঙ্কের জন্য।

এখন যেহেতু আমাদের এগুলি রয়েছে, আমাদের শেষ কাজটি করা উচিত তা হ'ল মতামত। ব্যবহারকারী/ভিউ.পি -র মধ্যে, আসুন ইমেল ঠিকানা যাচাই করতে এবং সাবস্ক্রাইব করতে হবে না।

nano users/views.py

প্রথমে নিম্নলিখিত আমদানি যুক্ত করুন। আমি কয়েকটি অতিরিক্ত ছুঁড়ে ফেলেছি যাতে আমাদের আরও পরে আরও আইটেম আমদানি করতে হবে না।

from .email import send_verification_email # যাচাইকরণ ইমেল প্রেরণ ফাংশনটি আমদানি করার বিষয়টি নিশ্চিত করুন

আপনার কাছে ইতিমধ্যে এই আমদানিগুলির কয়েকটি থাকতে পারে তবে সেগুলি পুনরাবৃত্তি করতে ক্ষতি করে না। আপনাকে অন্যান্য আমদানির মধ্যে যাচাইকরণ ইমেল প্রেরণের ফাংশনটি, পাশাপাশি অ্যাকাউন্ট_অ্যাক্টিভেশন_টোকেন ব্যবহারকারীদের কাছ থেকে আমদানি করতে হবে।

এখন, ফাইলের নীচে, নিম্নলিখিত কোডটি যুক্ত করুন:

        # তাদের সাবস্ক্রাইব করুন
    # অন্যথায় লগইন পৃষ্ঠায় পুনঃনির্দেশ
# সেন্ডওয়েলকামমেইল (অনুরোধ, ব্যবহারকারী)

এটি অনেক কোড। আসুন এটি ভেঙে দিন। প্রথম ফাংশন, পরিষ্কার এবং সাধারণ, মেলিং তালিকা থেকে ব্যবহারকারীকে সাবস্ক্রাইব করে। দ্বিতীয় ফাংশনটি তাদের ইমেলটিকে সক্রিয় করে এবং আপনি লক্ষ্য করবেন যে আমি একটি মন্তব্য করা ফাংশন, সেন্ডওয়েলমেমেইল যুক্ত করেছি। স্বাগত ইমেল প্রেরণের জন্য আপনাকে একটি ইমেল টেম্পলেট এবং ফাংশন সংজ্ঞা ব্যবহার করতে স্বাগতম, আমি এখনও পাইনি। আমি যে শেষ ফাংশনটি ছুঁড়েছি তা গুরুত্বপূর্ণ, কারণ অ্যাক্টিভেশন ইমেলগুলির মেয়াদ শেষ হয়। অতএব, আমাদের কিছু সময় অ্যাক্টিভেশন ইমেলটি পুনরায় পাঠাতে হবে। আমরা এর জন্য একটি প্রাথমিক ফর্ম ব্যবহার করতে পারি এবং যাচাইকরণ ইমেলটি প্রেরণে ফাংশনটি কল করতে পারি। আমরা এটি করার আগে, আসুন নিশ্চিত করি যে এটি প্রথম স্থানে প্রেরণ করা হচ্ছে, রেজিস্টার ভিউতে একটি ফাংশন কল যুক্ত করে। রেজিস্টার ভিউতে পুনর্নির্দেশের ঠিক আগে এই লাইনটি যুক্ত করুন, ডিফ রেজিস্টার, ব্যবহারকারী/ভিউ.পি।

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 সজ্জা যুক্ত করতে পারি এবং আমাদের মতামতগুলি সুরক্ষিত করতে পারি, ব্যবহারকারীর সাইনআপগুলি নিতে, অনুগত ইমেল প্রেরণ করতে এবং ক্যাশে সম্পর্কিত তথ্য, যা প্রাসঙ্গিক থাকার জন্য কোনও ওয়েবসাইটের কী করা দরকার তার ভিত্তি। আমরা আরও কয়েকটি দরকারী বৈশিষ্ট্য যুক্ত করব এবং তারপরে আমাদের সাইটটি সুরক্ষিত এবং উপযুক্ত করতে একটি মেল সার্ভার, ডোমেন কনফিগারেশন এবং ফিল্টার স্থাপন, একটি দূরবর্তী সার্ভারে আমাদের কোড স্থাপনের জন্য একটি ভিত্তি তৈরি করব।

আমাদের একটি পাসওয়ার্ড রিসেট ভিউও প্রয়োজন, সুতরাং আসুন এটি সত্যিই দ্রুত যুক্ত করুন। পাসওয়ার্ড রিসেট ভিউতে জ্যাঙ্গোর অন্তর্নির্মিত কিছু ফাংশনে ভেঙে গেছে, তবে আমরা কীভাবে আমাদের নিজস্ব ভিউ, ইমেল টেম্পলেট, ফর্ম এবং ইউআরএল নিদর্শনগুলি লিখব তা দেখব। ব্যবহারকারীদের/ভিউ.পি.পি.

# ... আমদানি

এই ফর্মটি জ্যাঙ্গোতে নির্মিত হয়েছে, তবে পাসওয়ার্ড রিসেট, ব্যবহারকারী/টেম্পলেটগুলি/ব্যবহারকারী/পাসওয়ার্ড_রেসেট_কনফার্ম.এইচটিএমএল নিশ্চিত করার জন্য আমাদের একটি টেম্পলেট প্রয়োজন

ব্যবহারকারী/টেমপ্লেট/ব্যবহারকারী/পাসওয়ার্ড_রেসেট.এইচটিএমএল -এ একটি সাধারণ ফর্ম সহ একটি পাসওয়ার্ড রিসেট ইমেল প্রেরণের জন্য আমাদের কাছে একটি টেম্পলেট রয়েছে

ইমেলের জন্য টেমপ্লেটটি নিজেই সহজ, এটি ব্যবহারকারী/টেমপ্লেট/ব্যবহারকারী/পাসওয়ার্ড_রেসেট_মেইল.এইচটিএমএল -এ পাসওয়ার্ডটি পুনরায় সেট করার জন্য একটি লিঙ্ক রেন্ডার করে একটি প্রাথমিক এইচটিএমএল ফাইল। জ্যাঙ্গো স্বয়ংক্রিয়ভাবে এই ফাইলটি ব্যাখ্যা করবে।

আমাদের আরও দুটি টেম্পলেটও দরকার। প্রথমটি হ'ল ইমেলটি প্রেরণ করা হয়েছে তা নিশ্চিত করা। এগুলির জন্য ভিউগুলি ইতিমধ্যে জ্যাঙ্গোতে রয়েছে, সুতরাং আমাদের কেবল তাদের urls.py এ সম্বোধন করা দরকার। এই টেম্পলেটটি ব্যবহারকারী/টেমপ্লেট/ব্যবহারকারী/পাসওয়ার্ড_রেসেট_ডোন.এইচটিএমএল এ অবস্থিত

এবং সর্বশেষে, পাসওয়ার্ড রিসেটটি সম্পূর্ণ হয়েছে তা নিশ্চিত করার জন্য, ব্যবহারকারী/টেমপ্লেট/ব্যবহারকারী/পাসওয়ার্ড_রেসেট_কমপ্লিট.এইচটিএমএল

এখন, আমাদের এই মতামতের জন্য ইউআরএল নিদর্শনগুলির প্রয়োজন। ব্যবহারকারী/urls.py এ, নিম্নলিখিত ইউআরএল নিদর্শনগুলি যুক্ত করুন:

    # ... পূর্ববর্তী ইউআরএল এখানে

চারটি টেমপ্লেট, এটি অনেক! তবে এখন আমরা ওয়েব ব্রাউজার থেকে আমাদের যে কোনও সময় প্রয়োজনের সময় ব্যবহারকারীর পাসওয়ার্ড পুনরায় সেট করতে সক্ষম হতে পারি।

আমি বুঝতে পারি এটি অনেক কোড। যদি এটি আপনার মাথার উপরে কিছুটা মনে হয় তবে ঠিক আছে। আপনি উন্নতি করবেন, আপনার বোঝার উন্নতি হবে এবং আপনি খুব শীঘ্রই কোডের সাথে আরও বেশি দক্ষ হয়ে উঠবেন। আপনি যদি পুরোপুরি হারিয়ে যান তবে আমি অনলাইনে কোড কোর্সে লার্ন টু কোডে কাজ করার পরে পরে এই সফ্টওয়্যারটিতে ফিরে আসার পরামর্শ দিচ্ছি। এগুলি সাধারণত শুরু করার জন্য নিখরচায় থাকে এবং আপনি যখন এই প্রকল্পে ফিরে আসেন তখন আপনাকে সফল হওয়ার জন্য প্রয়োজনীয় সমস্ত কিছুর মাধ্যমে আপনাকে গাইড করবে। আপনি যদি মনে করেন যে আপনি চালিয়ে যাওয়ার জন্য প্রস্তুত, পড়ুন, পরবর্তী, আমরা আপনার কোডটি একটি দূরবর্তী সার্ভারে স্থাপন এবং একটি মেল সার্ভার সেট আপ করার পাশাপাশি বাশ ব্যবহার করে আপনার স্থাপনা স্বয়ংক্রিয়ভাবে তৈরি করব যাতে আপনি সর্বদা কয়েকটি সাধারণ কমান্ড সহ একটি নতুন প্রকল্প সেট আপ করতে পারেন।

রিমোট সার্ভারে মোতায়েন করার আগে আমাদের শেষ কাজটি করা আমাদের সাইটটিকে আরও কিছুটা সুরক্ষিত করে তোলে। আপনি লক্ষ্য করবেন যে লগইন ভিউটি কেবল একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড নেয় এবং কোনও মাল্টি ফ্যাক্টর প্রমাণীকরণ বা এক সময় কোড নেই। এটি একটি সহজ সমাধান, এবং একই কোড সহ, আমরা আমাদের সাইটটিকে পাঠ্য বার্তা প্রেরণ করতে এবং এমনকি সার্ভারে প্রেরিত পাঠ্য বার্তাগুলির জন্য প্রতিক্রিয়াশীল হতে পারি। শুরু করার জন্য, আমরা ব্যবহারকারীর মডেলগুলিতে ফিরে যাব এবং একটি টাইমস্ট্যাম্প স্বাক্ষর যুক্ত করব যা প্রতিটি লগইনকে উপস্থাপন করবে। আমরা ব্যবহারকারী মডেলটিতে একটি অনন্য, ঘোরানো শনাক্তকারী যুক্ত করব যা আমাদের লগইনে অতিরিক্ত সুরক্ষা যুক্ত করতে ব্যবহৃত হবে। ব্যবহারকারী মডেলগুলি সম্পাদনা করা, ব্যবহারকারী/মডেলস.পি, নিম্নলিখিত কোডটি যুক্ত করুন:

# ইউইআইডি, টাইমস্ট্যাম্প স্বাক্ষরকারী এবং ইউআরএল জেনারেটর (বিপরীত) আমদানি করার বিষয়টি নিশ্চিত করুন
    # এই কোডটি এখানে যুক্ত করুন
    # এবং এই ফাংশন যুক্ত করুন
            TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # 3 মিনিটের জন্য বৈধ

আপনার ব্যবহারকারী/মডেলস.পি মন্তব্যগুলি ছাড়াও এর মতো দেখায় তা নিশ্চিত করুন ( #সহ লাইনে কোড)। এটিকে ভেঙে ফেলা, এটি সহজ। আমাদের কাছে কয়েকটি আমদানি রয়েছে, একটি টাইমস্ট্যাম্পসাইনার যা একটি ক্রিপ্টোগ্রাফিক ইউটিলিটি যা একটি সুরক্ষিত কোড তৈরি করতে পারে এবং এটি বৈধ কিনা তা যাচাই করতে পারে, কেবল একবার ব্যবহৃত হয়েছে এবং নির্দিষ্ট সংখ্যক সেকেন্ডের চেয়ে পুরানো নয়। আমরা একটি ইউইউআইডিও ব্যবহার করি, যা একটি অনন্য শনাক্তকারী যা আমাদের ব্যবহারকারীকে টোকেন স্বাক্ষর করতে এবং ইউআরএলে যেখানে টোকেনটি ব্যবহারকারীর কাছে প্রেরণ করা হয় সেখানে চিহ্নিত করে। আমরা দুটি ফ্যাক্টর প্রমাণীকরণ ভিউ তৈরি করতে এই বেসিক ক্রিপ্টোগ্রাফি ব্যবহার করব। আমরা অন্য কিছু করার আগে, আসুন মাইগ্রেশনগুলি চালান যাতে আমাদের ব্যবহারকারীর মডেলগুলি আপডেট হয়। ম্যানেজ.পি সহ ডিরেক্টরিতে, মাইগ্রেশনগুলি তৈরি করতে এবং সম্পূর্ণ করতে নিম্নলিখিত কমান্ডগুলি চালান।

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

এটি গুরুত্বপূর্ণ কারণ প্রতিবার আমরা যখন মডেলগুলিতে পরিবর্তন করি, তখন আমাদের মডেলগুলি ব্যবহার করার আগে আমাদের টেবিলগুলি তৈরি করতে এবং ডিফল্ট সহ ডাটাবেস আপডেট করতে হবে।

এরপরে, আসুন একটি গৌণ প্রমাণীকরণ ভিউতে পুনঃনির্দেশ করতে আমাদের লগইন ভিউটি উন্নত করুন। ব্যবহারকারী/ভিউ.পি -তে, লগইন ফাংশনটি সরান এবং আমরা সবেমাত্র ব্যবহারকারী মডেলগুলিতে উত্পন্ন ইউআরএলটিতে পুনর্নির্দেশ করি।

# … আমদানি
        if user and user.profile.can_login < timezone.now(): # নোট করুন যে আমরা এখন ব্যবহারকারী লগ ইন করতে পারেন কিনা তা পরীক্ষা করে দেখুন
            # এখানে ছিল auth_login ফাংশনটি সরান
                return redirect(user.profile.create_auth_url()) # দ্রষ্টব্য আমরা এখানে একটি নতুন ইউআরএল পুনর্নির্দেশ করি
            else: # যদি ব্যবহারকারী মাল্টি-ফ্যাক্টর প্রমাণীকরণ ব্যবহার না করে তবে কেবল সেগুলি লগ ইন করুন।
        else: # লগইন যদি সফল না হয়,
            user = User.objects.filter(username=username).first() # এটি সেই অংশ যেখানে আমরা ব্যবহারকারীদের প্রোফাইল আপডেট করি
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # সুতরাং তারা কয়েক সেকেন্ডের জন্য আবার লগ ইন করতে পারে না

সুতরাং এটি বেশ সহজ, আমরা এখন এটি তৈরি করার সময় দুটি ফ্যাক্টর প্রমাণীকরণ ভিউতে পুনর্নির্দেশের একটি উপায় রয়েছে। ব্যবহারকারী কোনও ফোন নম্বর যুক্ত না করে যদি আমাদের একটি ফ্যালব্যাকও রয়েছে। আমরা শীঘ্রই একটি ফোন নম্বর যুক্ত করতে একটি বেসিক ভিউ যুক্ত করব এবং শীঘ্রই একটি পাঠ্য বার্তার সাথে লগ ইন করব।

প্রথমত, আমাদের কোড থেকে একটি পাঠ্য বার্তা প্রেরণের জন্য আমাদের একটি সহজ উপায় প্রয়োজন। এটি করার জন্য, আমরা বেশ কয়েকটি এপিআই থেকে চয়ন করতে পারি, তবে আমার মতে সবচেয়ে সহজতমটি হ'ল টোবলিও। তারা ছোট প্রকল্পগুলির জন্য ভাল দামের পাশাপাশি বাল্ক ছাড়ও সরবরাহ করে। টোবলিও.কম এ একটি অ্যাকাউন্ট তৈরি করুন, আপনার প্রকল্প সম্পর্কে কিছু বিশদ পূরণ করুন, একটি ফোন নম্বর কিনুন এবং আপনার এপিআই কীগুলি আপনার সেটিংসে অনুলিপি করুন P তারপরে, এই কোডটি একটি নতুন ফাইলের অধীনে যুক্ত করুন, ব্যবহারকারী/এসএমএসপি।

nano users/sms.py
# প্রয়োজনীয় সমস্ত প্যাকেজ আমদানি করুন
# এই কোডটি টোবলিও সহ পাঠ্য প্রেরণ করে
# অনেক অঙ্কের সাথে একটি নম্বর পেতে একটি সহায়ক ফাংশন
# ব্যবহারকারী যাচাই করতে পাঠ্য প্রেরণ করুন
# এই ফাংশন সহ কোনও ব্যবহারকারীকে কোনও পাঠ্য প্রেরণ করুন
# এই ফাংশন দিয়ে কোডটি বৈধ করুন
# সময় বৈধ করুন

আপনার কীগুলির সাথে এই লাইনগুলি যুক্ত করে যথাযথভাবে আপনার সেটিংস পরিবর্তন করতে ভুলবেন না:

# আপনার টিউলিও ড্যাশবোর্ড থেকে এগুলি অনুলিপি করার বিষয়টি নিশ্চিত করুন
AUTH_VALID_MINUTES = 3 # একবার তাত্ক্ষণিকভাবে একবার টিএফএ পৃষ্ঠাটি সক্রিয় থাকে

প্রথমত, আমাদের দুটি ফ্যাক্টর প্রমাণীকরণ দর্শনগুলির জন্য আমাদের ফর্মগুলির প্রয়োজন হবে। ব্যবহারকারী/ফর্মস.পি সম্পাদনা করা, নিম্নলিখিত কোডটি যুক্ত করুন।

# … আমদানি
# আমাদের ফোন নম্বর প্রবেশের জন্য একটি ফর্ম
# প্রমাণীকরণের জন্য একটি ফর্ম

এরপরে, আসুন ব্যবহারকারীদের/ভিউ.পি -তে মতামত তৈরি করা যাক

# … আমদানি

এই উভয় মতামতের জন্য আমাদেরও টেম্পলেটগুলির প্রয়োজন হবে। প্রথমে এমএফএ টেম্পলেট যুক্ত করা যাক।

nano users/templates/users/mfa.html

টেমপ্লেটে এই এইচটিএমএল কোড যুক্ত করুন

এটি বেশ স্ব ব্যাখ্যামূলক। ফর্মটি কোনও কোড বা একটি খালি কোড প্রেরণ করে এবং আপনি যদি খালি কোড পাই তবে আমরা কোডটি প্রেরণ করব তা আপনি লক্ষ্য করবেন। তারপরে আমাদের কাছে কেবল দুটি জমা বোতাম রয়েছে এবং এইভাবে আমরা উভয় বোতাম সহ কোডটি প্রেরণ করতে পারি। এরপরে, আমরা একটি ফোন নম্বর যুক্ত করতে একটি সাধারণ ফর্ম যুক্ত করব।

nano users/templates/users/mfa_onboarding.html

নিম্নলিখিত এইচটিএমএল যুক্ত করুন:

এই ফর্মটি অনেক সহজ, এটি কেবল আমাদের তৈরি ফোন নম্বর ফর্মটি রেন্ডার করে এবং ব্যবহারকারীকে একটি ফোন নম্বর যুক্ত করতে দেয়।

এটি সত্যিই ভাল লাগছে! যতক্ষণ না সবকিছু সঠিকভাবে সেট আপ করা থাকে ততক্ষণ আমাদের বার্তা প্রেরণ করতে সক্ষম হওয়া উচিত এবং ব্যবহারকারীকে তাদের ফোন নম্বর দিয়ে লগ ইন করা উচিত আমরা ইউআরএল নিদর্শনগুলি যুক্ত করার সাথে সাথে। আমাদের সর্বশেষ জিনিসটি সেট আপ করতে হবে তা হ'ল একটি প্রোফাইল ভিউ যাতে আমরা নিশ্চিত করতে পারি যে ব্যবহারকারীরা লগ ইন না করে তাদের ফোন নম্বরটি পরিবর্তন করতে পারে Also

আসুন ব্যবহারকারীদের/ভিউগুলিতে একটি প্রোফাইল ভিউ যুক্ত করা যাক। এই ভিউটি ব্যবহারকারীর বায়ো, ইমেল, ব্যবহারকারীর নাম এবং ফোন নম্বর আপডেট করবে, পাশাপাশি আমাদের মাল্টি ফ্যাক্টর প্রমাণীকরণ সক্ষম করার অনুমতি দেবে। প্রথমত, আমাদের ব্যবহারকারী/ফর্মগুলিতে আরও দুটি ফর্মের প্রয়োজন হবে

# ... আমদানি

এরপরে, আমরা এই দুটি ফর্ম ব্যবহার করার জন্য একটি দৃশ্য তৈরি করতে পারি। ব্যবহারকারী/ভিউ.পি সম্পাদনা করুন এবং ভিউতে যুক্ত করুন।

# এই আমদানি যোগ করুন

আমাদের এই দৃশ্যের জন্য একটি টেম্পলেটও প্রয়োজন।

nano users/templates/users/profile.html

আপনি লক্ষ্য করবেন এটি মোটামুটি সহজ ফর্ম, তবে এতে কিছু জাভাস্ক্রিপ্ট রয়েছে যা স্বয়ংক্রিয়ভাবে ফর্মের সামগ্রীগুলি আপডেট হওয়ার সাথে সাথে পোস্ট করে। এটি থাকা দরকারী, সুতরাং আপনি প্রতিবার জমা দিতে না পেরে সম্পাদনা করতে সক্ষম হন।

এরপরে, আমাদের ব্যবহারকারীদের ইউআরএল প্যাটারগুলিতে এই সমস্ত মতামতের প্রতিনিধিত্ব করে URLS দরকার। ব্যবহারকারী/urls.py সম্পাদনা করুন এবং এই কোডটি যুক্ত করুন:

# … পূর্ববর্তী কোড, আমদানি
# … ইউআরএল নিদর্শনগুলি আমরা আগে প্রবেশ করেছি, পরবর্তী তিনটি লাইন যুক্ত করুন

আমাদের প্রকল্পটি পরীক্ষা করার জন্য এখন ভাল সময়। তবে প্রথমে আসুন আরেকটি ব্যাকআপ চালানো যাক।

backup

এবং সার্ভার চালান। আমরা লিনাক্স সার্ভারে মোতায়েন করার আগে অ্যাকাউন্টে দুটি ফ্যাক্টর প্রমাণীকরণ সক্ষম করা ভাল ধারণা। আমরা আমাদের প্রোফাইল ইউআরএল,/ব্যবহারকারী/প্রোফাইল/এ যাচ্ছি এবং আমাদের ফোন নম্বর প্রবেশের পরে প্রমাণীকরণ সক্ষম করতে এবং তারপরে ফর্মটি জমা দেওয়ার জন্য বাক্সটি পরীক্ষা করব।

python manage.py runserver localhost:8000

আপনার ওয়েব ব্রাউজারে গিয়ে ওয়েবপৃষ্ঠাটি দেখুন, আমি এই উদাহরণে গুগল ক্রোম ব্যবহার করছি এবং ইউআরএল https: // লোকালহোস্ট: 8000/অ্যাকাউন্ট/প্রোফাইল/প্রবেশ করছি

আপনি প্রয়োজনে লগ ইন করতে সক্ষম হবেন এবং দুটি ফ্যাক্টর প্রমাণীকরণ সক্ষম করবেন।

এই প্রকল্পটি চালানোর জন্য একটি সার্ভার দরকার যাতে এটি সত্যিই মেল প্রেরণ করতে পারে। তবে প্রথমে ত্রুটিগুলি দেখার জন্য আমাদের একটি উপায় প্রয়োজন। আপনি খেয়াল করবেন যে আপনি যদি সেটিংসের সাথে ডিবাগ মোডে সার্ভারটি চালান তবে সত্যের সমান, সার্ভারটি স্বয়ংক্রিয়ভাবে ত্রুটিগুলি দেখায়। ডিবাগ মোড ব্যবহার না করে ত্রুটিগুলি দেখাতে, যা কোনও প্রোডাকশন সার্ভারে অনিরাপদ, আমাদের এটির জন্য একটি দৃশ্য যুক্ত করা উচিত। আমাদের সবচেয়ে গুরুত্বপূর্ণ ত্রুটিগুলি পরিচালনা করতে সক্ষম হতে হবে তা হ'ল:

ত্রুটি 500 - আমাদের কোড নিয়ে একটি সমস্যা ত্রুটি 404 - এমন একটি পৃষ্ঠা যা পাওয়া যায় নি (ভাঙা ইউআরএল) ত্রুটি 403 - একটি অনুমতি অস্বীকার ত্রুটি

আসুন এই ত্রুটিগুলি পরিচালনা করতে একটি নতুন অ্যাপ্লিকেশন যুক্ত করুন, যার নাম ত্রুটি।

python manage.py startapp errors

এটি সেটিংসে যুক্ত করুন.পি.পি যেমন আমরা আগের মতো করেছি, ইনস্টলড_এপস সেটিংয়ে এবং অ্যাপ্লিকেশন/urls.py এ কিছু ভিউতে উল্লেখ যুক্ত করে শুরু করুন, যেখানে অ্যাপ্লিকেশনটি আপনার জ্যাঙ্গো প্রকল্পের নাম।

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

সুতরাং এটি সমস্ত দুর্দান্ত কাজ করে, এখন আমাদের কাছে একটি মাল্টি ফ্যাক্টর প্রমাণীকরণ সিস্টেম রয়েছে যা লগ ইন করার জন্য একটি ফোন নম্বর বা ইমেল নির্ভর করে But এগুলি স্প্যামার, রোবট বা যে কেউ আমাদের কাজের জন্য ভাল বোঝায় না সে হতে পারে। আমার ওয়েবসাইটে ব্যবহারকারীদের পর্যবেক্ষণ করার জন্য আমার কাছে একটি দৃষ্টিভঙ্গি দেখুন:

# আমদানি
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># {{ব্যবহারকারী.আইডি}} </ছোট>

আমাদের আরও একটি সাবটেমপ্লেট দরকার, টগল_অ্যাক্টিভ.এইচটিএমএল। এই টেমপ্লেটটি এমন একটি ফর্ম হওয়া উচিত যা আমাদের ব্যবহারকারী সক্রিয় কিনা তা টগল করতে দেয়।

আমাদের ব্যবহারকারীর ক্রিয়াকলাপ এবং উপযুক্ত ইউআরএল নিদর্শনগুলি টগল করার জন্য একটি ভিউ যুক্ত করতে হবে। আমরা যখন এটিতে থাকি, আসুন আমাদের যদি এটির প্রয়োজন হয় তবে কোনও ব্যবহারকারীকে মুছতে একটি দৃশ্য যুক্ত করা যাক।

# আমদানি
    success_url = '/' # সাফল্যের ইউআরএল পুনর্নির্দেশ
    def test_func(self): # যদি ব্যবহারকারী সুপার ব্যবহারকারী হয় এবং মুছতে অনুমতি থাকে তবে পরীক্ষা করুন

যদিও এটি প্রয়োজনে ব্যবহারিক, তবে কোনও ব্যবহারকারীকে মুছে ফেলা বেশিরভাগ সময় প্রয়োজনীয় হওয়া উচিত নয়, আমরা কেবল তাদের যদি তাদের বরখাস্ত করার প্রয়োজন হয় তবে সাইটটি ঘুরে দেখলে আমরা কেবল ব্যবহারকারীদের দৃশ্যমানতা টগল করতে পারি।

আমরা যুক্ত করা ইউআরএল নিদর্শনগুলি এটির মতো দেখতে। ন্যানো সহ, ব্যবহারকারী/urls.py সম্পাদনা করুন এবং এই লাইনগুলি যুক্ত করুন:

nano users/urls.py

লাইনগুলি শেষের আগে "]" "তবে শুরু হওয়ার পরে" ["এর আগে ব্যবহারকারীর দর্শনগুলিতে পাথের তালিকায় যেতে হবে।

# …
# …

এখন, সাইটটি ব্যাক আপ করার বিষয়টি নিশ্চিত করুন যাতে আপনি এটি ওয়েব সার্ভারে ডাউনলোড করতে পারেন যা আমরা কাজ চালিয়ে যাব। কমান্ড লাইন থেকে,

sudo backup

এখন আমাদের সাইট ব্যাক আপ হয়েছে।

সুতরাং এখন আমাদের আরও কয়েকটি দরকারী বৈশিষ্ট্য রয়েছে। তবে এখানে বড় ছবিটি কী? এই কোডটি এখনও ইন্টারনেট থেকে অ্যাক্সেসযোগ্য নয়, আমাদের কাছে এখনও কোনও মেল সার্ভার নেই, এবং আমাদের অ্যাপ্লিকেশনটি বিস্তৃত যাচাইকরণ প্রক্রিয়াটি অন্তর্ভুক্ত করার জন্য আমাদের অ্যাপ্লিকেশনটি প্রসারিত করতে হবে এবং সেই সাথে সাইটটি অন্বেষণ করতে সহায়তা করার জন্য মসৃণ লেআউটগুলি, পাশাপাশি সুবিধাপ্রাপ্ত ব্যবহারকারীদের প্রমাণীকরণ করার জন্য সুরক্ষিত প্রোটোকলগুলিও আমাদের সহায়তা করতে।

আমরা এই সব পেতে হবে। আপাতত সবচেয়ে গুরুত্বপূর্ণ বিষয়টি কেবল এই কোডটি অনলাইনে পাওয়া যাবে, যা আমরা একটি উবুন্টু সার্ভারে কেবল কয়েকটি লাইন বাশ দিয়ে করতে পারি। আপনার বাড়িতে কোনও সার্ভার এবং কোনও ব্যবসায়িক ইন্টারনেট সাবস্ক্রিপশন না থাকলে আপনাকে এটির জন্য একটি সার্ভার ভাড়া নিতে হবে যা আপনাকে পোর্টগুলি খুলতে দেয়। আমি ব্যক্তিগতভাবে আমার ওয়েবসাইটটি একটি এইচপি জেড 440 এ চালাচ্ছি যা আমার অ্যাপার্টমেন্টে ইনস্টল করা আছে, তবে এটি ভার্চুয়াল প্রাইভেট সার্ভার (ভিপিএস) ভাড়া দেওয়ার মৌলিক প্রয়োজনের জন্য সাধারণত অনেক সস্তা।

মনে রাখবেন যে আমরা এখন যে কোডটি চালাচ্ছি তা তুলনামূলকভাবে পাতলা, আমাদের পণ্য তৈরির জন্য যা ব্যবহার করতে হবে তা ব্যবহার করার জন্য প্রস্তুত হওয়ার আগে এটি বজায় রাখা এবং উন্নত করা দরকার। আপনি ইন্টারনেটের সাথে কী করেন সে সম্পর্কে সতর্কতা অবলম্বন করার বিষয়টি নিশ্চিত করুন, নিশ্চিত হয়ে নিন যে আপনি যদি এই সাইটটিকে কোনও লিনাক্স সার্ভারে ওয়েবে প্রকাশ্যে স্থাপন করেন তবে আপনার ওয়েবসাইটের সাথে অযাচিত মিথস্ক্রিয়া ব্লক করার পরিকল্পনা রয়েছে। এটি সম্ভবত প্রথমে কোনও সমস্যা হবে না, তবে আমরা মেশিন লার্নিং, কৃত্রিম বুদ্ধিমত্তা এবং কম্পিউটার ভিশন সহ এটির বিরুদ্ধে লড়াই করার জন্য বিভিন্ন সমাধানগুলি সন্ধান করব। যখন এটি কোনও সমস্যা হয়ে দাঁড়ায়, সমাধানের জন্য এই পাঠ্যে আরও দেখুন।

ভিপিএস ভাড়া দেওয়ার ক্ষেত্রে, আপনি যেতে পারেন এমন অনেকগুলি জায়গা রয়েছে। গুগল ক্লাউডে ভিপিএস সার্ভার, আইওনোস, কামাটেরা, অ্যামাজন এডাব্লুএস রয়েছে এবং আরও বেশি সরবরাহকারী ক্লাউড সার্ভার সলিউশন সরবরাহ করে যা আমাদের প্রয়োজন অনুসারে।

আপনাকে তাদের ফর্মগুলির মাধ্যমে ক্লিক করতে হবে এবং শুরু করার জন্য একটি পরিকল্পনা নির্বাচন করতে হবে। আপনি যে কোনও সরবরাহকারীর সাথে একটি প্রাথমিক পরিকল্পনার সাথে যেতে পারেন, তবে নিশ্চিত করুন যে সরবরাহকারী আপনাকে ইমেল প্রেরণের জন্য পোর্ট মেল সার্ভার পোর্টগুলি খুলতে দেয় (এটি পোর্ট 587 এবং পোর্ট 25 হওয়া উচিত), কিছু সরবরাহকারী এই পোর্টগুলি ব্লক করে। এখনও অবধি আমি আইওনোস এবং কামাটেরার সাথে সবচেয়ে ভাল অভিজ্ঞতা পেয়েছি, উভয়ই আমাকে সীমাহীন ইমেল প্রেরণ করার অনুমতি দেবে এবং তাদের মূল্য বেশ সস্তা।

আপনি এসএসএইচ বা সিকিউর শেল নামে একটি প্রোটোকলের মাধ্যমে আপনার নতুন সার্ভারের সাথে সংযোগ স্থাপন করবেন, যা আপনাকে আপনার ব্যক্তিগত কম্পিউটার থেকে আপনার ব্যক্তিগত কম্পিউটারের মতো সার্ভারের সাথে দূরবর্তীভাবে ইন্টারফেস করতে দেয়। আপনি যখন সার্ভারটি সেট আপ করবেন, হোস্টিং সরবরাহকারী সম্ভবত আপনাকে একটি এসএসএইচ কী যুক্ত করতে বলবে, বা তারা আপনাকে একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড দেবে। এসএসএইচ কীটি হ'ল আপনি কীভাবে কোডটি সম্পাদনা করতে কমান্ড লাইন থেকে সার্ভারে লগ ইন করবেন। একটি এসএসএইচ কী তৈরি করতে নীচের এসএসএইচ-কীজেন বিকল্পগুলি ব্যবহার করুন।

ssh-keygen

ফাইলটি সংরক্ষণ করুন এবং এটি ওভাররাইট করুন যদি আপনার প্রয়োজন হয় তবে আপনার এসএসএইচ কীগুলি ঘোরানো ভাল যদি আপনি ইতিমধ্যে না থাকেন। এখন, আপনি আপনার এসএসএইচ কী দেখতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন। আপনি এটি আপনার রিমোট সার্ভারে অনুলিপি করতে চাইবেন যাতে আপনি এটি প্রমাণীকরণের জন্য ব্যবহার করতে পারেন।

cat ~/.ssh/id_rsa.pub

যদি আপনি সেই কমান্ডটি টাইপ করার সময় কোনও এসএসএইচ কী দেখতে সক্ষম না হন ("এসএসএইচ-আরএসএ এএএ" দিয়ে শুরু হওয়া অঙ্ক এবং চিঠিগুলির একটি দীর্ঘ স্ট্রিং), একটি আরএসএ কী তৈরি করার চেষ্টা করুন (তারা আরও সুরক্ষিত, তাই আমি সেগুলি ব্যবহার করার পরামর্শ দিচ্ছি)) নিম্নলিখিত কোডটি 4096 বিট আরএসএ এসএসএইচ কী তৈরি করবে।

ssh-keygen -t rsa -b 4096

উবুন্টু চলমান একটি ভিপিএস তৈরি করুন, তবে আপনি এটি করার পরিকল্পনা করছেন। একবার আপনি সরবরাহকারীদের ওয়েবসাইটে ফর্মগুলির মাধ্যমে ক্লিক করে একটি ভিপিএস তৈরি করার পরে (কামাটেরা ডটকম, আয়নোস ডটকম বা অনুরূপ), আপনি লগ ইন করতে চাইবেন this এটি করতে, আপনার আইপি ঠিকানা (xx.xx.xx.xx.xx এর মতো দেখতে ঠিকানা) দিয়ে এসএসএইচ কমান্ডটি ব্যবহার করুন। আমরা তৈরি সার্ভারে ডিফল্ট ব্যবহারকারীর নামের প্রতি আপনার সংবেদনশীল হতে হবে, উদাহরণস্বরূপ, উবুন্টু।

ssh ubuntu@XX.XX.XX.XX

আপনাকে পাসওয়ার্ডের জন্য জিজ্ঞাসা করা যেতে পারে, যদি আপনাকে কোনও পাসওয়ার্ডের জন্য জিজ্ঞাসা করা হয় তবে এটি প্রবেশ করুন We আমরা ডিফল্ট ব্যবহারকারীর নামটি ব্যবহার করব না, সুতরাং আসুন একটি নতুন ব্যবহারকারী তৈরি করে এবং তাদের অ্যাকাউন্টে একটি এসএসএইচ কী যুক্ত করে শুরু করা যাক।

আসুন একটি নতুন SSHD_CONFIG ফাইল যুক্ত করে শুরু করা যাক, যা সার্ভারকে কীভাবে এসএসএইচ ব্যবহার করবেন তা জানায়।

nano sshd_config
# এটি এসএসএইচডি সার্ভার সিস্টেম-প্রশস্ত কনফিগারেশন ফাইল।  দেখুন
# আরও তথ্যের জন্য sshd_config (5)।
# এই এসএসএইচডি পাথ =/ইউএসআর/স্থানীয়/এসবিআইএন:/ইউএসআর/স্থানীয়/বিন:/ইউএসআর/এসবিন:/ইউএসআর/বিন:/এসবিন:/বিন:/বিআইএন:/ইউএসআর/গেমস দিয়ে সংকলিত হয়েছিল
# ডিফল্ট এসএসএইচডি_কনফিগের সাথে বিকল্পগুলির জন্য ব্যবহৃত কৌশল
# ওপেনশগুলি তাদের ডিফল্ট মান সহ বিকল্পগুলি নির্দিষ্ট করতে হয়
# সম্ভব, তবে তাদের মন্তব্য ছেড়ে দিন।  আপত্তিহীন বিকল্পগুলি ওভাররাইড
# ডিফল্ট মান।
# পোর্ট 22
# অ্যাড্রেসফ্যামিলি যে কোনও
# শ্রবণশক্তি 0.0.0.0
# শ্রবণশক্তি ::
# হোস্টকি/ইত্যাদি/এসএসএইচ/এসএসএইচ_হোস্ট_আরএসএ_কি
# হোস্টকি/ইটিসি/এসএসএইচ/এসএসএইচ_হোস্ট_সিডিএসএ_কি
# হোস্টকি/ইত্যাদি/এসএসএইচ/এসএসএইচ_হোস্ট_ড 25519_কি
# সিফার এবং কীিং
# Rekelimit default কিছুই নয়
# লগিং
# Syslogfacity ath
# লগলভেল তথ্য
# প্রমাণীকরণ:
# লগিংগ্রেসটাইম 2 মি
# পারমিটরোটলোগিন নিষিদ্ধ-পাসওয়ার্ড
# স্ট্রিটমোডস হ্যাঁ
# ম্যাক্সাথ্রিজ 6
# সর্বোচ্চ 10
# আশা করি .এসএসএইচ/অনুমোদিত_কিজ 2 ভবিষ্যতে ডিফল্টরূপে উপেক্ষা করা হবে।
# অনুমোদিত প্রিন্সিপালসফাইল কিছুই নয়
# অনুমোদিত কেসকম্যান্ড কেউ নেই
# অনুমোদিত কেসকোম্যান্ডুজার কেউ নেই
# এটি কাজ করার জন্য আপনার/ইত্যাদি/এসএসএইচ/এসএসএইচ_এনওএন_হোস্টগুলিতে হোস্ট কীগুলিও প্রয়োজন
# হোস্টবেসেডএউথেন্টিশন নং
# হ্যাঁতে পরিবর্তন করুন যদি আপনি ~/.ssh/know_hosts বিশ্বাস না করেন তবে
# হোস্টবেসেডএউথেন্টিশন
# উপেক্ষা করাহোস্টস নং
# ব্যবহারকারীর ~/.rhosts এবং ~/.shosts ফাইলগুলি পড়বেন না
# হ্যাঁ উপেক্ষা
# টানেলযুক্ত পরিষ্কার পাঠ্য পাসওয়ার্ডগুলি অক্ষম করতে, এখানে কোনও পরিবর্তন করুন!
# পারমিটেম্পটপাসওয়ার্ডস নং
# চ্যালেঞ্জ-প্রতিক্রিয়া পাসওয়ার্ডগুলি সক্ষম করতে হ্যাঁতে পরিবর্তন করুন (সাথে সাবধানতা অবলম্বন করুন
# কিছু পাম মডিউল এবং থ্রেড)
# কার্বেরোস বিকল্প
# কার্বেরোসাউথেন্টিশন নং
# হ্যাঁ কেরবেরোসোরলোকালপাসডব্লিউডি
# হ্যাঁ
# কেরবেরোসেটফস্টোকেন নং
# Gssapi বিকল্প
# জিএসএসপিয়াউথেন্টিশন নং
# Gssapicleanupcredentials হ্যাঁ
# Gssapistictacceptorcheck হ্যাঁ
# GSSAPIKEYEXCHANGE নং
# পিএএম প্রমাণীকরণ, অ্যাকাউন্ট প্রসেসিং সক্ষম করতে এটি 'হ্যাঁ' এ সেট করুন,
# এবং সেশন প্রসেসিং। যদি এটি সক্ষম করা থাকে তবে পাম প্রমাণীকরণ হবে
# কেবিডিআইন্টারঅ্যাকটিভ আন্টিথেন্টিশন এবং এর মাধ্যমে অনুমোদিত হতে হবে
# পাসওয়ার্ডঅথেন্টিশন।  আপনার পিএএম কনফিগারেশনের উপর নির্ভর করে,
# কেবিডিআইন্টারঅ্যাক্টিভ অ্যান্টিঅ্যাকশন এর মাধ্যমে পাম প্রমাণীকরণ বাইপাস করতে পারে
# "পার্মিটরুটলোগিন ছাড়াই পাসওয়ার্ড" সেটিং।
# আপনি যদি কেবল পাম অ্যাকাউন্ট এবং সেশন চেকগুলি ছাড়াই চলতে চান
# পিএএম প্রমাণীকরণ, তারপরে এটি সক্ষম করুন তবে পাসওয়ার্ডঅথেন্টিশন সেট করুন
# এবং 'না' তে কেবিডিন্টারঅ্যাকটিভ অ্যান্টিথেন্টিশন।
# হ্যাঁ অনুমতি দেয়
# হ্যাঁ
# গেটওয়েপোর্টস নং
# এক্স 11 ডিসপ্লে অফসেট 10
# X11uselocalhost হ্যাঁ
# অনুমতি হ্যাঁ
# প্রিন্টলাস্টলগ হ্যাঁ
# Tcpkepalive হ্যাঁ
# পারমিটুসেরেনভায়রনমেন্ট নং
# সংকোচনের বিলম্ব
# ক্লায়েন্টালআইন্টারভাল 0
# ক্লায়েন্টালিভকাউন্টম্যাক্স 3
# ব্যবহৃত নং
# পিডফাইল /রুন /এসএসএইচডি.পিড
# ম্যাক্সস্টার্টআপস 10: 30: 100
# পারমিটুনেল নং
# CROOTDIRECTORY কিছুই নয়
# সংস্করণএডেন্ডাম কেউ নেই
# কোনও ডিফল্ট ব্যানার পাথ নেই
# ক্লায়েন্টকে লোকেল পরিবেশের ভেরিয়েবলগুলি পাস করার অনুমতি দিন
# কোনও সাবসিস্টেমগুলির ডিফল্ট ওভাররাইড
# প্রতি ব্যবহারকারী ভিত্তিতে সেটিংস ওভাররাইডিংয়ের উদাহরণ
# ব্যবহারকারী anoncvs মেলে
# এক্স 11 ফোরওয়ার্ডিং নং
# অনুমতি দেয়
# পারমিট্টি নং
# ফোর্সকম্যান্ড সিভিএস সার্ভার

মনে রাখবেন, ফাইলটি সংরক্ষণ করতে 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/বিন/সেক্রিপ্ট ব্যবহার করে

sudo nano /usr/bin/ascript

সেখানে সুডো ব্যবহার করার বিষয়টি নিশ্চিত করুন যাতে আপনার ফাইলটি সম্পাদনা করার অনুমতি রয়েছে। ফাইলটিতে, এই লাইনগুলি যুক্ত করুন:

# !/বিন/বাশ
    echo "# !/বিন/বাশ ">>/ইউএসআর/বিন/$ 1

মনে রাখবেন এই স্ক্রিপ্টটি একটি যুক্তি, স্ক্রিপ্টের নাম, $ 1 হিসাবে গ্রহণ করে। প্রথমে এটি ফাইলটি বিদ্যমান কিনা তা যাচাই করে, বা অন্যথায় এটি তৈরি করে, স্ক্রিপ্টটি বাশ বলে ঘোষণা করার জন্য প্রথম লাইন যুক্ত করে, এর অনুমতিগুলি পরিবর্তন করে, এটি সম্পাদনা করে এবং এর নামটি /ইত্যাদি /সিক্রিপ্টগুলিতে যুক্ত করে যা আমাদের তৈরি করা স্ক্রিপ্টগুলির নাম সংরক্ষণ করতে দেয়। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে কেবল অনুমতিগুলি পরিবর্তন করুন এবং এটি সম্পাদনা করুন। ফাইলটি সংরক্ষণ করুন এবং পরবর্তী আমরা এর অনুমতিগুলি পরিবর্তন করব। যতক্ষণ আমরা এই স্ক্রিপ্টটি ব্যবহার করি ততক্ষণ আমাদের আর এটি করতে হবে না।

sudo chmod a+x /usr/bin/ascript

নিখুঁত। এখন আসুন সেটআপ নামে একটি স্ক্রিপ্ট তৈরি করা যাক। প্রথমত, আপনাকে অভিভূত করার জন্য নয়, তবে আমার সেটআপ স্ক্রিপ্টটি কেমন দেখাচ্ছে তা একবার দেখুন। আপনার প্রকল্পে এই স্ক্রিপ্টটি দেখতে কেমন হওয়া উচিত তা দিয়ে আমরা চলব, আমার স্ক্রিপ্টের সমস্ত কিছুর প্রয়োজন হবে না।

# !/বিন/বাশ
# sudo chmod a+x স্ক্রিপ্টস/ইউজারসেটআপ
# ./scriptts/usersetup
# এসএসএইচ-কীজেন
# প্রকল্প ডিরেক্টরি
# লগ কমান্ড
# ন্যানো কনফিগারেশন
# গিট কনফিগারেশন
# আপডেট এবং ইনস্টল
# ক্ল্যামাভ অ্যান্টিভাইরাস সক্ষম করুন
# হোস্টনাম সেট করুন
# পোস্টগ্রেস সেটআপ করুন
# সেটআপ ডাটাবেস ব্যাকআপ
# Iptables অক্ষম করুন
# বিটডিফেন্ডার ইনস্টল করুন
# সেটআপ পোস্টফিক্স
# দির তৈরি করুন
# সেটআপ ভার্চুয়ালেনভ
# নির্ভরতা পান এবং তৈরি করুন
# ফায়ারওয়াল বিধি সেট করুন
# পিওয়াইপিআই নির্ভরতা ইনস্টল করুন
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
# সার্টবট ইনস্টল করুন
# সার্টবট চালান
# মেল সার্ভার পুনরায় লোড করুন
# অনুলিপি শংসাপত্র
# সুডো সিপি
# সুডো সিপি
# প্যাচ ভেনভ
# ব্যবহারকারী সেটিংস সেট করুন
# অনুমতি সেট
# সুডো চাউন -আর টিম: ব্যবহারকারী/var/রান/
# সুডো চাউন রুট: রুট/রান/সুডো/টিএস -আর
# sudo chmod 664 db.sqlite3
# সুডো চাউন www-data: ব্যবহারকারীরা ডিবি.এসকিউলাইট 3
# কনফিগার করুন এবং অনুমতি সেট করুন
# সেটআপ ডাটাবেস
# পাম কনফিগারেশন ইনজেক্ট করুন এবং ত্রুটিযুক্ত এসএসএইচ কনফিগারেশন সরান
# সুডো সেড -i '' -e '$ d' /etc/pam.d/sshd
# সুডো সেড -i '' -e '$ d' /ইত্যাদি /প্রোফাইল
# বিন স্ক্রিপ্টগুলি অনুলিপি করুন এবং অনুমতি সেট করুন
# পরিষেবাগুলি পুনরায় লোড করুন এবং সক্ষম করুন
# অ্যাপাচি মডিউলগুলি সক্ষম করুন
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# ডিফল্ট সাইট অক্ষম করুন
# আমাদের সাইট সক্ষম করুন
# ডেমন পুনরায় লোড করুন এবং অ্যাপাচি, পোস্টফিক্স এবং ওপেনডকিম পুনরায় চালু করুন
# অনুমতি সেট
# অদলবদল কনফিগারেশন
# ইনিশ ক্যাপশন ইঞ্জিন
# সেটআপ গিট
# ডোমেন কনফিগারেশনের জন্য আইপিভি 6 এবং ওপেনডকিম দেখান
# সেটআপ সম্পূর্ণ

এটাই অনেক সেটআপ! সংক্ষেপে, এই কোডটি লগ করে ন্যানো এবং গিট কনফিগার করে, ফাইলগুলির উপর অনুলিপি করে, ইউবুন্টু এপিটি প্যাকেজগুলি ডাউনলোড করে এবং ইনস্টল করে, পাইথন নির্ভরতা, পোস্টফিক্স কনফিগার করে, পোস্টগ্রেসকিউএল (ডাটাবেস সার্ভার) কনফিগার করে এবং ডাটাবেসকে লোড করে, এবং ডিরেক্টেবলস আইপিডাব্লুএস, ডিডেবলস আইটিভিলস, ডিডেবলস আইপিটিএসএস, ডিডেবলস আইপিটিএসএস, ডি। সার্ভার সেট আপ করে, কনফিগারেশন ইনস্টল করে, সেভার শুরু করে এবং সক্ষম করে, অদলবদল বরাদ্দ করে, অনুমতিগুলি সেট করে এবং আইপি, আইপিভি 6 ঠিকানা এবং ওপেনডকিম কী প্রিন্ট করে। মোটামুটি সহজ, তবে এটি প্রচুর কোডের মতো দেখাচ্ছে। আমাদের এর অনেক প্রয়োজন হবে না কারণ আমাদের নির্ভরতা নেই, আমরা সেলারি, সেলারিবিট বা ড্যাফনে ব্যবহার করছি না, তবে আমরা যেভাবেই শুরু করার জন্য সেগুলির কয়েকটি ইনস্টল করব। লক্ষ্য করুন যে এই কোডটিতে একটি ডোমেন রয়েছে বেশ কয়েকবার ঘোষণা করা হয়েছে।

আমাদের একটি ডোমেন নামও কিনতে হবে (যা একটি ছোট বার্ষিক ফি)। আমি একটি ডোমেন কেনার জন্য স্কোয়ারস্পেসের পরামর্শ দিচ্ছি, তাদের বিন্যাসটি স্বজ্ঞাত এবং সহজেই ব্যবহারযোগ্য। আপনি আপনার পছন্দের যে কোনও ডোমেন কিনতে পারেন, তবে আমি এই উদাহরণে ডোমেন ফেম্বেব.কম ব্যবহার করছি। একবার আপনি কোনও ডোমেন কিনে ফেললে স্কোয়ারস্পেস ডিএনএস কনফিগারেশন প্যানেলে যান এবং আইপি ঠিকানার মাধ্যমে সার্ভারে আপনার ডোমেনটি নির্দেশ করে একটি রেকর্ড যুক্ত করুন। এটি দেখতে এটির মতো হওয়া উচিত:

@ A xx.xx.xx.xx

হোস্ট হিসাবে @ অপারেটরটির সাথে, যার অর্থ এই ডোমেনের অধীনে সমস্ত সাবডোমেন এবং রুট ডোমেনটি সমস্ত সার্ভারে পুনর্নির্দেশ করবে। ঘোষণার জন্য আরও রেকর্ড রয়েছে, তবে আমরা মেল প্রেরণের জন্য প্রস্তুত হয়ে গেলে আমরা এগুলিতে এগিয়ে যেতে পারি। মনে রাখবেন, আপনি সার্ভার থেকে সফলভাবে মেল প্রেরণ করতে সক্ষম হওয়ার আগে বেশ কয়েক দিন সময় নিতে পারে। আমরা যে ডিএনএস রেকর্ডগুলি সেট করছি সেগুলি প্রচার করতে সময় লাগবে।

যাইহোক, আমাদের কেবলমাত্র রেকর্ডটি শুরু করতে হবে একটি রেকর্ড। সুতরাং এখন আমরা আমাদের প্রকল্প অনুযায়ী নীচের স্ক্রিপ্টটি পূরণ করতে পারি এবং এটি চালাতে পারি।

আসুন একটি প্রাথমিক অগ্রগতির জন্য আমাদের যা প্রয়োজন তা ইনস্টল করতে একটি ছোট সেটআপ স্ক্রিপ্ট দিয়ে শুরু করা যাক। আমরা এখনও এতগুলি নির্ভরতা বা পোস্টগ্রিসকিউএল ব্যবহার করব না, আমরা কেবল একটি বেসিক এইচটিটিপি সার্ভার শুরু করব এবং এটি হয়ে গেলে এটি প্রমাণ করার বিষয়ে চিন্তা করব। মনে রাখবেন, একটি এইচটিটিপিএস শংসাপত্র পেতে এবং সার্ভারটি নিরাপদে চালানোর জন্য, আমাদের একটি সার্ভার ভাড়া সহ একটি ডোমেন কিনতে হবে। আপাতত, আপনার প্রকল্পের ডিরেক্টরি সহ আপনার ব্যবহারকারীর নাম, "দির" এর সাথে এই ফাইলটিতে "দল" প্রতিস্থাপন করুন এবং <> ট্যাগগুলিতে আপনার ইমেল এবং ডোমেন সরবরাহ করুন।

অতিরিক্তভাবে, আমরা এই কোডটি চালানোর আগে, আমাদের হোস্টিং সরবরাহকারী সমর্থন করে এমন ফায়ারওয়ালে সেটিংস পরিবর্তন করতে হবে। সাধারণত এটি আপনার হোস্টিং সরবরাহকারীর 'নেটওয়ার্কস' ট্যাবে থাকে বা আপনি যদি স্ব -হোস্টিং করেন তবে এটি আপনার রাউটারের 'পোর্ট ফরোয়ার্ডিং' বিভাগে। আপনি যদি স্ব -হোস্টিং ব্যবহার করে থাকেন তবে আপনি আপনার সার্ভার মেশিনের ঠিকানা সহ আপনার রাউটারের মাধ্যমে একটি স্ট্যাটিক আইপি সেট আপ করতে চাইবেন। পঠন/লেখার অ্যাক্সেসের জন্য আপনাকে নিম্নলিখিত পোর্টগুলি খুলতে হবে।

22 (এসএসএইচ) 25 (মেল) 587 (মেল) 110 (মেল ক্লায়েন্ট) 80 (এইচটিটিপি) 443 (এইচটিটিপিএস)

# !/বিন/বাশ
# লগ কমান্ড
# ন্যানো কনফিগারেশন
# গিট কনফিগারেশন
# আপডেট এবং ইনস্টল
# ক্ল্যামাভ অ্যান্টিভাইরাস সক্ষম করুন
# হোস্টনাম সেট করুন
# সেটআপ ডাটাবেস ব্যাকআপ
# Iptables অক্ষম করুন
# সেটআপ ভার্চুয়ালেনভ
# সার্টবট ইনস্টল করুন
# সার্টবট চালান
# ব্যবহারকারী সেটিংস সেট করুন
# অনুমতি সেট
# সুডো চাউন -আর টিম: ব্যবহারকারী/var/রান/
# সুডো চাউন রুট: রুট/রান/সুডো/টিএস -আর
# পরিষেবাগুলি পুনরায় লোড করুন এবং সক্ষম করুন
# অ্যাপাচি মডিউলগুলি সক্ষম করুন
# ডেমন পুনরায় লোড করুন এবং অ্যাপাচি, পোস্টফিক্স এবং ওপেনডকিম পুনরায় চালু করুন
# ডোমেন কনফিগারেশনের জন্য আইপিভি 6 এবং ওপেনডকিম দেখান

এই কোডটি চালানোর আগে, আপনি যে ডোমেনটি কিনেছেন তা সার্ভারের সাথে সংযুক্ত রয়েছে তা নিশ্চিত করুন। এটি করতে, আপনার স্থানীয় মেশিনে একটি টার্মিনাল খুলুন এবং আপনার ডোমেন দিয়ে এই কমান্ডটি চালান:

ping femmebabe.com # আপনার ডোমেনটি এখানে পিংয়ের পরে sert োকান

যদি সমস্ত কিছু ভাল দেখাচ্ছে এবং সার্ভার প্রতিক্রিয়া প্রেরণ করছে, আমরা স্ক্রিপ্টটি চালাতে এবং প্যাকেজগুলি ইনস্টল করার পাশাপাশি আমাদের অ্যাপাচি সার্ভারটি শুরু, সক্ষম এবং প্রত্যয়িত করতে প্রস্তুত।

পোস্টফিক্স কনফিগার করার জন্য এটি প্রয়োজনীয় সমস্ত সেটআপ নয়, আমরা আরও পরে সেই সেটআপটি দেখব। আপাতত, এই সেটআপ কোডটি চালান এবং আপনার সার্ভারটি ইনস্টল করতে এবং প্রত্যয়িত করতে কয়েক মিনিট সময় নেওয়া উচিত। আবারও, আপনি কেনা নাম অনুসারে স্ক্রিপ্টে নাম, ইমেল এবং ডোমেন নাম প্রতিস্থাপনের বিষয়টি নিশ্চিত করুন।

এখন যেহেতু সার্ভারটি সরবরাহ করা হয়েছে, আপনি যে কোনও ওয়েব ব্রাউজারে ইউআরএলে যেতে পারেন এবং সার্ভারটি এইচটিটিপিএস চলছে তা নিশ্চিত করতে পরীক্ষা করতে পারেন। যদি এটি না হয় তবে ডিএনএস রেকর্ডগুলি ধরার জন্য কিছুক্ষণ অপেক্ষা করার চেষ্টা করুন এবং তারপরে সার্টিফট শংসাপত্রটি পুনরায় চেষ্টা করার জন্য নিম্নলিখিত কমান্ডটি চালান:

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 পুনরায় লোড করতে পারি। /ইত্যাদি/অ্যাপাচি 2/সাইটগুলিতে সম্পাদনা করার সময় আপনি যে ফাইলটি ঘোষণা করেছেন তার নাম দিয়ে ফেম্বাবকে প্রতিস্থাপন করতে ভুলবেন না।

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

লাইনে 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 Femmebabe.com

@ পিটিআর এন/এ Femmebabe.com

@ Txt এন/এ Txt @ v = spf1 mx ip75.147.182.214IP6: Fe80 :: 725a: fff: fe49: 3e02 ~ সমস্ত

Default._bimi Txt এন/এ v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg

_ডমার্ক Txt এন/এ v = dmarc1; পি = কিছুই নয়

সেন্ডোনলি._ডোমেনকি Txt এন/এ

এখন, আমাদের পোস্টফিক্সের জন্য কিছু ধারাবাহিক কনফিগারেশন যুক্ত করতে হবে। আমাদের যা করতে হবে তা হ'ল নিশ্চিত করা যে আমরা ডোমেন নামটি, ফেম্বেব.কম, আপনি যে ডোমেন নামটি ব্যবহার করছেন তার সাথে প্রতিস্থাপন করব। আসুন আমরা একের পর এক সমস্ত কনফিগার ফাইলগুলি দেখুন এবং ওএসে ইনস্টল করার জন্য আমাদের প্রকল্পে কনফিগারেশন নামে একটি ডিরেক্টরিতে ইনস্টল করুন।

nano config/etc_postfix_main.cf

এই পাঠ্যটি ফাইলটিতে যুক্ত করুন

# কোনও মন্তব্য করা, আরও সম্পূর্ণ সংস্করণের জন্য/ইউএসআর/শেয়ার/পস্টফিক্স/মেইন.সিএফ.ডিস্ট দেখুন
# দেবিয়ান নির্দিষ্ট: একটি ফাইলের নাম নির্দিষ্ট করার ফলে প্রথম কারণ হবে
# নাম হিসাবে ব্যবহার করার জন্য সেই ফাইলটির লাইন।  দেবিয়ান ডিফল্ট
# হয় /ইত্যাদি /মেলনাম।
# মাইরিগিন = /ইত্যাদি /মেলনাম
# সংযোজন .ডোমাইন হ'ল এমইউএর কাজ।
# "বিলম্বিত মেল" সতর্কতা উত্পন্ন করতে পরবর্তী লাইনটি আপত্তিজনক
# বিলম্ব_ওয়ারিং_টাইম = 4 এইচ
# Http://www.postfix.org/compatibility_readme.html দেখুন - 3.6 এ ডিফল্ট
# টাটকা ইনস্টল।
# টিএলএস প্যারামিটার
# মিলটার কনফিগারেশন

পরবর্তী কনফিগারেশন!

nano config/etc_postfix_master.cf

এই লাইনগুলি যুক্ত করুন:

# 
# পোস্টফিক্স মাস্টার প্রক্রিয়া কনফিগারেশন ফাইল।  ফর্ম্যাটে বিশদ জন্য
# ফাইলটির মধ্যে, মাস্টার (5) ম্যানুয়াল পৃষ্ঠা দেখুন (কমান্ড: "ম্যান 5 মাস্টার" বা
# অন-লাইন: http://www.postfix.org/master.5.html)।
# 
# এই ফাইলটি সম্পাদনা করার পরে "পোস্টফিক্স পুনরায় লোড" কার্যকর করতে ভুলবেন না।
# 
# =====================================================================================================
# পরিষেবা টাইপ বেসরকারী অনিচ্ছাকৃত ক্রুট ওয়েকআপ ম্যাক্সপ্রোক কমান্ড + আরগস
# (হ্যাঁ) (হ্যাঁ) (না) (কখনই নয়) (100)
# =====================================================================================================
# এসএমটিপি ইনেট এন - ওয়াই - 1 পোস্টস্ক্রিন
# এসএমটিপিডি পাস - - ওয়াই - - এসএমটিপিডি
# dnsblog unix - - y - 0 dnsblog
# tlsproxy unix - - y - 0 tlsproxy
# একটি চয়ন করুন: কেবল লুপব্যাক ক্লায়েন্টদের জন্য বা কোনও ক্লায়েন্টের জন্য জমা দিতে সক্ষম করুন।
# 127.0.0.1: সাবমিশন ইনেট এন - ওয়াই - - এসএমটিপিডি
# -ও syslog_name = পোস্টফিক্স/জমা
# -O smtpd_tls_security_level = এনক্রিপ্ট
# -ও smtpd_sasl_auth_enable = হ্যাঁ
# -O smtpd_tls_auth_only = হ্যাঁ
# -O smtpd_reject_unlisted_recipient = না
# -O smtpd_client_restrictions = $ mua_client_restrictions
# -O smtpd_helo_restrictions = $ Mua_helo_restrictions
# -O smtpd_sender_restrictions = $ MUA_SENDER_RESTICRITIONS
# -O smtpd_recipient_restrictions =
# -O smtpd_relay_restrictions = পারমিট_সাসল_আউথেনটেক্টিক, প্রত্যাখ্যান
# -ও মিল্টার_ম্যাক্রো_ডেমোন_নাম = উত্স
# একটি চয়ন করুন: কেবল লুপব্যাক ক্লায়েন্টদের জন্য, বা কোনও ক্লায়েন্টের জন্য এসএমটিপি সক্ষম করুন।
# 127.0.0.1: এসএমটিপিএস ইনেট এন - ওয়াই - - এসএমটিপিডি
# এসএমটিপিএস ইনেট এন - ওয়াই - - এসএমটিপিডি
# -ও syslog_name = পোস্টফিক্স/এসএমটিপিএস
# -O smtpd_tls_wrappmode = হ্যাঁ
# -ও smtpd_sasl_auth_enable = হ্যাঁ
# -O smtpd_reject_unlisted_recipient = না
# -O smtpd_client_restrictions = $ mua_client_restrictions
# -O smtpd_helo_restrictions = $ Mua_helo_restrictions
# -O smtpd_sender_restrictions = $ MUA_SENDER_RESTICRITIONS
# -O smtpd_recipient_restrictions =
# -O smtpd_relay_restrictions = পারমিট_সাসল_আউথেনটেক্টিক, প্রত্যাখ্যান
# -ও মিল্টার_ম্যাক্রো_ডেমোন_নাম = উত্স
# 628 ইনেট এন - ওয়াই - - কিউএমকিউপিডি
# কিউএমজিআর ইউনিক্স এন - এন 300 1 ওকিউএমজিআর
# -o smtp_helo_timeout = 5 -o smtp_connect_timeout = 5
# 
# =============================================================================================
# নন-পোস্টফিক্স সফ্টওয়্যার ইন্টারফেস। ম্যানুয়ালটি পরীক্ষা করতে ভুলবেন না
# এটি কী বিকল্পগুলি চায় তা জানতে নন-পোস্টফিক্স সফ্টওয়্যারটির পৃষ্ঠাগুলি।
# 
# নিম্নলিখিত পরিষেবাগুলির অনেকগুলি পোস্টফিক্স পাইপ (8) বিতরণ ব্যবহার করে
# এজেন্ট।  {{প্রাপক} সম্পর্কিত তথ্যের জন্য পাইপ (8) ম্যান পৃষ্ঠা দেখুন
# এবং অন্যান্য বার্তা খাম বিকল্প।
# =============================================================================================
# 
# মেলড্রপ। বিশদের জন্য পোস্টফিক্স মেলড্রপ_রেডমে ফাইলটি দেখুন।
# মেইন.সিএফ -তেও নির্দিষ্ট করুন: মেইলড্রপ_ডেস্টিনেশন_রিসিপিয়েন্ট_লিমিট = 1
# 
# 
# =============================================================================================
# 
# সাম্প্রতিক সাইরাস সংস্করণগুলি বিদ্যমান "এলএমটিপি" মাস্টার.সিএফ এন্ট্রি ব্যবহার করতে পারে।
# 
# সাইরাস.কনফে নির্দিষ্ট করুন:
# এলএমটিপি সিএমডি = "এলএমটিপিডি -এ" শুনুন = "লোকালহোস্ট: এলএমটিপি" প্রোটো = টিসিপি 4
# 
# নিম্নলিখিতগুলির এক বা একাধিকতে মেইন.সিএফ নির্দিষ্ট করুন:
# মেলবক্স_ট্রান্সপোর্ট = এলএমটিপি: ইনেট: লোকালহোস্ট
# ভার্চুয়াল_ট্রান্সপোর্ট = এলএমটিপি: ইনেট: লোকালহোস্ট
# 
# =============================================================================================
# 
# সাইরাস 2.1.5 (আমোস গৌক্স)
# MAIN.CF এও নির্দিষ্ট করুন: সাইরাস_ডেস্টিনেশন_রিসিপিয়েন্ট_লিমিট = 1
# 
# সাইরাস ইউনিক্স - এন এন - - পাইপ
# পতাকা = ডিআরএক্স ব্যবহারকারী = সাইরাস আরগভি =/সাইরাস/বিন/ডেলিভারি -ই -আর $ {প্রেরক} -এম $ {এক্সটেনশন} $ {ব্যবহারকারী}
# 
# =============================================================================================
# সাইরাস মাধ্যমে প্রসবের পুরানো উদাহরণ।
# 
# ওল্ড -সাইরাস ইউনিক্স - এন এন - - পাইপ
# পতাকা = আর ব্যবহারকারী = সাইরাস আরগভি =/সাইরাস/বিন/বিতরণ -ই -এম $ {এক্সটেনশন} $ {ব্যবহারকারী}
# 
# =============================================================================================
# 
# কনফিগারেশন বিশদগুলির জন্য পোস্টফিক্স ইউইউসিপি_রেডমে ফাইলটি দেখুন।
# 
# 
# অন্যান্য বাহ্যিক বিতরণ পদ্ধতি।
# 

এবং ওপেনডকিম কনফিগারেশন। ওপেনডকিম আরও সুরক্ষিত করার জন্য ডোমেন কীগুলির সাথে ইমেল সার্ভারগুলি সনাক্ত করে। এটি ছাড়া মেল স্বাক্ষরিত হয় না এবং এটি কোনও ইনবক্সে তৈরি করতে পারে না।

nano config/etc_default_opendkim

এই লাইনগুলি যুক্ত করুন:

# দ্রষ্টব্য: এটি একটি উত্তরাধিকারী কনফিগারেশন ফাইল। এটি ওপেনডকিম ব্যবহার করে না
# সিস্টেমড পরিষেবা। দয়া করে সংশ্লিষ্ট কনফিগারেশন পরামিতিগুলি ব্যবহার করুন
# পরিবর্তে /etc/opendkim.conf।
# 
# পূর্বে, কেউ এখানে ডিফল্ট সেটিংস সম্পাদনা করবে এবং তারপরে কার্যকর করবে
# /lib/opendkim/opendkim.service.generate সিস্টেমড ওভাররাইড ফাইল তৈরি করতে।
# /etc/systemd/system/opendkim.service.d/override.conf এবং
# /etc/tmpfiles.d/opendkim.conf। যদিও এটি এখনও সম্ভব, এটি এখন
# /etc/opendkim.conf এ সরাসরি সেটিংস সামঞ্জস্য করার জন্য প্রস্তাবিত।
# 
# Daemon_opts = ""
# /Var/স্পুল/পোস্টফিক্স/রান/ওপেনডকিমে পরিবর্তন করুন একটি ইউনিক্স সকেট ব্যবহার করতে
# একটি ক্রুটে পোস্টফিক্স:
# রানডির =/var/স্পুল/পোস্টফিক্স/রান/ওপেনডকিম
# 
# একটি বিকল্প সকেট নির্দিষ্ট করতে আপত্তি
# নোট করুন যে এটি সেট করা opendkim.conf এ যে কোনও সকেট মানকে ওভাররাইড করবে
# ডিফল্ট:
# 54321 পোর্টে সমস্ত ইন্টারফেসে শুনুন:
# সকেট = ইনেট: 54321
# 12345 পোর্টে লুপব্যাক শুনুন:
# সকেট = ইনেট: 12345@লোকালহোস্ট
# 192.0.2.1 পোর্ট 12345 এ শুনুন:
# সকেট = ইনেট: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf

এই লাইনগুলি যুক্ত করুন:

# ডিফল্ট_প্রসেস_লিমিট = 100
# Default_client_limit = 1000
# পরিষেবা প্রক্রিয়াগুলির জন্য ডিফল্ট ভিএসজেড (ভার্চুয়াল মেমরির আকার) সীমা। এটি মূলত
# তারা খাওয়ার আগে মেমরি ফাঁস হওয়া প্রক্রিয়াগুলি ধরা এবং হত্যা করার উদ্দেশ্যে
# সবকিছু।
# Default_vsz_limit = 256 মি
# লগইন ব্যবহারকারী অভ্যন্তরীণভাবে লগইন প্রক্রিয়া দ্বারা ব্যবহৃত হয়। এটি সবচেয়ে অবিশ্বস্ত
# ডোভকোট সিস্টেমে ব্যবহারকারী। এটিতে কোনও কিছুর অ্যাক্সেস থাকা উচিত নয়।
# Default_login_user = dovenull
# অভ্যন্তরীণ ব্যবহারকারী অনির্ধারিত প্রক্রিয়া দ্বারা ব্যবহৃত হয়। এটি থেকে পৃথক হওয়া উচিত
# লগইন ব্যবহারকারী, যাতে লগইন প্রক্রিয়াগুলি অন্যান্য প্রক্রিয়াগুলিকে বিরক্ত করতে পারে না।
# Default_internal_user = dovecot
    # পোর্ট = 143
    # পোর্ট = 993
    # এসএসএল = হ্যাঁ
  # নতুন প্রক্রিয়া শুরু করার আগে হ্যান্ডেল করার জন্য সংযোগের সংখ্যা। সাধারণত
  # একমাত্র দরকারী মানগুলি 0 (সীমাহীন) বা 1। 1 আরও সুরক্ষিত তবে 0
  # দ্রুত। <ডক/উইকি/লগইনপ্রসেস.টিএক্সটি>
  # পরিষেবা_কাউন্ট = 1
  # আরও সংযোগের জন্য সর্বদা অপেক্ষা রাখতে প্রক্রিয়াগুলির সংখ্যা।
  # প্রক্রিয়া_মিন_এভাইল = 0
  # আপনি যদি পরিষেবা_কাউন্ট = 0 সেট করেন তবে আপনার সম্ভবত এটি বাড়ানো দরকার।
  # vsz_limit = $ default_vsz_limit
    # পোর্ট = 110
    # পোর্ট = 995
    # এসএসএল = হ্যাঁ
    # পোর্ট = 587
  # আপনি যদি উপরের ইউনিক্স সকেটটি ব্যবহার করতে না পারেন তবেই ইনেট শ্রোতা তৈরি করুন
  # inet_listener lmtp {
    # পুরো ইন্টারনেটের জন্য এলএমটিপি দৃশ্যমান করা এড়িয়ে চলুন
    # ঠিকানা =
    # পোর্ট =
  # }
  # বেশিরভাগ মেমরি এমএমএপি () আইএনজি ফাইলগুলিতে যায়। আপনার এটি বাড়ানোর প্রয়োজন হতে পারে
  # আপনার বিশাল মেলবক্স থাকলে সীমাবদ্ধ করুন।
  # vsz_limit = $ default_vsz_limit
  # সর্বোচ্চ আইএমএপি প্রক্রিয়া সংখ্যা (সংযোগ)
  # প্রক্রিয়া_লিমিট = 1024
  # সর্বোচ্চ POP3 প্রক্রিয়া সংখ্যা (সংযোগ)
  # প্রক্রিয়া_লিমিট = 1024
  # সর্বোচ্চ এসএমটিপি জমা দেওয়ার প্রক্রিয়াগুলির সংখ্যা (সংযোগ)
  # প্রক্রিয়া_লিমিট = 1024
  # Auth_soket_path ডিফল্টরূপে এই ইউজারডিবি সকেটের দিকে ইঙ্গিত করে। এটা সাধারণত
  # ডোভকোট-এলডিএ, ডোভেডএম, সম্ভবত আইএমএপি প্রক্রিয়া ইত্যাদি দ্বারা ব্যবহৃত ব্যবহারকারীরা রয়েছে
  # এই সকেটে সম্পূর্ণ অনুমতিগুলি সমস্ত ব্যবহারকারীর নাম এবং একটি তালিকা পেতে সক্ষম
  # প্রত্যেকের ইউজারডিবি অনুসন্ধানের ফলাফল পান।
  # 
  # ডিফল্ট 0666 মোড কাউকে সকেটে সংযোগ করতে দেয় তবে
  # ইউজারডিবি লুকআপগুলি কেবল তখনই সফল হবে যদি ইউজারডিবি একটি "ইউআইডি" ক্ষেত্রটি দেয়
  # কলার প্রক্রিয়াটির ইউআইডি মেলে। এছাড়াও যদি কলারের ইউআইডি বা জিআইডি মেলে
  # সকেটের ইউআইডি বা জিআইডি লুকআপ সফল হয়। অন্য যে কোনও কিছু ব্যর্থতার কারণ।
  # 
  # সমস্ত ব্যবহারকারীর সন্ধানের জন্য কলারকে সম্পূর্ণ অনুমতি দেওয়ার জন্য, মোডটি সেট করুন
  # 0666 এর চেয়ে অন্য কিছু এবং ডোভকোট কার্নেলটি প্রয়োগ করতে দেয়
  # অনুমতিগুলি (উদাঃ 0777 প্রত্যেককে পূর্ণ অনুমতি দেয়)।
  # লেখক কর্মী প্রক্রিয়াটি ডিফল্টরূপে রুট হিসাবে চালিত হয়, যাতে এটি অ্যাক্সেস করতে পারে
  # /ইত্যাদি/ছায়া। যদি এটি প্রয়োজনীয় না হয় তবে ব্যবহারকারীকে পরিবর্তন করা উচিত
  # $ Default_internal_user।
  # ব্যবহারকারী = রুট
  # যদি ডিক্ট প্রক্সি ব্যবহার করা হয় তবে মেল প্রক্রিয়াগুলির সকেটে অ্যাক্সেস থাকা উচিত।
  # উদাহরণস্বরূপ: মোড = 0660, গোষ্ঠী = ভিএমইএল এবং গ্লোবাল মেল_অ্যাকসেস_গ্রুপস = ভিএমইএল
    # মোড = 0600
    # ব্যবহারকারী =
    # গ্রুপ =

আবারও, আপনি যে ডোমেনটি নির্বাচন করেছেন তার সাথে এই সমস্ত ফাইল, ফেম্বেব ডটকমের ডোমেনটি প্রতিস্থাপনের বিষয়টি নিশ্চিত করুন। পরবর্তী ফাইলটি সম্পাদনা করুন, ডোভকোটের কনফিগারেশন,

nano config/etc_dovecot_dovecot

এবং এই লাইনগুলি যুক্ত করুন

## ডোভকোট কনফিগারেশন ফাইল
# আপনি যদি তাড়াহুড়ো করে থাকেন তবে http://wiki2.dovecot.org/quickconfigration দেখুন
# "ডোভকনফ -এন" কমান্ড পরিবর্তিত সেটিংসের একটি পরিষ্কার আউটপুট দেয়। এটি ব্যবহার করুন
# ডোভকোট মেলিং তালিকায় পোস্ট করার সময় ফাইলগুলি অনুলিপি এবং পেস্ট করার পরিবর্তে।
# '# 'চরিত্র এবং এটি মন্তব্য হিসাবে বিবেচিত হওয়ার পরে সমস্ত কিছু। অতিরিক্ত স্পেস
# এবং ট্যাবগুলি উপেক্ষা করা হয়। আপনি যদি এগুলির মধ্যে একটি স্পষ্টভাবে ব্যবহার করতে চান তবে এটি রাখুন
# value inside quotes, eg.: key = "# চর এবং ট্রেলিং হোয়াইটস্পেস "
# বেশিরভাগ (তবে সমস্ত নয়) সেটিংস বিভিন্ন প্রোটোকল এবং/অথবা দ্বারা ওভাররাইড করা যেতে পারে
# উত্স/গন্তব্য আইপিগুলি বিভাগগুলির ভিতরে সেটিংস স্থাপন করে, উদাহরণস্বরূপ:
# প্রোটোকল imap {}, স্থানীয় 127.0.0.1 {}, দূরবর্তী 10.0.0.0/8 {}
# প্রতিটি সেটিংয়ের জন্য ডিফল্ট মানগুলি দেখানো হয়, এটি আপত্তিহীনতার প্রয়োজন হয় না
# যারা। এগুলি যদিও এর ব্যতিক্রম: কোনও বিভাগ নেই (উদাঃ নেমস্পেস {})
# বা প্লাগইন সেটিংস ডিফল্টরূপে যুক্ত করা হয়, সেগুলি কেবল উদাহরণ হিসাবে তালিকাভুক্ত করা হয়।
# কনফিগারেশনের উপর ভিত্তি করে আসল ডিফল্টগুলির সাথে পাথগুলিও কেবল উদাহরণ
# বিকল্প। এখানে তালিকাভুক্ত পাথগুলি কনফিগার -প্রিফিক্স =/ইউএসআর এর জন্য
# --সিক্সকনফডির =/ইত্যাদি--স্থানীয়তা =/var
# ইনস্টল করা প্রোটোকল সক্ষম করুন
# আইপিএস বা হোস্টগুলির একটি কমা পৃথক তালিকা যেখানে সংযোগগুলির জন্য শুনতে হবে।
# "*" সমস্ত আইপিভি 4 ইন্টারফেসে শুনে, "::" সমস্ত আইপিভি 6 ইন্টারফেসে শুনে।
# আপনি যদি নন-ডিফল্ট পোর্টগুলি বা আরও জটিল কিছু নির্দিষ্ট করতে চান তবে,
# কনফিট/মাস্টার.কনফ সম্পাদনা করুন।
# শুনুন = *, ::
# বেস ডিরেক্টরি যেখানে রানটাইম ডেটা সঞ্চয় করতে হবে।
# বেস_ডির =/var/রান/ডোভকোট/
# এই উদাহরণের নাম। মাল্টি-ইনস্ট্যান্স সেটআপ ডিওভিডম এবং অন্যান্য কমান্ডে
# কোন উদাহরণটি ব্যবহার করা হয়েছে তা নির্বাচন করতে -i <উদাহরণ_নাম> ব্যবহার করতে পারেন (একটি বিকল্প (একটি বিকল্প)
# টু -সি <কনফিগার_পথ>)। উদাহরণস্বরূপ নামটি ডোভকোট প্রক্রিয়াগুলিতেও যুক্ত করা হয়েছে
# পিএস আউটপুট মধ্যে।
# উদাহরণ_নাম = ডোভকোট
# ক্লায়েন্টদের জন্য শুভেচ্ছা বার্তা।
# লগইন_গ্রিটিং = ডোভকোট প্রস্তুত।
# বিশ্বস্ত নেটওয়ার্ক রেঞ্জগুলির স্থান পৃথক তালিকা। এগুলি থেকে সংযোগ
# আইপিগুলিকে তাদের আইপি ঠিকানা এবং পোর্টগুলি ওভাররাইড করার অনুমতি দেওয়া হয় (লগিংয়ের জন্য এবং
# প্রমাণীকরণ চেকের জন্য)। অক্ষম_প্লেইনটেক্সট_আউথকেও উপেক্ষা করা হয়
# এই নেটওয়ার্কগুলি। সাধারণত আপনি এখানে আপনার আইএমএপি প্রক্সি সার্ভারগুলি নির্দিষ্ট করতে চান।
# LOGIN_TRUSTED_NETWORKS =
# লগইন অ্যাক্সেস চেক সকেটগুলির স্পেস পৃথক তালিকা (উদাঃ টিসিপিডাব্লুআরএপি)
# লগইন_অ্যাকসেস_সকেটস =
# প্রক্সি_মেবি সহ = হ্যাঁ যদি প্রক্সি গন্তব্য এই আইপিগুলির সাথে মেলে, তবে করবেন না
# প্রক্সিং এটি সাধারণত প্রয়োজনীয় নয়, তবে গন্তব্য যদি কার্যকর হতে পারে
# আইপি উদাঃ একটি লোড ব্যালেন্সারের আইপি।
# auth_proxy_leff =
# আরও ভার্বোজ প্রক্রিয়া শিরোনাম দেখান (পিএসে)। বর্তমানে ব্যবহারকারীর নাম এবং দেখায়
# আইপি ঠিকানা। কে আসলে আইএমএপি প্রক্রিয়াগুলি ব্যবহার করছে তা দেখার জন্য দরকারী
# (উদাহরণস্বরূপ, ভাগ করা মেলবক্সগুলি বা যদি একই ইউআইডি একাধিক অ্যাকাউন্টের জন্য ব্যবহৃত হয়)।
# vervose_proctitle = না
# ডোভকোট মাস্টার প্রক্রিয়া বন্ধ হয়ে গেলে সমস্ত প্রক্রিয়াগুলি হত্যা করা উচিত।
# এটিকে "না" এ সেট করার অর্থ ডোভকোট ছাড়াই আপগ্রেড করা যেতে পারে
# বিদ্যমান ক্লায়েন্ট সংযোগগুলি বন্ধ করতে বাধ্য করা (যদিও এটিও হতে পারে
# আপগ্রেড যদি হয় তবে একটি সমস্যা উদাঃ একটি সুরক্ষা ফিক্সের কারণে)।
# শাটডাউন_ক্লিয়েন্টস = হ্যাঁ
# যদি অ-শূন্য হয় তবে ডোভেডএম সার্ভারে এই অনেকগুলি সংযোগের মাধ্যমে মেল কমান্ডগুলি চালান,
# পরিবর্তে একই প্রক্রিয়াতে এগুলি চালানোর পরিবর্তে।
# doveadm_worker_count = 0
# ইউনিক্স সকেট বা হোস্ট: ডোভেডএম সার্ভারের সাথে সংযোগের জন্য ব্যবহৃত পোর্ট
# doveadm_sket_path = doveadm-সার্ভার
# ডোভকোটে সংরক্ষিত পরিবেশের ভেরিয়েবলের স্থান পৃথক তালিকা
# স্টার্টআপ এবং এর সমস্ত শিশু প্রক্রিয়াগুলিতে চলে গেছে। আপনি দিতে পারেন
# কী = সর্বদা নির্দিষ্ট সেটিংস সেট করতে জোড় জোড়।
# আমদানি_ পরিবেশ = টিজেড
## 
## অভিধান সার্ভার সেটিংস
## 
# অভিধান কী = মান তালিকা সংরক্ষণ করতে ব্যবহার করা যেতে পারে। এটি বেশ কয়েকটি ব্যবহার করে
# প্লাগইন। অভিধানটি সরাসরি অ্যাক্সেস করা যায় বা যদিও ক
# অভিধান সার্ভার। নিম্নলিখিত ডিক ব্লক ম্যাপস ডিকশনারি নামগুলি ইউআরআইগুলিতে
# যখন সার্ভার ব্যবহার করা হয়। এগুলি তখন ফর্ম্যাটে ইউআরআই ব্যবহার করে উল্লেখ করা যেতে পারে
# "প্রক্সি :: <নাম>"।
  # কোটা = মাইএসকিউএল: /etc/dovecot/dovecot-dict-sql.conf.ext
# বেশিরভাগ আসল কনফিগারেশন নীচে অন্তর্ভুক্ত হয়। ফাইলের নামগুলি হয়
# প্রথমে তাদের ASCII মান দ্বারা বাছাই করা এবং সেই ক্রমে পার্স করা। 00-prefixes
# ফাইলের নামগুলিতে ক্রমটি বোঝা সহজ করার উদ্দেশ্যে করা হয়।
# একটি কনফিগার ফাইল যদি ত্রুটি না দিয়ে অন্তর্ভুক্ত করার চেষ্টা করতে পারে
# এটি পাওয়া যায় নি:
# সমস্ত ইনপুট সংযোগগুলি (আইপিভি 4 / আইপিভি 6) শুনতে ডোভকোটকে অনুমতি দেয়

ডোভকোট ব্যবহারকারীর জন্য একটি পাসওয়ার্ড যুক্ত করুন:

nano config/etc_dovecot_passwd

কোলনের আগে ফাইলের প্রথম অংশটি ব্যবহারকারীর নাম। শেষ অংশ, "আপনার প্যাসওয়ার্ড", আপনি আপনার মেল সার্ভারটি দিতে চান এমন পাসওয়ার্ডটি বোঝায়।

team:{plain}yourpassword

এরপরে, ওপেনডকিম কনফিগারেশন

nano config/etc_opendkim.conf

এবং এই লাইনগুলি যুক্ত করুন:

# এটি স্বাক্ষর এবং যাচাইয়ের জন্য একটি প্রাথমিক কনফিগারেশন। এটা সহজেই হতে পারে
# একটি বেসিক ইনস্টলেশন অনুসারে অভিযোজিত। Opendkim.conf (5) এবং দেখুন
# /usr/share/doc/opendkim/examples/opendkim.conf.sample সম্পূর্ণ জন্য
# উপলব্ধ কনফিগারেশন পরামিতিগুলির ডকুমেন্টেশন।
# লগ কেন না
# সাধারণ স্বাক্ষর এবং যাচাইকরণ পরামিতি। ডেবিয়ান ভাষায়, "থেকে" শিরোনাম হয়
# ওভারসাইনড, কারণ এটি প্রায়শই খ্যাতি সিস্টেম দ্বারা ব্যবহৃত পরিচয় কী
# এবং এইভাবে কিছুটা সুরক্ষা সংবেদনশীল।
# স্বাক্ষর ডোমেন, নির্বাচক এবং কী (প্রয়োজনীয়)। উদাহরণস্বরূপ, স্বাক্ষর সম্পাদন করুন
# নির্বাচক "2020" (2020._DOMAINKEY.EXALL.COM) সহ ডোমেন "উদাহরণ.কম" এর জন্য,
# /etc/dkimkeys/example.private এ সঞ্চিত ব্যক্তিগত কী ব্যবহার করে। আরও দানাদার
# সেটআপ বিকল্পগুলি/ইউএসআর/শেয়ার/ডক/ওপেনডকিম/রিডম.ওপেনডকিমে পাওয়া যাবে।
# ডোমেন উদাহরণ ডটকম
# নির্বাচক 2020
# কীফিল /etc/dkimkeys/example.private
# ডেবিয়ান ভাষায়, ওপেনডকিম ব্যবহারকারী "ওপেনডকিম" হিসাবে চলে। যখন 007 এর একটি উমাস্ক প্রয়োজন
# এমটিএ সহ একটি স্থানীয় সকেট ব্যবহার করে যা সকেটকে অ-সুবিধাবঞ্চিত হিসাবে অ্যাক্সেস করে
# ব্যবহারকারী (উদাহরণস্বরূপ, পোস্টফিক্স)। আপনাকে গ্রুপে ব্যবহারকারী "পোস্টফিক্স" যুক্ত করতে হবে
# সেক্ষেত্রে "ওপেনডকিম"।
# এমটিএ সংযোগের জন্য সকেট (প্রয়োজনীয়)। যদি এমটিএ একটি ক্রুট কারাগারের ভিতরে থাকে,
# এটি অবশ্যই নিশ্চিত করতে হবে যে সকেটটি অ্যাক্সেসযোগ্য। ডেবিয়ান ভাষায়, পোস্টফিক্সে চলে
# /var/স্পুল/পোস্টফিক্সে একটি ক্রুট, সুতরাং একটি ইউনিক্স সকেট হতে হবে
# নীচের শেষ লাইনে প্রদর্শিত হিসাবে কনফিগার করা হয়েছে।
# সকেট স্থানীয়:
# সকেট ইনেট: 8891@লোকালহোস্ট
# সকেট ইনেট: 8891
# হোস্টগুলির জন্য যা যাচাই করার পরিবর্তে স্বাক্ষর করতে হবে, ডিফল্টটি 127.0.0.1। দেখুন
# আরও তথ্যের জন্য ওপেনডকিমের অপারেশন বিভাগ (8)।
# অভ্যন্তরীণ হোস্টস 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0.0/12
# ট্রাস্ট অ্যাঙ্কর ডিএনএসএসকে সক্ষম করে। দেবিয়ান ভাষায়, ট্রাস্ট অ্যাঙ্কর ফাইল সরবরাহ করা হয়
# প্যাকেজ দ্বারা ডিএনএস-রুট-ডেটা।
# নেমসার্ভারগুলি 127.0.0.1
# ঠিকানা থেকে শুরু করে কীগুলিতে ম্যাপ ডোমেনগুলি বার্তাগুলিতে স্বাক্ষর করতে ব্যবহৃত হয়
# অভ্যন্তরীণ হোস্টগুলির একটি সেট যার মেইল স্বাক্ষর করা উচিত
nano config/etc_default_opendkim

এবং এই লাইনগুলি যুক্ত করুন

# দ্রষ্টব্য: এটি একটি উত্তরাধিকারী কনফিগারেশন ফাইল। এটি ওপেনডকিম ব্যবহার করে না
# সিস্টেমড পরিষেবা। দয়া করে সংশ্লিষ্ট কনফিগারেশন পরামিতিগুলি ব্যবহার করুন
# পরিবর্তে /etc/opendkim.conf।
# 
# পূর্বে, কেউ এখানে ডিফল্ট সেটিংস সম্পাদনা করবে এবং তারপরে কার্যকর করবে
# /lib/opendkim/opendkim.service.generate সিস্টেমড ওভাররাইড ফাইল তৈরি করতে।
# /etc/systemd/system/opendkim.service.d/override.conf এবং
# /etc/tmpfiles.d/opendkim.conf। যদিও এটি এখনও সম্ভব, এটি এখন
# /etc/opendkim.conf এ সরাসরি সেটিংস সামঞ্জস্য করার জন্য প্রস্তাবিত।
# 
# Daemon_opts = ""
# /Var/স্পুল/পোস্টফিক্স/রান/ওপেনডকিমে পরিবর্তন করুন একটি ইউনিক্স সকেট ব্যবহার করতে
# একটি ক্রুটে পোস্টফিক্স:
# রানডির =/var/স্পুল/পোস্টফিক্স/রান/ওপেনডকিম
# 
# একটি বিকল্প সকেট নির্দিষ্ট করতে আপত্তি
# নোট করুন যে এটি সেট করা opendkim.conf এ যে কোনও সকেট মানকে ওভাররাইড করবে
# ডিফল্ট:
# 54321 পোর্টে সমস্ত ইন্টারফেসে শুনুন:
# সকেট = ইনেট: 54321
# 12345 পোর্টে লুপব্যাক শুনুন:
# সকেট = ইনেট: 12345@লোকালহোস্ট
# 192.0.2.1 পোর্ট 12345 এ শুনুন:
# সকেট = ইনেট: 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
লাফ
সম্পূর্ণ নিবন্ধ দেখুন
পড়া চালিয়ে যান

কিনুন | ক্রিপ্টো দিয়ে কিনুন



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


পেশাদার বিনোদন, ফটো, ভিডিও, অডিও, লাইভস্ট্রিমিং এবং নৈমিত্তিক গেমপ্লে, পাশাপাশি আইডি স্ক্যানিং, ওয়েব ডেভলপমেন্ট এবং সারোগেসি পরিষেবাগুলি।

এই ঠিকানাটি ব্যবহার করে আমাকে বিটকয়েনে একটি টিপ ছেড়ে দিন: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE

© Glam Girl X 2025

পরিষেবার শর্তাদি