Příkladem praktického hlubokého učení a zabezpečení založeného na webu

DaisyProfilová fotka

Podle 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 ...
Příkladem praktického hlubokého učení a zabezpečení založeného na webu

Příkladem praktického hlubokého učení a zabezpečení založeného na webu Třetí vydání Charlotte Harper 3. července 2024 Aktualizováno/převedeno 3. června 2025

Předmluva:

Bezpečnostní úvahy při vytváření softwaru pro web jsou důležitou součástí plánu a provádění jakéhokoli webového vývojáře a zároveň vytvoří prototyp, který je pro praktické účely spolehlivý, stabilní a užitečný. 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 Zabijte čas nebo něco udělejte na internetu, obvykle na dotykové obrazovce smartphone. 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. Máte -li několik minut na přečtení této knihy a dozvíte se, co vás chci naučit, nebo dokonce se mnou osobně mluvit o vašich cílech a získat nějaké pokyny správným směrem a jsou motivováni k tomu, abyste se naučili kódovat a psát svůj vlastní software, vzít tuto knihu domů a vyčlenit nějakou dobu, aby se naučil budovat další vlivné, výkonné, výkonné a důležité webové aplikace, webové stránky, která je na vás, která je na vás a splňuje vaše publikum.

O mně: Jsem vývojář softwaru se širokou škálou zkušeností s C/C ++, Java, Python, HTML, CSS a JavaScript. Stavět webové stránky, které lidé chtějí používat, chtějí navštívit a dokonce jsem závislý na používání, abych se naučil, znovu vytvořil a zabíjel čas, a co je nejdůležitější, prodávám software. Pokud jste měli představu o tom, jak přesně jste chtěli, aby web vypadal a fungoval, byli jste ochotni mě podpořit, abych mohl vyhovět svým vlastním potřebám, zatímco splním vaše, a jste ochotni pokrýt náklady na provoz webové stránky sami, postavil bych vám další YouTube, Tiktok, Twitter, Google nebo dokonce high-tech zabezpečovací aplikaci, jen můžete získat přístup. Místo toho, abych se vám pokusil prodat svůj čas, snažím se koupit váš: Chci vás promluvit o vytvoření aplikace (webové stránky) s informacemi, které již existují, a naučím vás, co potřebujete, abyste byli nezávislým vývojářem softwaru, podnikatel, což vede úspěšnou kariéru v jakékoli oblasti. A dovolte mi to vyjasnit, vzdělání, které vám dám, bude neformální. Mohli byste jít do školy a naučit se to vše s formálním vzděláváním, nebo si tuto knihu přečíst ve škole, dokončit své úkoly a odvést hodně z vašeho vzdělání, ale nebudu vás formálně dát na horké sedadlo a požádat vás o dokončení úkolů. Nejsem tvůj profesor, můžete na mě myslet jako na přítele, který vás chce vést k kariéře poháněné vaším vlastním osobním úspěchem. A ani vám neprodávám úspěch, budete si ho muset koupit s časem. Naučit se kódovat má strmou křivku učení a nikdy nebylo snadné, nebo dokonce nemělo být. Musíte pracovat tak tvrdě, jak jen můžete, a pokračovat ve snaze o selhání a zkusit to znovu, i když jste frustrovaní, abyste se mohli učit a vytvářet aplikace sami. To je v povaze samotného kódu. Kód je spuštěn kompilátorem, který je navržen tak, aby poskytoval chybové zprávy programátora, a ty vás naučí, jak kódovat, i když jednoduše kopírujete chybu do vyhledávače a čtení příkladů ostatních lidí. A musím říci, že nemusíte být extrémně bohatí, inteligentní, úspěšní nebo dokonce detailně orientovaní nebo organizovaní, abyste vytvořili aplikaci. Počítač se o tuto organizaci postará. Musíte jen vytrvat prostřednictvím pokusu a omylů, udržovat zaměření a tvrdě pracovat na tom, co děláte, a budete mít velmi úspěšnou kariéru v celém tom, co děláte.

Kdo jsem: Uvědomuji si, že poslední sekce se týkala více o učení a vašem výuce z této knihy. Kdo jsem přesně? To je složitá otázka. Sám jsem nejasný, protože trpím zdravotními stavy, které mi mohou ztěžovat občas i kódovat nebo psát tuto knihu, a zároveň předkládat výzvy se socializací a problémy s identitou, které ztěžují můj život, pokud jde o zavedení sebe. Stručně řečeno, pokud čtete tuto knihu, přinesli jste ji domů, protože jste ji otočili a mysleli jste si, že je to užitečné, nebo i když jste právě přečetli tak daleko, jsem vám jako smýšlející jedinec, který chce vidět, že vás uspěje ve všem, co děláte. Sám jsem inženýr, vývojář softwaru a student a píšu tuto knihu pro ostatní studenty, kteří chtějí usnadnit život tím, že mají příručku o softwaru, který potřebují usnadnit jejich životy tím, že uvedou příklady, které se hodí jako velká puzzle do fungujícího, užitečného, funkčního, soudržného a zapojeného aplikace, která může řídit úspěch bez ohledu na řadu podnikání. To je to, co dělám: stavím aplikace, abych pomohl sobě a ostatním lidem uspět. Jsem také autorem, i když je to moje první publikace, kterou mám v úmyslu dokončit, abych mohl dát dohromady své portfolio do užitečného dokumentu, a jsem také umělec. Přiznám se vám to, jsem jakousi podivný člověk. Nejsem dokonalý, měl jsem zákon, který mě vedl k tomu, abych opustil vysoké školy a univerzity a opustil státy, abych se pokusil udělat pro sebe jméno s větším úspěchem. Jsem od narození žena, nosím make -up, fotografuji sám sebe, nosím šaty a další dámské oblečení a já si zůstávám přirozený jako ženu od přírody. V minulosti jsem měl problémy s ostatními lidmi, které vedly k boji s psaním a budováním WebApps, a omlouvám se, že jsem nemohl tuto knihu dostat do vašich rukou dříve: Potřeboval jsi to. Budete chtít číst a psát kód, který vypadá jako můj a funguje jako moje a dělá to samé, ale ještě lépe, protože pokud si můžete dovolit koupit tuto knihu místo toho, abyste si šťouchali klávesnici, jako já, jen proto, abyste si vytvořili knihu sami, abyste o ni požádali, máte zdroje, které ve svém životě musíte být úspěšní. Měl jsem nejrůznější problémy s vyrůstáním rodiny, zdravotními stavy, lékaři, média a zákon a můj kód hluboce odráží boj, který je feminismus a ženská povaha v rozděleném a frustrovaném světě. Tato kniha je však něco, na čem mi hluboce záleží, moje dítě, mé portfolio a mé živobytí, takže si vážím vašeho úvahy, když si vezmete text domů a pečlivě se nad ní pórujete, abyste se od mě poučili. Mějte na paměti, že nejsem dokonalý, tato kniha bude mít chyby, revize a nová vydání a budete muset myslet na svůj logický mozek, jak nejlépe můžete, abyste měli úspěšný zážitek s mým psaním. Také pochopte, že pro vás myslím dobře, i když při psaní čelíte výzvám. Přemýšlejte o tom takto: Když si můžete pronajmout počítačový systém, abyste udělali cokoli, co si můžete představit v digitálním prostoru, uložte všechny informace, se kterými se setkáte, analyzujete a organizujete, a pochopíte je, nevyhnutelně narazíte na obtíže s informacemi, které přijímáte a dokonce publikujete. Říkám vám to, protože se setkávám se stejnými obtížemi. Použijte tuto knihu na vlastní riziko, spolupracujte s vaší komunitou a komunitami, které máte k dispozici, abyste stavěli software v bezpečném prostředí, a neberte věci osobně, když selžete nebo dokonce uspějete nesprávným způsobem: Takto jsem se dostal tak daleko, a proč vám mohu přinést tento text a pomáhat vám uspět, aniž byste se odchylovali na cestě mad. Práce, internet. Možná nebudete velmi dobře obeznámeni s tím, kým jsem jen pár slov, ale doporučuji vás, abyste si přečetli dál, budete mě poznat, když mě budete i nadále číst a porozumět při vytváření vlastních projektů, abyste dokončili svou práci. S touto knihou nebudou žádné domácí úkoly, pokud vám vaši profesoři nebo učitelé nepřidělují, ale velmi doporučuji, abyste si při čtení vybudovali portfolio projektů, stejně jako projekt Capstone, který předvádí, jak můžete aplikovat to, co jste se naučili. Můj projekt Capstone je základem pro většinu toho, co si přečtete v této knize, protože zahrnuje kód z mých předchozích projektů, kód, který jsem vytvořil a naučil se napsat metodicky ručně, a širokou škálu nápadů a tipů, které mi pomohly uspět v místě, kde mohu roztočit jednoduchou aplikaci, která je plně vystupována a vypadá jako populární aplikace, kterou můžete vidět, na internetu, nebo ve zprávách, nebo ve zprávách, nebo ve zprávách.

Co je tato kniha: Tato kniha je příkladem. 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 Stavíte absolutně nejlepší světlo, abyste byli nejatraktivnější pro vaše koncové uživatele, návštěvníky vašeho webu. V této knize předvedu řadu příkladů softwarového designu se zaměřením na web jako platformu i zabezpečení. Zahájíme zkušenosti s učením vytvořením základního projektu pomocí Shell Unix s funkcemi zálohování a skriptování. Poté prozkoumáme základní webovou stránku blogů, upgradujeme náš blog pomocí funkcí fotografií a videa a také použijeme tyto funkce k používání bezpečnostních řešení pomocí svobodného softwaru a zabezpečení našeho serveru pomocí modulu pluggable ověřování (PAM). Poté zkontrolujeme zpracování a zpracování souborů, prozkoumáme úpravy videa, dárcovským hlasem, skenování čárových kódů a rozpoznávání optických znaků, mimo jiné. Po cestě prozkoumáme API, která nám pomůže, aby byl náš software užitečnější a zabezpečenější, s bezplatnými a placenými možnostmi. Po cestě prozkoumáme fyzické zabezpečení a militantní nástroje, jako je návrh a výroba střelných zbraní a munice, včetně designu barelu a opakování, navrhování věže a dronů a dalších principů, budeme integrovat s naším softwarem do stávající sítě, abychom chránili náš software a prokázali sebeobranu a odolnost. Vezmeme si přestávky na cestě k budování her, 2D a 3D vykreslovacích motorů a pracujeme s vloženým hardwarem v případové studii příklady základního dimenzionálního vykreslovacího softwaru a elektronického vibračního masáže odlitého v silikonové gumě. Po cestě budeme také používat řešení strojového učení, která jsou již k dispozici, abychom lépe zajistili náš software. Budeme také používat skladové nástroje dostupné pro web, abychom tento proces zefektivnili a zajistili. Tato kniha je průvodcem k vašemu úspěchu při vytváření webové aplikace a integraci s profesionální sítí počítačů a vloženými mechanickými systémy a celkově průvodce vytvářením softwaru a zabudovaného hardwaru bez základních znalostí nebo předchozích zkušeností.

Co tato kniha není: Pokud opravdu chcete mít web, můžete jen nastavit jednoduchý obchod a prodat to, co potřebujete, zveřejnit blog, zveřejňovat fotografie nebo videa nebo jinak, aniž byste nikdy psali jediný řádek kódu. Tato kniha není tak. Tato kniha vás naučí, jak stavět software, který je užitečnější, plně vystupovaný, funkční a bezpečnější než jakýkoli software, který již můžete najít, protože nasazuje nejnovější software, který je stále prototypy, může být nákladné provozovat v měřítku starších společností, v nichž pracují, a nepřitahují se dozadu, spletité společnosti, které vydělávají peníze pro lidi, kteří opravdu nic nedělají. Pokud tuto knihu postupujete pečlivě, budete chtít psát kód, výzkumný kód, vytvořit si vlastní aplikace a vyděláte peníze z toho, co děláte. Z této knihy vydělám peníze, a to i v raných fázích, protože obsahuje informace, které lidé potřebují a chtějí číst, a již kupuji, když nakupují nebo používají mé aplikace. Tato kniha pro vás nebude vytvářet aplikaci, ale nasměruje vás správným směrem a vyzbrojí vás pomocí potřebných nástrojů a dovednostmi a tipy, které usnadní váš vlastní úspěch při vytváření softwaru pro web, s každým řádkem kódu, které budete muset napsat jako příklad, připraveni k tomu, abyste byli spolu s softwarem a vašimi příznivci, návštěvníci, návštěvníci a lidé a podporovali.

Co se naučíte: Tato kniha vás naučí, jak vytvářet a prodávat software, opravdu funkční, užitečný software, nahrávání médií, bezpečnostní funkce, jako je rozpoznávání obličeje, strojové čitelné zóny čárových kódů, webové API pro ověření, zaznamenávání a vykreslení videa a fotografií a výměnu zpráv, jako je Bluetooth a NFC) komunikace. This book will teach you how to use a networked computer, focusing on debian linux, how to build bash code to make installing and backing up your software a seamless, automated breeze, how to build python code as a backend to serve dynamic messages, style things nicely using CSS styles with Bootstrap, enable user logins and interactivity through networked devices, build interactive media and network with other websites to offer security features like text messages for verification or other účely, skenování ID, moderování obrázků a videa, datové mikrotrankce, které udržují váš software v bezpečí, zpracování plateb, obchodování s kryptoměnou, asynchronní úkoly a další. Naučíte se, jak si vytvořit vlastní zařízení Bluetooth, s bateriemi, nabíječkami, mikrokontroléry, obvody, motory a senzory pomocí pájky, drátu a 3D tištěných a litých materiálů. Ukážu 3D principy designu aplikovaných na výrobu aditivních výroby a výroby nástrojů a smrti, takže jste schopni vyrábět své vlastní vložené, hardwarové zařízení s integrovanými bateriemi, nabíječkami, elektronickými obvody a funkční výstupy. a propojte je pomocí Bluetooth a webu. Konkrétně prozkoumáme dvě případové studie, vibrační masáž a domácí střelnou zbraň, které jsou naprogramované v OpenSCAD, které je k dispozici jako grafické rozhraní nebo nástroj příkazového řádku a lze je integrovat do webu pro rychlejší výsledky. Naučíte se, jak vytvářet a nasazovat web od základů bez předchozí zkušenosti, učinit jej funkční, bezpečný, krásný, užitečný a hlavně praktický. Naučíte se, jak používat strojové učení a počítačové vidění, aby byl web zabezpečený a praktičtější, zaznamenávat video a zvuk z vašeho webu, darovat svůj hlas, vytvářet hudbu a modulovat zvuk, aby vytvořil užitečné vzorky a jak prolomit hluk, aby se vytvořili další weby, aby vytvořili lidi k vytvoření ostatních webových stránek k vytvoření ostatních webových stránek k vytvoření lidí do svého softwaru a podniků. Tato kniha bude nejvíce zaměřena na média, zabezpečení a strojové učení, které jsou hlavními třemi komponenty, které vám pomohou vytvořit užitečný software pro web zapojením správných uživatelů a uvolněním nesprávných způsobem, který je realistický, praktický, ruce a poutavý a také automatický a robustní. Tato kniha vyučuje Unix, konkrétně Debian (Ubuntu), Bash Shell, Python, HTML, CSS, JavaScript a řadu užitečných softwarových balíčků pro požadavky Python, jakož i užitečný software Bash jako Git a FFMPEG. Naučím vás také, jak automaticky obchodovat s kryptoměnou a provádět platby v kryptoměně nebo z běžných debetních karet, zatímco pokud se rozhodnete, že se vám rozhodnete, že vaše návštěvníky splácím podíl na vašich příjmech. Naučím vás, jak vydělat peníze z vašeho webu prostřednictvím reklamy, jak připravit aplikaci pro vyhledávače a rychle ji zařadit do prvního hodnocení toho, co vaši zákazníci budou hledat, aby vás našli, a v souladu s co nejvíce běžných vyhledávání. Naučím vás, jak prodat váš software, inzerovat jej, apelovat na klienty, kteří hledají vaše služby, a na internetu si vytvořit jméno prostřednictvím cest, které již existují, jsou levné a dobře fungují. Naučím vás, jak uložit vaše data o cloudových počítačích, které pro vás fungují, a levně uložit vaše data, jak naplánovat a vytvořit web, který dělá to, co vaši uživatelé chtějí a co chcete, a jak udržet uživatele zapojené na vaše stránky klepnutím na jejich telefony, e -mailem, textovými zprávami, telefonními hovory a dalšími cestami, aby přivedli své uživatele zpět k vaší webové stránce pouze za kliknutím na kliknutí na tlačítko s tahem pouze pro vás. Tato kniha se zaměří na praktičnost publikování a distribuce médií ve velkém množství, od textu po fotografie po videa po zvuk, udělá dobrý dojem na koncové uživatele (vaše klientela) a prodává se jakýmkoli způsobem, abyste vytvořili web, aplikaci, která je reprezentativní pro vás a vás, a pouze vás, vaše software a vaše společnost vypadají dobře nejlepším možným způsobem. Také se ode mě naučíte několik tipů a triků, z kódovacích tipů, praktické marnosti, jako je make -up a fotografie, modelování a herectví a další, což bude důležité pro zobrazení sebe a vaší společnosti v nejlepším možném světle pomocí všech dostupných nástrojů, které vám bude distribuovat tolik obsahu, jak potřebujete, v rámci zdravého vyvážení platforem, aby se přivedly k více úsilí, práci, než je nutné. Tato kniha se nazývá „praktickáPříkladem „z nějakého důvodu„ z nějakého důvodu: Zabývá se učením se kódovat, konkrétně pro web, konkrétně se zaměřením na zabezpečení, z praktického hlediska, s příklady pracovního kódu, který slouží praktickému účelům nastíněné v textu. Vylepšení, titulky obrázků a další úkoly, jako je metrika predikce pocházející z obrázků, jako je povaha obrazu jako autentická, počítačově přenosná obraz nebo optická kopie (fotografie obrázku nebo tištěné fotografie), protože je to možné, že je to možné, pokud jde o to, aby to bylo možné. Vaše tvář. použití). Každý, kdo staví software, který je bezvadně bezpečný, má nějaký pocit, co to znamená. Software je ze své podstaty nejistý, protože zařízení a účty, které k němu používají, nejsou vždy k dispozici, mohli by být v rukou kohokoli, kdo má špatný záměr pro software, a proto mohou představovat riziko samotného softwaru. To je něco zaměřeného na tuto knihu. Síťový počítač je ve výchozím nastavení zabezpečen dlouhým klíčovým tokenem, nazývaným a SSH nebo zabezpečeným klíčem Shell a jinak je nejlépe zabezpečen webovým serverem, protože webový server poskytuje otevřený přístup a také stavěcí nástroje pro zabezpečení umění spuštěné na samotném serveru. Webový server má přístup k webovému prohlížeči uživatele, který je pravděpodobně nejvýkonnější součástí zařízení uživatele, protože je to místo, kde uživatel má přístup k síťovému softwaru. Tato sada nástrojů může vykreslit text, webové stránky, které vidíte, a může také zaznamenávat obrázky, zvuk a video (jako je fotografie obličeje nebo ID stavu), může číst a psát do Bluetooth rádiových zařízení a může si číst a psát na polní transpondér Transpondér, levné klíčové karty, na webu a valitelé na webu a valitelé na webu a valitelé a valiba na web a psát pomocí datových dat. Pomocí všech nástrojů, které máte k dispozici, se s touto knihou vybavíte znalostmi k vytvoření zabezpečeného webu a celkově zabezpečený počítačový systém, který pro vás funguje, dělá vaše nabídky a vypadá a cítí se a cítí

