Maybaygiare.org

Blog Network

De Mest Populære Python Web Rammer i 2021

Matt Sanders på juli 02, 2020

Web rammer er kraftige verktøy. De abstraherer de vanlige aspektene ved å bygge nettsteder og Api-Er, og lar oss bygge rikere, mer stabile applikasjoner med mindre innsats.

Et bredt spekter av webrammer er tilgjengelig for Oss I Python. Noen er bevist favoritter med store økosystemer og samfunn. Andre utmerker seg i nisjebrukssaker eller for bestemte typer utvikling. Fortsatt, andre er up-and-comers med overbevisende nye grunner til å bli vurdert. Les videre for å utforske alternativene og finne hva som vil fungere best for deg.

hvis du allerede vet hva som interesserer deg, bruk linkene nedenfor for å hoppe fremover:

  • Hvordan Velge Riktig Rammeverk for Dine Behov
  • Full-Stack Frameworks vs. Microframeworks vs. Asynkrone Rammeverk
  • Python Full-Stack Rammeverk
  • Mikroframeworks For Python
  • Asynkrone Rammeverk for Python
  • hvilken Python web framework er best for deg?
  • hvis du vil ha hjelp til å bestemme, kan du også hoppe rett til vår anbefalinger oversikt.

    Hvordan Velge Riktig Rammeverk for Dine Behov

    Rammer er utformet for å løse ulike problemer og gjøre avveininger for å bedre betjene sitt tiltenkte publikum. Hvis alle hadde de samme målene, ville vi bare trenge ett rammeverk! Som du vurdere rammer noen viktige hensyn inkluderer:

    • hva er sannsynlig eventuell størrelse og kompleksitet av hva du bygger?
    • foretrekker du å velge dine egne biblioteker, konfigurasjon og programstruktur eller ønsker et mer kuratert sett med alternativer valgt for deg på forhånd?
    • Hvor viktig vil ytelsen være for prosjektet ditt ?
    • Hvor raskt vil du kunne utvikle og distribuere søknaden din?
    • Hvor lenge vil søknaden være rundt og hvor mange utviklere er sannsynlig å jobbe med det?i tillegg bør du vurdere kvaliteten på tilgjengelig dokumentasjon for potensielle valg og størrelsen på samfunnet rundt et prosjekt – dette påvirker både rekkevidden av eksisterende plugins eller integrasjoner du kan utnytte for å gjøre utviklingen raskere og sannsynligheten for å kunne få hjelp når du sitter fast.

      Hold disse aspektene i bakhodet når du utforsker alternativene dine-det er mange av dem! Avhengig av prosjektets levetid, bør du også vurdere om et rammeverk sannsynligvis vil vokse med deg. Vil det være en god passform for din søknad både nå og i fremtiden?

      Full-Stack Frameworks vs. Microframeworks vs. Asynchronous Frameworks

      Python-rammer kan grovt deles inn i tre leirer, full-stack-rammer, microframeworks og asynkrone rammer. full-stack frameworks er generelt fokusert på å bygge større, fullverdige applikasjoner og tilbyr mye vanlig funksjonalitet ut av boksen. Hvis du ønsker å bygge noe komplekst raskt eller vil ha rimelige mislighold for hvordan du setter sammen et program uten å gjøre alle valgene selv, er et full-stack rammeverk et godt valg. Full-stack rammer generelt gi deg fornuftige standarder for kommunikasjon med databaser, templating dine synspunkter, administrere køer, bakgrunnsjobber og andre vanlige aspekter av større applikasjoner.Mikroframeworks er generelt fokusert på å gi en liten kjerne av funksjonalitet og invitere utvikleren til å ta egne valg om hvilke biblioteker og teknologier som skal legges til for annen funksjonalitet. Dette har fordelen av å tillate mye mer kontroll over applikasjonsdesign og kan resultere i bedre applikasjonsytelse. De krever vanligvis at utvikleren velger sitt eget databaseabstraksjonslag og andre biblioteker. Microframeworks kan være et godt valg for mindre, mer smalt fokuserte applikasjoner, API-utvikling eller applikasjoner der ytelse er viktigere.

      Asynkrone rammer er fokusert på å levere høye ytelsesnivåer ved å tillate et svært stort antall samtidige tilkoblinger. Mens du kan øke samtidigheten til de fleste synkrone rammer betydelig ved å parre dem med asynkrone servere som gevent, går innfødte asynkrone rammer et skritt videre med en helt asynkron stabel. Vanligvis krever asynkrone rammer mer strenghet i programmerings stil og har et mer begrenset sett med plugins. Asynkrone rammer er gode når du trenger å gi en bestemt funksjonalitet på et svært høyt volum.

      Full-Stack Python Rammer

      Django

      Django.jpeg

      Django Er den mest populære full-stack rammeverk For Python. Den har et velfortjent rykte for å være svært produktiv når bygge komplekse web apps. Kalt «the web framework for perfeksjonister med tidsfrister», er fokuset rask utvikling med veldokumenterte alternativer for vanlige saker.Django har eksistert i mer enn et tiår (første utgivelse i 2006), Og Det er modent, omfattende, godt dokumentert og har et veldig stort samfunn. Det er en sta rammeverk, noe som betyr at det gjør en rekke beslutninger for utbygger. Positive av denne tilnærmingen gjør det raskere å starte utvikling, «velsignede» integrasjoner som bare fungerer, og mer headspace for å fokusere på de tilpassede behovene til prosjektet ditt i stedet for hvilke biblioteker som skal brukes. I Tillegg Har Django-prosjekter en tendens til å se ganske like ut, noe som gjør det lettere for utviklere å rampe opp raskt på prosjekter som er nye for dem og for lag å organisere sin innsats konsekvent.Django tilbyr mye ut av boksen, inkludert sin egen object-relational mapper (ORM) for å jobbe med databaser, en standard tilnærming til autentisering og autorisasjon, et automatisk generert admin-grensesnitt (nyttig for rask prototyping), integrert caching og mer.Bra for prosjekter små og store, Django kan skaleres godt for rimelige belastninger og Har blitt brukt av mange nettsteder med høy trafikk, inkludert Instagram, Mozilla og Washington Post. Django har asynkrone funksjoner i versjon 3.0, med asynkrone visninger og mellomvare kommende i versjon 3.1.Mens tradisjonelt fokusert på full-stack webapplikasjoner, Er Django også godt egnet til å utvikle API-bare backend applikasjoner. Eldre integrasjoner finnes for raskt å bygge BÅDE REST Og GraphQL Apier Med Django.

      Bunnlinje: De-facto standard Med god grunn, Django er den dominerende full-stack rammeverk For Python. Utmerket for å komme i gang raskt og med en track record for skalering, Er Django en flott passform for mange prosjekter. Hvis Du foretrekker å tilpasse Mer Enn Django tillater, bør Du vurdere Pyramid og microframeworks. Hvis du trenger svært høy samtidighet, kan du utforske de asynkrone rammene.

      Pyramide

      pyramide.jpg

      Pyramid Er en annen populær full-stack rammeverk. Med røtter i Pylons-prosjektet har Det vært i utvikling så lenge Django og er også et veldig modent alternativ.

      I motsetning Til Django Er Pyramid mindre sta. Det gir ruting, renderers, og kommandolinjeverktøy for bootstrapping et prosjekt, men gir deg muligheten til å velge din egen database lag, templating system, og mer via et omfattende sett med plugins.

      Med sin grunnleggende fleksibilitet Er Pyramid en fin midtbane hvis du prøver å bestemme mellom en full-stack rammeverk eller en microframework. Pyramid lar deg starte mindre Enn Django og øke kompleksiteten til kodebasen etter behov. Denne fleksibiliteten i biblioteket støtte kan være viktig når du har spesialiserte krav eller grensesnitt tungt med systemer Som Django ikke kan integrere med godt (eldre databaser er et vanlig eksempel).

      Pyramid har en dedikert fan base og et aktivt samfunn som setter pris på sin voksende natur og grunnleggende fleksibilitet. Hvis Du går Med Pyramid, forvent ekstra arbeid å velge komponenter på forhånd. Dette kan imidlertid være tid godt brukt i det lange løp hvis det tillater deg å permanent akselerere aspekter av utvikling som er kritiske for deg.Bunnlinjen: En kraftig blanding av fleksibilitet og kontroll gjør Pyramid til Et overbevisende alternativ Til Django for noen prosjekter.

      Web2Py

      web2py.web2py er en full-stack rammeverk som fokuserer på enkel utvikling, med sin egen web-basert IDE, debugger, og distribusjon kontroller. Det ble inspirert Av Ruby on Rails Og Django og følger EN MVC (Model View Controller) design.

      prosjektet startet som et undervisningsverktøy og har vekt på felles funksjonalitet med fornuftige mislighold. Den har en mye enklere læringskurve enn de fleste rammer og er ekstremt enkel å installere og komme i gang med. Dokumentasjon er stor og masse funksjonalitet kommer innebygd, inkludert en planlegger, 2FA hjelpere, OG en fin billettsystem som blir automatisk befolket av defekter i produksjonen.web2py har et mindre samfunn Enn Django og noen andre rammer, men en veldig vennlig en. Mange tutorials og ressurser er tilgjengelige.

      Bunnlinje: Best egnet til nyere programmerere eller utviklere eksperimentere med webutvikling. Ikke en god passform for nye større kommersielle prosjekter.

      TurboGears

      turbogears.Fakturert som

      standard ORM for TurboGears er den utmerkede SQLAlchemy. TurboGears har interessante forskjeller i hvordan den håndterer ruting og standard templating løsning. I motsetning til de fleste fullstack-rammer, håndteres ruting gjennom et objekthierarki i stedet for å tilordne regulære uttrykk til kontrollere (tilordning er tilgjengelig som et alternativ). Standard mal system For TurboGears Er Kajiki, EN XSLT-inspirert språk.

      Bottom line: TurboGears skalerer godt med mye kontroll fra små prosjekter til større. Pyramid tilbyr imidlertid et lignende utvalg av fleksibilitet og er sannsynligvis et bedre valg for de fleste.

      Masonitt

      masonitt.jpg

      Masonite Er et relativt nytt (2017) rammeverk som har en lignende designfilosofi Som Django, men har som mål å forbedre noen vanlige smertepunkter. Det tilbyr forbedret kode stillas, ruting mellomvare, og innebygd støtte for sending av e-post, s3 opplasting, og kø.Masonites arkitektur er svært utvidbar og dens integrerte evner er imponerende. Dokumentasjonen er god, og det er en aktiv Slack-kanal for støtte. Den bruker sin EGEN ORM, Orator, basert På ActiveRecord.Som et nyere rammeverk Er Masonites samfunn lite, men voksende. Det er aktivt forbedret og har mye å like. Gitt sin mindre mindshare, det er vanskeligere å finne utviklere kjent Med Masonite, men hvis de ekstra out-of-the-box evner er en god passform for dine behov det kan fremskynde din utvikling.En nyere kandidat, Masonite gjør vanlige oppgaver som e-posthåndtering, opplasting av filer til skyen og betalingsbehandling enkelt ut av boksen.

      Mikroframeverk For Python

      Kolbe

      kolbe.png

      Flask Er en utrolig populær løsning for både web apps og microservices. Opprinnelig inspirert Av Ruby rammeverk Sinatra, Fokuserer Flask på å gi en kjerne sett av funksjonalitet (forespørsel håndtering, ruting, wsgi compliance, templating) og tilbyr en modulær design for tillegg av alt annet du trenger.

      som et resultat er det utrolig enkelt å starte et program. Du kan bygge en fungerende webapplikasjon på bare noen få linjer:

      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 et bredt spekter av tilgjengelige utvidelser, slik at du kan integrere dine egne valg for lagring, databaseinteraksjon, godkjenning og autorisasjon, sikkerhet og mer. Det vil ta tid å integrere og konfigurere valgene dine, men apper kan bygges trinnvis og vil ikke inkludere biblioteker og kode for ting programmet ditt ikke bruker.

      Flask apps starter vanligvis i en enkelt fil, men kan skalere til å være veldig stor. Det er vanlige mønstre for å arrangere flask apps og flask tilbyr også tegninger som en måte å gjøre større applikasjoner mer modulære og håndterbare. Ekstremt fleksibel, Er Flask stor for bruker-vendt web apps, Apier og mikrotjenester alike. Kolbe er den mest populære mikrorammearbeid For Python.

      Flaske

      Flaske-logo.svg.png

      Bottle har en lignende syntaks Til Flask (det faktisk forut det med et år), men distribueres som en enkelt fil uten avhengigheter utenfor python standard biblioteket. Dette gjør det enkelt å kjøre i alle miljøer, inkludert steder der det er vanskelig å installere biblioteker. Det betyr også at avhengighetshåndtering kan være trivielt, noe som kan være bra for mindre prosjekter.

      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)

      funksjonssettet er ganske lik Kolbe, men det aktive samfunnet er mye mindre. De tilgjengelige plugins er også mer begrenset. I tillegg er det færre opplæringsprogrammer, og det kan være vanskeligere å finne kodeeksempler eller få hjelp. Bottle er for det meste rettet mot apper med svært små kodebaser og har ikke en klar bane for skaleringskodeorganisasjon ettersom ting blir komplekse. Enkelhet er fokus. Å ha færre avhengigheter kan forenkle distribusjonen mye (bare hold deg fast bottle.py i prosjektkatalogen) og få deg fra en prototype til en produksjon app raskere.

      Bunnlinje: Flott for personlige prosjekter, små apper eller distribusjonsscenarier der det er vanskelig å håndtere komplekse avhengigheter.

      H3: CherryPy

      cherrypy_logo_big.png

      CherryPy er en annen moden mikroramme (rundt siden 2002) med egne fans. En stor forskjell fra Kolbe og Flaske er At CherryPy er objektorientert og fokuserer på å være så «pythonic» som mulig. Sagt på en annen måte, CherryPy har som mål å skrive en webapp som ligner på å skrive generell python-kode som mulig. La oss 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 definert som en klasse, i motsetning til den funksjonsbaserte tilnærmingen Til Flask. Også rutingen selv er objektbasert;` @cherrypy ‘ dekoratøren markerer hvilke objektmetoder som skal omdannes til ruter, hvor i kolbe dekoratørene definerer rutene selv. Noen utviklere foretrekker denne formen for implisitt ruting, mens andre synes det er utfordrende.

      en Av cherrypys styrker er webserveren, som er samlet inn i rammen. Det er raskt, produksjonsklart, HTTP/1.1-kompatibel, tråd-samlet og kan brukes med Alle Python WSGI søknad. Faktisk bruker noen utviklere Cherrypys webserver til å kjøre ANDRE (ikke-CherryPy) wsgi-apper fordi det er så enkelt å sette opp og bruke.

      CherryPy inneholder også mye innebygd funksjonalitet, inkludert økt ledelse, autentisering, statisk innhold handlers, caching, profilering og mer. Plugins er tilgjengelige som tapper inn i et rikt sett med utvidelsespunkter.

      CherryPy samfunn er mye mindre Enn Flask, noe som betyr et mindre fellesskap av plugins, færre tutorials, etc.

      Bunnlinje: Verdt en titt hvis du foretrekker en objektorientert utvikling stil.

      Falk

      falk.jpg

      Falcon Er et ytelsesfokusert rammeverk for å bygge REST-Api-Er og mikrotjenester. Gitt sitt fokus på fart, Gir Falcon et begrenset funksjonssett: ruting, mellomvare, kroker, sterk feil / unntakshåndtering og WSGI-hjelpere for å gjøre enhetstesting enkelt.

      Falcon kaster noen interesse i bruker-vendt apps og fokuserer på å tjene JSON GJENNOM REST endepunkter. Merk resten verb (GET) i dette kodeeksemplet:

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

      Gitt sin tuning og singular fokus, Er Falcon radikalt raskere (20-75x!) Enn Django og Flask i benchmarks av svært grunnleggende forespørsler. Andre sterke aspekter Av Falcon er idiomatiske HTTP – feilresponser (et vanlig smertepunkt når du bygger Apier) og enkel unntakshåndtering. Den kjører På PyPy og støtter Cython På CPython, to alternativer å vurdere for maksimal ytelse.hvis Du liker Ideen Om Falcon, men ønsker en mer fullverdig løsning, ta en titt På Hug, et rammeverk bygget på Toppen Av Falcon som legger versjonshåndtering, automatisk dokumentasjon og typedrevet automatisk validering.

      Bottom line: Hvis Du vil bygge HØYTYTENDE REST/JSON Apier, Kan Falcon være noe for deg.

      asynkrone rammer for python

      Sanic

      d803ca00-616c-11e9-86e0-d26ba19c9170.sanic Er en relativt ny (første utgivelse i 2016) asynkron web rammeverk og server,

      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)

      Den har sterke ruting evner, mellomvare, streaming, WebSocket støtte, cookie ledelse, rute versjonskontroll, statisk fil servering og mer. Sanic er en naturlig passform hvis du trenger å håndtere langlivede tilkoblinger som WebSockets eller trenger et høyt nivå av samtidighet ut AV API.

      Med et asynkront rammeverk må du vikle hodet rundt asynkron programmering I Python, med tilhørende advarsler, kompleksitet og feilsøkingsutfordringer. Det er verdt å ta deg tid til å vurdere om du virkelig trenger ytelsen til en fullt async API, Men Hvis Du gjør Det, Er Sanic verdt En titt!

      Bunnlinje: Et modent, etablert alternativ for å utvikle høytytende Asynkrone Apier

      FastAPI

      fastapi.png

      FastAPI er nyere Enn Sanic (første utgivelse tidlig i 2019), men får fart raskt. Det utmerker seg ved å bygge REST Eller GraphQL Apier, og kan håndtere synkrone forespørsler, asynkrone forespørsler, streaming og websockets. Den har også innebygd støtte for autentisering og autorisasjon, datavalidering, json-serialisering og har automatisk API-dokumentasjon som følger 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}

      Funksjonen Sett FastAPI er virkelig imponerende, og det treffer en sweet spot med sin kombinasjon av fleksibilitet og enkel utvikling. Det er veldig gjennomtenkt utformet og utnytter type hinting og avhengighet injeksjon bredt for å redusere bugs i utvikling. I Tillegg Er FastAPI dokumentasjon og redaktør støtte utmerket.FastAPI syntaks er ganske lik Flask, noe som gjør Det til et godt valg hvis du ønsker å migrere eksisterende Kolbe kodebaser til et fullt async løsning.

      Bunnlinje: Et rammeverk på vei oppover, FastAPI er verdt å utforske for din neste async prosjekt.

      Starlette

      starlette.starlette Er en lett asgi rammeverk og verktøykasse, som gir primitiver og modulær integrasjon for å la deg bygge din søknad med noen grad av kontroll som du ønsker.ASGI er en etterfølger TIL WSGI, som gir et standardgrensesnitt mellom async-kompatible webservere, rammer og applikasjoner. MERK AT ASGI støtter både synkron og asynkron operasjoner OG ASGI inkluderer EN wsgi bakoverkompatibilitet implementering.Som et rammeverk knytter Starlette sammen sine ulike funksjoner for deg, inkludert WebSocket-støtte, GraphQL-støtte, bakgrunnsoppgaver i prosessen, økt-og informasjonskapselstøtte, CORS, GZip, statiske filer og mer. Du kan også bruke hver brikke uavhengig, plukke og velge bestemte deler av verktøysettet.Siden Starlette er en verktøykasse først, bruk som et rammeverk kan føles mer kompositorisk, med bekymringer eksponert 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 på Toppen Av Starlette, legge syntaks bekvemmelighet og flere funksjoner. For de fleste lag Er FastAPI sannsynligvis et bedre sted å starte, Men Starlette tilbyr maksimal kontroll og et kraftig sett med primitiver.Bunnlinjen: Hvis Du vil jobbe nær metallet på dine egne async-verktøy, Er Starlette et fantastisk sted å starte.

      Tornado

      Tornado Er en eldre async web rammeverk, opprettet godt før asyncio evner ble bakt Inn Python. Opprinnelig opprettet Av FriendFeed og først utgitt i 2009, Er Tornado en velprøvd løsning for skalering til titusenvis av åpne tilkoblinger I Python.Kjernen I Tornado er en svært tilpassbar applikasjonsmodell med sterke underliggende nettverksbiblioteker. Det inkluderer ruting, templating, session og cookie ledelse, native WebSocket støtte, sikkerhetsfunksjoner og har en moden rekke alternativer for ulike datalagre. Det er mindre fullverdig Enn Noe Som Django, men har mange flere funksjoner innebygd enn en typisk microframework. Tornado bruker verb-stil metoder på forespørsel handler klasser, så det gir seg til en mer objektorientert utvikling stil:

      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 fortsetter å bli aktivt forbedret og vedlikeholdt, med et robust samfunn. Den brukes Av Facebook, Quora og andre i deres produksjonsarkitektur.

      Tornado 6 + bruker asyncio under panseret og krever Python 3.5+, Men Tornado 5 kan brukes Med Python 2.7 og nyere. Kjører På Python 3.5+, Bruker Tornado asynkrone coroutines den innfødte` async ` / ` await ‘ syntaks. For tidligere versjoner, Tornado tilbyr en generator syntaks som har lignende evner. Spesielt Har Tornado en moden bro For Twisted, som lar deg kjøre Både Twisted apps og biblioteker på Toppen Av Tornado.En velprøvd løsning for å skalere inn i massive antall samtidige forespørsler, Tornado er verdt å utforske hvis Du vil ha et etablert alternativ med et sterkt fellesskap, er knyttet til eldre kodebaser eller må bruke eldre versjoner av Python.

      Hvilken Python web framework er best for deg?

      Som det burde være klart fra denne listen, er det mange gode alternativer. Faktisk er Det mange andre rammer tilgjengelig For Python – vi har med vilje begrenset denne artikkelen til bare de rammene vi mener er mest verdt å vurdere i 2020.

      et godt sted å starte er kriteriene vi nevnte i begynnelsen av denne artikkelen. Hva er dine mål? Er du ute etter å eksperimentere med noe nytt, bygge noe raskt med velprøvd teknologi, eller lære nye ferdigheter? Hvor mange mennesker vil jobbe på kodebasen din og hvor lenge vil den være rundt? Disse er alle nyttige ledetråder om det riktige valget.

      Det er ingen rammeverk som er perfekt for alle, men her er noen generelle forslag:

      • hvis du ønsker å komme raskt i gang med en veletablert løsning der ressursene vil være enkle å finne, bruk Django eller Flask
      • hvis du liker å starte små og forstå (eller kontrollere) alle delene av søknaden din, utforsk Pyramid, Flask eller CherryPy
      • hvis du bygger EN API eller microservice som må være svært effektiv, se På Falcon, fastapi eller sanic.
      • hvis du er en begynnelse programmerer eller bare lære å gjøre webutvikling, web2py eller Bottle er vennlige, enkle måter å komme i gang
      • Hvis du ønsker å utforske up-and-comings rammer med nye ideer og måter å gjøre ting, sjekk Ut Masonite Og FastAPI

      fant du denne artikkelen nyttig eller se noe du er uenig med eller tror bør forbedres. Gi oss beskjed, vi verdsetter din tilbakemelding!

    Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert.