Python, ett av de mest populära programmeringsspråken, har länge varit känd för sin enkelhet och läsbarhet. Trots detta har det under åren fått mer avancerade funktioner, särskilt i relation till typannotering och datavalidering. Dessa funktioner spelar en central roll för att säkerställa att koden är korrekt, lättläst och effektiv. Två viktiga verktyg för detta syfte är Python’s typhinting-system och Pydantic, ett kraftfullt bibliotek för datavalidering, särskilt användbart i webbutveckling med ramverket FastAPI.
En typhint, eller typanvisning, är en del av Pythons dynamiska typningssystem som ger utvecklaren möjlighet att ange vilken typ av data en variabel eller funktion förväntar sig att hantera. Ett vanligt exempel är användningen av Union från typing-modulen. Här kan man definiera att en variabel kan vara av olika typer, såsom en sträng eller ett heltal:
Det moderna och mer kortfattade sättet att uttrycka samma sak ser ut så här:
Sådana typanvisningar ger utvecklare och verktyg som linters en bättre förståelse för koden, vilket leder till färre fel och mer förutsägbart beteende. Python’s typing-modul erbjuder flera användbara generiska typer, såsom List, Dict, Callable och Iterator, som kan användas för att uttrycka olika datatyper och funktionaliteter i koden på ett tydligt sätt.
Ett av de mer avancerade alternativen inom typning är användningen av Literal, som gör det möjligt att begränsa en variabels värden till en specifik uppsättning av värden. Detta kan vara användbart när man vill definiera strikta gränser för vad som är giltiga indata för en funktion:
Typanvisningar som dessa, även om de är frivilliga i Python, bidrar till att förhindra logiska fel i koden. Det gör det också möjligt för utvecklare att fånga potentiella buggar redan vid utvecklingstid, snarare än vid körning.
När det gäller hantering av tid och datum kan Python’s typhinting också spela en viktig roll. Ett exempel på detta är att ange att en funktion tar ett datetime-objekt som indata och returnerar en sträng:
Denna typ av typning hjälper utvecklare att snabbt förstå vad varje funktion förväntar sig och vad den kommer att returnera, vilket förbättrar både produktiviteten och kodens läsbarhet.
För mer komplexa datatyper, som en lista med ordböcker, kan man använda typhinting för att uttrycka en sådan struktur, vilket gör koden mer självdokumenterande och lättare att underhålla:
När det gäller Pydantic, ett bibliotek som ofta används i samband med FastAPI, är det ett kraftfullt verktyg för att validera och bearbeta data. Pydantic använder Python’s typhinting-system och ger utvecklare möjlighet att modellera data på ett mycket detaljerat sätt. Detta gör det möjligt att både validera indata och säkerställa att de överensstämmer med de specifikationer som har definierats.
Fördelarna med att använda Pydantic är många:
-
Det bygger på standard Python-typer, vilket gör det lätt att använda och förstå.
-
Eftersom Pydantic är optimerat för hastighet och dess kärnkomponenter är skrivna i Rust, kan det hantera stora mängder data snabbt och effektivt.
-
Det finns stort stöd från utvecklarsamhället, och Pydantic används ofta tillsammans med populära Python-ramverk som Django Ninja och SQLModel.
-
Pydantic gör det enkelt att generera JSON-scheman, vilket underlättar integration med andra system.
Pydantic spelar en central roll i FastAPI, där det ansvarar för validering av all data som kommer in i systemet och säkerställer att den är korrekt formaterad och av rätt typ innan den behandlas. Det gör det också möjligt för utvecklare att undvika att skriva omfattande valideringslogik för varje enskilt fält eller datatyp. Istället kan man skapa Pydantic-modeller som automatiskt hanterar de flesta av dessa uppgifter.
FastAPI och Pydantic tillsammans gör det möjligt att bygga mycket snabba och effektiva webbtjänster, där all data som tas emot från användare eller externa API:er valideras och säkerställs utan att påverka prestandan. Detta gör att utvecklare kan fokusera mer på applikationens funktionalitet snarare än att ständigt hantera fel och datavalidering.
För att fullt ut förstå de komplexa fördelarna med Pydantic är det viktigt att gå igenom dokumentationen och experimentera med olika typer av validering. Medan typanvisningar kan ge grundläggande förståelse och säkerställa att variabler har rätt typ, tar Pydantic det ett steg längre genom att ge en robust och flexibel lösning för datavalidering och hantering av komplexa datamodeller.
Hur man skapar en REST API med autentisering och användarhantering i FastAPI
För att bygga en funktionell och säker backendapplikation är det avgörande att integrera autentisering och hantering av användardata. Ett vanligt sätt att implementera detta är genom att använda JSON Web Tokens (JWT) och skapa en användarmodell som möjliggör användarinloggning och rättighetskontroll. Här följer en genomgång av hur man skapar en REST API i FastAPI som stöder bilduppladdning och användarautentisering.
När du utvecklar en REST API är det viktigt att förstå säkerhetsaspekterna för att skydda din applikation. Utan en ordentlig autentisering kan din API vara utsatt för missbruk, särskilt när det gäller resurser som till exempel uppladdning av bilder. En användare utan autentisering kan potentiellt fylla din server med oönskade data eller skada systemet på andra sätt.
Först skapar vi en enkel bilduppladdnings-API. Genom att använda FastAPI kan vi enkelt skapa slutpunkter för att hantera bildfiler och metadata, till exempel bilmodeller, årsmodeller och priser. Ett exempel på en POST-begäran för att lägga till en bil kan se ut så här:
Denna API tillåter användare att lägga till bilar med specifik information, inklusive en bild. Bilden kan vara en länk som pekar på en lagringstjänst som Cloudinary, där bilderna behandlas och lagras. För att säkerställa att bara auktoriserade användare kan lägga till nya bilar, måste autentisering och användarbehörigheter implementeras.
För att börja med autentisering, skapar vi en AuthHandler-klass. Denna klass ansvarar för att hantera användarnas lösenordshantering och skapa JWT-tokens. Här implementeras en säker metod för att kryptera lösenord och skapa tokens som används för att validera användare vid varje begäran:
Här kodas användartokens som innehåller information om användarens ID och användarnamn. Detta token används för att autentisera varje begäran. För att säkerställa att endast autentiserade användare kan skapa eller modifiera bilar, måste varje API-endpoint som hanterar resurser skyddas med en autentiseringstoken.
För att tillåta användarregistrering, skapade vi en användarmodell i models.py-filen. Denna modell innehåller användarens ID, användarnamn och lösenord. Lösenordet ska krypteras innan det lagras i databasen. Vi kan använda en POST-begäran för att registrera en användare:
Denna metod gör följande:
-
Krypterar användarens lösenord.
-
Kontrollerar om användarnamnet redan finns i databasen.
-
Registrerar användaren om användarnamnet är unikt.
När användaren är registrerad kan de logga in genom att använda sitt användarnamn och lösenord för att få ett JWT-token, vilket möjliggör autentisering i senare begärningar. JWT-tokenet kommer att användas som en autentisering för alla skyddade endpoints.
För att testa API:t lokalt kan du använda interaktiv dokumentation som FastAPI genererar. Genom att besöka 127.0.0.1:8000/docs kan användare testa att ladda upp bilder och skapa bilresurser via webgränssnittet. För att lägga till en bil med en bild via HTTPie kan du köra:
Det är också viktigt att ha i åtanke att denna typ av API kräver noggrann hantering av användarbehörigheter och säkerhet. Om en angripare kan få tillgång till API:t utan autentisering kan systemet snabbt utnyttjas för att till exempel lägga upp stora mängder oönskad data eller bilder. Därför bör alltid autentisering och auktorisation implementeras innan API:t görs tillgängligt på en offentlig server.
En annan viktig aspekt är att säkerställa att lagring och bearbetning av bilder sker på ett säkert sätt, särskilt om bilderna ska användas för något mer än bara visning (t.ex. analys eller maskininlärning). Att använda tjänster som Cloudinary för att lagra bilder på ett säkert sätt kan minska risken för serverbelastning och säkerställa att endast säkra filer laddas upp.
Hur Scanningsfrekvenser och Modeformer För Tunna Balkbroar Kan Återfås Genom Enkelt Testfordon
Hur Trump-anhängare och icke-Trump-anhängare ser på säkerhet och auktoritet i uppfostran och politik
Hur kontrolleras polymerisationsdjupet i SLA-utskrifter av mikrofluidiska strukturer?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский