Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Kom i gang med FastAPI - del 3

Denne guide bygger ovenpå vores tidligere guide (del 2), hvor du fik lavet et API med FastAPI til Python, således at du kunne hente data for både alle film og en enkelt film.

Du skal derfor først have gennemgået vores tidligere guide for at kunne følge med her. Link til den guide (del 2) er: https://github.com/coding-pirates-hillerod/python-fastapi-get-started-part2

Om denne guide

I denne guide vil du altså skulle bygge videre på dit API fra del 2, og her udvide det med en route, således at du nu også kan tilføje film til dit API's liste af film.

Helt konkret vil vi derfor i denne guide følge disse steps for at kode det:

  • Lave en route for at tilføje film
  • Starte din udviklingsserver
  • Se og afprøve dit API i din browser

Step 1: Lave en route for at tilføje film

Fra vores tidligere API har vi denne kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}

Og eneste vi skal nu er at tilføje en route, således at vi via vores browser kan tilføje en (eller flere) film til vores API's liste af film. Tilføj derfor følgende kode til dit API's kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}
@app.post("/movies")defcreate_movie(movie: Movies):
"""Create a new movie entry."""new_movie= {
"id": len(movies) +1,
"title": movie.title,
"director": movie.director,
"release_year": movie.release_year
}
movies.append(new_movie)
returnnew_movie

Det nye er altså her blot routen der starter fra kodelinjen med "@app.post("/movies")", hvilken blot vil gøre dig i stand til at tilføje film til dit API's liste af film via din browser.

Step 2: Starte din udviklingsserver

Hvis ikke en udviklingsserver allerede køre, så du kan se og bruge dit API, så start den lige igen fra en terminal med denne kommando:

fastapi dev main.py

Step 3: Se og afprøve dit API i din browser

Med det er du faktisk allerede færdig med selve koden i denne guide.

MEN hvor du tidligere i din browser kunne gå til fx http://127.0.0.1:8000/movies for få data for alle film, og fx http://127.0.0.1:8000/movies/1 for at få data om én film (her filmen med id'et 1), så er vi nødt til at gå til en anden url for der at kunne bruge vores nye route til at tilføje en ny film til vores API's liste af film.

Så får at kunne tilføje en film til dit API, så skal gå til denne url (som er en form for dokumentation af dit API, som automatisk genereres af din FastAPI kode):

http://127.0.0.1:8000/docs

Ved at gå til den url skulle du gerne se en side i din browser lignende dette:

fastapi_docs_page

Herfra vil du kunne se alle de routes vi indtil videre har kodet til vores API. Og for nu at tilføje en ny film til vores API's liste af film, så skal du først trykke på sektionen/bjælken med den grønne knap der starter med "POST".

Gør du det så skulle du gerne se at sektionen/bjælken folder sig ud til noget der gerne skulle se sådan her ud:

Screenshot 2025-10-09 at 09 58 59

Og for nu at prøve at tilføje en film, så skal du først trykke på den grå knap ude til højre med teksten "Try it out".

Trykker du på den knap, så skulle du gerne se en form for ny sektion folde sig ud a la nedenstående, som er den vi kan bruge til at tilføje en film:

Screenshot 2025-10-09 at 10 02 55

Og i denne nye sektion vil vi nu under afsnittet "Edit Value" kunne indtaste data for en ny film, og med tryk på den blå knap "Execute" kunne tilføje en film til vores API's liste af film.

Ville vi derfor gerne tilføje en ny film som fx "Star Wars: Episode III – Revenge of the Sith", produceret af George Lucas og udgivet i 2005, så kan vi indtaste disse data (og bagefter trykke på "Execute" knappen for tilføje den) på denne måde:

Screenshot 2025-10-09 at 10 16 46

Og trykker vi så herefter på den blå "Execute" knap, så vil vi under afsnittet "Responses" kunne se, at vi nu har tilføjet vores nye film (selve outputtet under "Responses" sektionen ser sikkert lidt mærkeligt ud for dig - og det er HELT okay! Men det vigtigste er at du under afsnittet "Response body" vil kunne se de data du har indtastet for den nye film, hvilket er et tegn på, at din film er blevet tilføjet dit API's liste af film):

Screenshot 2025-10-09 at 10 24 16

Med det har du så nu faktisk færdiggjort dit API, således at du via dette kan:

  1. Se data for din liste af alle film
  2. Se data for en enkelt film
  3. Tilføje en ny film

Hvis du vil se, at din nye film faktisk er blevet tilføjet dit API's liste af film, så tryk først på sektionen med teksten "/movies" (øverst i dokumentationen i din browser), og tryk derefter på den grå knap "Try it out" ude til højre i denne sektion, og så til sidst på den blå "Execute" knap for det.

Bidrag til dette materiale

Dette materiale er lavet med bidrag af:

Tak

Igen er der til denne guide gjort (rigtig godt) brug af RealPython artiklen "Get Started With FastAPI", hvorfor der (igen, igen) skal lyde et kæmpe tak til dem og alt det gode materiale om Python de laver ❤️

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Kom i gang med FastAPI - del 3

Denne guide bygger ovenpå vores tidligere guide (del 2), hvor du fik lavet et API med FastAPI til Python, således at du kunne hente data for både alle film og en enkelt film.

Du skal derfor først have gennemgået vores tidligere guide for at kunne følge med her. Link til den guide (del 2) er: https://github.com/coding-pirates-hillerod/python-fastapi-get-started-part2

Om denne guide

I denne guide vil du altså skulle bygge videre på dit API fra del 2, og her udvide det med en route, således at du nu også kan tilføje film til dit API's liste af film.

Helt konkret vil vi derfor i denne guide følge disse steps for at kode det:

  • Lave en route for at tilføje film
  • Starte din udviklingsserver
  • Se og afprøve dit API i din browser

Step 1: Lave en route for at tilføje film

Fra vores tidligere API har vi denne kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}