Kde začít: Jste vítáni, abyste přeskočili přes sekci, kterou začnu tuto knihu nebo jakoukoli sekci, na přesný kód, který potřebujete, zejména pokud máte zkušenosti s kódováním před nebo jakýmkoli z výše uvedených nástrojů, které budu podrobně popisovat v této knize, a dokumentovat případy použití a její praktické příklady. Pokud nemáte zkušenosti s psaním kódu, vřele doporučuji, abyste si přečetli celou tuto knihu, a zejména doporučuji, abyste si přečetli předchozí sekce, abyste se ujistili, že je tato kniha pro vás pravá. Pokud tato kniha pro vás není správná, zvažte ji na darování příteli nebo příbuznému, který by se mohl zajímat o samotný vývoj webu, a dokonce zvažte, zda si ji půjčíme zpět a naučíte se od nich, aby vyplnili mezery, kde jsem vás před mnou selhal jako učitele nebo jiné učitele. Začněte, kde chcete, každá část této knihy bude užitečná, pokud máte v úmyslu vytvořit užitečnou aplikaci, a zvažte, že nejlepší aplikace jsou vytvořeny s ohledem na koncový uživatel: Znáte svého zákazníka. Teď mě znáš, znáš tuto knihu a jste připraveni začít. Chcete -li začít, uchopte počítač (dokonce i nejlevnější notebook z obchodu s boxem, Amazon nebo staré plochy a nastavte jej způsobem, který pro vás funguje.

Jak číst tuto knihu: Text zvýrazněn, označuje, že text patří do příkazového řádku, kde napíšete kód, který spustí. Příkazový řád je silně zaměřen na klávesnici a vyžaduje jen málo kliknutí, zrychlení pracovního postupu a usnadnění věcí na vás.

Začínáme: Pojďme se ponořit. Začneme stavebním kódem na místním počítači a začneme bez vytváření webových stránek připojených k internetu. To je bezpečnější začít, nic nestojí a je pro vás snadné. V závislosti na operačním systému bude dostat se do skořápky bash trochu odlišné. Pro Mac OS doporučuji v tomto bodě nainstalovat virtuální počítač, protože s virtuálním počítačem získáte compatibilitu. Různí poskytovatelé, jako je VirtualBox a Paralells, pro vás mohou spustit virtuální stroj, i když je také možné nainstalovat Ubuntu přímo na stroj, pokud dáváte přednost použití nativního prostředí, které se doporučuje k vytvoření rychlého a zefektivněného zážitku. Pokud používáte Linux nebo Windows, které doporučuji, mělo by být docela snadné vytvořit projekt. Otevřete svůj terminál, upravte velikost, jakmile vidíte za vhodné, a začněte po kroku 2.. Pokud používáte Windows, postupujte prosím na krok 1.

Krok 1: - Pouze uživatelé Windows V systému Windows, otevřený příkazový řád jako administrátor a typ WSL --instalace

Krok 2: - Pokračujte zde nebo přeskočte krok 1, pokud nepoužíváte Windows V otevřeném terminálu (v závislosti na vašem operaci, nazvaném Ubuntu ve Windows, terminál v Mac nebo Linuxu nebo podobném názvu), začněte vytvořením projektu. Děláme to s příkazem MKDIR, který vytváří adresář. Pokud potřebujete vytvořit adresář pro uložení vašeho projektu, který se doporučuje, použijte příkaz CD ke změně na adresář a a a

CD/PATH/TO/ADIGRECORY - Cesta je složky (soubory), které předcházejí vašemu cílovému adresáři, vaše výchozí cesta je ~ nebo/home/uživatelské jméno (kde uživatelské jméno je vaše uživatelské jméno). Chcete -li se změnit na výchozí adresář, zadejte CD nebo CD ~ Příklad Mkdir - Nahraďte „Příklad" názvem adresáře

Nyní máte pracovní adresář pro svůj projekt. Být tak důležité, aby byl tento adresář uložen v případě, že je třeba přepnout na jiný stroj nebo nasadit kód, který píšete, takže je připraven na web, vytvoříme skript, který zálohuje váš adresář v příštích několika krocích. Vytváření skriptu však vyžaduje trochu kódu a kód musí být automatizován, aby byl co nejužitečnější. Pojďme tedy nejprve vytvořit skript, abychom vytvořili skripty. Začněme vytvořením skriptu a jeho spuštění. K tomu použijeme sudo, chmod a dotyk a zavoláme skript „ascript".

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

Nyní jsme vytvořili skript, učinili ho spustitelný a jsme připraveni jej upravit. Nano je textový editor, který vám umožní upravit text bez kliknutí, což je mnohem snazší než použití grafického uživatelského rozhraní. Chcete -li upravit soubor s Nano, použijte Nano a poté cestu k souboru. Chcete -li vytvořit skript, který vytváří skript, je to docela podobné tomu, aby byl náš skript na prvním místě. Stejný kód použijeme jako výše, nahradíme název skriptu „ascript" parametrem argumentu, $ 1. To nám umožňuje volat skript zadáním jednoduše sudo ascript Newscript, v tomto okamžiku můžeme vytvořit jakýkoli nový skript nahrazením „Newscript" názvem vašeho skriptu. Kód v Nano by měl vypadat jako:

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

A pro uzavření Nano můžeme podržet kontrolní klíč a stisknout X, poté Y, abychom označili, že soubor ukládáme a stiskne návrat. Nyní místo zadání těchto tří příkazů k úpravě skriptu budeme moci zadat ascript sudo ascript, abychom znovu upravili skript. To funguje! A jakýkoli nový skript lze snadno spustit tím, že jej voláte ve shellu. Uložte naši práci hned teď: Pojďme napisovat záložní skript, abychom uložili náš nový skript a poté jej zálohovali do našeho adresáře projektu a zálohovali také záložní skript.

sudo ascript backup

Nyní v Nano:

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

Kde/PATH/TO/ARDECTORY je cesta k projektu, který jste vytvořili s MKDIR. Později se naučíme, jak zkopírovat opakované cesty, jako je tato, smyčkou a seznamem, což je méně kódu, ale prozatím to udržíme jednoduché a máme několik řádků. Chcete -li spustit tento skript a zálohovat kód, uložte soubor v Nano s ovládacím prvkem+x, y a vraťte se a do shell zadejte níže

backup

Pokud jste při čtení této knihy vůbec vyzváni k hesla a sledujete ve shellu, zadejte své uživatelské heslo správně, budete mít tři pokusy, než budete muset příkaz znovu spustit. Pokud budete potřebovat dvakrát spustit, můžete použít šipky nahoru a dolů k opakování příkazů a úpravy. Jednoduché stiskněte nahoru a dolů přerušovaně a vyberte příkaz, před úpravou příkazu pravým, levými šipkami a smazat klíč i klávesnici a spuštěním s návratem.

Gratuluji! Podařilo se vám vytvořit úžasný záložní skript, který zálohuje dva důležité skripty shellu ve vašem pracovním adresáři. Když se projekt zvětšuje, můžeme se věci pohybovat později, ale to prozatím funguje. Pojďme k zálohování v cloudu, použijeme k tomu GitHub (ačkoli existuje řada dalších řešení pro zálohování, jsou všechny přibližně stejné.) Git je software pro řízení Verision, který vám umožní zálohovat úpravy vašeho softwaru, když je vyrábíte na server, a zároveň vám umožní stáhnout celé kopie vašeho softwaru nebo klíče. Je nápomocný při ukládání vašeho softwaru, zejména když migrujeme do zabezpečených instancí Linuxu, které se někdy zlomí, když selže jediný řádek kódu, a nechte vás uzamknout, zatímco váš kód nemusí být zálohován, pokud nemáte šanci jej automaticky zálohovat, které pokryjeme.

Pokud v tomto bodě již nepoužíváte virtuální stroj Ubuntu, v tomto bodě doporučuji virtuální stroj Ubuntu, protože to usnadní váš život při instalaci všech balíčků nezbytných k vytvoření pracovního webu a předškolních operací v počítači. V blízké budoucnosti přesuneme kód na webový server, ale chceme se ujistit, že za naším webovým serverem je alespoň několik vrstev zabezpečení, které jsou odolné vůči phishingu, a k tomu použijí řadu balíčků Linux. Pokud stále chcete používat Mac OS, jste vítáni hledat a nainstalovat potřebné balíčky online, ale nemusí existovat alternativy pro každý balíček, který bude tato kniha nebo série pokrýt.

Pojďme přidat několik příkazů, abychom spáchali naši práci se záložním skriptem spuštěním zálohování příkazu sudo ascript.

# …

Ještě jednou ovládejte X a uložte.

Nyní musíme pro tento projekt udělat jednou jednorázovou konfiguraci. Protože to bude brzy projekt GIT, nemusíme psát každý příkaz pokaždé, když nasadíme z úložiště GIT, ale při psaní našich skriptů nasazení dostaneme zavěšení. Chcete -li začít, ujistěte se, že jsme ve správném adresáři a inicializujeme úložiště GIT a generujte klíče SSH.

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

Po zadání SSH-KEYGEN by měl být nový klíč uložen ve složce Home pod složkou nazvanou .SSH. Říká se tomu id_rsa.pub. Najdeme tento klíč a zkopírujeme jej. Vidět to,

cd ~
cat .ssh/id_rsa.pub

Zkopírujte text, který je vrácen posledním příkazem, a vytvořte si účet u vašeho poskytovatele GIT (ideálně GitHub), než přidáte klíč SSH k vašemu účtu. Poté, co máte účet, klikněte do pravého horního nabídky a zadejte nastavení, před přidáním klíče SSH do klíčů SSH a GPG v nabídce v nabídce. Před uložením a návratem do GitHubu vyberte přidat klávesu SSH a přidejte jej a přidejte jej do názvu a vytvořte nové úložiště. To je podobné pro ostatní poskytovatele GIT, budete si muset přečíst jejich dokumentaci. V nové konfiguraci úložiště uveďte své úložiště popisné jméno a rozhodněte se, zda jej chcete zveřejnit, a nezapomeňte dosud nakonfigurovat žádné soubory pro zařazení. Po vytvoření úložiště zkopírujte klon s URL SSH a vložte jej do následujícího příkazu.

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

Nyní se můžete přesunout zpět do svého úložiště pomocí CD, budete s tím znát. Vyzkoušejte svůj záložní skript hned se zálohou

Velký! Nyní můžeme opravdu získat kódování. Pojďme nainstalovat Django nyní, když máme dobré pochopení na bash a git. Django nám umožní automaticky zálohovat náš software, Bash to může také udělat, ale Django by měl mít jednodušší bezpečnější implementaci (může být deaktivován a snadněji nakonfigurován).

Pro instalaci softwaru v Ubuntu použijeme příkaz sudo apt-get. Nejprve pojďme aktualizovat a upgradovat software, který jsme již měli. To lze provést pomocí aktualizace sudo apt-get a sudo apt-get upgrade -y. Dále nainstalujme Python a naše virtuální prostředí, domov našeho kódu, s následujícím příkazem: sudo apt-get instalace python-is-python3 python3-n-yinv

To je vše, co potřebujete jít s Djangem, pokud jde o instalace softwaru v instanci Ubuntu. Pro Windows a Linux by to mělo být poměrně jednoduché, ale pro Mac možná budete chtít nainstalovat virtuální stroj a Linux pomocí bezplatného nebo placeného virtuálního prostředí, jako je VirtualBox nebo Paralells Desktop a znovu vytvořit výše uvedené kroky, abyste mohli nastavit prostředí Ubuntu. Ubuntu je v tomto případě kritický, protože je to software, který webové stránky spustí, a umožňuje jim hostit webové stránky s veškerým výše uvedeným softwarem.

Pojďme se kopat do Djanga.

V našem adresáři znovu, s CD:

python -m venv venv # Vytváří virtuální prostředí, kde je kód uložen
source venv/bin/activate # Aktivuje virtuální prostředí
django-admin startproject mysite . # Kde MySite je projekt, začínám ve svém aktuálním adresáři.

Django nás právě začíná, protože Django pořádá webový server a dělá vše, co potřebujeme, abychom získali základní místní web do provozu. Nyní, když máme nainstalovanou Django, upravte nastavení trochu, aby to fungovalo, jak potřebujeme. Nejprve vytvoříme novou aplikaci

python manage.py startapp feed

Všimnete si, že první aplikace se nazývá Feed. Aplikace by měla být volána cokoli, co se vám líbí, a my vytvoříme nové aplikace, ale název každé aplikace musí být konzistentní pokaždé, když je aplikace odkazována v kódu. Chcete -li přidat novou aplikaci, vždy upravíme nastavení.py v druhém adresáři vytvořenou aplikaci, pojmenovaná v startProject, dále. Používání nano,

nano app/settings.py

V nastavení najděte nainstalovanou_apps a oddělujte [] na 3 řádky. Pomocí čtyř mezer na prázdné středové lince přidejte „zdroj" nebo název vaší aplikace. Tato část nastavení.py by měla vypadat jako:

INSTALLED_APPS = [
    'feed',
]

Než zapomeneme, vyzkoušejte, že Django pracuje. Pomocí příkazu Python Manage.py Runserver 0.0.0.0:8000 můžeme server spustit a poté navigovat ve webovém prohlížeči na počítači s kódem na http: // localhost: 8000 a viz příklad webové stránky (funguje to!) Ukončeno serverem s ovládacím prvkem C, to samé jako jakýkoli jiný příkaz.

Nyní se kopejme do psaní nějakého pythonového kódu. Django má tři hlavní komponenty, všechny z nich jsou zcela provozovány podle kódu. Komponenty se nazývají model, zobrazení a šablonu a každá je na vyšší a nižší úrovni před doručením webové stránky uživateli.

Model je kód, který ukládá informace v databázi pro vyhledávání, třídění a vykreslování.

Pohled rozhoduje o tom, jak je model vykreslen, manipulován a upraven, téměř každý pohled použije model přímo.

Šablona je kód HTML s některými dalšími zvonky a píšťalky nazývanými jazyk šablony. Šablona je vykreslena pohledem, kde je naplněna Python kódem a kontextem, jako jsou modely a informace (řetězce a celá čísla usuall) z pohledu.

Django má také jiné komponenty, včetně, ale nejen na:

Nastavení, která nakonfiguruje aplikaci, jak jsme diskutovali.

URL, což jsou vzory, které uživatel sleduje, aby získal přístup ke konkrétním částem webové aplikace.

Formuláře, které definují, jak se informace odesílají na server a jsou vykresleny do databáze i do uživatele. Toto jsou základem zpracování informací na straně serveru a mohou přijímat jakýkoli typ informací, které ukládají počítačové ukládání, zejména textové řetězce, čísla a true/false booleans (obvykle zaškrtávací políčka).

Šablony, které jsou jazykem HTML kódu a šablony, a překlenují mezeru mezi Python a HTML, což znamená, že informace Python lze sloužit jako HTML kód, ke kterému má kdokoli přístup, a může zabezpečit web s omezeným přístupem, přičemž zpřístupňuje Python kód a je přístupný webu a užitečný pro různé účely na odlehlém zařízení, které nemusí být blízko serveru.

Statické soubory, které jsou obvykle JavaScript, a jsou to knihovny, které server slouží a jsou propojeny se šablonou.

Mediální soubory, které server slouží nebo je externě hostován, nebo právě zapsán na server před zpracováním a vysláním na jiný server (kbelík) pro hostování.

Middleware, což je kousky kódu, které jsou spuštěny ve stejnou dobu s každým pohledem a jsou považovány za „zahrnuty" do pohledu.

Kontextové procesory, které zpracovávají kontext každého pohledu a používají se k přidání dalšího kontextu.

Testy, které ověřují, že uživatel nebo požadavek předá určité požadavky před vykreslením zobrazení.

Spotřebitelé, kteří diktují, jak websockety zvládnou a reagují na komunikaci.

Admin, který se používá k registraci modelů, takže je lze podrobně manipulovat na stránce Django Admin, kde lze databázi podávat pomocí grafického rozhraní.

Celery, který definuje asynchronní úkoly Části kódu Django, mohou začít spuštěny před okamžitým přechodem na další úlohu nebo řádek kódu.

Django může mít mnoho dalších komponent, o kterých zde budeme podrobně diskutovat. Existuje spousta způsobů, jak učinit Django funkčnějšími a přidávat webové procesy, které jsou rychlé, efektivní komunikační kanály, celer, které provádějí asynchronní úkoly, a množství dalších kusů softwaru pro rozšíření Django, zejména v pohledu, kde je většina kódu prováděna. Funkce zobrazení jsou klíčové, protože obvykle deklarují každý kus kódu, který je specifický pro konkrétní vzorec URL nebo část serveru.

Nejprve prozkoumejme funkce Zobrazit. Funkce zobrazení začínají importy označujícím kód, který bude použit v pohledu, a jsou definovány pomocí pravidelných definic nebo tříd. Nejjednodušší pohledy jsou definovány definicí funkce DEF a vrátí HTTPResponse se základní šablonou. Začněme definováním základního pohledu na vrácení textu „Hello World". Nezapomeňte, že pokaždé, když přidáte kód po příkazu, jako je DEF, pokud, zatímco, pro atd., Budete muset přidat 4 mezery pro každou z definic preceedingu, které byste chtěli použít pro svou funkci. Brzy se dostaneme do toho, co každý z nich znamená.

Z adresáře našeho webu upravte soubor zdroje/views.py pomocí nano a přidejte následující řádky na konec souboru.

from django.http import HttpResponse

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

Django's HTTPResponse odpoví textovým řetězcem, označeným otevřením a uzavřením '. Pokaždé, když předáte informace do funkce nebo třídy, jako je požadavek nebo řetězec, budete muset použít závorku (otevření a uzavření).

To ještě není vše, co musíme vidět náš pohled. Samozřejmě jsme neřekli serveru, kde je pohled přesně, stále musíme definovat cestu, kterou by měl pohled vykreslit. Začněme definováním základní cesty v App/urls.py a později se dostaneme do skupin cest.

V App/urls.py přidejte řádek po příkazech importu po začátku importu pohledu, který jsme právě vytvořili.

from feed import views as feed_views

Nyní definujeme vzor pohledu. Vzory zobrazení mají tři komponenty, komponentu cesty, která sděluje serveru, kde pohled existuje v rámci serveru (cesta URL, kterou uživatel zadá do navigační lišty, aby vstoupil na webovou stránku), komponenta pohledu, kde je pohled zadán, a přátelský název pro zobrazení, takže je možné, aby se objevil další název nebo je třeba provést další místo pro další lognózu. Dává smysl dělat věci tímto způsobem a být flexibilní, protože vaše kódová základna bude neustále se měnícím prostředím, které vyžaduje flexibilitu a improvizaci, aby byla cenná a snadná práce. Zde je, jak bude váš pohled vypadat, můžete jej přidat do urlPatterns = [část App/urls.py. Vzor pohledu je definován pomocí výše popsaných tří složek a funkcí zvanou cesta. Vaše vzory URL jsou seznam, takže nezapomeňte vždy ukončit každou položku v nich pomocí čárky, protože to odděluje každou z nich. Každá položka by měla také jít na nový řádek, opět se čtyřmi mezerami před ní, stejně jako aplikace v nastavení.py. Definujeme první komponentu pohledu s funkcí prázdné řetězce, abychom vytvořili pohled, který běží v kořenovém adresáři webového serveru. Vaše urls.py by nyní měly vypadat takto:

from feed import views as feed_views

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

Toto je základ pro vytvoření webu s Django, který je zcela statický. Abychom vytvořili dynamičtější web, kde můžeme začít s ukládáním informací o ukládání do mezipaměti, jako jsou obrázky, videa, zvuk a další, budeme muset používat modely, které prozkoumáme dále. Prozatím pojďme zkontrolovat náš kód a spustit server. Chcete -li zkontrolovat kód pro chyby, spusťte:

python manage.py check

Pokud existují nějaké chybové zprávy, měli byste pečlivě zkontrolovat změny, které jste provedli ve vaší aplikaci, a zjistit, zda existuje něco, co je třeba opravit, jako je cizí nebo postrádající prostor, další znak, nezachycený řetězec, jakýkoli překlep, jakýkoli náhodně odstraněný znak nebo cokoli jiného. Přečtení chybové zprávy (pokud ji máte), měli byste být schopni vidět cestu k vytvořenému souboru nebo upravovaní spolu s číslem řádku, takže se podívejte do tohoto souboru a řádku a zjistěte, zda můžete opravit něco, co tam je. Pokud jste problém vyřešili, spusťte výše uvedený příkaz. Když je váš software připraven ke spuštění a pracuje, uvidíte výstupní „kontrolu systému identifikované žádné problémy". Nyní jste připraveni jít. Spusťte server s:

python manage.py runserver 0.0.0.0:8000

Nyní otevřete webový prohlížeč a přejděte na http: // localhost: 8000. Měli byste vidět text vrácený v závorce a citace funkce HTTPResponse podle vašeho názoru. Toto je jen základní příklad, ale pokud jste to dosáhli tak daleko, rozumíte základám, jak Linux, Bash, Python a Django pracují. Podívejme se hlouběji do některého databázového modelování a prozkoumáme sílu třídy Python při ukládání informací. Poté začneme přilnavost k HTML a CSS, než vytvoříme naše stránky plně vystupující, flexibilní a zabezpečené pomocí JavaScriptu a strojového učení.

Třídy jsou uloženy v modelech.py vaší aplikace. Pomocí Nano, upravte aplikaci/models.py a přidejte novou třídu. Třída je definována definicí třídy a je předána superclass, od které zdědí, v tomto případě modely.model. Název třídy přichází po definici třídy a po použité třídě A: (Colon) se před níže uvedené atributy a definice funkcí vázané na třídu jsou uvedeny níže. Naše třída potřebuje ID, které můžeme použít k jeho načtení a udržení jedinečného a také potřebuje textové pole pro uložení některých informací. Později můžeme přidat časové razítko, soubory, booleans (pravdivé nebo nepravdivé definice, které mohou náš kód pomoci při rozhodování o tom, co s modelem dělat, a lze jej použít k jeho třídění), instance pro připojení modelu s uživatelem přihlášeným do serveru a další. Pojďme rozbalit kód níže:

from django.db import models # Import, který se používá k definování naší třídy a je to atributy
class Post(models.Model): # Definice naší třídy samotné
    id = models.AutoField(primary_key=True) # ID našeho modelu, automaticky generovaného klíče, který nám umožní dotazovat model, udržet jej jedinečný a je užitečný, když musíme s modelem po vytvoření interagovat.
    text = models.TextField(default='') # Atribut naše třídy, v tomto případě nějaký text, výchozí k prázdnému řetězci.

Zavřete a uložte soubor jako předtím.

Existuje mnoho dalších oblastí a možností, které prozkoumáme, když tuto třídu aktualizujeme, jak se naše aplikace vyvíjí, ale toto je základní potřeby vytvoření aplikace pro zveřejňování nějakého textu. Tento model však nebude fungovat sám. Jak je popsáno dříve, budeme potřebovat vlastní zobrazení a vlastní vzor URL, aby tento model fungoval, a také budeme potřebovat formulář spolu se šablonou. Pojďme nejprve prozkoumat formulář.

Chcete -li definovat formulář, upravte aplikaci/forms.py s Nano a přidejte následující řádky. Budeme potřebovat dva importy, naši třídu formulářů, jakož i model, který jsme vytvořili (Feed.Models.Post), definici třídy podobné modelu a pole spolu s podtřídou s názvem Meta, která bude definovat model, se kterým formulář interaguje. Formulář může mít také inicializační funkci, která ji nastaví na základě informací v žádosti, modelu nebo jiném, prozkoumáme to později.

Formuláře modelu jsou tak užitečné, protože mohou vytvořit model nebo také upravit model, takže je použijeme pro oba. Pojďme definovat jeden ve formulářích.py níže.

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

To je základy toho, jak vypadá forma a model. Tento modelový formulář lze použít k okamžitému nebo úpravě příspěvku a změnu textu, který obsahuje. Podíváme se na integraci tohoto formuláře do pohledu dále. Nejprve provedeme migraci a migrujeme databázi, aby náš kód mohl s modelem interagovat, když běží. Chcete -li to provést, spusťte následující příkazy:

python manage.py makemigrations
python manage.py migrate

Provedení to bude chvilku, ale jakmile to udělá, umožní vám přístup k modelu v pohledech, middlewaru nebo kdekoli jinde v softwaru. Pojďme pokračovat v pohledu, kde můžeme vidět náš model. Upravte zdroj/views.py a přidejte následující kód, jak je uvedeno. Po znamení # nebudete muset nic přidávat, tento kód je komentáře, které se používají k označení informací o kódu. Začneme importem našeho modelu do pohledu a přidáme jej do kontextu, kde jej můžeme vykreslit v šabloně jako seznam pro zobrazení. Dále přidáme šablonu, kde můžeme vykreslet formulář a model pomocí tlačítka a vytvořit nový objekt založený na modelu a zveřejnit jej na server. Zní to komplikovaně, takže to prostě vezměme krok za krokem. Než dokončíme pohled, vytvořme šablonu, která pouze vykresluje model a ujistěte se, že jej můžeme vidět vytvořením nového příspěvku ve shell. Zde je způsob, jak by měl tento pohled vypadat:

    posts = Post.objects.all() # Dotazujte všechny příspěvky v databázi

To vše vypadá docela jednoduše, dokud se nedostaneme na dno. Vykreslení, hodnota vrácená funkcí namísto v odpovědi HTTP, jako je předchozí příklad, vždy přijímá požadavek jako svůj první vstup, přijímá kontext (v tomto případě příspěvky v databázi), který lze nyní vykreslen v šabloně a vrátí šablonu definovanou ve funkci. Šablona bude dokument HTML s trochou jazyka s názvem Jinja2, který vykresluje Python informace do HTML.

Chcete -li začít vytvářet šablony, vytvořte dva adresáře v krmivu.

mkdir feed/templates
mkdir feed/templates/feed

Dále upravte šablonu ve výše uvedeném adresáři, krmení/šablony/zdroje a přidejte kód pro tento příklad. Podívejme se na šablonu pro tento příklad.

Toto je velmi jednoduchá šablona. Definuje otevírání a uzavírání značek HTML, značku typu dokumentu, značku těla s názvem legendy, značku přestávky, která přidává malý řádek přes obrazovku, a pro smyčku, která vykresluje každý příspěvek v seznamu příspěvků jako odstavec v šabloně. To je vše, co je zapotřebí k vykreslení příspěvků, ale v databázi zatím nejsou žádné. Pojďme vytvořit některé se skořápkou. Můžeme spustit shell s manage.py

python manage.py shell

Nyní pojďme importovat náš poštovní model

from feed.models import Post

Dále vytvoříme jednoduchý příspěvek s řetězcem a opustíme shell. Řetězec může být cokoli, pokud je to platný text.

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

Nakonec budeme muset do našeho krmiva přidat vzor URL. Protože naše aplikace Feed bude používat více URL a chceme udržovat velikosti souborů malý, vytvořme místní adresy URLS.py v naší aplikaci Feed, která vypadá takto:

from django.urls import path
from . import views

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

Budeme také muset upravit urls.py v základní aplikaci, ať už jsme se rozhodli nazvat, byl to první adresář, který jsme vytvořili. Upravte aplikaci/app.py a přidejte následující do vzorů URL

from django.urls import include # nahoře
    # ... předchozí kód zde

Nyní, když spustíme server s Python Manage.py Runserver, uvidíme stránku, kterou jsme vytvořili, protože máme model, zobrazení a šablonu i vzor URL spolu s položkami v databázi. Dále implementujeme formulář, který jsme vytvořili, a začneme vytvářet vlastní příspěvky. Než ale píšeme příliš mnoho kódu, provedeme zálohu pomocí skriptu, který jsme napsali dříve, zálohování. Spusťte tento skript ve shellu, počkejte několik okamžiků a veškerý kód bude zálohován do našeho úložiště GIT.

backup

Implementace formuláře je relativně jednoduchá. Na náš formulář importujeme náš formulář, přidáme do pohledu obslužný program žádosti a uložíme příspěvek do databáze před přesměrováním na stejný pohled. Můžeme použít funkci přesměrování, kterou jsme již importovali, a další funkce nazvaná Reverse pro získání URL pro vzor pohledu. Budeme to dotazovat pomocí řetězce „Feed: Feed", protože jmenný prostor je podávání a pohled se také nazývá Feed.

    posts = Post.objects.all() # Dotazujte všechny příspěvky v databázi
    if request.method == 'POST': # Zpracovat požadavek na příspěvek
        form = PostForm(request.POST) # Vytvořte instanci formuláře a uložte do něj data
        if form.is_valid(): # Ověřit formulář
            form.save() # Uložte nový objekt
        return redirect(reverse('feed:feed')) # Přesměrovat na stejnou adresu URL s požadavkem GET
        'form': PostForm(), # Nezapomeňte předat formulář do kontextu, abychom jej mohli vykreslit.

Nyní budeme muset aktualizovat šablonu tak, aby zodpovídala nový formulář. Můžeme to udělat pomocí pomocí

Označte v HTML a vykreslete formulář v šabloně HTML pomocí tlačítka Odeslat. Budeme také potřebovat token CSRF, token, který zabraňuje externím webům v odesílání do formuláře bez prvního načtení stránky.

Pojďme to rozebrat. K dispozici je nová třída formulářů, token, samotný formulář a tlačítko Odeslat. Docela jednoduché, ale když se na to podíváme, možná bude chtít, aby to vypadalo lépe. Funguje to, můžeme zveřejňovat nové příspěvky s formulářem a nyní jsou uloženy v databázi. Děje se tu několik věcí. K vykreslení tokenu pro formulář a další, {{{… {… {… {{…}} k vykreslení formuláře, používáme značky HTML k prohlášení, že dokument je dokument HTML. Máme také smyčku pro vykreslení textu pomocí značek bloků a značky šablony. Blokové značky jsou opravdu důležité, protože můžeme definovat, jak jsou s nimi vykresleny části šablony, a značky šablon jsou základem toho, jak do našeho kódu vkládáme proměnné.

Nyní musíme, aby naše aplikace vypadala lépe, protože prozatím to vypadá opravdu základní. Můžeme to udělat pomocí CSS, buď inline, nebo ve třídách vázaných na každý objekt v dokumentu. CSS je opravdu pěkný, protože to říká vše na stránce, jak by to mělo vypadat, a může to vypadat opravdu dobře. Existuje několik knihoven, které to dokážou, ale moje osobní jít je Bootstrap.

Bootstrap si můžete stáhnout z jejich webových stránek,getbootstrap.com/. Poté, co je tam, stisknutím tlačítka si přečtěte instalační dokumenty a zkopírujte kód z části zahrnující sekci CDN. Tento kód budete potřebovat v horní části dokumentu HTML ve značce s názvem Head. Pojďme také pokračovat a vytvořit základní šablonu, takže tyto odkazy nemusíme znovu vytvářet v každé šabloně.

Vytvořte nový adresář s názvem šablony pomocí šablon Mkdir a poté upravte šablony/base.html.

Mělo by to vypadat takto:

Nezapomeňte zkopírovat soubory CSS a JavaScript,.

Nyní se vraťme ke skořápce bash a spustíme rychlý příkaz. Nezapomeňte, že pokud někdy potřebujete přístup k virtuálnímu prostředí, zadejte zdroj Venv/Bin/Active. To vám umožní nainstalovat balíčky Pythonu lokálně tak, aby django přístup k nim. Abychom poskytli naše formuláře generované třídami Django Bootstrap, použijeme balíček Python s názvem Crispy Forms. Můžeme si to stáhnout s následujícím příkazem

pip install django-crispy-forms

Jakmile je to nainstalováno, přidejte jej do nastavení.py

    # … Předchozí kód zde

Nyní, zpět v naší šabloně krmiva, můžeme některé věci odstranit. Odstraňujme začátek a konec dokumentu a nahradíme jej dědičností z naší základní šablony pomocí rozšíření a definice bloku. Do formuláře také přidáme import filtru šablony se zatížením a filtrem šablony. Nakonec pojďme přidat třídu bootstrapu k tlačítku na formuláři, aby vypadala spíše jako tlačítko. To by mělo vypadat takto:

Krásný! To je už docela trochu kódu. Dále bychom to měli vyzkoušet a ujistit se, že můžeme vidět, že všechno vypadá hezky, a také se ujistěte, že všechno funguje správně. Spusťte server podle předchozích pokynů a ujistěte se, že web vypadá a funguje dobře. Skvělá práce! Jste připraveni přejít k dalšímu kroku, ve kterém přidáme funkce přihlášení uživatele pomocí podobných URL, formulářů, pohledů a šablon. Základní šablona je důležitá a budeme ji i nadále upravovat a provést změny podle potřeby, ale prozatím se zaměřme na zajištění našich stránek tím, že uživatelům umožníme přihlásit se pomocí uživatelského jména a přístupového kódu a nakonec ještě důležitější informace, které vám pomohou udržet vaši aplikaci zabezpečenou a vlastní účet přístupný pouze u vás.

K tomu budeme muset použít model uživatelů zabudovaný do Djanga. Uživatelský model je model databáze, jako je náš příspěvek, který lze vykreslit pro přihlášení uživatele na web. V budoucnu, než nasadíme web na internet, rozšíříme tento model s dalšími modely připisovanými mu a vytvoříme další bezpečnostní opatření pro přihlášení, která jsou odolná vůči phishingu. Začneme pomocí některých vestavěných přihlašovacích formulářů, které Django poskytuje. Nejprve vytvoříme novou aplikaci, kterou použijeme k vykreslení šablon a zobrazení pro základní přihlašovací stránku. Vytvoříme také další aplikace, které budou reprezentovat pokračující výzvy v oblasti přihlášení, abychom zabezpečili aplikaci, včetně pincode, rozpoznávání obličeje, polní komunikace, externích zařízení, ověřování více faktorů a rozpoznávání otisků prstů.

Už jsme mluvili o spuštění aplikace. Z našeho adresáře, uvnitř virtuálního prostředí, Pass Manage.py tyto argumenty

python manage.py startapp users

Nyní bychom měli mít adresář pro novou aplikaci. Začněme vytvořením zobrazení v tomto adresáři, který odpovídá přihlášení uživatele. Django má zabudované zobrazení pro přihlášení uživatelů, ale ty nebude pro nás vhodné, protože potřebujeme vlastní pohled, který se nejlépe provádí s definicí.

V tomto pohledu začneme kontrolou žádosti o příspěvek, předáním požadavku.POST na přihlašovací formulář importovaný z Djanga, ověřte uživatelský účet a přihlaste se před přesměrováním do naší aplikace Feed.

V uživatelů/views.py přidejte následující kód

        username = request.POST['username'] # Získejte uživatelské jméno a heslo z žádosti o příspěvek
        password = request.POST['password'] # Ověřte uživatele

To je vše, co potřebujete pro základní přihlášení. Nyní vytvoříme formulář pro pohled rozšířením základní šablony. Začneme vytvořením nového adresáře pro šablony ve složce uživatelů.

mkdir users/templates
mkdir users/templates/users

Nyní bychom měli být schopni upravovat uživatele/šablony/uživatele/přihlášení.html. Zatímco jsme u toho, vytvoříme šablonu, která umožní uživateli také přihlásit se.

nano users/templates/users/login.html

Nyní v šabloně,

Toto je základy přihlašovací šablony. Je to opravdu stejně jako druhá šablona ve struktuře, ale když je vykreslena, vypadá to trochu jinak. Můžeme zkopírovat tento kód a vytvořit další velmi podobnou šablonu s názvem Register.html, kde změníme znění a použijeme nový formulář, který vytvoříme. Pojďme nejprve udělat šablonu. Upravte uživatele/šablony/uživatele/registr.html a přidejte následující kód:

Nyní vytvoříme formulář pro registraci našeho uživatele a kroužíme zpět k zobrazením, než upgradujeme přihlášení našich uživatelů pomocí modelu. Uděláme tento formulář základní, ale v budoucnu zahrnujeme další podrobnosti a bezpečnostní funkce, jako jsou dohody a Captcha. Upravte formuláře pomocí uživatelů Nano/Forms.py a přidejte následující kód.

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

Takže zde máme další formu, která funguje docela jednoduše. Jedná se o formulář uživatelského registru s uživatelským jménem, e -mailem a heslem, jakož i polem potvrzovacího hesla. Všimněte si, že tento formulář nerozšiřuje běžnou třídu. Jedno pole je definováno pouze stejné a třída Meta definuje model, který formulář odpovídá zbytku informací, které budou zapsány do formuláře. Většina z toho již existuje ve vestavěné Django vestavěné uživatelské formě, takže to použijeme jako základ pro třídu (předán v závorce).

Dále prozkoumáme pohled na registraci uživatele, nyní, když máme formulář a šablonu. Toto je modelform, stejně jako ten v novém pohledu příspěvku. Upravte uživatele/views.py a přidejte následující kód:

# … Dovoz

To je vše, co musíme zaregistrovat uživatele, ale měli bychom mít více informací. Chceme znát čas, kdy se uživatel zaregistroval, v kolik hodin byli na webu naposledy, některé informace o nich, jako je biografie, časová pásmo atd. Také budeme muset aktualizovat náš model krmiva, zveřejňovat, aby zohlednili uživatelský model a připisovali příspěvky každému uživateli. Za tímto účelem aktualizujeme modely.py v obou aplikacích. Začněme úpravou modelu krmiva. Teď by to mělo vypadat takto:

from django.db import models # … Dovoz
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Přidejte do tohoto řádku

Věnujte pozornost druhému řádku, který byl přidán do souboru. Jedná se o cizí klíč, který připisuje každý příspěvek jednomu uživateli na příspěvek, takže se můžeme ujistit, že uložíme příspěvky na základě uživatele na uživatele a žádný příspěvek nelze provést bez přiřazení uživateli. Tento cizí klíč definujeme s třídou, kterou představuje, argument odstranění, který zajistí, že příspěvky jsou smazány uživateli, null a prázdné argumenty, abychom se ujistili, že v případě potřeby můžeme odstranit uživatele, a přizpůsobit nedostatek uživatele na příspěvcích, které jsme již vytvořili, a související jméno, které můžeme použít k odkazování na objekty Post, které uživatel vytvoří. Toto související jméno, na rozdíl od Post.Author, autor příspěvku, nám dává uživateli, který zveřejnil příspěvek samotný. Nyní můžeme získat příspěvky uživatele vytvořeného pomocí spuštění user.Posts.all () nebo autor.posts.all ().

Nyní udělejme naše přihlášení odolnější. Naše stránky již můžeme učinit mnohem méně zranitelnými vůči phishingu jednoduše omezením sazby, kolikrát umožníme přihlášení na web, je to docela snadné. Začněme také ukládat některé informace o každém uživateli dříve, když budeme pokračovat ve vývoji naší aplikace. Úpravy uživatelů/models.py, přidejte následující kód.

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

Všimněte si, že tento model je poměrně podobný modelu Post. Máme další import, TimeZone, který nám umožní nastavit výchozí hodnoty na polích DateTime, a máme také znak a textfield jako příspěvek. Použití všech těchto časových razítka nám pomáhá zabezpečit web a porozumět jeho použití a textová pole nám umožňuje vykreslit informace o každém uživateli nebo autorovi na webu. OneToOnefield by měl být jediným drobným zvážením, chová se přesně stejně jako předem, ale pouze s jedním na následující model. Tímto způsobem má uživatel pouze jeden profil, zatímco může mít mnoho příspěvků.

Nyní vylepšeme naše přihlášení a zaregistrujeme zobrazení pro profil. Nejprve upravte uživatele/views.py a zaměřte se na zobrazení registru:

# … Dovoz
            Profile.objects.create(user=user) # Nezapomeňte přidat tento řádek a vytvořit profil pro uživatele

To jednoduše vytvoří profil pro uživatele, aniž by vyplnilo některou z informací. Nyní se chceme ujistit, že uživatelský účet nelze přihlásit příliš často, nebo alespoň hesla nelze vyzkoušet příliš často, takže pojďme aktualizovat přihlašovací zobrazení.

# … Dovoz
        if user and user.profile.can_login < timezone.now(): # Všimněte si, že nyní zkontrolujeme, zda se uživatel může přihlásit
        else: # Pokud nebylo přihlášení úspěšné,
            user = User.objects.filter(username=username).first() # To je část, kde aktualizujeme profil uživatelů
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Takže se nemohou znovu přihlásit na několik sekund

To je základní základní bezpečnost. Ujistěte se, že web není zranitelný pro někoho, kdo jednoduše zkouší každou možnou kombinaci hesel, nebo dokonce několik z nich současně. To nebude frustrující pro obyčejného uživatele, který zná jejich přístupový kód a jen se přihlásí na několik zařízení, ale z aplikace bude udržovat řadu phishingových robotů. Všimněte si, že jsme přidali příkaz IF s proměnnou CAN_LOGIN, který by měl být v minulosti čas, a aktualizovat jej s každým neúspěšným přihlášením pomocí stejného uživatelského jména. Tímto způsobem škodlivý uživatel nebude schopen uhodnout heslo kdekoli poblíž. Počet sekund v datetime.timedelta () lze také aktualizovat a web bude odolnější, ale o něco méně použitelný s více sekundy. Doporučuji začít 15.

Pamatujte, že jsme vytvořili záložní skript, abychom zachránili naši práci, takže pokračujme a záložníme, co máme, abychom se ujistili, že máme vše uloženo. Spusťte příkaz:

sudo backup

Opět to zachrání vaši práci. Doporučuji spustit časté zálohy, abyste ušetřili práci, a možná budete chtít automaticky spustit záložní úlohu. Můžete to udělat pomocí nástroje UNIX s názvem Cron. Chcete -li aktivovat tento nástroj, spusťte následující příkaz a zadejte heslo:

sudo crontab -e

Pokud ještě nevyberete možnost 1 pro NaNo, textový editor, který byste již měli být obeznámeni, a přejděte na spodní část souboru pomocí kláves se šipkami. Přidejte následující řádek:

0 * * * * sudo backup

Cron používá formát minutu, hodinu, den v měsíci, měsíc, den v týdnu, kde * nebo číslo představuje, kdy spustit příkaz. Použitím 0 na minutu a * pro zbytek možností můžeme spustit příkaz v první minutě každé hodiny na začátku minuty. To nám umožňuje zálohovat kód automaticky. Všechna Cronova práce, když se provádí s sudo spuštěním jako root, takže nebudeme muset každou hodinu psát heslo.

Chcete -li usnadnit zálohování našeho kódu bez použití hesla, deaktirujme heslo pro náš příkaz zálohování. Uděláme to provedením následujícího příkazu a zadáním hesla:

sudo visudo

Nyní pojďme přejděte na spodní část souboru a přidejte další řádek:

ALL ALL=NOPASSWD: /bin/backup

To nám umožňuje spustit příkaz „Zálohování" jako kterýkoli uživatel, bez hesla. Formát pro toto je snadný, stačí předponu řádek s "All = nopasswd:/bin/" a končí příkazem, například/bin/zálohování, která existuje v/usr/bin/.

Nyní začněme pracovat s e -mailem. E -mail je opravdu důležitý pro webové stránky, protože je to způsob, jak udržet web bezpečnější, ověřte, že uživatelé jsou skuteční lidé a dokonce i tržní produkty nebo služby pro zákazníky. Mnoho lidí, kteří často navštěvují internet, kontrolují svůj e -mail denně a obdrží nejrůznější marketingové e -mail o produktech a službách, o které se zajímají. Existuje několik možností, pokud jde o povolení e -mailu na webových stránkách Django a jste vítáni vybrat si, co pro vás nejlépe funguje.

Nejprve můžete zaplatit za e -mailovou službu, která vám umožní odesílat e -mail z vaší domény a vyžaduje minimální kód. Existuje mnoho služeb, které to nabízejí, například Google Workspace, SendinBlue, Mailgun a další.

V opačném případě jste na svém serveru od nuly dobře vytvářet vlastní e -mailovou službu. Tuto možnost doporučuji, i když je to více kódu a může vyžadovat speciální hosting. Nebudete moci spustit poštovní server z vašeho domácího počítače s největší pravděpodobností, takže pokračujme a prozkoumejte konfiguraci a kód, který odešlete e -mail, než spustíme server v cloudu a vytvoříme vlastní poštovní server uvnitř.

Nejprve upravte nastavení.py s následujícím příkazem:

nano app/settings.py

Kde je aplikace název aplikace, kterou jste vytvořili s StartApp.

Přidejte následující řádky:

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)

Nezapomeňte je změnit, až budete připraveni nasadit aplikaci, to později znovu prohlédneme. Nastavení e -mailu_address by mělo být e -mailem, ze kterého byste chtěli odeslat, a heslo (email_host_password) by mělo být nastaveno na heslo, které pro server vygenerujete. Načíst heslo z konfiguračního souboru, abych jej zabránil mimo kód pomocí následující logiky, nad těmito řádky v nastavení.py:

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

Poté jsem nastavil soubor JSON s konfigurací v /etc/config.json pomocí nano následujícím způsobem.

K úpravě souboru:

sudo nano /etc/config.json

Přidejte následující řádky:

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

Budeme i nadále upravovat konfigurační soubor a přidat všechna hesla a klíče, které v aplikaci použijeme. Prozatím pojďme rychle prozkoumat, jak poslat e -mail pomocí Pythonu. Nejprve vytvoříme šablonu pro ověřovací e -mail, který můžeme poslat našim uživatelům, a vložit jej do adresáře šablon uživatelů. Tato šablona bude zapsána v HTML.

nano users/templates/users/verification_email.html

Tento e -mail je poměrně jednoduchý. Má kontext uživatele, základní adresy URL pro web a ID uživatele a token, které se používají k ověření e -mailu uživatele. Než zapíšeme nějaký kód Pythonu, aby se šablona vyvinula, definujte základní adresu URL v Settings.py. Pokračujte a přidejte následující řádky do App/Settings.py, na začátku.

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

BASE_URL = PROTOCOL + '://' + DOMAIN

Nakonec, když je váš web připraven na internet a nasadíte jej, budete chtít definovat svou doménu jako název domény, který si zakoupíte, pro reprezentaci webu. Toto je název, který zadáte do NavBar, abyste získali přístup k vašemu webu. Prozatím můžete nechat doménu prázdnou nebo použít zástupný symbol. Budete také chtít změnit název Site_name na jméno, které chcete poskytnout svůj web, podle vašeho výběru.

Než pošleme e -mail, vytvořme generátor tokenů, abychom mohli mít token aktivace účtu, který nikdy vyprší. Můžeme to udělat vytvořením a importem tokenu aktivace účtu, který vypadá jako následující. Upravit soubor:

nano users/tokens.py

Přidejte následující kód:

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

Tento generátor základního tokenu generuje token, kterou můžeme uživateli poslat do adresy URL a uživatel může použít k ověření jejich e -mailu a aktivaci jejich účtu.

Dále se podívejme, jak poslat e -mail. Pomocí nano, upravte uživatele/email.py.

nano users/email.py

Odeslání ověřovacího e -mailu HTML bude vypadat takto:

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)

To je poměrně jednoduché. Importujeme funkce, které musíme poslat e -mail, vykreslit e -mail pomocí šablon a naše nastavení a poté e -mail definujeme názvem šablony a pošleme jej uživateli pomocí funkce. Všimnete si, že jsme tuto funkci nedefinovali pro odeslání pošty, send_html_email, takže to napište pod kódem, který jsme již přidali uživatelům/email.py

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

To je o něco složitější a zatím nejsme připraveni spustit celý tento kód. Všimněte si, že definujeme unsub_link, odkaz, který může uživatel použít k odhlášení z našich e -mailů. To je důležité, protože uživatelé budou muset být schopni odhlásit se z našich e -mailů, pokud je nechtějí vidět, kdykoli. Přidáme také textovou alternativu k naší zprávě, která je zpráva HTML spuštěná značkami HTML. Nakonec zkontrolujeme, zda e -mail byl odeslán, a zda ne, označujeme profil uživatele, že jejich e -mail není platný.

Pojďme se vrátit zpět k uživatelským modelům, abychom to mohli udělat vše. Musíme definovat funkci pro vygenerování odkazu na odhlášení a definovat booleovské pole označit, že e -mail uživatele není platný.

Nejprve přidejte následující import do horní části uživatelů/modelů.py

nano users/models.py
# …

Dále pojďme přidat funkce do modelu uživatele, abychom vytvořili token a zkontrolovali token použitý k aktivaci e -mailu, jakož i pole, abychom uložili, zda uživatel úspěšně obdrží svou poštu. V uživatelích/models.py opět přidejte následující kód na konec modelu (odsazený kód)

# …
            TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Platí po dobu 30 dnů

To je poměrně jednoduché, používáme časový list, který je základní kryptografický nástroj, k vytvoření tokenu, který vyprší po určitém čase, a také pomocí jiné funkce zkontrolujeme, zda je platný. Tyto tokeny používáme dvakrát, jednou k ověření e -mailu a jednou pro odkaz odhlášení.

Nyní, když je máme, poslední z práce, kterou budeme muset udělat, je v názorech. V rámci uživatelů/views.py pojďme přidat zhlédnutí k ověření e -mailové adresy a odhlášení.

nano users/views.py

Nejprve přidejte následující import. Hodil jsem několik navíc, takže nebudeme muset později importovat více položek.

from .email import send_verification_email # Nezapomeňte importovat funkci odesílání e -mailu

Možná již máte některé z těchto dovozů, ale nesiluje je opakovat. Budete muset importovat funkci odesílání e -mailů ověřování e -mailů a také account_activation_token from Users.Tokens, mimo jiné import.

Nyní ve spodní části souboru přidejte následující kód:

        # odhlásit je
    # Jinak přesměrujte na přihlašovací stránku
# SendWelcomeEmail (požadavek, uživatel)

Toto je hodně kódu. Pojďme to rozebrat. První funkce, čistá a jednoduchá, odhlásí uživatele ze seznamu adresátů. Druhá funkce aktivuje jejich e -mail a všimnete si, že jsem přidal komentovanou funkci, sendWelcomeEmail. Můžete použít e -mailovou šablonu a definici funkce k odeslání uvítacího e -mailu, prostě jsem ještě ne. Poslední funkce, kterou jsem hodil, je důležitá, protože vyprší aktivační e -maily. Proto budeme muset znovu předat aktivační e -mail. K tomu můžeme použít základní formulář a zavolat funkci k odeslání ověřovacího e -mailu. Než to uděláme, ujistěte se, že je odeslán na prvním místě, přidáním funkčního volání do zobrazení registru. Přidejte tento řádek těsně před přesměrováním v zobrazení registru, def registr, do uživatelů/views.py.

nano users/views.py
# … (Po) Def Register (žádost):
# … (Před) přesměrováním (

Nemusíte přidávat první a poslední řádky v tomto úryvku kódu, jen se ujistěte, že zobrazení registru odešle e -mail ověření uživateli. Mělo by to vypadat takto:

# … Dovoz
            send_verification_email(user) # Nezapomeňte přidat tento řádek!

Nyní budeme muset přidat formulář k odeslání aktivačního e -mailu. V uživatelích/forms.py přidejte následující formulář:

# … (Import)

Budeme také potřebovat šablonu odpovídající tomuto formuláři E -mailu Resendu. Přidejte tuto šablonu do. Upravte soubor:

nano users/templates/users/resend_activation.html

Dále přidejte do souboru následující kód.

Whew, to je hodně! Nyní, když nasadíme kód na náš server, budeme moci odeslat e -mail HTML a aktivovat uživatelské účty kliknutím na e -mail. Možná bychom také chtěli poslat jednoduchý uvítací e -mail, takže se podívejme, jak to udělat. Zpět v uživatelích/email.py, přidejte následující kód:

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)

Budeme také potřebovat šablonu k vykreslení všech těchto informací. Na mém webu vypadá šablona jako níže, ale jste vítáni k naformátování, jak se vám líbí.

Všimněte si, že nemáme závěrečné nebo HTML značky, protože je přidáme, když přidáme odkaz HTML odhlášení. To jsou důležité, ale nechceme je definovat dvakrát.

Co bude dál? Prošli jsme dlouhou cestu. Opravdu bychom měli být připraveni nasadit web na server. Můžeme přidat dekoratér @Login_Required a zajistit naše názory, přijímat uživatelské registrace, odesílat e -maily a informace o mezipaměti, což je základ toho, co web musí udělat, aby zůstal relevantní. Přidáme několik více užitečných funkcí a poté vytvoříme základ pro nasazení našeho kódu na vzdálený server, nastavení poštovního serveru, konfigurace domény a filtry, aby byl náš web bezpečný a vhodný.

Budeme také potřebovat zobrazení resetování hesla, takže to přidejte opravdu rychle. V některých funkcích je narušeno zabudované zobrazení Django vestavěné resetování hesla, ale podíváme se na to, jak napsat vlastní zobrazení, e -mailovou šablonu, formuláře a vzory URL. Zde je to, jak vypadá pohled, v uživatelích/views.py

# ... import

Tento formulář je zabudován do Djanga, ale budeme potřebovat šablonu k potvrzení resetu hesla, uživatelů/šablon/uživatelů/hesla_reset_confirm.html

Máme také šablonu pro odeslání e -mailu pro resetování hesla s jednoduchým formou v uživatelích/šablonách/uživatelů/heslem_reset.html

Šablona samotného e -mailu je jednoduchá, jedná se o základní soubor HTML, který vykreslí odkaz pro resetování hesla, v uživatelích/šablonách/uživatelů/heslem_reset_email.html. Django tento soubor automaticky interpretuje.

Budeme také potřebovat další dvě šablony. Prvním je potvrzení, že e -mail byl odeslán. Názory na tyto jsou již v Djangu, takže je musíme pouze oslovit v URLS.PY. Tato šablona se nachází u uživatelů/šablon/uživatelů/hesla_reset_done.html

A konečně, pro potvrzení, že reset hesla je dokončen, uživatelé/šablony/uživatelé/heslo_reset_complete.html

Nyní potřebujeme vzory URL pro tyto názory. U uživatelů/urls.py přidejte následující vzory URL:

    # ... Předchozí adresy URL zde

Čtyři šablony, to je hodně! Nyní však můžeme být jisti, že budeme moci resetovat heslo uživatele, kdykoli potřebujeme, vše z webového prohlížeče.

Chápu, že se jedná o hodně kódu. Pokud se to zdá trochu nad hlavou, je to v pořádku. Zlepšíte se, vaše porozumění se zlepší a velmi brzy se stanete mnohem kompetentnějším s kódem. Pokud jste úplně ztraceni, doporučuji vrátit se k tomuto softwaru později po práci na samostatném kurzu naučit se kódovat online. Ty jsou obvykle zdarma pro začátek a provedou vás vše, co musíte být úspěšní, když se vrátíte k tomuto projektu. Pokud máte pocit, že jste připraveni pokračovat, přečtěte si dále, budeme zakrýt váš kód na vzdálený server a nastavit poštovní server a také automatizovat vaše nasazení pomocí bash, takže můžete vždy nastavit nový projekt několika jednoduchými příkazy.

Poslední věcí, kterou musíme udělat před nasazením na vzdálený server, je učinit náš web o něco bezpečnější. Všimnete si, že přihlašovací zobrazení bere pouze uživatelské jméno a heslo, a neexistuje ověřování multi faktorů nebo jednorázový kód. Toto je snadná oprava a se stejným kódem můžeme vytvořit textové zprávy o odesílání našich stránek a dokonce reagovat na textové zprávy odeslané na server. Nejprve se vrátíme do uživatelských modelů a přidáme signatář časového razítka, který bude představovat každé přihlášení. K modelu uživatele také přidáme jedinečný, rotující identifikátor, který bude použit k přidání dalšího zabezpečení k našemu přihlášení. Úpravy uživatelských modelů, uživatelů/model.py, přidejte následující kód:

# Nezapomeňte importovat signatář UUID, Timestamp a generátor URL (reverzní)
    # Přidejte tento kód sem
    # A přidejte tuto funkci
            TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Platí po dobu 3 minut

Ujistěte se, že vaši uživatelé/models.py vypadá takto, kromě komentářů (kód na řádcích s #). Rozbijte to, je to jednoduché. Máme několik importů, časový razítko, což je kryptografický nástroj, který může vygenerovat zabezpečený kód a ověřit jej, aby se zajistilo, že je platný, byl použit pouze jednou a ne starší než určitý počet sekund. Používáme také UUID, což je jedinečný identifikátor, který identifikuje našeho uživatele při podpisu tokenu, a v adrese URL, kde je token odeslán uživateli. Tuto základní kryptografii použijeme k vytvoření dvou faktorových ověřovacích pohledu. Než uděláme cokoli jiného, spustíme migraci, aby byly naše uživatelské modely aktualizovány. V adresáři s manage.py spusťte následující příkazy a proveďte migraci.

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

To je důležité, protože pokaždé, když provádíme změny v modelech, budeme muset vytvořit tabulky a aktualizovat databázi pomocí výchozí hodnoty, než můžeme modely skutečně použít.

Dále improvizujeme náš přihlašovací pohled na přesměrování na zobrazení sekundární autentizace. U uživatelů/views.py odstraňte funkci přihlášení a přesměrujte na adresu URL, kterou jsme právě vygenerovali v uživatelských modelech.

# … Dovoz
        if user and user.profile.can_login < timezone.now(): # Všimněte si, že nyní zkontrolujeme, zda se uživatel může přihlásit
            # Odstraňte funkci Auth_Login, která byla zde
                return redirect(user.profile.create_auth_url()) # Všimněte si, že zde přesměrujeme novou adresu URL
            else: # Pokud uživatel nepoužívá vícefaktorovou ověřování, stačí je přihlaste.
        else: # Pokud nebylo přihlášení úspěšné,
            user = User.objects.filter(username=username).first() # To je část, kde aktualizujeme profil uživatelů
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Takže se nemohou znovu přihlásit na několik sekund

To je tedy docela jednoduché, nyní máme způsob, jak přesměrovat na dva faktorové autentizační pohled, když jej vytvoříme. Máme také zálohu pro případ, že uživatel nepřidal telefonní číslo. Brzy přidáme základní pohled, abychom přidali telefonní číslo a brzy se přihlásí s textovou zprávou.

Nejprve potřebujeme snadný způsob odeslání textové zprávy z našeho kódu. Za tímto účelem si můžeme vybrat z řady API, ale podle mého názoru je nejjednodušší Twilio. Nabízejí také dobré ceny pro menší projekty a také objemné slevy. Vytvořte si účet na Twilio.com, vyplňte některé podrobnosti o vašem projektu, zakupte telefonní číslo a zkopírujte klíče API do nastavení.py. Poté přidejte tento kód do nového souboru, uživatele/SMS.Py.

nano users/sms.py
# Importujte všechny potřebné balíčky
# Tento kód odešle text s Twilio
# Funkce pomocníka pro získání čísla s tolika číslicemi
# Pošlete text a ověřte uživatele
# Pošlete uživateli jakýkoli text s touto funkcí
# Ověřte kód s touto funkcí
# Ověřit čas

Nezapomeňte náležitě změnit nastavení a přidat tyto řádky pomocí klíčů:

# Ujistěte se, že je zkopírujte z palubní desky Twilio
AUTH_VALID_MINUTES = 3 # Počet minut, kdy je stránka TFA aktivní po instanci

Nejprve budeme potřebovat formuláře pro naše dva faktorové pohledy. Úpravy uživatelů/formulářů, přidejte následující kód.

# … Dovoz
# Formulář pro vstup do našeho telefonního čísla
# Formulář pro ověření

Dále vytvoříme pohledy na uživatele/views.py

# … Dovoz

Pro oba tyto názory budeme také potřebovat šablony. Pojďme nejprve přidat šablonu MFA.

nano users/templates/users/mfa.html

Přidejte tento kód HTML do šablony

To je docela samostatné vysvětlující. Formulář odešle buď kód nebo prázdný kód a v pohledu si všimnete kódu, pokud obdržíme prázdný kód. Pak máme pouze dvě tlačítka odeslání, a tak můžeme odeslat kód jedním tlačítkem. Dále přidáme jednoduchý formulář pro přidání telefonního čísla.

nano users/templates/users/mfa_onboarding.html

Přidejte následující HTML:

Tento formulář je mnohem jednodušší, pouze vykresluje formulář telefonního čísla, který jsme vytvořili, a umožňuje uživateli přidat telefonní číslo.

Vypadá to opravdu dobře! Dokud je vše správně nastaveno, měli bychom být schopni odesílat zprávy a přihlásit uživatele s jejich telefonním číslem, jakmile přidáme vzory URL. Poslední věcí, kterou musíme nastavit, je pohled profilu, abychom se ujistili, že uživatel může změnit své telefonní číslo, aniž by byl přihlášen. Nakonec budeme chtít přidat možnost „Stop to přestat", takže uživatel může text „zastavit" a odhlásit se z budoucích textových zpráv.

Přidáme zobrazení profilu uživatelům/views.py. Tento pohled bude aktualizovat bio, e -mail, uživatelské jméno a telefonní číslo uživatele a také nám umožní povolit ověřování více faktorů. Nejprve budeme potřebovat další dva formuláře v uživatelích/formách.

# ... import

Dále můžeme vytvořit pohled na použití obou těchto formulářů. Upravte uživatele/views.py a přidejte do pohledu.

# Přidejte tyto dovozy

Pro tento pohled budeme také potřebovat šablonu.

nano users/templates/users/profile.html

Všimnete si, že se jedná o poměrně jednoduchý formulář, ale má v něm nějaký javascript, který automaticky zveřejňuje obsah formuláře při aktualizaci. To je užitečné, takže jste schopni provádět úpravy, aniž byste museli pokaždé stisknout odeslání.

Dále potřebujeme adresy URL představujících všechny tyto názory v Userl Patters. Upravte uživatele/urls.py a přidejte tento kód:

# … Předchozí kód, import
# … Vzory URL, které jsme dříve zadali, přidejte další tři řádky

Nyní je vhodný čas na vyzkoušení našeho projektu. Nejprve však spustíme další zálohu.

backup

A spusťte server. Než nasadíme na server Linux, je dobré povolit ověřování dvou faktorů na účtu. Uděláme to do našeho profilu URL,/uživatele/profil/, a zaškrtnutí políčka povolíte ověřování po zadání našeho telefonního čísla a poté odeslání formuláře.

python manage.py runserver localhost:8000

Navštivte webovou stránku tím, že půjdu do webového prohlížeče, v tomto příkladu používám Google Chrome a zadávám URL https: // localhost: 8000/účty/profil/

V případě potřeby se budete moci přihlásit a povolit ověřování dvou faktorů.

Tento projekt potřebuje server, aby mohl spustit, aby mohl opravdu poslat poštu. Nejprve však potřebujeme způsob, jak vidět chyby. Všimnete si, že pokud spustíte server v režimu Debug, s nastavením.Debug rovný true, server automaticky zobrazuje chyby. Abychom ukázali chyby bez použití režimu debug, který je nebezpečný na produkčním serveru, měli bychom přidat pohled na něj. Nejdůležitější chyby, které musíme být schopni zvládnout, jsou:

Chyba 500 - Problém s naším kódem Chyba 404 - Stránka, která nebyla nalezena (Broken URL) Chyba 403 - Oprávnění zamítnuto chyby

Pojďme přidat novou aplikaci pro zpracování těchto chyb, nazývaných chyby.

python manage.py startapp errors

Přidejte toto do nastavení.py, jak jsme to udělali dříve, v nastavení instalovaných_apps a začněte přidáním odkazů na některé zhlédnutí v aplikaci/urls.py, kde je aplikace název vašeho projektu Django.

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

To je vše, co potřebujeme kromě chyb, šablon a trochu middlewaru. Definujme ty tak:

# Vytvořte své názory zde.

Dále definujeme middleware tak, aby tyto chyby zvládl. Uděláme to nejprve přidáním do middleware_classes v nastavení.py, s názvem našeho middlewaru.

    # ... Předchozí middleware

Dále přidejte middleware.

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

_error = local()

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

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

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

Přidáme funkci, která získá aktuální výjimka pomocí lokálního závitu, což nám pomáhá sledovat jakékoli chyby v našem kódu. Pokud jde o šablony, potřebujeme pouze jeden, protože dynamicky definujeme název v pohledu. Šablona musí pouze vykreslit název a „Trace", naše chyby Traceback z kontextu.

nano errors/templates/errors/error.html

Toto je zatím naše nejjednodušší šablona, ale tak je snadné vidět chyby v našem projektu. Dále deaktirujme ladění v nastavení.

nano app/settings.py

Najděte tuto řádek, kde je nastavena na pravdu, a změňte ji na false

DEBUG = False

Pokračujte a zálohujte aplikaci hned. Jsme připraveni nasadit na vzdálený server Linux a odtud pokračovat v přidávání funkcí.

sudo backup

Než zveřejníme tento kód na server, měli bychom se domnívat, že s kódem mohou existovat nějaké problémy. V závislosti na případu budou mít weby, které přijímají informace, které jim byly zveřejněny, problémy s zveřejněním spamu a potížemi s odstraněním spamu. To by se nemělo stát okamžitě, ale pokud k tomu dojde, později prozkoumáme, jak automaticky zmírnit spam na webu a ztěžovat pro roboty přístup k webu, spolu s tím, jak deaktivovat uživatelské účty, a ověřit identitu uživatele skenováním jejich ID nebo biometrickým skenováním, jako je rozpoznávání obličeje nebo obličeje.

Při pohledu na příklad autentizace s více faktory jsme zkoumali, ve výrobě se věci mohou lišit. Všimněte si, jak omezujeme přihlášení sazby a vypršíme tokeny. Pokud roboti přistupují k webu, může být ověřování dvou faktorů obtížnější, protože mohou zadat kódy současně, kdy je uživatel. Chcete -li s tím bojovat, použijeme model v uživatelských modelech a prohlašujeme, jak s webem interagujeme, když autentizujeme pomocí ověřování multi faktorů s telefonním číslem. Přidáme také možnost ověřit pomocí e -mailu. Začněte úpravou uživatelských modelů pomocí Nano.

nano users/models.py

Tak by měl vypadat model, který přidáváme. Nepotřebujeme žádné metody, pouze proměnné pro uložení ID, uživatele, časové razítko, vypršení, délka a pokusy proti jakémukoli ověření více faktorů (kód jako 123456 odeslán do telefonu nebo e -mailu).

# Základní token používaný k přihlášení na web

Pojďme také přidat privilegium našemu uživateli a my jsme jej prozatím nastavili ručně, než nakonec automaticky migrujeme na zařazení privilegovaných uživatelů. V uživatelských modelech přidejte tento řádek do profilu:

    vendor = models.BooleanField(default=False)

Stejně jako u jakýchkoli změn v databázi musíme provést migraci a migrovat databázi kdykoli upravíme soubor model.py v Django. Nezapomeňte, že k tomu použijeme zdroj jako první (pokud již nebyl použit od otevření terminálu) a poté Python Manage.py pro provedení migrace a migrace.

cd project-directory-you-named # (v případě potřeby)

Prozatím můžete získat jakékoli účty, které jste vytvořili jako prodejci, pomocí shell.

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

Nyní si vyvineme náš více faktorový autentizační pohled na tento token. Nejprve musíme upravit naše pomocné nástroje MFA. Používání nano,

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

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

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

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

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

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

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

def check_verification_code(user, token, code):
    token.attempts = token.attempts + 1
    profile = user.profile
    result = (token != None and code != '' and token.token == code and (token.expires > timezone.now()) and token.attempts <= settings.MFA_TOKEN_ATTEMPTS)
    if token.attempts < 3 and result:
        profile.verification_code_length = 6
    elif token.attempts > 1 and not result:
        profile.verification_code_length = profile.verification_code_length + 2
        if profile.verification_code_length > settings.MFA_TOKEN_LENGTH: profile.verification_code_length = settings.MFA_TOKEN_LENGTH
    token.save()
    profile.save()
    return result
# Ověřte uživatele pomocí svého e -mailu nebo telefonního čísla
    token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Filtrujte token o hodnotu předanou v adrese URL (UUID)
    if not token: token = MFAToken.objects.create(user=User.objects.filter(profile__uuid=username).first(), uid=username, expires=timezone.now() + datetime.timedelta(seconds=115)) # Pokud tato relace nebyla vytvořena, vytvořte ji
    user = User.objects.filter(id=token.user.id).first() # Získejte uživatele z tokenu
    if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # Pokud jsou již ověřeny, přihlaste se
    if not user: raise PermissionDenied() # Popírejte, zda nebyl nalezen žádný uživatel
    if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Zkontrolujte autorský žeton
        auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Přihlaste se uživatele, pokud již nejsou přihlášeni
        user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Nastavte vypršení ověřování jejich více faktorů
        return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Přesměrovat uživatele na další stránku
    if not user.profile.mfa_enabled: # Zkontrolujte, zda je MFA povoleno
        if not check_verification_time(user, token): # Zkontrolujte čas
            user.profile.mfa_enabled = False # Vymažte telefonní číslo
            user.profile.enable_two_factor_authentication = True # Povolit MFA
            user.profile.phone_number = '+1' # Zakázat telefonní číslo
            user.profile.save() # Uložit profil
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Přihlaste se uživatele, pokud jejich MFA není povoleno
    if request.method == 'POST' and not fraud_detect(request, True): # Pokud je požadavek žádost o příspěvek
        form = TfaForm(request.POST) # Nastavit formulář
        code = str(form.data.get('code', None)) # Získejte kód
        if code and code != '' and code != None: # Ujistěte se, že to není prázdné
            token_validated = user.profile.check_auth_token(usertoken) # Zkontrolujte autorský žeton
            is_verified = check_verification_code(user, token, code) # Zkontrolujte kód
            if token_validated: # Pokud všechno
                if is_verified: # Je v pořádku
                    user.profile.mfa_enabled = True # Povolit MFA (pokud již není povoleno)
                    auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Přihlaste se uživatele
                    for key, value in request.GET.items(): # Vytvořte querystring pro další parametr (pokud existuje)
                        return HttpResponseRedirect(next) # Přesměrovat
            elif not token_validated: # Pokud byl token neplatný
            if p.mfa_attempts > 3: # Pokud došlo k příliš mnoho pokusů
            if form.data.get('send_email', False): # Pošlete e -mail (nebo text)
    # Vykreslete formulář (pro získání požadavků)

Když přidáme tento kód, nezapomeňte importovat funkci a odeslat e -mail. V horní části souboru, zobrazení uživatele (s jinými importy), přidejte

from .mfa import send_verification_email as send_mfa_verification_email

Nyní musíme tuto funkci napsat, než bude něco z toho fungovat. Měl by rozšířit naši e -mailovou funkci Odeslat a jednoduše odeslat e -mailem uživateli pomocí ověřovacího kódu.

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

Takže to vše funguje skvěle, nyní máme systém ověřování více faktorů, který záleží na telefonním čísle nebo e -mailu. Mohly by to být spammery, roboti nebo kdokoli, kdo neznamená dobře pro naši práci. Podívejte se na názor, který mám pro monitorování uživatelů na svém webu:

# import
from .tests import is_superuser_or_vendor # Tento test budeme muset vytvořit
    # Získejte seznam uživatelů
    return render(request, 'users/users.html', { # Vráť uživatele v šabloně

Všimněte si, že tento kód používá test, budeme muset tento test vyhlásit v souboru tests.py a importovat jej. Úpravy uživatelů/tests.py, vytvoříme test.

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

To je ve spojení se šablonou uživatelů/uživatelů.html, která vypadá něco takového:

Všimněte si, že šablona obsahuje další šablonu, uživatele/user.html. Při použití šablony, která má subtemplate a nepoužívá se rozšiřující, je to dobrý nápad přidat podtržení () před názvem souboru, který má být rozšířen, za účelem rozlišení šablon.

Všimněte si, že se jedná o hodně Jinja, nemusíte mít všechny tyto proměnné definovány. Ale tak vypadá můj kód.

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

Potřebujeme také další subtetemplate, Toggle_Active.html. Tato šablona by měla být forma, která nám umožňuje přepínat, zda je uživatel aktivní.

Budeme také muset přidat pohled na přepínání aktivity uživatele a vhodné vzory URL. Když jsme u toho, přidejte pohled na odstranění uživatele pro případ, že to potřebujeme.

# Import
    success_url = '/' # Přesměrování na URL úspěchu
    def test_func(self): # Vyzkoušejte, zda je uživatel Superuživatel a má povolení k odstranění

I když je to praktické v případě potřeby, mazání uživatele by nemělo být nutné po většinu času, můžeme jen přepínat viditelnost uživatelů, kteří navštíví web, pokud je potřebujeme zamítnout.

Vzory URL, které jsme přidali, vypadají takto. S Nano, upravte uživatele/urls.py a přidejte tyto řádky:

nano users/urls.py

Řádky by měly jít do seznamu cest v uživatelských zobrazeních, před koncem "]", ale po začátku "[".

# …
# …

Nyní se ujistěte, že web zálohuje, abyste si jej mohli stáhnout na webovém serveru, na kterém budeme pokračovat v práci. Z příkazového řádku,

sudo backup

Nyní je náš web zálohován.

Takže nyní máme několik užitečných funkcí. Ale co tu velký obrázek? Tento kód stále není přístupný z internetu, ještě nemáme žádný poštovní server a musíme rozšířit naši aplikaci tak, aby zahrnovala komplexní proces ověření a hladká rozvržení, které nám pomohou prozkoumat web, spolu s zabezpečenými protokoly pro ověření privilegovaných uživatelů.

Dostaneme se k tomu všemu. Nejdůležitější věcí prozatím bude jen získání tohoto kódu online, což můžeme udělat s několika řádky bash na serveru Ubuntu. Budete si však muset pronajmout server, pokud nemáte doma server a obchodní internetové předplatné, které vám umožní otevírat porty. Osobně spustím svůj web na HP Z440, který je nainstalován v mém bytě, ale obvykle je to mnohem levnější pro základní potřeby pronajmout si virtuální soukromý server (VPS).

Mějte na paměti, že kód, který nyní běžíme, je relativně tenký, bude třeba jej udržovat a vylepšit, než budeme připraveni použít to, co musíme postavit produkt. Ujistěte se, že buďte opatrní, co děláte s internetem, ujistěte se, že pokud tento web nasadíte na web na serveru Linux, máte plán blokovat nežádoucí interakce s vaším webem. Pravděpodobně to nebude problém zpočátku, ale podíváme se na řadu řešení, která bude bojovat proti tomu, včetně strojového učení, umělé inteligence a počítačového vidění. Když se stane problémem, podívejte se dále v tomto textu pro řešení.

Pokud jde o pronájem VPS, existuje mnoho míst, kam můžete jít. Google Cloud má servery VPS, IONOS, Kamatera, Amazon AWS a další poskytovatelé nabízejí řešení cloudových serverů, která budou vyhovovat našim potřebám.

Budete muset kliknout na jejich formuláře a vybrat plán, jak začít. S jakýmkoli poskytovatelem můžete jít se základním plánem, ale ujistěte se, že poskytovatel umožňuje otevřít porty serveru Port Mail Server k odeslání e -mailu (to by měl být port 587 a port 25), někteří poskytovatelé tyto porty blokují. Doposud jsem měl nejlepší zkušenosti s Ionos a Kamaterou, oba mi umožní poslat neomezený e -mail a jejich ceny jsou docela levné.

Připojíte se k novému serveru přes protokol s názvem SSH nebo Secure Shell, který vám umožní vzdáleně propojit se serverem přesně jako váš osobní počítač, z osobního počítače. Když nastavíte server, poskytovatel hostingu vás pravděpodobně požádá o přidání klíče SSH, nebo vám poskytne uživatelské jméno a heslo. Klíč SSH je, jak se přihlásíte k serveru z příkazového řádku k úpravě kódu. Pomocí níže uvedených možností SSH-Keygen vygenerujte klíč SSH.

ssh-keygen

Uložte soubor a přepsáte jej, pokud potřebujete, je dobré otočit klíče SSH, pokud jste to tak ještě neučinili. Nyní můžete použít následující příkaz k zobrazení klíče SSH. Budete chtít zkopírovat na svůj vzdálený server, abyste jej mohli použít k ověření.

cat ~/.ssh/id_rsa.pub

Pokud jste nebyli schopni vidět klíč SSH při psaní tohoto příkazu (dlouhý řetězec číslic a písmen začínajících „SSH-RSA AAA"), zkuste vygenerovat klíč RSA (jsou bezpečnější, takže doporučuji je používat.) Následující kód vygeneruje klíč 4096 bitu RSA SSH.

ssh-keygen -t rsa -b 4096

Vytvořte VPS spuštěnou Ubuntu, ale plánujete to. Jakmile vytvoříte VPS kliknutím na formuláře na webových stránkách poskytovatelů (kamatera.com, ionos.com nebo podobně), budete se chtít přihlásit. Chcete -li to provést, použijte příkaz SSH s vaší IP adresou (adresa, která vypadá jako xx.xx.xx.xx). Musíte být také citliví na výchozí uživatelské jméno na serveru, který jsme vytvořili, například Ubuntu.

ssh ubuntu@XX.XX.XX.XX

Můžete být požádáni o heslo, pokud budete požádáni o heslo, zadejte jej. Nebudeme používat výchozí uživatelské jméno, takže začněme vytvořením nového uživatele a přidáme k jejich účtu klíč SSH.

Začněme přidáním nového souboru SSHD_Config, který řekne serveru, jak používat SSH.

nano sshd_config
# Toto je konfigurační soubor SSSHD serveru na celém serveru.  Vidět
# SSHD_CONFIG (5) pro více informací.
# Tento SSHD byl sestaven s Path =/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/hry/hry
# Strategie použitá pro možnosti ve výchozím sshd_config odesláno s
# OpenSSH má určit možnosti s jejich výchozí hodnotou, kde
# možné, ale nechte je komentovat.  Neochvějné možnosti potlačují
# Výchozí hodnota.
# Port 22
# Addressfamily Any
# Poslouchání 0.0.0.0
# Poslousnost ::
# Hostkey/etc/ssh/ssh_host_rsa_key
# Hostkey/etc/ssh/ssh_host_ecdsa_key
# Hostkey/etc/ssh/ssh_host_ed25519_key
# Šifry a klíčování
# Rekeylimit výchozí žádné
# Protokolování
# SYSLOGFACILILY AUTH
# Informace o leglevelu
# Ověřování:
# LOGINGRACETIME 2M
# PermitrootLogin zakázán-password
# Strictmodes ano
# Maxauthtries 6
# Maxsessions 10
# Očekávejte, že .SSH/AUTORIZED_KEYS2 bude v budoucnu ignorován.
# Autorizovaný principalsfile žádný
# AutorizovanýKeysCommand žádný
# AutorizovanýkeysCommandUser nikdo
# Aby to fungovalo, budete také potřebovat hostitelské klíče v/etc/ssh/ssh_ známé
# HOSTASEDAUTHENTIKACE NO
# Změňte na ano, pokud nedůvěřujete ~/.ssh/známém_Hosts pro
# Hostbasedauthentication
# Ignoreuserserknowhosts no
# Nečtěte si uživatele ~/.rhosts a soubory ~/.shosts
# Ignorerhosts ano
# Chcete -li deaktivovat tunelovaná čistá textová hesla, změňte na ne!
# PerMitemPypasswords č
# Změňte na ANO, abyste povolili hesla pro odpověď na výzvu (problémy s pohledem
# Některé moduly a vlákna PAM)
# Kerberos možnosti
# Kerberosauthentication no
# Kerberosorlocalpasswd Ano
# Kerberosticketcleanup Ano
# KerberosgetAfStoken ne
# Možnosti GSSAPI
# GSSAPIAUTHENTIKACE NO
# GSSAPICLEANUPCREDENTIALS ANO
# GSSAPISTRITCECTACCEPTORCHECK ANO
# GSSAPIKEYEXCHANGE NO
# Nastavte to na „Ano", aby povolila ověřování PAM, zpracování účtu,
# a zpracování relací. Pokud je to povoleno, ověřování PAM bude
# být povolen prostřednictvím KBDinteractiveAuthentication a
# PasswordAuthentication.  V závislosti na konfiguraci PAM,
# Ověřování PAM prostřednictvím KBDinterActiveAuthentication může být obtok
# Nastavení „PermitrootLogin bez pasáže".
# Pokud chcete pouze spustit účet PAM a kontroly relací
# Ověřování PAM, poté to povolte, ale nastavte hesloauthentication
# a kbdinteractiveauthentication na „ne".
# Dovolená profilding ano
# Povolení, když ano
# Gatewayports č
# X11DISPLAYOFFSET 10
# X11uselocalhost ano
# Povolení ano
# PrintLastLog Ano
# Tcpkeepalive ano
# PermituseRerenvironment č
# Zpožděná komprese
# CLENTALIVEInterval 0
# CLENTALIVECOUNTMAX 3
# Použité ne
# Pidfile /run/sshd.pid
# MaxStartups 10: 30: 100
# Permittunnel no
# CHROOTDIRECTORY ŽÁDNÝ
# VersionAddendum žádné
# Žádná výchozí cesta banneru
# Umožněte klientovi předat proměnné prostředí prostředí
# Přepíše výchozí hodnoty bez subsystémů
# Příklad převažujícího nastavení na základě uživatele
# Odpovídat uživatelům anoncvs
# X11 forwarding ne
# Povolení, které jsou ne
# Povolení č
# Server CVS ForCECOMMAND

Nezapomeňte, že soubor uloží Ctrl+X a Y. Dále napíšeme základní skript s názvem Initialize (vše ve výchozím domácím adresáři našeho uživatele).

nano initialize

Přidejte tyto řádky do souboru a nahraďteS klíčem SSH jste našli pomocí CAT. (.SSH/ID_RSA.PUB)

# !/bin/bash

Abychom vás procházeli tímto souborem, pojďme spustit řádek po řádku. První řádek říká kompilátoru, že se jedná o skript bash. Poté instalujeme závislosti, zkopírujeme SSHD_CONFIG do správného adresáře, restartujeme SSH, generujeme klíče SSH pro root a přidáme uživatelský tým '(můžete si pro to vybrat název, použijte příkaz přídavců s jejich jménem a prozatím deaktivovaného hesla). Přidáváme také tým do skupiny Sudo, generujeme svůj klíč SSH, přidáme náš klíč k autorizovaným klíčům a jejich také jejich klíčem. Tento nový uživatel bude tak, jak se přihlásíme na web.

V novém terminálu pokračujte a znovu otevřete server.

ssh team@XX.XX.XX.XX

Tentokrát byste neměli potřebovat heslo, protože máte klíč SSH. Také jsme zakázali přihlášení pomocí hesla, aby byl web bezpečnější.

Nyní tento server spustí zcela prázdné bez informací. Začněme klonováním našeho projektu z Git, abychom si jej mohli stáhnout a spustit na vzdáleném počítači. Na vzdáleném serveru připojeném přes SSH nejprve vytiskněte klíč SSH:

cat ~/.ssh/id_rsa.pub

Dále vložte tento klíč do nastavení GIT, jako jsme to udělali dříve, abyste nastavili naše úložiště GIT. Nyní můžeme klonovat náš projekt přímo na server. Ujistěte se, že jste nejprve zálohovali projekt lokálně, takže je na serveru GIT ke stažení.

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

Perfektní. Nyní jsou všechny soubory zde. Můžeme je vidět s LS

ls

Nyní začneme nastavovat server. Nejprve zkopírujte svůj adresář projektu do jednoduchého, nezapomenutelného názvu, který použijeme pro projekt.

cp -r yourproject whatyoucalledit

Kde je „WhatyOUCalleDidit" nový název vašeho projektu. Dále budeme muset vytvořit základní nástroj pro nastavení serveru. Uložíme tento nástroj a použijeme jej v budoucnu. Chcete -li vytvořit tento obslužný program, vytvořme uživatelský binární, abychom definovali, jak upravujeme skript. Pomocí bash, úpravy/usr/bin/ascript

sudo nano /usr/bin/ascript

Nezapomeňte tam použít sudo, abyste měli k úpravě souboru oprávnění. Do souboru přidejte tyto řádky:

# !/bin/bash
    echo "# !/bin/bash ">>/usr/bin/$ 1

Pamatujte, že tento skript má argument, název skriptu, jako $ 1. Nejprve zkontroluje, zda soubor existuje, nebo jej jinak vytvoří, přidá první řádek pro prohlášení skriptu je bash, změní jeho oprávnění, upravuje jej a přidá své jméno do /etc /ascripts, které nám umožňují ukládat jména skriptů, které vytváříme. Pokud soubor již existuje, jednoduše změňte oprávnění a upravte jej. Uložte soubor a dále změníme jeho oprávnění. Pokud tento skript používáme, nebudeme to muset dělat znovu.

sudo chmod a+x /usr/bin/ascript

Perfektní. Nyní vytvoříme skript s názvem Nastavení. Nejprve vás nepřekoná, ale podívejte se, jak vypadá můj scénář nastavení. Projdeme, jak by měl tento skript vypadat ve vašem projektu, nebudete potřebovat všechno v mém skriptu, abyste mohli začít.

# !/bin/bash
# sudo chmod a+x skripty/userseTup
# ./Scripts/UserSetup
# ssh-keygen
# Directory projektu
# Protokol příkazů
# Nano config
# Git config
# Aktualizace a instalace
# Povolit Clamav antivirus
# Nastavte název hostitele
# Nastavení Postgres
# Zálohování databáze nastavení
# Zakázat iptables
# Nainstalujte bitdefender
# Nastavení postfixu
# Vytvořte dirs
# Nastavení virtualenv
# Získejte a buďte závislosti
# Nastavit pravidla brány firewall
# Nainstalujte závislosti PYPI
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# PIP nainstalujte OpenCV-PYTHON == 4.5.5.64
# PIP nainstalujte OpenCV-Contrib-Python == 4.5.5.64
# Nainstalujte Certbot
# Spusťte Certbot
# Obnovit poštovní server
# Kopírovat certifikáty
# sudo cp /etc/letsensencrypt/live/femmebabe.com/privkey.tem privkey.pem
# sudo cp /etc/letsensencrypt/live/femmebabe.com/cert.pem cert.pem
# Patch Venv
# Nastavit nastavení uživatele
# Nastavit oprávnění
# Sudo Chown -r Team: Uživatelé/var/běh/
# Sudo Chown Root: Root/Run/Sudo/TS -R
# sudo chmod 664 db.sqlite3
# Sudo Chown www-dat: Uživatelé db.sqlite3
# Zkopírujte a nastavte oprávnění
# Nastavení databáze
# Injekční konfiguraci PAM a odstraňte vadnou konfiguraci SSH
# sudo sed -i '' -e '$ d' /etc/pam.d/sshd
# sudo sed -i '' -e '$ d' /etc /profil
# Zkopírujte skripty a nastavte oprávnění
# Obnovit a povolte služby
# Povolit moduly Apache
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# Zakázat výchozí web
# Povolit náš web
# Obnovit démona a restartujte Apache, Postfix a Opendkim
# Nastavit oprávnění
# Konfigurace swapu
# INITIVNÍ TAKOVÝ MOTOR
# Nastavení git
# Zobrazit IPv6 a OpendKim pro konfiguraci domény
# Nastavení dokončeno

To je hodně nastavení! Stručně řečeno, tyto kódové protokoly příkazy, konfiguruje nano a git, kopie přes soubory, stahování a instalace Ubuntu apt balíčky, Pythonské závislosti, konfiguruje postfix, konfiguruje postgresql (databázový server) a načítají databázi a načítají se, je to, že je nakládáno, a nakládá se, a načítají závislost, a načítají se, je to, že je to k dispozici, a načítají. Nastaví server, nainstaluje konfiguraci, spustí a umožňuje rozhraní, přiděluje swap, nastavuje oprávnění a vytiskne adresu IP, IPv6 a klíč OpendKim. Poměrně jednoduché, ale vypadá to jako hodně kódu. Nebudeme toho hodně potřebovat, protože nemáme závislosti, nepoužíváme celer, celerybeat nebo daphne, ale některé z nich stejně nainstalujeme, abychom mohli začít. Všimněte si, že tento kód má doménu několikrát vyhlášenou.

Budeme také muset zakoupit název domény (což je malý roční poplatek). Doporučuji Squarespace pro nákup domény, jejich rozvržení je intuitivní a snadno použitelné. Můžete si koupit jakoukoli doménu podle vašeho výběru, ale v tomto příkladu používám doménu femmebabe.com. Jakmile si zakoupíte doménu, přejděte na konfigurační panel DNS Squarespace a přidejte záznam A záznam směřující doménu na server pomocí IP adresy. Mělo by to vypadat takto:

@ A xx.xx.xx.xx

S operátorem @ jako hostitele, což znamená všechny subdomény v této doméně a kořenová doména přesměrují na server. Existuje více záznamů, které je třeba prohlásit, ale můžeme se k nim přesunout, až budeme připraveni poslat poštu. Mějte na paměti, že to může trvat několik dní, než budete moci úspěšně odeslat poštu ze serveru. Záznamy DNS, které nastavujeme, budou mít čas na šíření.

Každopádně jediný záznam, který musíme začít, je záznam A. Takže nyní můžeme vyplnit níže uvedený skript podle našeho projektu a spustit jej.

Začněme s menším nastavením skriptu, abychom nainstalovali to, co potřebujeme pro základní pokrok. Zatím nebudeme používat tolik závislostí nebo PostgreSQL, stačí spustit základní server HTTP a obáváme se, že jej při hotovosti certifikujeme. Nezapomeňte, abychom získali certifikát HTTPS a bezpečně spustil server, musíme si koupit doménu spolu s nájemným serverem. Prozatím nahraďte „tým" v tomto souboru názvem vašeho uživatele, „dir" s adresářem vašeho projektu a dodávejte e -mail a doménu do značek <>.

Navíc před spuštěním tohoto kódu musíme změnit nastavení na firewall, který poskytovatel hostingu podporuje, pokud existuje. Obvykle je to na kartě „Sítě" vašeho hostingového poskytovatele, nebo pokud jste samostatně hostování, je to v části „Portwording" routeru. Pokud používáte samoobslužné hosting, budete také chtít nastavit statickou IP prostřednictvím routeru pomocí adresy vašeho serverového počítače. Pro přístup ke čtení/zápisu budete muset otevřít následující porty.

22 (ssh) 25 (pošta) 587 (pošta) 110 (poštovní klient) 80 (http) 443 (https)

# !/bin/bash
# Protokol příkazů
# Nano config
# Git config
# Aktualizace a instalace
# Povolit Clamav antivirus
# Nastavte název hostitele
# Zálohování databáze nastavení
# Zakázat iptables
# Nastavení virtualenv
# Nainstalujte Certbot
# Spusťte Certbot
# Nastavit nastavení uživatele
# Nastavit oprávnění
# Sudo Chown -r Team: Uživatelé/var/běh/
# Sudo Chown Root: Root/Run/Sudo/TS -R
# Obnovit a povolte služby
# Povolit moduly Apache
# Obnovit démona a restartujte Apache, Postfix a Opendkim
# Zobrazit IPv6 a OpendKim pro konfiguraci domény

Před spuštěním tohoto kódu se ujistěte, že doména, kterou jste zakoupili, je připojena k serveru. Chcete -li to provést, otevřete terminál na místním počítači a spusťte tento příkaz s vaší doménou:

ping femmebabe.com # Vložte doménu zde, po pingu

Pokud všechno vypadá dobře a server odesílá odpovědi, jsme připraveni spustit skript a nainstalovat balíčky a začít, povolit a certifikovat náš server Apache.

Toto není všechno nastavení potřebné k konfiguraci postfixu, podíváme se na toto nastavení později později. Prozatím spusťte tento nastavený kód a instalace a certifikace serveru by měla trvat několik minut. Ještě jednou nezapomeňte ve skriptu vyměnit jméno, e -mail a doménové jméno podle zakoupeného názvu.

Nyní, když je server zajištěn, můžete přejít do URL v jakémkoli webovém prohlížeči a zkontrolovat, zda je server spuštěn HTTPS. Pokud tomu tak není, zkuste chvíli čekat na záznamy DNS, aby dohnaly a spustily následující příkaz, aby se opakoval certifikaci Certbot:

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

Dokud jste vše správně nakonfigurovali, měli byste mít přístup k výchozí stránce Apache, abyste věděli, že váš kód funguje a zobrazuje živou webovou stránku. Dále upravte nastavení.py a změňte náš výchozí režim ladění na výrobu. Konfigurujeme také doménu v nastavení a interní IPS.

nano yourproject/settings.py

V nastavení změňte/přidejte tyto řádky.

# Konfigurace webu

Nyní budeme muset nakonfigurovat apache2. Upravte konfigurační soubor, který nasadíme s tímto řádkem:

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

Tento soubor konfigurace by měl mít v sobě náš název domény a název uživatele a projektu. Používám název domény femmebabe.com, tým uživatelského jména a název projektu Femmebabe.

ServerSignature Off
ServerTokens Prod
<IfModule mod_ssl.c>
<VirtualHost *:80> 
	Redirect permanent / https://femmebabe.com/
</VirtualHost>
<VirtualHost *:443>
	ServerName femmebabe.com
	ServerAdmin team@femmebabe.com
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
	
	Alias /static /home/team/femmebabe/static
	<Directory /home/team/femmebabe/static>
		Require all granted
	</Directory>

Alias /media/icons /home/team/femmebabe/media/
<Directory /home/team/femmebabe/media>
Require all granted
</Directory>

	<Directory /home/team/femmebabe/femmebabe>
		<Files wsgi.py>
			Require all granted
		</Files>
	</Directory>

	WSGIScriptAlias / /home/team/femmebabe/femmebabe/wsgi.py
	WSGIDaemonProcess femmebabe python-path=/home/team/femmebabe/ python-home=/home/team/femmebabe/venv header-buffer-size=100000000000 user=team
	WSGIProcessGroup femmebabe
	WSGIApplicationGroup %{GLOBAL}
	
	<Directory /home/team/femmebabe/static>
                Options Indexes FollowSymLinks
                AllowOverride All
	</Directory>

	<IfModule mod_rewrite.c>
		RewriteEngine on
		RewriteCond %{REQUEST_URI} \.(css|webp|webm|gif|png|mp3|wav|jpeg|jpg|svg|webp)$ [NC]
		RewriteCond %{HTTP_REFERER} !^https://femmebabe.com/media/.*$ [NC]
		RewriteRule ^(.+?)/$ /media/$1 [F,L]
	</IfModule>

	Include /etc/letsencrypt/options-ssl-apache.conf
	SSLCertificateFile /etc/letsencrypt/live/femmebabe.com/fullchain.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/femmebabe.com/privkey.pem

	Header set X-Frame-Options: "SAMEORIGIN"
	Header set Access-Control-Allow-Origin "https://femmebabe.com"

	TimeOut 60000
	LimitRequestBody 0

	<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|webp|JPG|JPEG|wav|mp3|mp4|public|js|css|swf|webp|svg)$">
		Header set Cache-Control "max-age=30, public"
	</FilesMatch>
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:80>
	ServerName femmebabe.com
	ServerAdmin team@femmebabe.com
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	RewriteEngine on
	RewriteCond %{SERVER_NAME} =femmebabe.com
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
</IfModule>

Při konfiguraci serveru nezapomeňte vyměnit název projektu, adresáře a domény v tomto příkladu. Nyní budeme muset deaktivovat výchozí web. To lze provést pomocí bash.

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

Dále můžeme povolit výchozí web a znovu načíst apache2, také pomocí Bash. Nezapomeňte nahradit FemmeBabe názvem souboru, který jste deklarovali při úpravách v/etc/apache2/weby, dostupné/.

sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2

Vraťte se do své domény v Navbar. Měli byste vidět web, který jste nakonfigurovali ve vašem webovém prohlížeči. Gratuluji! Pokud to nevidíte, možná budete muset provést nějaké změny. Pečlivě zkontrolujte nastavení ve vašem projektu, konfiguraci Apache a ujistěte se, že nemáte žádné chyby, a spusťte následující příkazy a zkontrolujte projekt z hlediska chyb.

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

Pokud máte ve svém projektu Python chyby, sledujte je tam, kde jsou, a opravte je. Možná nebudete moci vidět všechny své chyby v závislosti na tom, kde jsou, takže pokud máte chybu, která jednoduše říká „Oplsul není reentrant", upravte následující soubor ve virtuálním prostředí, Registry.py, odhalit chybu.

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

Přejděte na řádek 83, kde je tato chyba runtime zvednuta (Raise RuntimeError ("Populate () není reentrant"))) a přidejte komentář před tímto řádkem a poté přidejte se stejným odsazením, self.app_configs = {}. Vypadá to takto:

                # Zabránit reentrantským hovorům, abyste se vyhnuli spuštění appconfig.ready ()
                # metody dvakrát.
# Raise RuntimeError ("Populate () není reentrant")

Poté můžete projekt znovu zkontrolovat a vystavit chybu.

python manage.py check

Pak můžete vidět chybu a opravit ji. Když ji máte opravené a kód se zkompiluje bez chyb, nezapomeňte soubor změnit, aby to vypadalo takto:

                # Zabránit reentrantským hovorům, abyste se vyhnuli spuštění appconfig.ready ()
                # metody dvakrát.
# self.app_configs = {}

Pokud je server online, když v něm provedeme jakékoli další změny, musíme k opětovnému načtení serveru použít následující příkaz:

sudo systemctl reload apache2

Děsivý! Ale co odeslání pošty? Chcete -li začít odesílat e -mail, budeme nejprve muset aktualizovat konfiguraci domény. To by mělo být na panelu DNS v Squarespace nebo jakémkoli registrátorovi domény, který jste si vybrali. Budeme také muset nainstalovat a přidat konfiguraci a spustit několik příkazů.

Nejprve pojďme získat adresu IPv6 serveru. Poté otevřeme vaše DNS a přidáme záznamy.

Chcete -li získat adresu IPv6 serveru, použijte tento příkaz:

ip -6 addr

Nyní můžeme přidat následující záznamy do nastavení DNS. Moje záznamy vypadají takto. Pro vaše záznamy byste však měli nahradit IP adresu svou IP (ne 75.147.182.214, to je moje). Také přidejte svou doménu namísto femmebabe.com, jakož i adresu IPv6 nalezenou u předchozího příkazu (nelze použít důl, Fe80 :: 725a: FFF: Fe49: 3E02). Nedělejte si starosti s doménou, toto je vytvořeno, když jsme nastavili postfix, poštovní server, s Opendkim, a vytiskněte klíč. Nakonfigurujeme to poslední.

@ A N/a 75.147.182.214

@ MX 10 femmebabe.com

@ Ptr N/a femmebabe.com

@ Txt N/a Txt @ v = SPF1 MX IP75.147.182.214IP6: Fe80 :: 725a: FFF: Fe49: 3E02 ~ ALL

výchozí._bimi Txt N/a v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg

_dmarc Txt N/a v = dmarc1; P = Žádný

Sendonly._domainkey Txt N/a

Nyní budeme muset přidat přetrvávající konfiguraci pro postfix. Vše, co musíme udělat, je ujistit se, že nahradíme název domény, femmebabe.com, s názvem domény, který používáte. Podívejme se na všechny konfigurační soubory jeden po druhém a nainstalujte je do adresáře s názvem Config v našem projektu pro instalaci do operačního systému.

nano config/etc_postfix_main.cf

Přidejte tento text do souboru

# Viz /usr/share/postfix/main.cf.dist pro komentovanou a úplnější verzi
# Debian Specific: Zadání názvu souboru způsobí první
# řádek tohoto souboru, který má být použit jako název.  Defian Default
# IS /ETC /MAILNAME.
# myorigin = /etc /mailName
# Appening .domain je práce MUA.
# Unlicment Další řádek pro generování varování „zpožděná pošta"
# delay_warning_time = 4H
# Viz http://www.postfix.org/compatibility_readme.html - výchozí na 3.6 ON
# čerstvé instalace.
# Parametry TLS
# Milter konfigurace

Další konfigurace!

nano config/etc_postfix_master.cf

Přidejte tyto řádky:

# 
# Konfigurační soubor Master Process Postfix.  Podrobnosti o formátu
# souboru viz manuální stránka Master (5) (příkaz: „Man 5 Master" nebo
# On-line: http://www.postfix.org/master.5.html).
# 
# Po úpravě tohoto souboru nezapomeňte provést „Postfix Reload".
# 
# ==========================================================================================
# Typ služby Private Private UNSIV CHROOT Wakeup MaxProc Command + Args
# (Ano) (Ano) (ne) (nikdy) (100)
# ==========================================================================================
# SMTP INET N - Y - 1 POSTSCREEN
# SMTPD PASS - - Y - - SMTPD
# DNSBlog UNIX - - Y - 0 DNSBlog
# TLSProxy UNIX - - Y - 0 TLSProxy
# Vyberte jeden: Povolte odeslání pouze pro klienty Loopback, nebo pro každého klienta.
# 127.0.0.1:1:submission INET N - Y - - SMTPD
# -O syslog_name = postfix/odeslání
# -O smtpd_tls_security_level = Encrypt
# -O smtpd_sasl_auth_enable = ano
# -O smtpd_tls_auth_only = ano
# -O smtpd_reject_unlisted_recipient = no
# -O smtpd_client_restrictions = $ mua_client_restrictions
# -O smtpd_helo_restrictions = $ mua_helo_restrictions
# -O smtpd_sender_restrictions = $ mua_sender_restrictions
# -O SMTPD_RECIPIENT_RESTRICICS =
# -O smtpd_relay_restrictions = povolení_sasl_authenticated, odmítnout
# -O milter_macro_daemon_name = původ
# Vyberte jeden: Povolte SMTPS pouze pro klienty Loopback, nebo pro každého klienta.
# 127.0.0.1:SMTPS INET N - Y - - SMTPD
# SMTPS INET N - Y - - SMTPD
# -O syslog_name = postfix/smtps
# -O SMTPD_TLS_WRAPPMERMODE = ANO
# -O smtpd_sasl_auth_enable = ano
# -O smtpd_reject_unlisted_recipient = no
# -O smtpd_client_restrictions = $ mua_client_restrictions
# -O smtpd_helo_restrictions = $ mua_helo_restrictions
# -O smtpd_sender_restrictions = $ mua_sender_restrictions
# -O SMTPD_RECIPIENT_RESTRICICS =
# -O smtpd_relay_restrictions = povolení_sasl_authenticated, odmítnout
# -O milter_macro_daemon_name = původ
# 628 INET N - Y - - QMQPD
# QMGR UNIX N - N 300 1 OQMGR
# -O smtp_helo_timeout = 5 -o smtp_connect_timeout = 5
# 
# ==================================================================================
# Rozhraní k softwaru bez postfixu. Nezapomeňte prozkoumat příručku
# Stránky softwaru, který není postfix, aby zjistili, jaké možnosti chce.
# 
# Mnoho z následujících služeb používá doručení postfixu (8)
# činidlo.  Informace o stránce potrubí (8) Man o $ {příjemce}
# a další možnosti obálky zpráv.
# ==================================================================================
# 
# Maildrop. Podrobnosti naleznete v souboru Postfix Maildrop_readme.
# Také určete v Main.CF: Maildrop_Destination_RecipienT_limit = 1
# 
# 
# ==================================================================================
# 
# Nedávné verze Cyrus mohou používat stávající položku „LMTP" Master.CF.
# 
# Určete v Cyrus.conf:
# lmtp cmd = "lmtpd -a" poslouchal = "localhost: lmtp" proto = tcp4
# 
# Určete v main.cf jeden nebo více z následujících:
# Mailbox_TRANSPORT = LMTP: INET: LocalHost
# Virtual_Transport = LMTP: INET: localhost
# 
# ==================================================================================
# 
# Cyrus 2.1.5 (Amos Gouaux)
# Také určete v Main.CF: Cyrus_destination_RecipienT_limit = 1
# 
# Cyrus Unix - N N - - trubka
# FLAGS = DRX User = Cyrus argv =/Cyrus/bin/doručování -e -r $ {Sender} -m $ {Extension} $ {User}
# 
# ==================================================================================
# Starý příklad doručení přes Cyrus.
# 
# Old -Cyrus Unix - N N - - trubka
# FLAGS = R User = Cyrus argv =/Cyrus/bin/doručování -e -m $ {Extension} $ {user}
# 
# ==================================================================================
# 
# Podrobnosti o konfiguraci naleznete v souboru Postfix UUCP_README.
# 
# 
# Další metody externího doručení.
# 

A konfigurace Opendkim. OpendKim identifikuje e -mailové servery s klíči domény, aby byly bezpečnější. Bez něj není pošta podepsána a nemusí se dostat do doručené pošty.

nano config/etc_default_opendkim

Přidejte tyto řádky:

# Poznámka: Toto je starý konfigurační soubor. Opendkim to nepoužívá
# Systémová služba. Použijte odpovídající konfigurační parametry v
# /etc/opendkim.conf místo toho.
# 
# Dříve by zde bylo upraveno výchozí nastavení a poté spuštěna
# /lib/opendkim/opendkim.service.generate pro generování souborů přepsání Systemd na
# /etc/systemd/system/opendkim.service.d/override.conf a
# /etc/tmpfiles.d/opendkim.conf. I když je to stále možné, je to nyní
# Doporučuje se upravit nastavení přímo v /etc/opendkim.conf.
# 
# Daemon_opts = ""
# Změna na/var/cívka/postfix/run/opendkim k použití zásuvky unix s
# postfix v chrootu:
# Rundir =/var/cívka/postfix/run/opendkim
# 
# Nekonečné zařazení alternativní zásuvky
# Všimněte si, že nastavení přepíše jakoukoli hodnotu soketu v Opendkim.Conf
# výchozí:
# Poslouchejte všechna rozhraní na portu 54321:
# Socket = INET: 54321
# Poslouchejte na smyčku na portu 12345:
# Socket = INET: 12345@localhost
# Poslouchejte na 192.0.2.1 na portu 12345:
# Socket = inet: 12345@192.0.2.1
nano config/etc_dovecot_conf.d_10-master.conf

Přidejte tyto řádky:

# default_process_limit = 100
# default_client_limit = 1000
# Výchozí limit VSZ (velikost virtuální paměti) pro servisní procesy. To je hlavně
# určené k zachycení a zabíjení procesů, které prosakují paměť před tím, než se sníží
# všechno.
# default_vsz_limit = 256m
# Přihlašovací uživatel je interně používán pomocí přihlašovacích procesů. Toto je nejvíce nedůvěryhodné
# Uživatel v systému Dovecot. Nemělo by to mít přístup k ničemu.
# default_login_user = dovell
# Interní uživatel používá nepruvilegové procesy. Mělo by to být oddělené od
# Přihlaste se uživatele, aby se přihlašovací procesy nemohly rušit jiné procesy.
# default_internal_user = dovecot
    # Port = 143
    # Port = 993
    # SSL = ano
  # Počet připojení k zpracování před zahájením nového procesu. Obvykle
  # Jediné užitečné hodnoty jsou 0 (neomezené) nebo 1. 1 je bezpečnější, ale 0
  # je rychlejší. <DOC/Wiki/LoginProcess.txt>
  # servis_count = 1
  # Počet procesů, které vždy čekají na další spojení.
  # Process_min_avail = 0
  # Pokud nastavíte servis_count = 0, pravděpodobně to musíte růst.
  # vsz_limit = $ default_vsz_limit
    # Port = 110
    # Port = 995
    # SSL = ano
    # Port = 587
  # Vytvořte posluchače INET, pouze pokud nemůžete použít výše uvedenou zásuvku UNIX
  # inet_listener lmtp {
    # Vyvarujte se zviditelnění LMTP pro celý internet
    # adresa =
    # Port =
  # }
  # Většina paměti jde do souborů MMAP (). Možná to budete muset zvýšit
  # Omezte, pokud máte obrovské poštovní schránky.
  # vsz_limit = $ default_vsz_limit
  # Max. Počet procesů IMAP (připojení)
  # Process_limit = 1024
  # Max. Počet procesů POP3 (připojení)
  # Process_limit = 1024
  # Max. Počet procesů odesílání SMTP (připojení)
  # Process_limit = 1024
  # Auth_Socket_Path ve výchozím nastavení ukazuje na tuto zásuvku UserDB. Obvykle je to
  # používají Dovecot-Lda, Doveadm, možná proces IMAP atd. Uživatelé, kteří mají
  # Úplná oprávnění k této zásuvce jsou schopna získat seznam všech uživatelských jmen a
  # Získejte výsledky vyhledávání userdb každého.
  # 
  # Výchozí režim 0666 umožňuje komukoli připojit se k zásuvce, ale
  # vyhledávání userdb uspěje pouze v případě, že UserDB vrátí pole „UID", které
  # odpovídá UID procesu volajícího. Také pokud se shoduje s volajícím UID nebo GID
  # Socket je uid nebo gid vyhledávání uspěje. Cokoli jiného způsobuje selhání.
  # 
  # Chcete -li dát volajícímu plná oprávnění k vyhledávání všech uživatelů, nastavte režim na
  # něco jiného než 0666 a Dovecot umožňuje jádro vynutit
  # Oprávnění (např. 0777 umožňuje všem plná oprávnění).
  # Proces Auth Worker je ve výchozím nastavení spuštěn jako root, aby měl přístup
  # /atd./stín. Pokud to není nutné, měl by se uživatel změnit na
  # $ default_internal_user.
  # Uživatel = root
  # Pokud je použit DICT proxy, měly by e -mailové procesy mít přístup k jeho zásuvce.
  # Například: Mode = 0660, Group = VMail a Global Mail_access_Groups = VMail
    # režim = 0600
    # Uživatel =
    # skupina =

Ještě jednou nezapomeňte vyměnit doménu ve všech těchto souborech, FemmeBabe.com, s vybranou doménou. Upravte další soubor, konfiguraci Dovecot,

nano config/etc_dovecot_dovecot

A přidejte tyto řádky

## Konfigurační soubor Dovecot
# Pokud spěcháte, podívejte se na http://wiki2.dovecot.org/quickconfiguration
# Příkaz "DoveConf -n" poskytuje čistý výstup změněného nastavení. Použijte to
# Místo kopírování a vložení souborů při zveřejňování příspěvku do seznamu adresátů DoveCot.
# '# „Postava a všechno poté, co se zachází jako s komentářemi. Extra prostory
# a karty jsou ignorovány. Pokud chcete použít některou z nich explicitně, dejte
# value inside quotes, eg.: key = "# char a koncový mezník "
# Většina (ale ne všechna) nastavení může být přepsána různými protokoly a/nebo
# Zdroj/cíl IPS umístěním nastavení uvnitř sekcí, například:
# Protocol IMAP {}, Local 127.0.0.1 {}, Remote 10.0.0.0/8 {}
# Výchozí hodnoty jsou zobrazeny pro každé nastavení, není nutné se uvolnit
# ty. To však jsou výjimky: žádné sekce (např. Namespace {})
# nebo nastavení pluginu jsou ve výchozím nastavení přidány pouze jako příklady.
# Cesty jsou také pouze příklady, kdy skutečné výchozí hodnoty jsou založeny na konfiguraci
# Možnosti. Zde uvedené cesty jsou pro konfiguraci -prefix =/usr
# -SysConfdir =/atd-localstatedir =/var
# Povolit nainstalované protokoly
# Kolma oddělený seznam IPS nebo hostitelů, kde naslouchat pro připojení.
# "*" poslouchá ve všech rozhraních IPv4, "::" Poslouchá ve všech rozhraních IPv6.
# Pokud chcete zadat nedefinované porty nebo něco složitějšího,
# Upravit conf.d/master.conf.
# Poslouchejte = *, ::
# Základní adresář kde ukládat data runtime.
# base_dir =/var/běh/dovecot/
# Název této instance. V nastavení multiinstance Doveadm a další příkazy
# můžete použít -i <instance_name> k výběru, který instance se používá (alternativa
# to -c <config_path>). Název instance je také přidán do procesů Dovecot
# ve výstupu PS.
# instance_name = dovecot
# Pozdrav pro klienty.
# login_greeting = dovecot připraven.
# Space oddělený seznam důvěryhodných síťových rozsahů. Spojení z nich
# IP mohou přepsat své IP adresy a porty (pro protokolování a
# pro kontroly ověřování). Disable_plaintext_auth je také ignorován pro
# tyto sítě. Obvykle byste zde zadali servery IMAP proxy.
# login_trusted_networks =
# Space oddělený seznam zásuvných přístupu k přihlášení (např. TCPWRAP)
# login_access_sockets =
# S proxy_maybe = ano, pokud cíl proxy odpovídá některému z těchto IP, nedělejte
# proxying. To není nutné normálně, ale může být užitečné, pokud cíl
# IP je např. Ip balancera zatížení.
# auth_proxy_self =
# Zobrazit více podrostných procesů procesu (v PS). V současné době ukazuje uživatelské jméno a
# IP adresa. Užitečné vidět, kdo skutečně používá procesy IMAP
# (např. Sdílené poštovní schránky nebo pokud se pro více účtů používá stejné UID).
# verbose_proctitle = ne
# Pokud by se zabily všechny procesy, pokud se uzavře hlavní proces Dovecot.
# Nastavení na „ne" znamená, že Dovecot lze upgradovat bez
# nutí uzavření stávajících klientských připojení (i když by to mohlo být také
# problém, pokud je upgrade např. kvůli opravě zabezpečení).
# Shutdown_Clients = ANO
# Pokud je nenulové, spusťte poštovní příkazy prostřednictvím tohoto mnoha připojení k serveru Doveadm,
# Místo toho, aby je spustili přímo ve stejném procesu.
# doveadm_worker_count = 0
# UNIX SOTKET nebo HOST: Port používaný pro připojení k serveru Doveadm
# doveadm_socket_path = doveadm-server
# Space oddělený seznam proměnných prostředí, které jsou zachovány na Dovecot
# Spuštění a předávání všech svých dětských procesů. Můžete také dát
# klíč = páry hodnot pro vždy nastavení konkrétních nastavení.
# import_environment = tz
## 
## Nastavení serveru slovníku
## 
# Slovník lze použít k ukládání seznamů klíčů = hodnoty. Toto je používáno několika
# pluginy. K slovníku lze přistupovat přímo nebo ačkoli a
# Slovní server. Následující názvy slovníků dict bloků pro URIS
# Po použití serveru. Poté lze na ně odkazovat pomocí URI ve formátu
# "Proxy :: <name>".
  # Kvóta = mysql: /etc/dovecot/dovecot-dict-sql.conf.ext
# Většina skutečné konfigurace je zahrnuta níže. Názvy souborů jsou
# nejprve tříděn podle jejich hodnoty ASCII a analyzován v tomto pořadí. 00-prefixy
# V názvech je určen k usnadnění porozumění uspořádání.
# Konfigurační soubor se může také pokusit být zahrnut bez chyby, pokud
# není to nalezeno:
# Umožňuje Dovecot poslouchat všechna vstupní připojení (IPv4 / IPv6)

Přidejte heslo pro uživatele DoveCot:

nano config/etc_dovecot_passwd

První část souboru před tlustým střevem je uživatelské jméno. Poslední část „YourPassword" označuje heslo, které chcete poskytnout poštovnímu serveru.

team:{plain}yourpassword

Dále konfigurace Opendkim

nano config/etc_opendkim.conf

A přidat tyto řádky:

# Toto je základní konfigurace pro podepisování a ověření. Může to být snadno
# upraveno tak, aby vyhovovalo základní instalaci. Viz Opendkim.Conf (5) a
# /usr/share/doc/opendkim/examples/opendkim.conf.Sample pro dokončení
# Dokumentace dostupných konfiguračních parametrů.
# Logwhy ne
# Běžné parametry podpisu a ověřování. V Debianu je záhlaví „z"
# převrácené, protože je to často klíč identity používaného systémy reputace
# A tak poněkud citlivá na bezpečnost.
# Podepisování domény, voliče a klíče (požadované). Například proveďte podpis
# pro doménu "example.com" s selektorem "2020" (2020._domainkey.example.com),
# Použití soukromého klíče uloženého v /etc/dkimkeys/example.private. Více granulované
# Možnosti nastavení lze nalézt v /usr/share/doc/opendkim/readme.opendkim.
# Doména příkladem.com
# Selector 2020
# Keyfile /etc/dkimkeys/example.private
# V Debianu běží Opendkim jako uživatel „Opendkim". Je vyžadován umask 007
# Použití místní zásuvky s MTA, která přistupuje k zásuvce jako nerivilegové
# Uživatel (například postfix). Možná budete muset do skupiny přidat uživatele „postfix"
# "Opendkim" v tom případě.
# Soket pro připojení MTA (vyžadováno). Pokud je MTA uvnitř vězení Chroot,
# Je třeba zajistit, aby byla zásuvka přístupná. V Debianu pobíhá Postfix
# chroot in/var/cívka/postfix, proto by musela být zásuvka Unix
# Nakonfigurováno, jak je uvedeno na posledním řádku níže.
# Socket Local: /run/opendkim/opendkim.sock
# Socket Inet: 8891@localhost
# Socket Inet: 8891
# Hostitelé, pro které se mají podepisovat spíše než ověřit, je výchozí hodnota 127.0.0.1. Viz
# Operace Sekce Opendkim (8) pro více informací.
# Internalhosts 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
# Trust Anchor umožňuje DNSSEC. V Debianu je poskytnut soubor důvěryhodnosti
# balíčkem dns-root-data.
# NasideServers 127.0.0.1
# Mapujte domény z adres do klíčů používaných k podepisování zpráv
# Sada interních hostitelů, jejichž pošta by měla být podepsána
nano config/etc_default_opendkim

A přidejte tyto řádky

# Poznámka: Toto je starý konfigurační soubor. Opendkim to nepoužívá
# Systémová služba. Použijte odpovídající konfigurační parametry v
# /etc/opendkim.conf místo toho.
# 
# Dříve by zde bylo upraveno výchozí nastavení a poté spuštěna
# /lib/opendkim/opendkim.service.generate pro generování souborů přepsání Systemd na
# /etc/systemd/system/opendkim.service.d/override.conf a
# /etc/tmpfiles.d/opendkim.conf. I když je to stále možné, je to nyní
# Doporučuje se upravit nastavení přímo v /etc/opendkim.conf.
# 
# Daemon_opts = ""
# Změna na/var/cívka/postfix/run/opendkim k použití zásuvky unix s
# postfix v chrootu:
# Rundir =/var/cívka/postfix/run/opendkim
# 
# Nekonečné zařazení alternativní zásuvky
# Všimněte si, že nastavení přepíše jakoukoli hodnotu soketu v Opendkim.Conf
# výchozí:
# Poslouchejte všechna rozhraní na portu 54321:
# Socket = INET: 54321
# Poslouchejte na smyčku na portu 12345:
# Socket = INET: 12345@localhost
# Poslouchejte na 192.0.2.1 na portu 12345:
# Socket = inet: 12345@192.0.2.1

Až budeme připraveni nastavit náš server PostFix, spustíme níže uvedený kód s příslušným vloženým názvem domény. Začněte vytvořením skriptu

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

Nyní, v Nano, textový editor, upravte tento soubor tak, aby místo FemmeBabe.com obsahoval název domény.

# !/bin/bash
# Nastavení postfixu

Nyní spusťte dokončený skript a nakonfigurujete postfix, Opendkim a Dovecot.

./scripts/postfixsetup

Jakmile tento skript spustí, zkopírujte poslední řádek, který vytiskne a vložte jej do konfigurace DNS jako hodnotu pro Sendonly._domainkey. Toto je klíč OpendKim používaný k identifikaci vaší domény při odesílání zabezpečené pošty.

Děsivý! Během několika dnů byste měli být schopni odeslat poštu ze serveru za předpokladu, že je vše správně nakonfigurováno.

Pokud jste právě nakonfigurovali DNS pro svůj poštovní server, mělo by to trvat méně než 72 hodin, než se záznamy aktualizují. Obvykle je to mnohem rychlejší. Můžete zkontrolovat, zda váš server funguje pomocí tohoto příkazu, dodal váš e -mail:

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

Pokud se zdá, že vše funguje správně, měli byste být schopni odesílat e -mail s vaším serverem. Pokud to nefunguje, zkuste se podívat na protokoly a zjistit, jaká by mohla být chyba.

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

To nabídne podrobné informace o poště, která je odesílána serverem a zda funguje správně. Měli byste být schopni vidět také e -mail ve vaší doručené poště, pokud to není, zkontrolujte složku spamu.

Budete také muset nakonfigurovat nastavení ve svém nastavení.py, aby váš e -mailový server mohl mluvit s vaší aplikací Django, projektem. Přidejte nebo vyměňte tyto řádky do svého nastavení

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

Všimněte si, že k získání hesla používáme konfigurační soubor. Načtěte tento soubor do nastavení tak, na samém začátku souboru.:

# Otevřete a načtěte konfiguraci

Vytvořme tento soubor a přidejte k němu tajný klíč, jakož i heslo pošty. Chcete -li vygenerovat tajný klíč, použijte tento příkaz a na konci se vám líbí jakoukoli délku:

openssl rand -base64 64

Nyní zkopírujte text, který OpenSSL vygeneroval a upravte /etc/config.json

sudo nano /etc/config.json

Přidejte do souboru následující řádky s klíčem, který OpenSSL vygeneroval jako tajný klíč.

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

Formát JSON je jednoduchý a snadno použitelný, můžeme také prohlásit další klíče, které chceme použít v našem projektu, a udržet je odděleně od našeho adresáře projektu, aby jim ostatní uživatelé nemohli psát, a proto je nemohou být přečteny pouze z našeho projektového adresáře. Toto je doporučená praxe pro klíče API, z nichž zde použijeme více než několik.

Budete také chtít zálohovat svůj projekt, abyste se ujistili, že je vše uloženo, a budete moci svou práci obnovit později, i když si již nepřejete pronajmout server.

sudo backup

Nyní zkuste odeslat e -mail HTML z webového serveru za předpokladu, že odeslání jednoho z příkazového řádku funguje. Dotazujte instanci uživatele do shell a odešlete e -mailu HTML tomuto uživateli prostřednictvím Djanga. Změňte mé jméno v kódu, Charlotte, na vaše uživatelské jméno.

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

Pokud první příkaz nefunguje, nezapomeňte použít

source venv/bin/activate

Pokud je vše nastaveno správně, nyní získáte uvítací e -mail ve své poštovní schránce odeslané vaší webovou aplikací. Dobrá práce! Prošel jsi dlouhou cestu.

Chtěl jsem dodat, že pokud se někdy potýkáte s jakýmikoli chybami při práci na takovém projektu, neváhejte hledat odpovědi a požádat o pomoc. Google, mimo jiné vyhledávače, jsou skvělými zdroji pro vyhledávání nápovědy pro programování. Jednoduše vyhledejte chybu, kterou získáte, a budete moci vidět, jak ostatní lidé vyřeší problém. Také jste vítáni, abyste mě kontaktovali, vaše pedagogy (učitelé, profesoři, lektoři), všechny vrstevníky na internetu, kteří jsou k dispozici pro programování nápovědy, nebo se opět poraďte s touto knihou nebo jinými zdroji, abyste našli řešení problémů, které máte. Chápu, že to není snadné, ale i když jste si přečetli v této daleko a nepíšu žádný kód, hodně se dozvíte o vytváření webové aplikace od nuly. Poklepte se na záda, děláte skvělou práci.

Děkujeme, že jste si udělali čas na přečtení tohoto příručky pro vývoj webových stránek třetího vydání. V budoucích vydáních budu zahrnovat více důležitých příkladů diskutovaných na začátku dokumentu a budeme se ponořit mnohem hlouběji do světa vývoje softwaru a hardwaru. Zůstaňte naladěni na to, co má přijít, a těším se, až vás naučím, jak budovat neuvěřitelný software. Uvidíme se v příštím vydání!






Blízko
Strana 1
Skok
Viz celý článek
Pokračujte ve čtení

Nakoupit | Koupit s krypto



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


Profesionální zábava, fotografie, videa, zvuk, živá a příležitostná hraní, stejně jako skenování ID, vývoj webových stránek a náhradní služby.

Nechte mi tip v bitcoinu pomocí této adresy: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE

© Glam Girl X 2025

Podmínky služby