Maybaygiare.org

Blog Network

de mest populære Python-Netrammer i 2021

Matt Sanders den 02.juli 2020

Netrammer er kraftfulde værktøjer. De abstraherer de fælles aspekter af opbygning af hjemmesider og API ‘ er og giver os mulighed for at opbygge rigere, mere stabile applikationer med mindre indsats.

en bred vifte af internetrammer er tilgængelig for os i Python. Nogle er bevist favoritter med store økosystemer og samfund. Andre udmærker sig i nichebrugssager eller til specifikke former for udvikling. Stadig, andre er up-and-comers med overbevisende nye grunde, der skal overvejes. Læs videre for at udforske mulighederne og finde ud af, hvad der fungerer bedst for dig.

Hvis du allerede ved, hvad der interesserer dig, skal du bruge nedenstående links til at springe videre:

  • Sådan vælger du den rigtige ramme til dine behov
  • Full-Stack rammer vs. Mikrorammer vs. Asynkrone rammer
  • Python Full-Stack rammer
  • Mikrorammer til Python
  • asynkrone rammer til Python
  • asynkrone rammer til Python
  • hvilken Python-ramme er bedst for dig?

Hvis du vil have hjælp til at beslutte, kan du også springe direkte til vores anbefalinger oversigt.

Sådan vælger du den rigtige ramme til dine behov

rammer er designet til at løse forskellige problemer og foretage afvejninger for bedre at betjene deres tilsigtede målgrupper. Hvis alle havde de samme mål, ville vi kun have brug for en ramme! Når du vurderer rammer, inkluderer nogle vigtige overvejelser:

  • hvad er den sandsynlige eventuelle størrelse og kompleksitet af det, du bygger?
  • foretrækker du at vælge dine egne biblioteker, konfiguration og applikationsstruktur, eller ønsker du et mere kurateret sæt indstillinger, der er valgt til dig på forhånd?
  • hvor vigtigt vil performance være for dit projekt?
  • hvor hurtigt vil du være i stand til at udvikle og implementere din ansøgning?
  • hvor længe vil din ansøgning være omkring, og hvor mange udviklere er tilbøjelige til at arbejde på det?

derudover skal du overveje kvaliteten af tilgængelig dokumentation for potentielle valg og størrelsen på samfundet omkring et projekt – dette påvirker både udvalget af eksisterende plugins eller integrationer, du kan udnytte for at gøre udviklingen hurtigere, og sandsynligheden for at kunne få hjælp, når du sidder fast.

husk disse aspekter, når du udforsker dine muligheder – der er mange af dem! Afhængigt af projektets levetid skal du også overveje, om en ramme sandsynligvis vil vokse med dig. Vil det være en god pasform til din ansøgning både nu og i fremtiden?

Full-Stack-rammer vs. Mikrorammer vs. asynkrone rammer

Python-rammer kan groft opdeles i tre lejre, full-stack-rammer, mikrorammer og asynkrone rammer. Full-stack rammer er generelt fokuseret på at opbygge større, fuldt udstyrede applikationer og tilbyder en masse fælles funktionalitet ud af boksen. Hvis du ønsker at opbygge noget komplekst hurtigt eller ønsker rimelige standarder for, hvordan du sætter en applikation sammen uden selv at træffe alle valg, er en full-stack-ramme et godt valg. Full-stack-rammer giver dig generelt fornuftige standarder for kommunikation med databaser, templating dine synspunkter, styring af køer, baggrundsjob og andre almindelige aspekter af større applikationer.

Mikrorammer er generelt fokuseret på at levere en lille kerne af funktionalitet og inviterer udvikleren til at træffe deres egne valg om, hvilke biblioteker og teknologier der skal tilføjes til anden funktionalitet. Dette har fordelen ved at give mulighed for meget mere kontrol over applikationsdesign og kan resultere i bedre applikationsydelse. De kræver typisk, at udvikleren vælger deres eget databaseabstraktionslag og andre biblioteker. Mikrorammer kan være et godt valg til mindre, mere snævert fokuserede applikationer, API-udvikling eller applikationer, hvor ydeevne er vigtigere.