Og eneste vi skal nu er at tilføje en route, således at vi via vores browser kan tilføje en (eller flere) film til vores API's liste af film. Tilføj derfor følgende kode til dit API's kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}
@app.post("/movies")defcreate_movie(movie: Movies):
"""Create a new movie entry."""new_movie= {
"id": len(movies) +1,
"title": movie.title,
"director": movie.director,
"release_year": movie.release_year
}
movies.append(new_movie)
returnnew_movie

Det nye er altså her blot routen der starter fra kodelinjen med "@app.post("/movies")", hvilken blot vil gøre dig i stand til at tilføje film til dit API's liste af film via din browser.

Step 2: Starte din udviklingsserver

Hvis ikke en udviklingsserver allerede køre, så du kan se og bruge dit API, så start den lige igen fra en terminal med denne kommando:

fastapi dev main.py

Step 3: Se og afprøve dit API i din browser

Med det er du faktisk allerede færdig med selve koden i denne guide.

MEN hvor du tidligere i din browser kunne gå til fx http://127.0.0.1:8000/movies for få data for alle film, og fx http://127.0.0.1:8000/movies/1 for at få data om én film (her filmen med id'et 1), så er vi nødt til at gå til en anden url for der at kunne bruge vores nye route til at tilføje en ny film til vores API's liste af film.

Så får at kunne tilføje en film til dit API, så skal gå til denne url (som er en form for dokumentation af dit API, som automatisk genereres af din FastAPI kode):

http://127.0.0.1:8000/docs

Ved at gå til den url skulle du gerne se en side i din browser lignende dette:

fastapi_docs_page

Herfra vil du kunne se alle de routes vi indtil videre har kodet til vores API. Og for nu at tilføje en ny film til vores API's liste af film, så skal du først trykke på sektionen/bjælken med den grønne knap der starter med "POST".

Gør du det så skulle du gerne se at sektionen/bjælken folder sig ud til noget der gerne skulle se sådan her ud:

Screenshot 2025-10-09 at 09 58 59

Og for nu at prøve at tilføje en film, så skal du først trykke på den grå knap ude til højre med teksten "Try it out".

Trykker du på den knap, så skulle du gerne se en form for ny sektion folde sig ud a la nedenstående, som er den vi kan bruge til at tilføje en film:

Screenshot 2025-10-09 at 10 02 55

Og i denne nye sektion vil vi nu under afsnittet "Edit Value" kunne indtaste data for en ny film, og med tryk på den blå knap "Execute" kunne tilføje en film til vores API's liste af film.

Ville vi derfor gerne tilføje en ny film som fx "Star Wars: Episode III – Revenge of the Sith", produceret af George Lucas og udgivet i 2005, så kan vi indtaste disse data (og bagefter trykke på "Execute" knappen for tilføje den) på denne måde:

Screenshot 2025-10-09 at 10 16 46

Og trykker vi så herefter på den blå "Execute" knap, så vil vi under afsnittet "Responses" kunne se, at vi nu har tilføjet vores nye film (selve outputtet under "Responses" sektionen ser sikkert lidt mærkeligt ud for dig - og det er HELT okay! Men det vigtigste er at du under afsnittet "Response body" vil kunne se de data du har indtastet for den nye film, hvilket er et tegn på, at din film er blevet tilføjet dit API's liste af film):

Screenshot 2025-10-09 at 10 24 16

Med det har du så nu faktisk færdiggjort dit API, således at du via dette kan:

  1. Se data for din liste af alle film
  2. Se data for en enkelt film
  3. Tilføje en ny film

Hvis du vil se, at din nye film faktisk er blevet tilføjet dit API's liste af film, så tryk først på sektionen med teksten "/movies" (øverst i dokumentationen i din browser), og tryk derefter på den grå knap "Try it out" ude til højre i denne sektion, og så til sidst på den blå "Execute" knap for det.

Bidrag til dette materiale

Dette materiale er lavet med bidrag af:

Tak

Igen er der til denne guide gjort (rigtig godt) brug af RealPython artiklen "Get Started With FastAPI", hvorfor der (igen, igen) skal lyde et kæmpe tak til dem og alt det gode materiale om Python de laver ❤️

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Kom i gang med FastAPI - del 3

Denne guide bygger ovenpå vores tidligere guide (del 2), hvor du fik lavet et API med FastAPI til Python, således at du kunne hente data for både alle film og en enkelt film.

Du skal derfor først have gennemgået vores tidligere guide for at kunne følge med her. Link til den guide (del 2) er: https://github.com/coding-pirates-hillerod/python-fastapi-get-started-part2

Om denne guide

I denne guide vil du altså skulle bygge videre på dit API fra del 2, og her udvide det med en route, således at du nu også kan tilføje film til dit API's liste af film.

Helt konkret vil vi derfor i denne guide følge disse steps for at kode det:

  • Lave en route for at tilføje film
  • Starte din udviklingsserver
  • Se og afprøve dit API i din browser

Step 1: Lave en route for at tilføje film

Fra vores tidligere API har vi denne kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}

