Praktisk webbaserad djupinlärning och säkerhet genom exempel

Av Daisy
Praktisk webbaserad djup inlärning och säkerhet med exempel Tredje upplagan Charlotte Harper 3 juli 2024 Förord: Säkerhetsöverväganden för att bygga programvara för webben är en viktig del av alla webbutvecklare plan och exekvering medan man konstruerar en prototyp som är pålitlig, stabil och användbar för praktiska ändamål. DOM (dokumentobjekt Markup), med implementeringen av HTML, JavaScript och CSS samt backend -programvara som implementerar Python, C/C ++, Java och Bash, ger webbutvecklare frihet och kraft att skapa ett brett utbud av projekt som uttrycker som uttrycker kreativitet, ge användarvänlighet och funktionalitet, framställa ödmjukhet och karaktär och ge användarvänlighet samt bekvämlighet och viktiga tjänster som alla är attraktiva för den genomsnittliga Joe, slutanvändaren som vill döda tid eller få något gjort på internet, Vanligtvis på en smarttelefonenhet på pekskärmen. De flesta skulle inte ens veta var de ska börja när de vill bygga en webbplats frånSkrapa, de tenderar att starta på en annans webbplats och bygga något begränsat i funktionalitet, pålitlighet, användarvänlighet och särskilt kreativitet när de kunde ha haft alla de senaste kraftfulla verktygen till sitt förfogande för att bygga något användbart utan att slösa tid på att trycka på knappar , och särskilt att slösa pengar som betalar för dyra prenumerationer på programvara som få människor ville använda ändå med tanke på att de begränsningar i användarvänlighet och flexibilitet. Om du har några minuter att läsa igenom den här boken och lära mig vad jag vill lära dig, eller till och med prata med mig personligen om dina mål och få lite vägledning i rätt riktning och är motiverade att lära sig att koda och skriva din egen programvara , Ta den här boken hem och avsätta lite tid för att lära sig att bygga nästa inflytelserika, kraftfulla, strömlinjeformade och viktiga webbapplikationer, en webbplats som är allt på dig och gör exakt vad du vill och uppfyller din publiks behov. Om mig: Jag är en mjukvaruutvecklare mederfarenhetsintervall i C/C ++, Java, Python, HTML, CSS och JavaScript. Jag bygger webbplatser som människor vill använda, vill besöka och till och med bli beroende av att använda bara för att lära mig, återskapa och döda tid, och viktigast av allt säljer jag programvara. Om du hade en idé om exakt hur du ville att en webbplats skulle se ut och fungera, var du villig att stödja mig så att jag kan tillgodose mina egna behov medan jag möter din, och du är villig att täcka kostnaderna för att driva en webbplats själv, Jag skulle bygga dig nästa YouTube, Tiktok, Twitter, Google eller till och med en högteknologisk säkerhetsapp bara du kan komma åt. Istället för att försöka sälja dig min tid försöker jag köpa din: Jag vill prata dig om att bygga en app (webbplats) själv med den information som redan finns och lära dig vad du behöver för att vara en oberoende mjukvaruutvecklare, Entreprenör, vilket leder en framgångsrik karriär inom vilket område du önskar. Och låt mig vara tydlig, den utbildning jag ger dig kommer att vara informell. Du kan gå i skolan och lära dig allt detta med enFormell utbildning, eller till och med läsa den här boken i skolan, slutföra dina uppdrag och ta bort en hel del från din utbildning, men jag kommer inte formellt att lägga dig i den heta platsen och be dig att slutföra uppdrag. Jag är inte din professor, du kan tänka på mig som en vän som vill vägleda dig mot en karriär som drivs av din egen personliga framgång. Och jag säljer inte heller din framgång, du måste köpa den med din tid. Learning to Code har en brant inlärningskurva och var aldrig lätt eller ens tänkt att vara. Du måste arbeta så hårt du kan och fortsätta att försöka misslyckas och försöka igen även när du är frustrerad för att lära dig och bygga appar själv. Det är i själva koden. Kod drivs av en kompilator som är utformad för att ge programmerarens felmeddelanden, och dessa kommer att lära dig hur du kodar, även om du helt enkelt kopierar felet i din sökmotor och läser andra människors exempel. Och jag måste säga, du behöver inte vara extremt rik, smart,ESSFUL, eller till och med detaljorienterad eller organiserad för att bygga en app. Datorn tar hand om den organisationen för dig. Du behöver bara fortsätta genom rättegången och felet, behålla fokus och arbeta hårt på vad du gör, och du kommer att ha en mycket framgångsrik karriär i hela det du gör. Vem jag är: Jag inser att det sista avsnittet handlade mer om att lära dig och ta dig en väg från den här boken. Vem är jag exakt? Det är en komplicerad fråga. Jag är oklar på det själv, eftersom jag lider av medicinska tillstånd som kan göra det svårt för mig att till och med koda eller skriva den här boken ibland, samtidigt som jag presenterar utmaningar med socialisering och identitetsfrågor som gör mitt liv svårare när det gäller att introducera mig själv . Kort sagt, om du läser den här boken tog du hem för att du bläddrade igenom den och tyckte att den var användbar, eller till och med om du bara läste så långt in, för dig är jag en likasinnad person som vill se dig lyckas i allt du gör. Jag är själv ingenjörutvecklare och en student, och jag skriver den här boken för andra studenter som vill göra sina liv enklare genom att ha en handbok med programvaran de behöver göra sina liv enklare genom att ge exempel för att kopiera som passar ihop som ett stort pussel i ett arbete , användbar, stor, funktionell, sammanhängande och engagerande app som kan driva framgång oavsett när det gäller affärsverksamheten. I stort sett är det vad jag gör: Jag bygger appar för att hjälpa mig själv och andra människor lyckas. Jag är också författare, även om det här är min första publikation som jag tänker slutföra för att sätta min portfölj i ett användbart dokument, och jag är också konstnär. Jag ska erkänna detta för dig, jag är en konstig person. Jag är inte perfekt, jag har haft insatser med lagen till och med ledat mig att lämna högskolor och universitet och lämna stater för att försöka göra ett namn för mig själv med mer framgång. Jag är en kvinna vid födseln, jag bär smink, tar bilder av mig själv, bär klänningar och andra kvinnors kläder och jag håller mig medveten om mig själv som enKvinna av naturen. Jag har haft problem med andra människor tidigare som leder till kamp med att skriva och bygga webapps, och jag ber om ursäkt för att jag inte har kunnat få den här boken i dina händer förr: du behövde detta. Du kommer att vilja läsa och skriva kod som ser ut som min och fungerar som min och gör samma sak men ännu bättre, för om du har råd att köpa den här boken istället för att masha tangentbordet som jag bara för att skapa en bok själv som frågar pengar För det har du de resurser du behöver för att lyckas i ditt liv. Jag hade alla möjliga problem med familjen som växer upp, hälsotillstånd, läkare, media och lagen och min kod återspeglar djupt den kamp som är feminism och kvinnlig natur i en delad och frustrerad värld. Men den här boken är något jag bryr mig djupt om, min bebis, min portfölj och mitt försörjning, så jag uppskattar din övervägande när du tar texten hem och noggrant pore över den för att lära av mig. Kom ihåg att jag inte är detECT, den här boken kommer att ha fel, revideringar och nya utgåvor, och du måste tänka med din logiska hjärna så bra du kan för att få en framgångsrik upplevelse med mitt skrivande. Förstå också att jag menar bra för dig även när du står inför utmaningar när du skriver. Tänk på det så här: När du bara kan hyra ett datorsystem för att göra vad du kan föreställa dig i det digitala utrymmet, lagra all information du möter, #$%! Yze och organisera den och förstå det, kommer du Oundvikligen möter svårigheter med den information du intar och till och med publicerar. Jag säger detta eftersom jag stöter på samma svårigheter. Använd den här boken på din egen risk, arbeta med ditt samhälle och samhällen tillgängliga för dig för att bygga programvara inom en säker miljö och ta inte saker till personligen när du misslyckas eller till och med lyckas på fel sätt: det är så jag fick så långt och varför jag kan ge dig den här texten och hjälpa dig att lyckas utan att diverge på en väg av galenskapAves mig förstörde, slits och sliten medan jag stöter på de vanliga problemen som alla gör på global skala tack vare den paralellistiska globala skalan i nätverket som vi kommer att arbeta, Internet. Du kanske inte är mycket bekant med vem jag är med bara några ord, men jag uppmuntrar dig att läsa vidare, du kommer att lära känna mig när du fortsätter att läsa och förstå mig medan du bygger dina egna projekt för att slutföra ditt arbete. Det kommer inte att finnas några läxor med den här boken, så länge dina professorer eller lärare inte tilldelar dig några, men jag uppmuntrar dig starkt att bygga en portfölj av projekt själv när du läser längs, liksom ett capstone -projekt som visar hur du kan Applicera det du har lärt dig. Mitt Capstone -projekt är grunden för det mesta av det du kommer att läsa i den här boken, eftersom det innehåller kod från mina tidigare projekt, kod som jag har skapat och lärt mig att skriva metodiskt för hand och ett brett utbud av idéer och tips som har hjälpt mig lyckas till den punkt där jag kan snurra upp en enkel app somFullt presenterat och ser ut och uppför sig som en populär app som du kan se din vän eller familj använda, på internet, annonseras till dig eller i nyheterna. Vad den här boken är: Den här boken är en tutorial med exempel. Du kan hitta kod här, instruktioner för hur du lär dig att koda, information om felsökningskod och fixa fel, felsöka steg, instruktioner om hur du säkerhetskopierar och sparar din kod, omplacerar om någon bryter din kod, säkra din kod, distribuera Din kod, bygg interaktiva webbplatser som är underhållande, engagerande och beroendeframkallande, så får du en känsla av vem jag är, varför detta är viktigt och hur du kan framställa dig själv, din app och företagsbild, såväl som programvaran du bygger I det absolut bästa ljuset att vara det mest attraktiva som möjligt för dina slutanvändare, din webbplats besökare. I den här boken kommer jag att visa ett antal exempel på mjukvarudesign med fokus på webben som plattform och säkerhet. Vi kommer att initiera inlärningsupplevelsen genom att bygga en grundläggandeoject med UNIX -skalet, med säkerhetskopierings- och skriptfunktioner. Sedan kommer vi att undersöka en grundläggande bloggwebbplats, uppgradera vår blogg med foto- och videofunktioner samt använda dessa funktioner för att använda säkerhetslösningar med gratis programvara och säkra vår server med en pluggbar autentiseringsmodul (PAM). Vi kommer sedan att granska filhantering och bearbetning, utforska videoredigering, röstdonation, streckkodskanning och optiskt teckenigenkänning, bland andra koncept. På vägen kommer vi att undersöka API: er som hjälper oss att göra vår programvara mer användbar och säker, med gratis och betalda alternativ. Längs vägen kommer vi att utforska fysiska säkerhets- och militanta verktyg som skjutvapen och ammunitionsdesign och tillverkning inklusive fat- och repeaterdesign, torn- och drone -design och andra rektorer som vi kommer att integrera med vår programvara i det befintliga nätverket för att skydda vår programvara och visa självförsvar och resillience. Vi tar pauser på vägen för att bygga spel, 2D och 3DUtlänningsmotorer och arbeta med inbäddad hårdvara i exempelstudieexempel på grundläggande dimensionell renderingsprogramvara och en elektronisk vibrerande massager i silikongummi. På vägen kommer vi också att använda maskininlärningslösningar som redan finns för att bättre säkra vår programvara. Vi kommer också att använda aktieverktyg som finns tillgängliga för webben för att effektivisera och säkra processen. Den här boken är en guide till din framgång med att bygga en webbapplikation och integrera den med ett professionellt nätverk av dator och inbäddade mekaniska system, och totalt sett en guide för att bygga programvara och inbäddad hårdvara utan bakgrundskunskap eller tidigare erfarenhet. Vad den här boken inte är: Om du verkligen vill ha en webbplats kan du bara ställa in en enkel butik och sälja vad du behöver, lägga upp en blogg, posta foton eller videor eller på annat sätt utan att skriva en enda kodrad. Den här boken är inte det. Den här boken kommer att lära dig hur du bygger programvara som är mer användbar, heltFunktion, funktionell och säker än någon programvara du redan kan hitta, eftersom den distribuerar den senaste programvaran som fortfarande är prototyper, kan vara dyrt att köra på en skala äldre företag som arbetar på och inte tilltalar bakåt, invecklade företag som ställs in på Tjäna pengar för människor som inte riktigt gör någonting. Om du följer den här boken noggrant, vill du skriva kod, forskningskod, bygga dina egna appar och du kommer att tjäna pengar på vad du gör. Jag kommer att tjäna pengar på den här boken, även i tidiga stadier, eftersom den innehåller information som människor behöver och vill läsa, och redan köper när de köper eller använder mina appar. Den här boken kommer inte att bygga en app för dig, men den kommer att peka dig i rätt riktning och beväpna dig med de verktyg du behöver och de färdigheter och tips som underlättar din egen framgång i att bygga programvara för webben, med varje rad Kod Du måste skriva som ett exempel, redo att vara ihop i programvara du och dina supportrar, gäster, kundkrets,Riends, familj, besökare, entreprenörer och människorna på internet vill använda och stödja. Vad du kommer att lära dig: Den här boken kommer att lära dig hur du bygger och säljer programvara, riktigt funktionell, användbar programvara, medieinspelning, säkerhetsfunktioner som ansiktsigenkänning, maskinläsbar zonens streckkodskanning, webb -API: er för att autentisera, spela in och göra video och foton och utbyta meddelanden som Bluetooth och nära fält (NFC) kommunikation. Den här boken kommer att lära dig hur du använder en nätverksdator, med fokus på Debian Linux, hur man bygger baskod för att göra installation och säkerhetskopiera din programvara till en sömlös, automatiserad bris, hur man bygger pythonkod som backend för att servera dynamiska meddelanden, stil Saker snyggt med CSS -stilar med bootstrap, möjliggör användarinloggningar och interaktivitet genom nätverksenheter, bygga interaktiva medier och nätverk med andra webbplatser för att erbjuda säkerhetsfunktioner som textmeddelanden för verifiering eller andra ändamål, ID -skanning, bild och videomoderering, dataRansaktioner för att hålla din programvara säker, betalningsbehandling, cryptocurrency -handel, asynkrona uppgifter och mer. Du kommer att lära dig hur du bygger dina egna Bluetooth -enheter, med batterier, laddare, mikrokontroller, kretsar, motorer och sensorer, med löd, tråd och 3D -tryckt samt gjutmaterial. Jag kommer att demonstrera 3D -designprinciper som används för tillsatsstillverkning och verktyg och dö, så du kan tillverka dina egna inbäddade hårdvaruenheter med integrerade batterier, laddare, elektroniska kretsar och funktionella utgångar. och nätverk dem med Bluetooth och webben. Specifikt kommer vi att undersöka två fallstudier, en vibrerande massager och ett hemlagat skjutvapen, båda programmerade i OpenSCAD, som är tillgängligt som ett grafiskt gränssnitt eller kommandoradsverktyg och kan integreras i en webb för snabbare resultat. Du kommer att lära dig att bygga och distribuera en webbplats från grunden utan tidigare erfarenhet, gör den funktionell, säker, vacker, användbar och mestMitant praktiskt. Du kommer att lära dig att använda maskininlärning och datorsyn för att göra en webbplats säker och mer praktisk, spela in video och ljud från din webbplats, donera din röst, skapa musik och modulera ljud för att skapa användbara prover och hur man bryter igenom bruset med Utnyttja andra webbplatser för att bygga det bästa möjliga nätverket av webbplatser som du kan länka direkt till ditt för att dela all användbar information du har att erbjuda, och ännu viktigare att föra människor till din programvara och företag. Den här boken kommer att fokuseras mest på media, säkerhet och maskininlärning, som är de viktigaste tre komponenterna som hjälper dig att bygga användbar programvara för webben genom att engagera rätt användare och frigöra fel på ett sätt som är realistiskt, praktiskt, praktiskt, Händer på och engagerar sig även automatiska och robusta. Den här boken lär Unix, Speciellt Debian (Ubuntu), Bash Shell, Python, HTML, CSS, JavaScript och ett antal användbara programvarupaket förn som förfrågningar, såväl som användbar bash -programvara som GIT och FFMPEG. Jag kommer också att lära dig hur du handlar cryptocurrency automatiskt och tar betalningar i cryptocurrency eller från vanliga betalkort medan du till och med betalar dina besökare en del av dina intäkter om du väljer att göra det. Jag kommer att lära dig hur du kan tjäna pengar från din webbplats genom reklam också, hur du kan redo din app för sökmotorer och göra det snabbt, rankat i den första rankingen för vad dina kunder kommer att söka för att hitta dig och rangordna i så många vanliga sökningar som möjligt. Jag kommer att lära dig hur du säljer din programvara, annonserar den, vädjar till kunder som letar efter dina tjänster och gör ett namn för dig själv på internet via vägar som redan finns, är billiga och fungerar bra. Jag kommer att lära dig hur du sparar dina data på molndatorer som fungerar för dig och sparar dina data billigt, hur du planerar och bygger en webbplats som gör vad dina användare vill ha och vad du vill och hur du håller dina användare engagerade aving din webbplats en kran bort på sina telefoner med aviseringar, e -post, textmeddelanden, telefonsamtal och fler vägar för att föra dina användare tillbaka till din webbplats till ditt förfogande bakom klicket på en knapp som är säkrad till dig. Den här boken kommer att fokusera på praktiken att publicera och distribuera media i stora mängder, från text till foton till videor till ljud, vilket gör ett gott intryck på slutanvändare (din kundkrets) och säljer dig själv på något sätt som du gör för att skapa En webbplats, en app som bara är representativ för dig och dig, och gör dig, din programvara och ditt företag ser bra ut på bästa sätt. Du kommer också att lära dig några tips och tricks från mig, från kodningstips, praktisk fåfänga som smink och fotografering, modellering och skådespelare och mer, vilket kommer att vara viktigt för att framställa dig själv och ditt företag i bästa möjliga ljus med alla tillgängliga verktyg till dig när du distribuerar så mycket innehåll du behöver över en hälsosam balans mellan plattformar för att ta med dig dine att realiseras utan mer ansträngning, arbete eller pengar än vad som är nödvändigt. Den här boken kallas "praktisk webbaserad djup inlärning och säkerhet med exempel" av en anledning: den handlar om att lära sig att koda, speciellt för webben, särskilt med fokus på säkerhet, ur praktisk synvinkel, med exempel på arbetskod som tjänar De praktiska syftena som beskrivs i texten. Inlärningskomponenten i denna text omfattar också maskininlärning av maskiner, koden som jag visar hur du kör för webben som hanterar datorsyn, ansiktsigenkänning, bild- och videomoderering, förbättring av bild, upplösning, bildtexter och andra uppgifter som som Förutsägelsemetriker som kommer från bilder, till exempel bildens natur som en autentisk, datorövervakad bild eller en optisk kopia (ett foto av en bild eller tryckt foto). Maskininlärning är mycket viktigt när det gäller webbsäkerhet och mjukvarusäkerhet, eftersom det kan förforma uppgifter som annars var omöjliga. Din datorLogga in dig med ett lösenord, men det kan vara säkrare att använda den om det loggar in dig med ditt ansikte. Du kan göra en serverdator så säker, en dator som normalt skulle be dig om ett användarnamn och lösenord och logga in dig, kanske med ett bekräftelsetoken för varje ny inloggning eller ny IP -adress, men om du bygger stor skala, lätt att Användning, grundläggande säker och kraftfull programvara, det kan räcka. Att binda din programvara för nära någon annans programvara, som en e -posttjänst eller textmeddelande, räcker inte för att göra din programvara säker, eller någons (någon webbplats du använder). Den som bygger programvara som är oklanderligt säker har en viss känsla av vad detta innebär. Programvaran är i sig osäker eftersom enheterna och kontona vi använder för att komma åt den inte alltid står till vårt förfogande, de kan vara i händerna på alla med sjuk avsikt för programvaran och därför kan utgöra en risk för själva programvaran. Detta är något i fokus för denna bok. En nätverksdator är som standardSäkrad med ett långt nyckeltoken, kallad och SSH eller Secure Shell -nyckel, och är annars bäst säkrad med en webbserver, eftersom webbservern ger den öppna åtkomsten såväl som toppmodern för konstsäkerhetsverktyg som körs på servern. Webservern har tillgång till användarens webbläsare, vilket utan tvekan är den mest kraftfulla delen av användarens enhet, eftersom det är den plats där användaren kan komma åt nätverksprogramvara. Denna verktygssats kan göra text, webbsidorna du ser och kan också spela in bilder, ljud och video (som ett foto av ett ansikte eller ett tillstånds -ID), kan läsa och skriva till Bluetooth -radioenheter och kan läsa och skriva till Near Field Transponder -taggar, billiga nyckelkort, fobs, klistermärken, ringar och till och med chipimplantat med unika serienummer som kan läsas och skrivas till med data genererade och validerade av en webbserver bunden till webbplatsen. Med hjälp av alla verktyg till ditt förfogande, med den här boken kommer du att utrusta dig med kunskapen för att bygga en säker webbplats och totalt sett aUre nätverkat datorsystem som fungerar för dig, gör ditt bud och ser ut och känns rätt. Var man ska börja: Du är välkommen att hoppa över det avsnitt jag börjar den här boken med, eller i alla avsnitt, till den exakta koden du behöver, särskilt om du har erfarenhet av kodning före eller någon av de ovannämnda verktygen som jag kommer att beskriva i detalj i den här boken som samt dokumentera användningsfall och praktiska exempel därav. Om du inte har erfarenhet av att skriva kod rekommenderar jag starkt att du läser hela den här boken, och särskilt rekommenderar att du läser de tidigare avsnitten, för att se till att den här boken är rätt för dig. Om den här boken inte är rätt för dig, överväg att gåva den till en vän eller släkting som kan vara intresserad av att lära sig om webbutveckling själva och till och med överväga att låna den tillbaka och lära av dem för att fylla i luckorna där jag misslyckades med dig som en Lärare eller andra lärare gjorde före mig. Börja var du vill kommer alla delar av den här boken att vara användbar om du tänker bygga en användbarPP, och tänk på att de bästa apparna är byggda med slutanvändaren i åtanke: Känn din kund. Nu känner du mig, du känner den här boken och du är redo att börja. För att börja, ta en dator (även den billigaste bärbara datorn från en boxbutik, Amazon eller ett gammalt skrivbordsverk, och ställa in den på ett sätt som fungerar för dig. Hur man läser den här boken: Text markerad, anger att texten tillhör i en kommandotolk, där du skriver koden du kör. Kommandotolken är starkt tangentbordsfokuserat och kräver lite till ingen klickning, påskyndar ditt arbetsflöde och gör det lättare för dig. Komma igång: Låt oss dyka in. Vi börjar med att bygga kod på en lokal maskin och börja utan att bygga en webbplats ansluten till internet. Detta är säkrare att börja med, kostar ingenting och är lätt för dig. Beroende på ditt operativsystem kommer det att vara lite annorlunda att komma in i ett bash -skal. För Mac OS rekommenderar jag att du installerar en virtuell maskin vid denna tidpunkt, eftersom du får mest kompatibilitet medVirtuell maskin. Olika leverantörer som VirtualBox och Paralells kan köra en virtuell maskin för dig, även om det också är möjligt att installera Ubuntu direkt på maskinen, om du föredrar att använda en inhemsk miljö som rekommenderas för att skapa en snabb, strömlinjeformad upplevelse. Om du använder Linux eller Windows, som jag rekommenderar, bör det vara ganska enkelt att skapa ett projekt. Öppna din terminal, justera storleken som du ser lämpligt och börja följa steg 2. Om du använder Windows, följ steg 1. Steg 1: - Endast Windows -användare I Windows, Open Command Prompt som administratör och typ WSL –installera Steg 2: - Fortsätt här eller hoppa över steg 1 till här om du inte använder Windows I en öppen terminal, (beroende på ditt operativsystem, kallad Ubuntu i Windows, Terminal i Mac eller Linux eller ett liknande namn), börja med att skapa ett projekt. Vi gör detta med mkdir -kommandot, som skapar en katalog. Om du behöver skapa en katalog för att lagra ditt projekt, vilket rekommenderas, användCD -kommando att ändras till katalogen och och och CD/sökväg/till/katalog - sökvägen är mapparna (filer) som föregår din destinationskatalog, din standardväg är ~ eller/hem/användarnamn (där användarnamn är ditt användarnamn). För att ändra till standardkatalogen skriver du CD eller CD ~ MKDIR -exempel - Byt ut "Exempel" med namnet på katalogen Nu har du en arbetskatalog för ditt projekt. Att vara så viktigt att den här katalogen sparas om du behöver byta till en annan maskin eller distribuera koden du skriver så att den är redo för webben, kommer vi att bygga ett skript för att säkerhetskopiera din katalog i de kommande stegen. Men att bygga ett skript tar lite kod, och koden måste automatiseras för att vara så användbar som möjligt. Så låt oss bygga ett manus för att bygga skript först. Låt oss börja med att skapa skriptet och göra det körbart. Vi använder sudo, chmod och touch för detta och ringer skriptet
sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Nu har vi skapat skriptet, gjort det körbart och är redo att redigera det. Nano är en textredigerare som låter dig redigera text utan att klicka, vilket är mycket enklare än att använda ett grafiskt användargränssnitt. För att redigera en fil med Nano, använd Nano och sedan sökvägen till filen. För att skapa ett manus som gör ett manus är det ganska likt att göra vårt manus i första hand. Vi använder samma kod som ovan och ersätter namnet på skriptet, "Ascript" med en argumentparameter, $ 1. Detta låter oss ringa skriptet genom att skriva Simply Sudo Ascript Newscript, vid vilken tidpunkt vi kan skapa alla nya skript genom att ersätta "Newscript" med namnet på ditt skript. Koden i Nano ska se ut:
sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
Och för att stänga Nano kan vi hålla ner kontrollknappen och trycka på x, sedan y för att beteckna vi sparar filen och träffar return. I stället för att skriva dessa tre kommandon för att redigera ett skript kommer vi att kunna skriva Sudo Ascript Ascript för att redigera skriptet igen. Det här fungerar! Och alla nya skript kan enkelt köras genom att kalla det i skalet. Låt oss spara vårt arbete nu: Låt oss skriva ett säkerhetsskript för att spara vårt nya skript och sedan säkerhetskopiera det i vår projektkatalog, samtidigt som vi säkerhetskopierar säkerhetsskriptet.
sudo ascript backup
Nu, i Nano:
sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Där/sökväg/till/katalog är vägen till projektet du skapade med mkdir. Senare kommer vi att lära oss att kopiera upprepade vägar som denna med en slinga och en lista, som är mindre kod, men för nu låt oss hålla det enkelt och ha några rader. För att köra det här skriptet och säkerhetskopiera din kod, spara filen i nano med kontroll+x, y och returnera och skriv nedan i ditt skal
backup
Om du alls uppmanas till ett lösenord när du läser den här boken och följer med i skalet, ange ditt användarlösenord korrekt, kommer du att ha tre försök innan du behöver köra kommandot igen. Du kan använda pilarna upp och ner för att köra om kommandon och redigera dem om du behöver köra något två gånger. Enkel tryck upp och ner intermittent för att välja ett kommando, innan du redigerar kommandot med höger, vänster pilar och radera tangent samt tangentbord och kör det med retur.
Grattis! Du lyckades skapa ett fantastiskt backup -skript som säkerhetskopierar två viktiga skalskript i din arbetskatalog. Vi kanske flyttar saker senare när projektet blir större, men det fungerar för tillfället. Låt oss gå vidare till säkerhetskopiering i molnet, vi använder GitHub för detta (även om det finns många andra Git -lösningar för säkerhetskopiering, de är ungefär samma.) Git är en verisionskontrollprogramvara som låter dig säkerhetskopiera redigeringar till din programvara när du gör dem till en server, medangör det också möjligt för dig att ladda ner hela kopior av din programvara bakom ett lösenord eller nyckel. Det är avgörande för att spara din programvara, särskilt när vi migrerar till säkrade Linux -instanser som ibland går sönder när en enda kodrad misslyckas, vilket gör att du är inlåst medan din kod kanske inte säkerhetskopieras om du inte får chansen att stödja den Upp automatiskt, som vi kommer att täcka.
Om du inte redan använder en Virtual Machine Ubuntu vid denna tidpunkt, rekommenderar jag att jag använder en Virtual -maskin i Ubuntu vid denna tid operationer på din dator. Vi kommer att flytta koden till en webbserver inom en snar framtid, men vi vill se till att det finns åtminstone några få lager av säkerhet bakom vår webbserver som är resistenta mot phishing och använder ett antal Linux -paket för att göra detta. Om du fortfarande vill använda Mac OS är du välkommen att söka efter och installeraE Nödvändiga paket online, men det kanske inte finns alternativ för varje paket som denna bok eller serie kommer att täcka.
Låt oss lägga till några kommandon för att begå vårt arbete med säkerhetskopieringsskriptet genom att köra kommandot sudo ascript
# ...
git add –all
git commit -m “backup”
git push -u origin master
Återigen, kontrollera X för att spara.
Nu måste vi göra en engångskonfiguration för detta projekt. Eftersom det snart kommer att vara ett GIT -projekt, behöver vi inte skriva varje kommando varje gång vi distribuerar från ett git -förvar, men vi får tag på detta när vi skriver våra distributionsskript. För att börja, låt oss se till att vi är i rätt katalog och initialisera Git -förvaret och generera SSH -nycklar.
cd /path/to/directory
git init
git branch -m master
ssh-keygen
När vi har skrivit ssh-keygen bör den nya nyckeln sparas i hemmappen under en mapp som heter .ssh. Det kallas id_rsa.pub. Låt oss hitta den här nyckeln och kopiera den. Att se det,
cd ~
cat .ssh/id_rsa.pub
Kopiera texten som returneras av det sista kommandot och skapa ett konto hos din GIT -leverantör (idealiskt Github) innan du lägger till SSH -tangenten till ditt konto. När du har ett konto klickar du på den övre högra menyn och anger inställningar innan du lägger till din SSH -nyckel i SSH- och GPG -tangenter under åtkomst i menyn. Välj Lägg till en SSH -tangent och lägg till din genom att klistra in den och ge den en titel, innan du sparar och återvänder till GitHub för att skapa ett nytt arkiv. Detta liknar andra GIT -leverantörer, du måste läsa deras dokumentation. I den nya arkivkonfigurationen, ge ditt förvar ett beskrivande namn och bestäm om du vill publicera det och se till att inte konfigurera inga filer för inkludering ännu. När förvaret har skapats, kopiera klonen med SSH -url och klistra in den i följande kommando.
git remote add git://… (your remote URL)
Nu kan du flytta tillbaka till ditt förvar med CD, du känner till detta. Prova ditt backup -skript nu med säkerhetskopiering
Stor! Nu kan vi verkligen få kodning. Låt oss installera Django nu när vi har ett bra grepp om bash och git. Django låter oss automatiskt säkerhetskopiera vår programvara, Bash kan göra detta också men Django bör ha en enklare säkrare implementering (den kan inaktiveras och konfigureras lättare).
För att installera programvara i Ubuntu kommer vi att använda sudo apt-get-kommandot. Låt oss först uppdatera och uppgradera programvaran vi redan hade. Detta kan göras med sudo apt-get-uppdatering och sudo apt-get upgrade -y. Låt oss sedan installera Python och vår virtuella miljö, hemmet till vår kod, med följande kommando: sudo apt-get install Python-is-python3 python3-venv
Detta är allt du behöver för att komma igång med Django när det gäller programvaruinstallationer i Ubuntu -instansen. För Windows och Linux bör detta vara ganska enkelt, men för Mac kanske du vill installera en virtuell maskin ochLinux på den med en gratis eller betald virtuell miljö som VirtualBox eller Paralells Desktop och återskapar stegen ovan för att installera en Ubuntu -miljö. Ubuntu är avgörande i det här fallet eftersom det är programvaran som webbplatserna kör och det gör det möjligt för dem att vara värd för webbplatser med all ovannämnda programvara.
Låt oss gräva in i Django.
I vår katalog igen, med
python -m venv venv # Skapar den virtuella miljön där koden lagras
source venv/bin/activate # Aktiverar den virtuella miljön
pip install Django
django-admin startproject mysite . # Där mysite är projektet börjar jag i min nuvarande katalog.
Django kommer bara att komma igång, för Django är värd för webbservern och gör allt vi behöver för att få en grundläggande lokal webbplats igång. Nu när vi har Django installerat, låt oss redigera inställningarna lite för att det ska fungera hur vi behöver. Låt oss först skapa en ny app
python manage.py startapp feed
Du kommer att märka att den första appen heter Feed. Appen ska kallas vad du vill, och vi skapar nya appar, men namnet på varje app måste vara konsekvent varje gång appen hänvisas till i koden. För att lägga till en ny app kommer vi alltid att redigera inställningarna. Med nano,
nano app/settings.py
I inställningarna, hitta installerade_apps och separera [] i 3 rader. Använd fyra utrymmen på den tomma mittlinjen, lägg till "flöde" eller namnet på din app. Det här avsnittet av inställningarna. Ppy bör se ut:
INSTALLED_APPS = [
'feed',
]
Innan vi glömmer, låt oss testa att Django arbetar. Med hjälp av kommandot python manage.py runserver 0.0.0.0:8000 kan vi köra servern och sedan navigera i en webbläsare på datorn som kör koden till http: // localhost: 8000 och se ett exempel webbsida (det fungerar!) Avsluta servern med Control C, samma som alla andra kommandon.
Låt oss nu gräva till att skriva en pythonkod. Django har tre huvudkomponenter, alla drivs av kod helt. Komponenterna kallas modell, vy och mall, och var och en är på en högre respektive lägre nivå innan webbsidan levereras till användaren.
Modellen är koden som lagrar information i databasen för hämtning, sortering och rendering.
Vyn bestämmer hur modellen återges, manipuleras och modifieras, nästan varje vy kommer att använda en modell direkt.
Mallen är HTML -koden med några extra klockor och visselpipor som kallas mallspråk. Mallen återges av vyn där den är fylld med pythonkod ochKontext som modeller och information (USA: s strängar och heltal) från vyn.
Django har också andra komponenter, inklusive men inte begränsat till:
Inställningar, som konfigurerar appen som vi diskuterade.
URL: er, som är mönster som användaren följer för att få tillgång till specifika delar av webbapplikationen.
Formulär, som definierar hur information som skickas till servern hanteras och återges till databasen såväl som till användaren. Dessa är grunden för att bearbeta information på serversidan och kan acceptera alla typer av information som datorlagringarna, framför allt textsträngar, siffror och sanna/falska booleans (vanligtvis kryssrutor).
Mallar, som är HTML -kod- och mallspråk och överbrygga klyftan mellan Python och HTML, vilket innebär att Python -information kan serveras som HTML -kod som vem som helst kan komma åt och kan säkra en webbplats med begränsad åtkomst, samtidigt som Python -kod är tillgänglig för webben och användbar för en mängd olika ändamål på en fjärrenhet som inte gör deteed är nära servern.
Statiska filer, som vanligtvis är JavaScript och dess bibliotek som servern serverar och är länkade till mallen.
Mediefiler, som servern tjänar eller är externt värd, eller bara skrivna till servern innan de behandlas och publiceras till en annan server (en hink) för värd.
Middleware, som är kodbitar som körs samtidigt som varje vy och betraktas som "inkluderade" i vyn.
Kontextprocessorer, som bearbetar sammanhanget för varje vy och används för att lägga till extra sammanhang.
Tester, som validerar att användaren eller begäran klarar vissa krav innan vyn återges.
Konsumenter, som dikterar hur websockets hanterar och svarar på kommunikation.
Admin, som används för att registrera modeller så att de kan manipuleras i detalj på Django Admin -sidan, där databasen kan administreras via ett grafiskt gränssnitt.
Selleri, som definierar asynkrona uppgifter delar av Django -koden kan börjanning innan du omedelbart fortsätter till nästa uppgift eller kodrad.
Django kan ha många andra komponenter, som vi kommer att diskutera i detalj här. Det finns många sätt att göra Django mer funktionella, lägga till webbutvecklingar, som är snabba, strömlinjeformade kommunikationskanaler, selleri, som kör asynkrona uppgifter och en mängd andra mjukvaror för att utöka Django, särskilt i visningsfunktionerna, där de flesta av koden körs. Visa funktioner är nyckeln eftersom de vanligtvis förklarar varje kod som är specifik för ett specifikt URL -mönster eller ett avsnitt av servern.
Låt oss först utforska visningsfunktioner. Visa funktioner börjar med import som betecknar kod som kommer att användas i vyn och definieras med regelbundna funktionsdefinitioner eller klasser. De enklaste vyerna definieras av funktionsdefinitionen def och returnerar en httpresponse med en grundmall. Låt oss börja med att definiera en grundvy för att returnera texten "Hello World". Kom ihåg att varje gång du lägger tillfrån ett uttalande som def, om, medan du, etc, måste du lägga till fyra utrymmen för var och en av de föregångande definitionerna du vill använda på din funktion. Vi kommer att komma in på vad var och en av dessa betyder snart.
Redigera filen med nano och lägg till följande rader från vår webbplats katalog och lägg till följande rader i slutet av
from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
Djangos httpresponse svarar med en textsträng, betecknad med öppningen och stängningen. Varje gång du skickar information till en funktion eller klass, som begäran eller en sträng, måste du använda parentes (, öppna och stänga).
Det här är inte allt vi behöver för att se vår åsikt ännu. Naturligtvis har vi inte sagt till servern var vyn är exakt, vi måste fortfarande definiera en väg som vyn ska göra. Låt oss börja med att definiera en grundläggande sökväg i app/urls.py, så kommer vi in i väggrupper senare.
I app/urls.py, lägg till en rad efter importmeddelandena efter början av att importera den vy vi just skapade.
from feed import views as feed_views
Låt oss nu definiera visningsmönstret. Visa mönster har tre komponenter, sökvägskomponenten, som berättar för servern var vyn finns inom servern (URL -sökvägen som användaren skriver in i navigeringsfältet för att komma in på webbsidan), vynkomponenten där vyn anges och en Vänligt namn för vyn så det är enkelt att hämta sitt mönster när du arbetar med en mall, särskilt så att det är namn kan ändras och uppdateras om det behövs för att göra plats för en annan vy eller ta ett mer logiskt namn. Det är meningsfullt att göra saker på detta sätt och vara flexibel, eftersom din kodbas kommer att vara en ständigt föränderlig miljö som behöver flexibilitet och improvisation för att vara värdefull och lätt att arbeta med. Så här kommer din åsikt att se ut, du kan lägga till detta i urlpatterns = [avsnittet av app/urls.py. Visningsmönstret definieras med de tre komponenterna som beskrivs ovan och en funktion som kallas sökväg. Dina URL -mönster är en lista, så se till att alltid avsluta varje objekt i demmed ett komma, eftersom detta separerar var och en. Varje objekt bör också gå på en ny linje, återigen med fyra utrymmen innan det, precis som appen i inställningar.py. Vi definierar den första komponenten i vyn med en tom strängfunktion för att skapa en vy som körs på webbserverns rotkatalog. Dina webbadresser.py ska nu se ut
from feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
Detta är grunden för att skapa en webbplats med Django som är helt statisk. För att skapa en mer dynamisk webbplats där vi kan börja cacheinformation, som bilder, videor, ljud och mer, måste vi använda modeller, som vi kommer att utforska nästa. Låt oss nu kontrollera vår kod och köra servern. För att kontrollera koden för fel, kör: Kör:
python manage.py check
Om det finns några felmeddelanden bör du noggrant granska de ändringar du gjorde i din app och se om det finns något som måste fixas, som ett främmande eller bristande utrymme, en extra karaktär, en oklart sträng, alla skrivfel, alla av misstag Raderat tecken eller något annat. När du läser igenom felmeddelandet (om du har ett) bör du kunna se sökvägen till en fil du skapade eller redigeras tillsammans med ett radnummer, så titta på den filen och raden och se om du kan fixa något som finns där . Om du har fixat problemet, kör ovanstående kommando igen. När din programvara är redo att köra och arbetar ser du utgången "Systemkontroll identifierade inga problem." Nu är du redo att gå. Kör servern med:
python manage.py runserver 0.0.0.0:8000
Öppna nu en webbläsare och navigera till http: // localhost: 8000. Du bör se texten som returneras i parentesen och citat för HTTPRESPES -funktionen i din åsikt. Detta är bara ett grundläggande exempel, men om du har gjort det så långt förstår du grunderna för hur Linux, Bash, Python och Django fungerar. Låt oss gräva djupare i någon databasmodellering och utforska kraften i en pythonklass för att lagra information. Sedan kommer vi att börja få tag på HTML och CSS innan vi gör vår webbplats fullt ut, flexibel och säker med JavaScript och maskininlärning.
Klasserna lagras i modellerna. Redigera app/modeller.py med hjälp av Nano och lägg till en ny klass. En klass definieras med klassdefinitionen och skickas en superklass som den ärver från, i detta fall modeller.model. Klassens namn kommer efter klassdefinitionen, och efter klassdefinitionen A: (kolon) används, innan attributen och funktionsdefinitionerna är bundna till klassen betecknas nedan. Vår klassBehöver ett ID som vi kan använda för att hämta det och hålla det unikt, och det behöver också ett textfält för att lagra lite information. Senare kan vi lägga till en tidsstämpel, filer, booleans (sanna eller falska definitioner som kan hjälpa vår kod att fatta beslut om vad vi ska göra med modellen, och kan användas för att sortera den), en instans för att binda modellen till en användare loggad in i servern och mer. Låt oss packa upp koden
from django.db import models # Importen som används för att definiera vår klass och det är attribut
class Post(models.Model): # Definitionen av vår klass själv
id = models.AutoField(primary_key=True) # ID för vår modell, en automatiskt genererad nyckel som låter oss fråga modellen, hålla den unik och är användbar när vi behöver interagera med modellen när den har skapats.
text = models.TextField(default='') # Attributet som våra klassaffärer, i detta fall, en text, som inte är en tom sträng.
Stäng och spara filen som vi gjorde tidigare för att avsluta.
Det finns många andra fält och alternativ som vi kommer att utforska när vi uppdaterar den här klassen när vår app utvecklas, men detta är de grundläggande nödvändigheterna av att skapa en app för att publicera lite text. Men denna modell fungerar inte ensam. Som beskrivits tidigare kommer vi att behöva ett anpassat vy och anpassat URL -mönster för att få denna modell att fungera, och vi kommer också att behöva ett formulär tillsammans med en mall. Låt oss utforska formuläret först.
För att definiera ett formulär redigerar du app/forms.py med nano och lägg till följande rader. Vi kommer att behöva två import, våra formulärklasser, såväl som modellen vi skapade (Feed.Models.Post), en klassdefinition som liknar modellen och ett fält tillsammans med en underklass som heter META som kommer att definiera modellen som formen interagerar med. Formuläret kan också ha en initialiseringsfunktion som ställer in den baserat på information i begäran, modellen eller på annat sätt kommer vi att utforska detta senare.
Modellformulär är så användbara eftersom de kan skapa en modell eller också redigera en modell,Så vi kommer att använda dem för båda. Låt oss definiera en i form.py
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',)
Detta är grunderna i hur en form och modell ser ut. Denna modellform kan användas för att instansera eller redigera ett inlägg och ändra texten som den innehåller. Vi tittar på att integrera denna form i en vy nästa. Låt oss först göra migrationer och migrera databasen så att vår kod kan interagera med modellen när den körs. För att göra detta, kör följande kommandon:
python manage.py makemigrations
python manage.py migrate
Det kommer att ta en minut att köra, men när det görs kommer det att göra det möjligt för modellen i vyer, mellanprogram eller någon annanstans i programvaran. Låt oss fortsätta med att göra en vy där vi kan se vår modell. Redigera flöde/visningar. Ppy och lägg till följande kod, som nämnts. Du behöver inte lägga till någonting efter # -tecknet, den koden är kommentarer som används för att beteckna information om koden. Vi börjar med att importera vår modell i vyerna och lägga till den i ett sammanhang där vi kan göra den i en mall som en lista för display. Därefter lägger vi till en mall där vi kan göra formuläret och modellen med en knapp för att skapa ett nytt objekt baserat på modellen och publicera den på servern. Detta låter komplicerat, så låt oss bara ta det steg för steg. Innan vi är klar med vyn, låt oss skapa en mall som bara gör modellen och se till att vi kan se den genom att skapa ett nytt inlägg i skalet. Så här ska den åsikten se ut:
from feed.models import Post
from django.shortcuts import render, redirect
from django.urls import reverse
def feed(request):
posts = Post.objects.all() # Fråga alla inlägg i databasen hittills
return render(request, 'feed/feed.html', {
'posts': posts,
})
Allt ser ganska enkelt ut tills vi kommer till botten. Render, värdet som returneras av funktionen istället för i ett HTTP -svar som föregående exempel, tar alltid en begäran som sin första input, accepterar ett sammanhang (i detta fall inläggen i databasen), som nu kan återges i mallen och returnerar mallen som definieras i funktionen. Mallen kommer att bli ett HTML -dokument med lite språk som heter Jinja2, som gör Python -information till HTML.
För att börja skapa mallar ska du skapa två kataloger i flödet.
mkdir feed/templates
mkdir feed/templates/feed
Redigera sedan en mall i katalogen ovan, mata/mallar/mata och lägg till koden för det här exemplet. Låt oss titta på mallen för det här exemplet.
<!doctype HTML>
<html>
<body>
<legend>Feed</legend>
<hr>
{% for post in posts %}
<p>{{ post.text }}</p>
{% endfor %}
</body>
</html>
Detta är en mycket enkel mall. Den definierar öppnings- och stängning av HTML -taggar, en dokumenttyp, en kroppstaggen med en legendtitel, en paus -tagg som lägger till en liten linje över skärmen och en för slinga som gör varje inlägg i listan över inlägg som ett stycke i mallen. Detta är allt som krävs för att göra inlägg, men det finns ingen i databasen än. Låt oss skapa några med skalet. Vi kan köra skalet med hanter.py
python manage.py shell
Låt oss nu importera vår inläggsmodell
from feed.models import Post
Därefter skapar vi ett enkelt inlägg med en sträng och lämnar skalet. Strängen kan vara vad som helst, så länge är det giltigt text.
Post.objects.create(text='hello world')
exit()
Slutligen måste vi lägga till ett URL -mönster till vårt foder. Eftersom vår flödesapp kommer att använda flera webbadresser och vi vill hålla filstorlekar små, låt oss skapa en lokal webbadress.py i vår flödesapp som ser ut så här:
from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
Vi kommer också att behöva redigera URLS.py i basappen, vad vi beslutade att kalla den, detta var den första katalogen vi skapade. Redigera app/app.py och lägg till följande till URL -mönstren
from django.urls import include # upptill
urlpatterns = [
# ... tidigare kod här
path('feed/', include(('feed.urls'), namespace='feed')),
]
Nu, när vi kör servern med Python Manage.py RunServer, kommer vi att se sidan vi skapade eftersom vi har modell, vy och mall samt URL -mönster, tillsammans med objekt i databasen. Låt oss sedan implementera det formulär vi skapade och börja skapa våra egna inlägg. Men innan vi skriver för mycket kod, låt oss göra en säkerhetskopia med skriptet vi skrev tidigare, säkerhetskopia. Kör det här skriptet i skalet, vänta några ögonblick, och all kod kommer att säkerhetskopieras till vårt git -förvar.
backup
Att implementera formuläret är relativt enkelt. Vi kommer att importera vårt formulär, lägga till en handlare efter begäran till vyn och spara inlägget i databasen innan vi omdirigerar till samma vy. Vi kan använda den omdirigeringsfunktionen vi redan importerade, och en annan funktion som kallas omvänd för att få URL för visningsmönstret. Vi kommer att fråga detta med strängen "Feed: Feed" eftersom namnområdet för det medföljande mönstret är matning, och vyn kallas också foder.
from feed.forms import PostForm
def feed(request):
posts = Post.objects.all() # Fråga alla inlägg i databasen hittills
if request.method == 'POST': # Hantera postförfrågan
form = PostForm(request.POST) # Skapa en instans av formuläret och spara data på den
if form.is_valid(): # Validera formuläret
form.save() # Spara det nya objektet
return redirect(reverse('feed:feed')) # Omdirigera till samma URL med en GET -begäran
return render(request, 'feed/feed.html', {
'form': PostForm(), # Se till att skicka formuläret i sammanhanget så att vi kan göra det.
'posts': posts,
})
Nu måste vi uppdatera mallen för att redovisa det nya formuläret. Vi kan göra detta genom att använda
https://glamgirlx.com/sv/practical-web-based-deep
https://glamgirlx.com/sv/practical-web-based-deep -
Lämna mig ett tips i Bitcoin med denna adress: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE
© Glam Girl X 2025