asynkrone rammer er fokuseret på at levere høje niveauer af ydeevne ved at tillade et meget stort antal samtidige forbindelser. Mens du kan øge samtidigheden af de fleste synkrone rammer betydeligt ved at parre dem med async-kompatible servere som gevent, går naturligt asynkrone rammer et skridt videre med en helt asynkron stak. Generelt kræver asynkrone rammer mere strenghed i programmeringsstil og har et mere begrænset sæt plugins. Asynkrone rammer er gode, når du skal levere en bestemt funktionalitet ved et meget højt volumen.

Full-Stack Python rammer

Django

Django.JPEG

Django er den mest populære Full-stack ramme for Python. Det har et velfortjent ry for at være yderst produktiv, når man bygger komplekse internetapps. Døbt” internetrammen for perfektionister med deadlines”, dens fokus er hurtig udvikling med veldokumenterede muligheder for almindelige sager.Django har eksisteret i mere end et årti (første udgivelse i 2006), og den er moden, omfattende, veldokumenteret og har et meget stort samfund. Det er en meningsfuld ramme, hvilket betyder, at det tager mange beslutninger for udvikleren. Positive ved denne tilgang gør det hurtigere at starte udvikling, “velsignede” integrationer, der bare fungerer, og mere headspace til at fokusere på de tilpassede behov i dit projekt i stedet for hvilke biblioteker du skal bruge. Derudover har Django-projekter en tendens til at se temmelig ens ud, hvilket gør det lettere for udviklere hurtigt at rampe op på projekter, der er nye for dem, og for teams at organisere deres indsats konsekvent.

Django tilbyder meget ud af kassen, herunder sin egen objekt-relationelle mapper (ORM) til at arbejde med databaser, en standard tilgang til godkendelse og autorisation, en automatisk genereret admin interface (nyttigt til hurtig prototyping), integreret caching og mere.Django er god til små og store projekter og kan skaleres godt til rimelige belastninger og er blevet brugt af mange trafiksites, herunder Instagram. Django har asynkrone funktioner i version 3.0, med async visninger og mellemvare kommende i version 3.1.mens Django traditionelt fokuserer på Full-stack-applikationer, er Django også velegnet til at udvikle API-kun backend-applikationer. Modne integrationer eksisterer for hurtigt at opbygge både hvile og Graphkl API ‘ er med Django.

bundlinje: De facto-standarden med god grund, Django er den dominerende full-stack ramme for Python. Fremragende til at komme i gang hurtigt og med en dokumenteret track record for skalering, Django passer godt til mange projekter. Hvis du foretrækker at tilpasse mere end Django tillader, skal du overveje Pyramid og mikrorammerne. Hvis du har brug for meget høj samtidighed, skal du udforske de asynkrone rammer.

pyramide

pyramide.JPG

Pyramid er en anden populær full-stack ramme. Med rødder i Pylons-projektet har det været under udvikling så længe som Django og er også en meget moden mulighed.

I modsætning til Django er Pyramid mindre meningsfuld. Det giver routing, renderers og kommandolinjeværktøjer til bootstrapping af et projekt, men giver dig mulighed for at vælge dit eget databaselag, skabelonsystem og mere via et omfattende sæt plugins.

med sin grundlæggende fleksibilitet er Pyramid en dejlig mellemgrund, hvis du prøver at vælge mellem en ramme med fuld stak eller en mikroramme. Pyramid giver dig mulighed for at starte mindre end Django og vokse kompleksiteten af din kodebase efter behov. Denne fleksibilitet i bibliotekssupport kan være vigtig, når du har specialiserede krav eller er stærkt forbundet med systemer, som Django muligvis ikke integrerer med godt (ældre databaser er et almindeligt eksempel).Pyramid har en dedikeret fanbase og et aktivt samfund, der sætter pris på dens vækst-som-du-go-natur og grundlæggende fleksibilitet. Hvis du går med Pyramid, forventer ekstra arbejde for at vælge komponenter på forhånd. Dette kan dog være tid godt brugt i det lange løb, hvis det giver dig mulighed for permanent at fremskynde aspekter af udvikling, der er kritiske for dig.

Bottom line: En kraftfuld blanding af fleksibilitet og kontrol gør Pyramid til et overbevisende alternativ til Django til nogle projekter.

Internet2py

internet2py.2PY er en full-stack ramme, der fokuserer på nem udvikling, med sin egen internetbaserede IDE, debugger og implementering kontrol. Det blev inspireret af Ruby on Rails og Django og følger en MVC (Model Vis Controller) design.