Og eneste vi skal nu er at tilføje en route, således at vi via vores browser kan tilføje en (eller flere) film til vores API's liste af film. Tilføj derfor følgende kode til dit API's kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}
@app.post("/movies")defcreate_movie(movie: Movies):
"""Create a new movie entry."""new_movie= {
"id": len(movies) +1,
"title": movie.title,
"director": movie.director,
"release_year": movie.release_year
}
movies.append(new_movie)
returnnew_movie

Det nye er altså her blot routen der starter fra kodelinjen med "@app.post("/movies")", hvilken blot vil gøre dig i stand til at tilføje film til dit API's liste af film via din browser.

Step 2: Starte din udviklingsserver

Hvis ikke en udviklingsserver allerede køre, så du kan se og bruge dit API, så start den lige igen fra en terminal med denne kommando:

fastapi dev main.py

Step 3: Se og afprøve dit API i din browser

Med det er du faktisk allerede færdig med selve koden i denne guide.

MEN hvor du tidligere i din browser kunne gå til fx http://127.0.0.1:8000/movies for få data for alle film, og fx http://127.0.0.1:8000/movies/1 for at få data om én film (her filmen med id'et 1), så er vi nødt til at gå til en anden url for der at kunne bruge vores nye route til at tilføje en ny film til vores API's liste af film.

Så får at kunne tilføje en film til dit API, så skal gå til denne url (som er en form for dokumentation af dit API, som automatisk genereres af din FastAPI kode):

http://127.0.0.1:8000/docs

Ved at gå til den url skulle du gerne se en side i din browser lignende dette:

fastapi_docs_page

Herfra vil du kunne se alle de routes vi indtil videre har kodet til vores API. Og for nu at tilføje en ny film til vores API's liste af film, så skal du først trykke på sektionen/bjælken med den grønne knap der starter med "POST".

Gør du det så skulle du gerne se at sektionen/bjælken folder sig ud til noget der gerne skulle se sådan her ud:

Screenshot 2025-10-09 at 09 58 59

Og for nu at prøve at tilføje en film, så skal du først trykke på den grå knap ude til højre med teksten "Try it out".

Trykker du på den knap, så skulle du gerne se en form for ny sektion folde sig ud a la nedenstående, som er den vi kan bruge til at tilføje en film:

Screenshot 2025-10-09 at 10 02 55

Og i denne nye sektion vil vi nu under afsnittet "Edit Value" kunne indtaste data for en ny film, og med tryk på den blå knap "Execute" kunne tilføje en film til vores API's liste af film.

Ville vi derfor gerne tilføje en ny film som fx "Star Wars: Episode III – Revenge of the Sith", produceret af George Lucas og udgivet i 2005, så kan vi indtaste disse data (og bagefter trykke på "Execute" knappen for tilføje den) på denne måde:

Screenshot 2025-10-09 at 10 16 46

Og trykker vi så herefter på den blå "Execute" knap, så vil vi under afsnittet "Responses" kunne se, at vi nu har tilføjet vores nye film (selve outputtet under "Responses" sektionen ser sikkert lidt mærkeligt ud for dig - og det er HELT okay! Men det vigtigste er at du under afsnittet "Response body" vil kunne se de data du har indtastet for den nye film, hvilket er et tegn på, at din film er blevet tilføjet dit API's liste af film):

Screenshot 2025-10-09 at 10 24 16

Med det har du så nu faktisk færdiggjort dit API, således at du via dette kan:

  1. Se data for din liste af alle film
  2. Se data for en enkelt film
  3. Tilføje en ny film

Hvis du vil se, at din nye film faktisk er blevet tilføjet dit API's liste af film, så tryk først på sektionen med teksten "/movies" (øverst i dokumentationen i din browser), og tryk derefter på den grå knap "Try it out" ude til højre i denne sektion, og så til sidst på den blå "Execute" knap for det.

Bidrag til dette materiale

Dette materiale er lavet med bidrag af:

Tak

Igen er der til denne guide gjort (rigtig godt) brug af RealPython artiklen "Get Started With FastAPI", hvorfor der (igen, igen) skal lyde et kæmpe tak til dem og alt det gode materiale om Python de laver ❤️

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Kom i gang med FastAPI - del 3

Denne guide bygger ovenpå vores tidligere guide (del 2), hvor du fik lavet et API med FastAPI til Python, således at du kunne hente data for både alle film og en enkelt film.

Du skal derfor først have gennemgået vores tidligere guide for at kunne følge med her. Link til den guide (del 2) er: https://github.com/coding-pirates-hillerod/python-fastapi-get-started-part2

Om denne guide

I denne guide vil du altså skulle bygge videre på dit API fra del 2, og her udvide det med en route, således at du nu også kan tilføje film til dit API's liste af film.

Helt konkret vil vi derfor i denne guide følge disse steps for at kode det:

  • Lave en route for at tilføje film
  • Starte din udviklingsserver
  • Se og afprøve dit API i din browser

Step 1: Lave en route for at tilføje film

Fra vores tidligere API har vi denne kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}

