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/28 15:02] xavier_fibla_agustin [Swagger OpenAPI] |
fastapi [2023/06/28 16:03] (actual) xavier_fibla_agustin [Requests i responses] |
||
---|---|---|---|
Línia 80: | Línia 80: | ||
=====Requests i responses===== | =====Requests i responses===== | ||
- | PENDENT | ||
+ | ====Path parameters==== | ||
+ | FastAPI ens permet obtenir dades dinàmiques de les peticions directament de la URL: | ||
+ | <file python main.py> | ||
+ | @app.get("/ | ||
+ | async def student_info(id: | ||
+ | ..... | ||
+ | ..... | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ====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===== | =====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ó: | Referències teoria i documentació: | ||
[[https:// | [[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 %} | ||
+ | </ |