projektet startede som et undervisningsværktøj og har vægt på fælles funktionalitet med fornuftige standarder. Det har en meget lettere indlæringskurve end de fleste rammer og er ekstremt let at installere og komme i gang med. Dokumentation er stor og masser af funktionalitet kommer indbygget, herunder en scheduler, 2FA hjælpere, og en dejlig billetsystem, der bliver automatisk befolket af fejl i produktionen.2PY har et mindre fællesskab end Django og nogle andre rammer, men en meget venlig. Masser af tutorials og ressourcer er tilgængelige.

bundlinje: Bedst egnet til nyere programmører eller udviklere, der eksperimenterer med internetudvikling. Ikke en god pasform til nye større kommercielle projekter.

TurboGears

turbogears.JPG

faktureret som “ramme, der skaleres med dig”, TurboGears giver dig mulighed for at starte din applikation så enkel som en enkelt fil (som en mikroramme) eller skalere helt op til en full-stack app med kommandolinjeværktøjer til understøttelse af styring. I denne forstand ligner det Pyramid, med fordelen ved mere kontrol/tilpasning på bekostning af at kræve mere arbejde på forhånd for at bestemme, hvordan du vil strukturere din app, og hvilke biblioteker du vil integrere.

standard ORM for TurboGears er den fremragende Kvlalchemy. TurboGears har interessante forskelle i, hvordan den håndterer routing og dens standard templating løsning. I modsætning til de fleste full-stack-rammer håndteres routing gennem et objekthierarki i stedet for at kortlægge regulære udtryk til controllere (kortlægning er tilgængelig som en alternativ mulighed). Standardskabelonsystemet til TurboGears er Kajiki, et sprog inspireret af SLT.

Bottom line: TurboGears skalerer godt med meget kontrol fra små projekter til større. Pyramid tilbyder dog et lignende udvalg af fleksibilitet og er sandsynligvis et bedre valg for de fleste mennesker.

masonit

masonit.JPG

Masonite er en relativt ny (2017) ramme, der har en lignende designfilosofi som Django, men sigter mod at forbedre nogle almindelige smertepunkter. Det tilbyder forbedret kode stilladser, routing mellemvare, og indbygget support til e-mail-afsendelse, S3 upload, og kø.

masonit arkitektur er meget udvidelig og dens integrerede kapaciteter er imponerende. Dokumentation er god, og der er en aktiv Slack-kanal til support. Den bruger sin egen ORM, Orator, baseret på ActiveRecord.

som en nyere ramme er Masonitts samfund lille, men voksende. Det er aktivt forbedret og har meget at lide. I betragtning af dens mindre mindshare er det sværere at finde udviklere, der er fortrolige med masonit, men hvis de ekstra muligheder uden for boksen passer godt til dine behov, kan det fremskynde din udvikling.

Bottom line: En nyere udfordrer, Masonite gør almindelige opgaver som e-mail-styring, uploade filer til skyen og betalingsbehandling let ud af kassen.

Mikrorammer til Python

kolbe

kolbe.PNG

kolbe er en utrolig populær løsning til både internet apps og microservices. Oprindeligt inspireret af Ruby-rammen Sinatra, Flask fokuserer på at levere et kernesæt af funktionalitet (anmodningshåndtering, routing, overholdelse af regler, templating) og tilbyder et modulopbygget design til tilføjelse af alt andet, du har brug for.

som et resultat er det utroligt enkelt at starte en applikation.

from flask import Flask, escape, requestapp = Flask(__name__)@app.route('/')def hello(): name = request.args.get("name", "World") return f'Hello, {escape(name)}!'

Flask har en bred vifte af tilgængelige udvidelser, så du kan integrere dine egne valg til opbevaring, databaseinteraktion, godkendelse og autorisation, sikkerhed og mere. Det tager tid at integrere og konfigurere dine valg, men apps kan bygges trinvist og inkluderer ikke biblioteker og kode til ting, som din applikation ikke bruger.kolbe-apps starter typisk i en enkelt fil, men kan skaleres til at være meget store. Der er almindelige mønstre til at arrangere kolbe-apps, og kolbe tilbyder også tegninger som en måde at gøre større applikationer mere modulære og håndterbare.