Og eneste vi skal nu er at tilføje en route, således at vi via vores browser kan tilføje en (eller flere) film til vores API's liste af film. Tilføj derfor følgende kode til dit API's kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}
@app.post("/movies")defcreate_movie(movie: Movies):
"""Create a new movie entry."""new_movie= {
"id": len(movies) +1,
"title": movie.title,
"director": movie.director,
"release_year": movie.release_year
}
movies.append(new_movie)
returnnew_movie

Det nye er altså her blot routen der starter fra kodelinjen med "@app.post("/movies")", hvilken blot vil gøre dig i stand til at tilføje film til dit API's liste af film via din browser.

Step 2: Starte din udviklingsserver

Hvis ikke en udviklingsserver allerede køre, så du kan se og bruge dit API, så start den lige igen fra en terminal med denne kommando:

fastapi dev main.py

Step 3: Se og afprøve dit API i din browser

Med det er du faktisk allerede færdig med selve koden i denne guide.

MEN hvor du tidligere i din browser kunne gå til fx http://127.0.0.1:8000/movies for få data for alle film, og fx http://127.0.0.1:8000/movies/1 for at få data om én film (her filmen med id'et 1), så er vi nødt til at gå til en anden url for der at kunne bruge vores nye route til at tilføje en ny film til vores API's liste af film.

Så får at kunne tilføje en film til dit API, så skal gå til denne url (som er en form for dokumentation af dit API, som automatisk genereres af din FastAPI kode):

http://127.0.0.1:8000/docs

Ved at gå til den url skulle du gerne se en side i din browser lignende dette:

fastapi_docs_page

Herfra vil du kunne se alle de routes vi indtil videre har kodet til vores API. Og for nu at tilføje en ny film til vores API's liste af film, så skal du først trykke på sektionen/bjælken med den grønne knap der starter med "POST".

Gør du det så skulle du gerne se at sektionen/bjælken folder sig ud til noget der gerne skulle se sådan her ud:

Screenshot 2025-10-09 at 09 58 59

Og for nu at prøve at tilføje en film, så skal du først trykke på den grå knap ude til højre med teksten "Try it out".

Trykker du på den knap, så skulle du gerne se en form for ny sektion folde sig ud a la nedenstående, som er den vi kan bruge til at tilføje en film:

Screenshot 2025-10-09 at 10 02 55

Og i denne nye sektion vil vi nu under afsnittet "Edit Value" kunne indtaste data for en ny film, og med tryk på den blå knap "Execute" kunne tilføje en film til vores API's liste af film.

Ville vi derfor gerne tilføje en ny film som fx "Star Wars: Episode III – Revenge of the Sith", produceret af George Lucas og udgivet i 2005, så kan vi indtaste disse data (og bagefter trykke på "Execute" knappen for tilføje den) på denne måde:

Screenshot 2025-10-09 at 10 16 46

Og trykker vi så herefter på den blå "Execute" knap, så vil vi under afsnittet "Responses" kunne se, at vi nu har tilføjet vores nye film (selve outputtet under "Responses" sektionen ser sikkert lidt mærkeligt ud for dig - og det er HELT okay! Men det vigtigste er at du under afsnittet "Response body" vil kunne se de data du har indtastet for den nye film, hvilket er et tegn på, at din film er blevet tilføjet dit API's liste af film):

Screenshot 2025-10-09 at 10 24 16

Med det har du så nu faktisk færdiggjort dit API, således at du via dette kan:

  1. Se data for din liste af alle film
  2. Se data for en enkelt film
  3. Tilføje en ny film

Hvis du vil se, at din nye film faktisk er blevet tilføjet dit API's liste af film, så tryk først på sektionen med teksten "/movies" (øverst i dokumentationen i din browser), og tryk derefter på den grå knap "Try it out" ude til højre i denne sektion, og så til sidst på den blå "Execute" knap for det.

Bidrag til dette materiale

Dette materiale er lavet med bidrag af:

Tak

Igen er der til denne guide gjort (rigtig godt) brug af RealPython artiklen "Get Started With FastAPI", hvorfor der (igen, igen) skal lyde et kæmpe tak til dem og alt det gode materiale om Python de laver ❤️

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Kom i gang med FastAPI - del 3

Denne guide bygger ovenpå vores tidligere guide (del 2), hvor du fik lavet et API med FastAPI til Python, således at du kunne hente data for både alle film og en enkelt film.

Du skal derfor først have gennemgået vores tidligere guide for at kunne følge med her. Link til den guide (del 2) er: https://github.com/coding-pirates-hillerod/python-fastapi-get-started-part2

Om denne guide

I denne guide vil du altså skulle bygge videre på dit API fra del 2, og her udvide det med en route, således at du nu også kan tilføje film til dit API's liste af film.

Helt konkret vil vi derfor i denne guide følge disse steps for at kode det:

  • Lave en route for at tilføje film
  • Starte din udviklingsserver
  • Se og afprøve dit API i din browser

Step 1: Lave en route for at tilføje film

Fra vores tidligere API har vi denne kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}

