Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
fastapi [2023/06/21 16:18] xavier_fibla_agustin |
fastapi [2023/06/28 16:03] (actual) xavier_fibla_agustin [Requests i responses] |
||
|---|---|---|---|
| Línia 3: | Línia 3: | ||
| ---- | ---- | ||
| + | Referències teoria i documentació: | ||
| - | [[https:// | + | [[https:// |
| - | **Instal·lació** | + | =====Instal·lació===== |
| Línia 26: | Línia 27: | ||
| - | **Aplicació simple** | + | =====Aplicació simple===== |
| Per a crear una API molt simple que ens mostri un missatge només necessitem importar la llibreria del FastAPI | Per a crear una API molt simple que ens mostri un missatge només necessitem importar la llibreria del FastAPI | ||
| Línia 51: | Línia 52: | ||
| - | **REST APIs** | + | =====REST APIs===== |
| Representation State Transfer (REST) API | Representation State Transfer (REST) API | ||
| Línia 66: | Línia 67: | ||
| - | **Swagger OpenAPI** | + | =====Swagger OpenAPI===== |
| - | PENDET | + | |
| + | Al arrancar el servidor uvicorn poden veure totes les URLs que estan disponibles a la nostra API accedin a la URL de la documentació, | ||
| + | En aquesta ruta ens mostra la documentació amb el format [[https:// | ||
| + | {{:: | ||
| - | ** Requests i responses ** | ||
| + | =====Requests i responses===== | ||
| - | ** Templates ** | ||
| + | ====Path parameters==== | ||
| + | FastAPI ens permet obtenir dades dinàmiques de les peticions directament de la URL: | ||
| - | [[https:// | + | <file python main.py> |
| + | @app.get("/student/{id}" | ||
| + | async def student_info(id: | ||
| + | ..... | ||
| + | ..... | ||
| + | |||
| + | </file> | ||
| + | |||
| + | ====Query parameters==== | ||
| + | Son paràmetres del tipus clau-valor i s' | ||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | http:// | ||
| + | </ | ||
| + | |||
| + | <file python main.py> | ||
| + | @app.get("/ | ||
| + | async def get_students(skip: | ||
| + | .... | ||
| + | .... | ||
| + | </ | ||
| + | |||
| + | |||
| + | ====Default parameters==== | ||
| + | Seguint amb l' | ||
| + | |||
| + | En el següent exemple, els valors per defecte dels dos paràmetres, | ||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | http:// | ||
| + | </ | ||
| + | |||
| + | <file python main.py> | ||
| + | @app.get("/ | ||
| + | async def get_students(skip: | ||
| + | .... | ||
| + | .... | ||
| + | </ | ||
| + | |||
| + | ====Optional parameters==== | ||
| + | Podem declarar paràmetre opcionals, ja siguin paràmtres de la //query// o per //path//. Per fer-ho, necessitem importar el tipus // | ||
| + | <file python main.py> | ||
| + | from typing import Optional | ||
| + | |||
| + | @app.get("/ | ||
| + | async def chek_student(id: | ||
| + | .... | ||
| + | .... | ||
| + | </ | ||
| + | =====Templates===== | ||
| + | FastAPI pot integrar el motor de plantilles Jinja on podem utilitzar una sintaxi semblant a Python, és molt semblant al motor de plantilles de Django. | ||
| + | |||
| + | Referències teoria i documentació: | ||
| + | [[https:// | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | |||
| + | Primer s'ha d' | ||
| + | <WRAP center round box 100%> | ||
| + | **pip install jinja2** | ||
| + | </ | ||
| + | |||
| + | Per utilitzar les plantilles s'han d' | ||
| + | |||
| + | També podem carregar fitxer estàtics com poden ser els css, en aquest cas tenim un carpeta anomenada //static// on tenim les nostres fulles d' | ||
| + | Si ens fixem en la resposta de l'// | ||
| + | |||
| + | <file python main.py> | ||
| + | from fastapi.templating import Jinja2Templates | ||
| + | from fastapi.staticfiles import StaticFiles | ||
| + | |||
| + | templates = Jinja2Templates(directory=" | ||
| + | |||
| + | app = FastAPI() | ||
| + | |||
| + | app.mount("/ | ||
| + | |||
| + | @app.get("/ | ||
| + | async def ruckus(request: | ||
| + | .... | ||
| + | devices = db.query(models.Ruckus).order_by(models.Ruckus.id.desc()) | ||
| + | return templates.TemplateResponse(" | ||
| + | {" | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | Com podem veure en el fitxer index.html podem tenir un fitxer principal o base (en el cas de l' | ||
| + | En la resposta de la API estem tornant un array d' | ||
| + | |||
| + | <file html index.html> | ||
| + | {% extends ' | ||
| + | |||
| + | {% block content %} | ||
| + | < | ||
| + | |||
| + | <div class=" | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | {% for device in devices %} | ||
| + | <div class=" | ||
| + | {% if device.connected%} | ||
| + | <div class=" | ||
| + | {% else %} | ||
| + | <div class=" | ||
| + | {% endif %} | ||
| + | <div class=" | ||
| + | <h5 class=" | ||
| + | < | ||
| + | < | ||
| + | <a href=" | ||
| + | <a href=" | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | {% endfor %} | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | {% endblock content %} | ||
| + | </ | ||