Bottom line: ekstremt fleksibel, Flask er fantastisk til brugervendte internetapps, API ‘ er og mikroservices. Kolbe er den mest populære mikroramme til Python.

flaske

flaske-logo.svg.PNG

flaske har en lignende syntaks til kolbe (det går faktisk forud for det med et år), men distribueres som en enkelt fil uden afhængigheder uden for python-standardbiblioteket. Dette gør det nemt at køre i ethvert miljø, herunder steder, hvor installation af biblioteker er vanskelige. Det betyder også, at afhængighedsstyring kan være triviel, hvilket kan være godt for mindre projekter.

from bottle import route, run, template@route('/hello/<name>')def index(name): return template('<b>Hello {{name}}</b>!', name=name)run(host='localhost', port=8080)

funktionssættet ligner meget kolbe, men det aktive samfund er meget mindre. De tilgængelige plugins er også mere begrænsede. Derudover er der færre tutorials, og det kan være sværere at finde kodeeksempler eller få hjælp.

flaske er for det meste rettet mod apps med meget små kodebaser og har ikke en klar vej til skalering af kodeorganisation, da tingene bliver komplekse. Enkelhed er i fokus. At have færre afhængigheder kan forenkle implementeringen meget (bare hold fast bottle.py i din projektmappe) og få dig hurtigere fra en prototype til en produktionsapp.

bundlinje: Perfekt til personlige projekter, små apps eller implementeringsscenarier, hvor det er vanskeligt at styre komplekse afhængigheder.

H3: CherryPy

cherrypy_logo_big.PNG

CherryPy er en anden moden mikroramme (omkring siden 2002) med sine egne fans. En stor forskel fra kolbe og flaske er, at CherryPy er objektorienteret og fokuserer på at være så “pythonisk” som muligt. Sagt på en anden måde, CherryPy sigter mod at gøre skrivning af en internetapp så ligner skrivning af generel python-kode som muligt. Lad os se på et eksempel:

import cherrypyclass HelloWorld(object): @cherrypy.expose def index(self): return "Hello World!"cherrypy.quickstart(HelloWorld())