Og eneste vi skal nu er at tilføje en route, således at vi via vores browser kan tilføje en (eller flere) film til vores API's liste af film. Tilføj derfor følgende kode til dit API's kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}
@app.post("/movies")defcreate_movie(movie: Movies):
"""Create a new movie entry."""new_movie= {
"id": len(movies) +1,
"title": movie.title,
"director": movie.director,
"release_year": movie.release_year
}
movies.append(new_movie)
returnnew_movie

Det nye er altså her blot routen der starter fra kodelinjen med "@app.post("/movies")", hvilken blot vil gøre dig i stand til at tilføje film til dit API's liste af film via din browser.

Step 2: Starte din udviklingsserver

Hvis ikke en udviklingsserver allerede køre, så du kan se og bruge dit API, så start den lige igen fra en terminal med denne kommando:

fastapi dev main.py

Step 3: Se og afprøve dit API i din browser

Med det er du faktisk allerede færdig med selve koden i denne guide.

MEN hvor du tidligere i din browser kunne gå til fx http://127.0.0.1:8000/movies for få data for alle film, og fx http://127.0.0.1:8000/movies/1 for at få data om én film (her filmen med id'et 1), så er vi nødt til at gå til en anden url for der at kunne bruge vores nye route til at tilføje en ny film til vores API's liste af film.

Så får at kunne tilføje en film til dit API, så skal gå til denne url (som er en form for dokumentation af dit API, som automatisk genereres af din FastAPI kode):

http://127.0.0.1:8000/docs

Ved at gå til den url skulle du gerne se en side i din browser lignende dette:

fastapi_docs_page

Herfra vil du kunne se alle de routes vi indtil videre har kodet til vores API. Og for nu at tilføje en ny film til vores API's liste af film, så skal du først trykke på sektionen/bjælken med den grønne knap der starter med "POST".

Gør du det så skulle du gerne se at sektionen/bjælken folder sig ud til noget der gerne skulle se sådan her ud:

Screenshot 2025-10-09 at 09 58 59

Og for nu at prøve at tilføje en film, så skal du først trykke på den grå knap ude til højre med teksten "Try it out".

Trykker du på den knap, så skulle du gerne se en form for ny sektion folde sig ud a la nedenstående, som er den vi kan bruge til at tilføje en film:

Screenshot 2025-10-09 at 10 02 55

Og i denne nye sektion vil vi nu under afsnittet "Edit Value" kunne indtaste data for en ny film, og med tryk på den blå knap "Execute" kunne tilføje en film til vores API's liste af film.

Ville vi derfor gerne tilføje en ny film som fx "Star Wars: Episode III – Revenge of the Sith", produceret af George Lucas og udgivet i 2005, så kan vi indtaste disse data (og bagefter trykke på "Execute" knappen for tilføje den) på denne måde:

Screenshot 2025-10-09 at 10 16 46

Og trykker vi så herefter på den blå "Execute" knap, så vil vi under afsnittet "Responses" kunne se, at vi nu har tilføjet vores nye film (selve outputtet under "Responses" sektionen ser sikkert lidt mærkeligt ud for dig - og det er HELT okay! Men det vigtigste er at du under afsnittet "Response body" vil kunne se de data du har indtastet for den nye film, hvilket er et tegn på, at din film er blevet tilføjet dit API's liste af film):

Screenshot 2025-10-09 at 10 24 16

Med det har du så nu faktisk færdiggjort dit API, således at du via dette kan:

  1. Se data for din liste af alle film
  2. Se data for en enkelt film
  3. Tilføje en ny film

Hvis du vil se, at din nye film faktisk er blevet tilføjet dit API's liste af film, så tryk først på sektionen med teksten "/movies" (øverst i dokumentationen i din browser), og tryk derefter på den grå knap "Try it out" ude til højre i denne sektion, og så til sidst på den blå "Execute" knap for det.

Bidrag til dette materiale

Dette materiale er lavet med bidrag af:

Tak

Igen er der til denne guide gjort (rigtig godt) brug af RealPython artiklen "Get Started With FastAPI", hvorfor der (igen, igen) skal lyde et kæmpe tak til dem og alt det gode materiale om Python de laver ❤️

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Kom i gang med FastAPI - del 3

Denne guide bygger ovenpå vores tidligere guide (del 2), hvor du fik lavet et API med FastAPI til Python, således at du kunne hente data for både alle film og en enkelt film.

Du skal derfor først have gennemgået vores tidligere guide for at kunne følge med her. Link til den guide (del 2) er: https://github.com/coding-pirates-hillerod/python-fastapi-get-started-part2

Om denne guide

I denne guide vil du altså skulle bygge videre på dit API fra del 2, og her udvide det med en route, således at du nu også kan tilføje film til dit API's liste af film.

Helt konkret vil vi derfor i denne guide følge disse steps for at kode det:

  • Lave en route for at tilføje film
  • Starte din udviklingsserver
  • Se og afprøve dit API i din browser

Step 1: Lave en route for at tilføje film

Fra vores tidligere API har vi denne kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}

Og eneste vi skal nu er at tilføje en route, således at vi via vores browser kan tilføje en (eller flere) film til vores API's liste af film. Tilføj derfor følgende kode til dit API's kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}
@app.post("/movies")defcreate_movie(movie: Movies):
"""Create a new movie entry."""new_movie= {
"id": len(movies) +1,
"title": movie.title,
"director": movie.director,
"release_year": movie.release_year
}
movies.append(new_movie)
returnnew_movie

Det nye er altså her blot routen der starter fra kodelinjen med "@app.post("/movies")", hvilken blot vil gøre dig i stand til at tilføje film til dit API's liste af film via din browser.

Step 2: Starte din udviklingsserver

Hvis ikke en udviklingsserver allerede køre, så du kan se og bruge dit API, så start den lige igen fra en terminal med denne kommando:

fastapi dev main.py

Step 3: Se og afprøve dit API i din browser

Med det er du faktisk allerede færdig med selve koden i denne guide.

MEN hvor du tidligere i din browser kunne gå til fx http://127.0.0.1:8000/movies for få data for alle film, og fx http://127.0.0.1:8000/movies/1 for at få data om én film (her filmen med id'et 1), så er vi nødt til at gå til en anden url for der at kunne bruge vores nye route til at tilføje en ny film til vores API's liste af film.

Så får at kunne tilføje en film til dit API, så skal gå til denne url (som er en form for dokumentation af dit API, som automatisk genereres af din FastAPI kode):

http://127.0.0.1:8000/docs

Ved at gå til den url skulle du gerne se en side i din browser lignende dette:

fastapi_docs_page

Herfra vil du kunne se alle de routes vi indtil videre har kodet til vores API. Og for nu at tilføje en ny film til vores API's liste af film, så skal du først trykke på sektionen/bjælken med den grønne knap der starter med "POST".

Gør du det så skulle du gerne se at sektionen/bjælken folder sig ud til noget der gerne skulle se sådan her ud:

Screenshot 2025-10-09 at 09 58 59

Og for nu at prøve at tilføje en film, så skal du først trykke på den grå knap ude til højre med teksten "Try it out".

Trykker du på den knap, så skulle du gerne se en form for ny sektion folde sig ud a la nedenstående, som er den vi kan bruge til at tilføje en film:

Screenshot 2025-10-09 at 10 02 55

Og i denne nye sektion vil vi nu under afsnittet "Edit Value" kunne indtaste data for en ny film, og med tryk på den blå knap "Execute" kunne tilføje en film til vores API's liste af film.

Ville vi derfor gerne tilføje en ny film som fx "Star Wars: Episode III – Revenge of the Sith", produceret af George Lucas og udgivet i 2005, så kan vi indtaste disse data (og bagefter trykke på "Execute" knappen for tilføje den) på denne måde:

Screenshot 2025-10-09 at 10 16 46

Og trykker vi så herefter på den blå "Execute" knap, så vil vi under afsnittet "Responses" kunne se, at vi nu har tilføjet vores nye film (selve outputtet under "Responses" sektionen ser sikkert lidt mærkeligt ud for dig - og det er HELT okay! Men det vigtigste er at du under afsnittet "Response body" vil kunne se de data du har indtastet for den nye film, hvilket er et tegn på, at din film er blevet tilføjet dit API's liste af film):

Screenshot 2025-10-09 at 10 24 16

Med det har du så nu faktisk færdiggjort dit API, således at du via dette kan:

  1. Se data for din liste af alle film
  2. Se data for en enkelt film
  3. Tilføje en ny film

Hvis du vil se, at din nye film faktisk er blevet tilføjet dit API's liste af film, så tryk først på sektionen med teksten "/movies" (øverst i dokumentationen i din browser), og tryk derefter på den grå knap "Try it out" ude til højre i denne sektion, og så til sidst på den blå "Execute" knap for det.

Bidrag til dette materiale

Dette materiale er lavet med bidrag af:

Tak

Igen er der til denne guide gjort (rigtig godt) brug af RealPython artiklen "Get Started With FastAPI", hvorfor der (igen, igen) skal lyde et kæmpe tak til dem og alt det gode materiale om Python de laver ❤️

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Kom i gang med FastAPI - del 3

Denne guide bygger ovenpå vores tidligere guide (del 2), hvor du fik lavet et API med FastAPI til Python, således at du kunne hente data for både alle film og en enkelt film.

Du skal derfor først have gennemgået vores tidligere guide for at kunne følge med her. Link til den guide (del 2) er: https://github.com/coding-pirates-hillerod/python-fastapi-get-started-part2

Om denne guide

I denne guide vil du altså skulle bygge videre på dit API fra del 2, og her udvide det med en route, således at du nu også kan tilføje film til dit API's liste af film.

Helt konkret vil vi derfor i denne guide følge disse steps for at kode det:

  • Lave en route for at tilføje film
  • Starte din udviklingsserver
  • Se og afprøve dit API i din browser

Step 1: Lave en route for at tilføje film

Fra vores tidligere API har vi denne kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}