Du kan se, at appen er defineret som en klasse i modsætning til den funktionsbaserede tilgang til kolbe. Også selve routingen er objektbaseret;` @ cherrypy ‘ dekoratøren markerer, hvilke objektmetoder der skal omdannes til ruter, hvor dekoratørerne i kolbe definerer ruterne selv. Nogle udviklere foretrækker denne form for implicit routing, mens andre finder det udfordrende.

en af Cherrypys styrker er dens internetserver, som er samlet i rammen. Det er hurtigt, produktionsklar, HTTP / 1.1-kompatibel, tråd-pooled og kan bruges med enhver Python-applikation. Faktisk bruger nogle udviklere Cherrypys server til at køre andre (ikke-CherryPy) apps, fordi det er så nemt at konfigurere og bruge.

CherryPy inkluderer også en masse indbygget funktionalitet, herunder sessionsstyring, godkendelse, statiske indholdshåndterere, caching, profilering og mere. Plugins er tilgængelige, som udnytter et rigt sæt udvidelsespunkter.

Cherrypys samfund er meget mindre end Flask ‘ s, hvilket betyder et mindre fællesskab af plugins, færre tutorials osv.

bundlinje: Værd at se, hvis du foretrækker en objektorienteret udviklingsstil.

Falcon

falcon.JPG

Falcon er en præstationsfokuseret ramme for opbygning af REST API ‘ er og mikroservices. I betragtning af dets fokus på hastighed giver Falcon et begrænset funktionssæt: routing, mellemvare, kroge, stærk fejl/undtagelseshåndtering og hjælpere til at gøre enhedstest let.Falcon kaster enhver interesse i brugervendte apps og fokuserer på at betjene JSON gennem REST endpoints. Bemærk resten verbum (GET) i dette kodeeksempel:

import falconclass QuoteResource: def on_get(self, req, resp): """Handles GET requests""" quote = { 'quote': ( "I've always been more interested in " "the future than in the past." ), 'author': 'Grace Hopper' } resp.media = quoteapi = falcon.API()api.add_route('/quote', QuoteResource())

i betragtning af dets tuning og entalfokus er Falcon radikalt hurtigere (20-75 gange!) end Django og kolbe i benchmarks for meget grundlæggende anmodninger. Andre stærke aspekter af Falcon er idiomatiske HTTP-fejlresponser (et almindeligt smertepunkt ved konstruktion af API ‘ er) og ligetil undtagelseshåndtering. Det kører på PyPy og understøtter Cython på CPython, to muligheder at overveje for maksimal ydelse.

Hvis du kan lide ideen om Falcon, men ønsker en mere komplet løsning, skal du kigge på Hug, en ramme bygget oven på Falcon, der tilføjer versionsstyring, automatisk dokumentation og typedrevet automatisk validering.

Bottom line: Hvis du vil bygge meget performant REST/JSON API ‘ er, kan Falcon være noget for dig.

asynkrone rammer for python

Sanic

d803ca00-616c-11e9-86e0-d26ba19c9170.PNG

Sanic er en relativt ny (første udgivelse i 2016) asynkron netramme og server, “skrevet til at gå hurtigt”.

mens de fleste af full-stack og mikrorammer på denne liste har eksisteret i et årti eller mere, har tilføjelsen af asyncio i Python 3.5+ åbnet dørene til en helt ny generation af meget performante asynkrone rammer. Sanic er en af de mest etablerede muligheder i denne nye generation.

Sanic syntaks er temmelig ligner kolbe, med tilføjelse af end-to-end async støtte:

from sanic import Sanicfrom sanic.response import jsonapp = Sanic()@app.route("/")async def test(request): return json({"hello": "world"})if __name__ == "__main__": app.run(host="0.0.0.0", port=8000)

det har stærke routing kapaciteter, mellemvare, streaming, Netdåse support, cookie management, rute versionering, statisk fil servering og mere. Sanic er en naturlig pasform, hvis du har brug for at håndtere langvarige forbindelser som f.eks.

med en asynkron ramme skal du pakke dit hoved rundt om asynkron programmering i Python med dens relaterede advarsler, kompleksitet og fejlfindingsudfordringer. Det er værd at tage sig tid til at vurdere, om du virkelig har brug for udførelsen af en fuldt async API, men hvis du gør det, er Sanic et kig værd!

bundlinje: En moden, etableret mulighed for at udvikle meget performante asynkrone API ‘ er

FastAPI

fastapi.PNG

FastAPI er nyere end Sanic (første udgivelse i begyndelsen af 2019), men får fart hurtigt. Det udmærker sig ved at bygge hvile eller grafik API ‘ er, og kan håndtere synkrone anmodninger, asynkrone anmodninger, streaming og hjemmesider.

det har også indbygget understøttelse af godkendelse og autorisation, datavalidering, JSON-serialisering og har automatisk API-dokumentation efter OpenAPI-standarden.

from fastapi import FastAPIapp = FastAPI()@app.get("/")def read_root(): return {"Hello": "World"}@app.get("/items/{item_id}")def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}

Fastapis funktionssæt er virkelig imponerende, og det rammer et sødt sted med sin kombination af fleksibilitet og let udvikling. Det er meget omhyggeligt designet og udnytter type hinting og afhængighed injektion bredt for at reducere fejl i udvikling. Derudover er Fastapis dokumentation og redigeringsstøtte fremragende.Fastapis syntaks ligner meget kolbe, hvilket gør det til et godt valg, hvis du ønsker at migrere eksisterende kolbe-kodebaser til en fuldt async-løsning.

bundlinje: En ramme på stigningen, FastAPI er værd at udforske til dit næste async-projekt.

Starlette

starlette.PNG

Starlette er en let ASGI-ramme og værktøjssæt, der giver primitiver og modulær integration, så du kan opbygge din applikation med en hvilken som helst grad af kontrol, du ønsker.

ASGI er en efterfølger til async, der leverer en standardgrænseflade mellem async-kompatible servere, rammer og applikationer. Bemærk, at ASGI understøtter både synkrone og asynkrone operationer, og ASGI inkluderer en implementering af bagudkompatibilitet.

som en ramme binder Starlette sine forskellige funktioner sammen for dig, herunder understøttelse af Netbocket, understøttelse af grafik, baggrundsopgaver i processen, understøttelse af session og cookie, CORS, Gcip, statiske filer og meget mere. Du kan også bruge hvert stykke uafhængigt, vælge og vælge specifikke stykker af værktøjssættet.

da Starlette først er et værktøjssæt, kan Brug som en ramme føles mere sammensat, med bekymringer eksponeret separat:

from starlette.applications import Starlettefrom starlette.responses import JSONResponsefrom starlette.routing import Routeasync def homepage(request): return JSONResponse({'hello': 'world'})app = Starlette(debug=True, routes=)

FastAPI er faktisk bygget oven på Starlette og tilføjer syntaks bekvemmelighed og yderligere funktioner. For de fleste hold er FastAPI sandsynligvis et bedre sted at starte, men Starlette tilbyder maksimal kontrol og et kraftfuldt sæt primitiver.

Bottom line: Hvis du vil arbejde tæt på metallet på dine egne async-værktøjer, er Starlette et fantastisk sted at starte.

Tornado

Tornado er en ældre async-ramme, der blev oprettet længe før asyncio-kapaciteter blev bagt i Python. Oprindeligt oprettet af FriendFeed og først udgivet i 2009, Tornado er en gennemprøvet løsning til skalering i titusinder af åbne forbindelser i Python.kernen i Tornado er en meget tilpasselig applikationsmodel med stærke underliggende netværksbiblioteker. Det omfatter routing, templating, session og cookie management, indfødte hjemmeside support, sikkerhedsfunktioner og har en moden vifte af muligheder for forskellige datalagre. Det er mindre fuldt udstyret end noget som Django, men har meget flere funktioner indbygget end en typisk mikroramme. Tornado bruger verb-stil metoder på anmodning handlerklasser, så det egner sig til en mere objektorienteret udviklingsstil:

import tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world")def make_app(): return tornado.web.Application()if __name__ == "__main__": app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start()

Tornado fortsætter med at blive aktivt forbedret og vedligeholdt med et robust samfund. Det bruges af Facebook, kvora og andre i deres produktionsarkitektur. Tornado 6+ bruger Asyncio under hætten og kræver Python 3.5+, men Tornado 5 kan bruges sammen med Python 2.7 og nyere. Kører på Python 3.5+, Tornado asynkrone coroutiner bruger den indfødte `async` / `afventer` syntaks. For tidligere versioner tilbyder Tornado en generatorsyntaks, der har lignende muligheder. Især har Tornado en moden bro til snoet, som giver dig mulighed for at køre både snoede apps og biblioteker oven på Tornado.

Bottom line: En gennemprøvet løsning til skalering i massivt antal samtidige anmodninger, Tornado er værd at udforske, hvis du vil have en etableret mulighed med et stærkt samfund, er bundet til ældre kodebaser eller skal bruge ældre versioner af Python.

hvilken Python – ramme er bedst for dig?

som det skal fremgå af denne liste, er der mange gode muligheder. Faktisk er der mange andre rammer tilgængelige for Python – vi har med vilje begrænset denne artikel til kun de rammer, vi mener er mest værd at overveje i 2020.

et godt sted at starte er de kriterier, vi nævnte i begyndelsen af denne artikel. Hvad er dine mål? Leder du efter at eksperimentere med noget nyt, bygge noget hurtigt med gennemprøvet teknologi eller lære nye færdigheder? Hvor mange mennesker vil arbejde på din kodebase, og hvor længe vil det være omkring? Disse er alle nyttige spor om det rigtige valg.

der er ingen ramme, der er perfekt til alle, men her er nogle generelle forslag:

  • hvis du ønsker at komme hurtigt i gang med en veletableret løsning, hvor ressourcer er lette at finde, skal du bruge Django eller kolbe
  • hvis du kan lide at starte små og forstå (eller kontrollere) alle stykker af din applikation, udforske pyramide, kolbe eller CherryPy
  • hvis du bygger en API eller mikroservice, der skal være meget performant, se på Falcon, fastapi eller sanic.
  • hvis du er en begyndende programmør eller bare lærer at gøre internetudvikling, er 2PY eller flaske venlige, nemme måder at komme i gang
  • hvis du ønsker at udforske up-and-comings rammer med nye ideer og måder at gøre ting på, så tjek Masonite og FastAPI

fandt du denne artikel nyttig eller se noget, du er uenig i eller synes, bør forbedres. Lad os vide, vi værdsætter din feedback!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.