Og eneste vi skal nu er at tilføje en route, således at vi via vores browser kan tilføje en (eller flere) film til vores API's liste af film. Tilføj derfor følgende kode til dit API's kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}
@app.post("/movies")defcreate_movie(movie: Movies):
"""Create a new movie entry."""new_movie= {
"id": len(movies) +1,
"title": movie.title,
"director": movie.director,
"release_year": movie.release_year
}
movies.append(new_movie)
returnnew_movie

Det nye er altså her blot routen der starter fra kodelinjen med "@app.post("/movies")", hvilken blot vil gøre dig i stand til at tilføje film til dit API's liste af film via din browser.

Step 2: Starte din udviklingsserver

Hvis ikke en udviklingsserver allerede køre, så du kan se og bruge dit API, så start den lige igen fra en terminal med denne kommando:

fastapi dev main.py

Step 3: Se og afprøve dit API i din browser

Med det er du faktisk allerede færdig med selve koden i denne guide.

MEN hvor du tidligere i din browser kunne gå til fx http://127.0.0.1:8000/movies for få data for alle film, og fx http://127.0.0.1:8000/movies/1 for at få data om én film (her filmen med id'et 1), så er vi nødt til at gå til en anden url for der at kunne bruge vores nye route til at tilføje en ny film til vores API's liste af film.

Så får at kunne tilføje en film til dit API, så skal gå til denne url (som er en form for dokumentation af dit API, som automatisk genereres af din FastAPI kode):

http://127.0.0.1:8000/docs

Ved at gå til den url skulle du gerne se en side i din browser lignende dette:

fastapi_docs_page

Herfra vil du kunne se alle de routes vi indtil videre har kodet til vores API. Og for nu at tilføje en ny film til vores API's liste af film, så skal du først trykke på sektionen/bjælken med den grønne knap der starter med "POST".

Gør du det så skulle du gerne se at sektionen/bjælken folder sig ud til noget der gerne skulle se sådan her ud:

Screenshot 2025-10-09 at 09 58 59

Og for nu at prøve at tilføje en film, så skal du først trykke på den grå knap ude til højre med teksten "Try it out".

Trykker du på den knap, så skulle du gerne se en form for ny sektion folde sig ud a la nedenstående, som er den vi kan bruge til at tilføje en film:

Screenshot 2025-10-09 at 10 02 55

Og i denne nye sektion vil vi nu under afsnittet "Edit Value" kunne indtaste data for en ny film, og med tryk på den blå knap "Execute" kunne tilføje en film til vores API's liste af film.

Ville vi derfor gerne tilføje en ny film som fx "Star Wars: Episode III – Revenge of the Sith", produceret af George Lucas og udgivet i 2005, så kan vi indtaste disse data (og bagefter trykke på "Execute" knappen for tilføje den) på denne måde:

Screenshot 2025-10-09 at 10 16 46

Og trykker vi så herefter på den blå "Execute" knap, så vil vi under afsnittet "Responses" kunne se, at vi nu har tilføjet vores nye film (selve outputtet under "Responses" sektionen ser sikkert lidt mærkeligt ud for dig - og det er HELT okay! Men det vigtigste er at du under afsnittet "Response body" vil kunne se de data du har indtastet for den nye film, hvilket er et tegn på, at din film er blevet tilføjet dit API's liste af film):

Screenshot 2025-10-09 at 10 24 16

Med det har du så nu faktisk færdiggjort dit API, således at du via dette kan:

  1. Se data for din liste af alle film
  2. Se data for en enkelt film
  3. Tilføje en ny film

Hvis du vil se, at din nye film faktisk er blevet tilføjet dit API's liste af film, så tryk først på sektionen med teksten "/movies" (øverst i dokumentationen i din browser), og tryk derefter på den grå knap "Try it out" ude til højre i denne sektion, og så til sidst på den blå "Execute" knap for det.

Bidrag til dette materiale

Dette materiale er lavet med bidrag af:

Tak

Igen er der til denne guide gjort (rigtig godt) brug af RealPython artiklen "Get Started With FastAPI", hvorfor der (igen, igen) skal lyde et kæmpe tak til dem og alt det gode materiale om Python de laver ❤️

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Kom i gang med FastAPI - del 3

Denne guide bygger ovenpå vores tidligere guide (del 2), hvor du fik lavet et API med FastAPI til Python, således at du kunne hente data for både alle film og en enkelt film.

Du skal derfor først have gennemgået vores tidligere guide for at kunne følge med her. Link til den guide (del 2) er: https://github.com/coding-pirates-hillerod/python-fastapi-get-started-part2

Om denne guide

I denne guide vil du altså skulle bygge videre på dit API fra del 2, og her udvide det med en route, således at du nu også kan tilføje film til dit API's liste af film.

Helt konkret vil vi derfor i denne guide følge disse steps for at kode det:

  • Lave en route for at tilføje film
  • Starte din udviklingsserver
  • Se og afprøve dit API i din browser

Step 1: Lave en route for at tilføje film

Fra vores tidligere API har vi denne kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}

Og eneste vi skal nu er at tilføje en route, således at vi via vores browser kan tilføje en (eller flere) film til vores API's liste af film. Tilføj derfor følgende kode til dit API's kode:

fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()
movies= [
{"id": 1, "title": "Harry Potter and the Sorcerer's Stone", "director": "Chris Columbus", "release_year": 2001},
{"id": 2, "title": "The Lord of the Rings: The Fellowship of the Ring", "director": "Peter Jackson", "release_year": 2001},
{"id": 3, "title": "Toy Story", "director": "John Lasseter", "release_year": 1995}
]
classMovies(BaseModel):
title: strdirector: strrelease_year: int@app.get("/movies")defget_movies():
"""Get all movies"""return {"movies": movies}
@app.get("/movies/{movie_id}")defget_movie(movie_id: int):
"""Get a specific movie by ID."""formovieinmovies:
ifmovie["id"] ==movie_id:
returnmoviereturn {"error": "Movie not found"}
@app.post("/movies")defcreate_movie(movie: Movies):
"""Create a new movie entry."""new_movie= {
"id": len(movies) +1,
"title": movie.title,
"director": movie.director,
"release_year": movie.release_year
}
movies.append(new_movie)
returnnew_movie

Det nye er altså her blot routen der starter fra kodelinjen med "@app.post("/movies")", hvilken blot vil gøre dig i stand til at tilføje film til dit API's liste af film via din browser.

Step 2: Starte din udviklingsserver

Hvis ikke en udviklingsserver allerede køre, så du kan se og bruge dit API, så start den lige igen fra en terminal med denne kommando:

fastapi dev main.py

Step 3: Se og afprøve dit API i din browser

Med det er du faktisk allerede færdig med selve koden i denne guide.

MEN hvor du tidligere i din browser kunne gå til fx http://127.0.0.1:8000/movies for få data for alle film, og fx http://127.0.0.1:8000/movies/1 for at få data om én film (her filmen med id'et 1), så er vi nødt til at gå til en anden url for der at kunne bruge vores nye route til at tilføje en ny film til vores API's liste af film.

Så får at kunne tilføje en film til dit API, så skal gå til denne url (som er en form for dokumentation af dit API, som automatisk genereres af din FastAPI kode):

http://127.0.0.1:8000/docs

Ved at gå til den url skulle du gerne se en side i din browser lignende dette:

fastapi_docs_page

Herfra vil du kunne se alle de routes vi indtil videre har kodet til vores API. Og for nu at tilføje en ny film til vores API's liste af film, så skal du først trykke på sektionen/bjælken med den grønne knap der starter med "POST".

Gør du det så skulle du gerne se at sektionen/bjælken folder sig ud til noget der gerne skulle se sådan her ud:

Screenshot 2025-10-09 at 09 58 59

Og for nu at prøve at tilføje en film, så skal du først trykke på den grå knap ude til højre med teksten "Try it out".

Trykker du på den knap, så skulle du gerne se en form for ny sektion folde sig ud a la nedenstående, som er den vi kan bruge til at tilføje en film:

Screenshot 2025-10-09 at 10 02 55

Og i denne nye sektion vil vi nu under afsnittet "Edit Value" kunne indtaste data for en ny film, og med tryk på den blå knap "Execute" kunne tilføje en film til vores API's liste af film.

Ville vi derfor gerne tilføje en ny film som fx "Star Wars: Episode III – Revenge of the Sith", produceret af George Lucas og udgivet i 2005, så kan vi indtaste disse data (og bagefter trykke på "Execute" knappen for tilføje den) på denne måde:

Screenshot 2025-10-09 at 10 16 46

Og trykker vi så herefter på den blå "Execute" knap, så vil vi under afsnittet "Responses" kunne se, at vi nu har tilføjet vores nye film (selve outputtet under "Responses" sektionen ser sikkert lidt mærkeligt ud for dig - og det er HELT okay! Men det vigtigste er at du under afsnittet "Response body" vil kunne se de data du har indtastet for den nye film, hvilket er et tegn på, at din film er blevet tilføjet dit API's liste af film):

Screenshot 2025-10-09 at 10 24 16

Med det har du så nu faktisk færdiggjort dit API, således at du via dette kan:

  1. Se data for din liste af alle film
  2. Se data for en enkelt film
  3. Tilføje en ny film

Hvis du vil se, at din nye film faktisk er blevet tilføjet dit API's liste af film, så tryk først på sektionen med teksten "/movies" (øverst i dokumentationen i din browser), og tryk derefter på den grå knap "Try it out" ude til højre i denne sektion, og så til sidst på den blå "Execute" knap for det.

Bidrag til dette materiale

Dette materiale er lavet med bidrag af:

Tak

Igen er der til denne guide gjort (rigtig godt) brug af RealPython artiklen "Get Started With FastAPI", hvorfor der (igen, igen) skal lyde et kæmpe tak til dem og alt det gode materiale om Python de laver ❤️

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages