Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Validaciones: Path Parameters

14/20
Recursos

Aportes 13

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

En el minuto 02:30 Facundo dice que en caso de haber más de un path que se corresponda, se tomará el último. Lo correcto es que intentará tomar el primero. En la documentación oficial lo explica muy bien: https://fastapi.tiangolo.com/tutorial/path-params/#order-matters

Here we have how it’s work path parameters in code

...
from fastapi import Path
...
@app.get("/person/detail/{person_id}")
def show_person(
	title: "Person",
	description: "Showing person with id",
	person_id: int = Path(ge=0)
):
	return {person_id: "It exist!"}

En vez de:

git add -A
git commit -m 'nombre de la rama'

Se puede hacer con una sola línea de código:

git commit -am 'nombre de la rama'

Codigo hasta ahora, además meto regex para el query parameters para que solo me admita caracteres alfabéticos y sin espacios, creo que la expresión regular está bien, de todas formas como siempre se agradecen comentarios.

# Python
from typing import Optional

# Pydantic
from pydantic import BaseModel

# FastAPI
from fastapi import FastAPI, Body, Query, Path

app: FastAPI = FastAPI()


# Models

class Person(BaseModel):
    first_name: str
    last_name: str
    age: int
    hair_color: Optional[str] = None
    is_married: Optional[bool] = None


@app.get('/')
def home():
    # def home() -> Dict:
    # def home() -> Dict[str, str]:
    return {"Hi": "Hello World"}


# Request and Response Body

@app.post('/person/new')
def create_person(person: Person = Body(...)):
    return person


# Validations: Query Parameters

@app.get('/person/detail')
def show_person(
    name: Optional[str] = Query(
        None,
        min_length=1,
        max_length=30,
        regex='^[A-Za-z]*$',
        title="Person Name",
        description="This is the person name. It's between 1 and 30 characters"
    ),
    age: int = Query(
        ...,
        title="Person Age",
        description="This is the person age. It's required"
    )
):
    return {name: age}


# Validations: Path Parameters

@app.get('/person/detail/{person_id}')
def show_person(
    person_id: int = Path(
        ...,
        title="Person ID",
        description="This is the person ID. It's required",
        gt=0
    )
):
    return {person_id: "It exists!"}

Un saludo.

Aquí Les Dejo el Código de esta Clase Pero le coloque otras Cosas Mas

# Python
from typing import Optional # Sirve para definir tipos de datos en python y volver a python como un lenguaje de programación estatico

#Pydantic
from pydantic import BaseModel # Sirve para definir los modelos de datos que se usaran en la aplicacion

# FastAPI
from fastapi import FastAPI  # Sirve para definir la API de la aplicacion
from fastapi import Body, Query, Path # Sirve para definir el tipo de dato que se usara en la API

app = FastAPI()

# Models

class Person(BaseModel): # Sirve para definir los modelos de datos que se usaran en la aplicacion
    first_name: str
    last_name: str
    age: int
    hair_color: Optional[str] = None
    is_married: Optional[bool] = None
    

@app.get("/")
def home(): # Sirve para definir la ruta de la API
    return {"message": "Hello World"}

# Requests and responses Body

@app.post("/person/new") 
def create_person(person: Person = Body(...)): # Sirve para definir el tipo de dato que se usara en la API
    return person

# Validaciones; Query Parametros

@app.get("/person/detail")
def show_person(
    person_id: int = Query(
        ...,
        gt = 0,
        lt = 100000000,
        title = "Id de la persona",
        description = "Id de la persona a consultar y es un parametro requerido"

        ), # Sirve para definir el tipo de dato que se usara en la API
    first_name: str = Query(
        ...,
        min_length = 1,
        max_length = 50,
        title = "Nombre de la Persona",
        description = " Este es el nombre de la persona como minimo 1 a 50 caracteres"

        ), # Sirve para definir el tipo de dato que se usara en la API
    last_name: str = Query(
        ...,
        min_length = 1,
        max_length = 50,
        title = "Apellido de la Persona",
        description = " Este es el apellido de la persona como minimo 1 a 50 caracteres"

        ), # Sirve para definir el tipo de dato que se usara en la API
        
    age: int = Query(
        ...,
        gt = 0,
        lt = 100,
        title = "Edad de la Persona",
        description = " Este es la edad de la persona y es un paramtero requerido"
        
        ), # Sirve para definir el tipo de dato que se usara en la API
        
    hair_color: Optional[str] = Query(
        None,
        min_length = 3,
        max_length = 50,
        title = "Color de pelo de la Persona",
        description = " Este es el color de pelo de la persona como minimo 3 a 50 caracteres"
        ),

    is_married: Optional[bool] = Query(
        None,
        title = "Estado civil de la Persona",
        description = " Este es el estado civil de la persona Treu Si esta Casada, Fals Si no esta Casada"
        )
):
    return {
        "person_id": person_id,
        "first_name": first_name,
        "last_name": last_name,
        "age": age,
        "hair_color": hair_color,
        "is_married": is_married
    }

# Valadaciones: Pach Parametros

@app.get("/person/detail/{person_id}/{first_name}/{last_name}")
def show_person(
    person_id: int = Path(
        ...,
        gt = 0,
        lt = 100000000,
        title = "Id de la persona",
        description = "Id de la persona a consultar y es un parametro requerido"
        ), # Sirve para definir el tipo de dato que se usara en la API
    
    first_name: str = Query(
        ...,
        min_length = 1,
        max_length = 50,
        title = "Nombre de la Persona",
        description = " Este es el nombre de la persona como minimo 1 a 50 caracteres"
        ), # Sirve para definir el tipo de dato que se usara en la API

    last_name: str = Query(
        ...,
        min_length = 1,
        max_length = 50,
        title = "Apellido de la Persona",
        description =" Este es el apellido de la persona como minimo 1 a 50 caracteres"
        ),

    age: int = Query(
        ...,
        gt = 0,
        lt = 100,
        title = "Edad de la Persona",
        description = " Este es la edad de la persona y es un paramtero requerido"
        ),

    hair_color: Optional[str] = Query(
        None,
        min_length = 3,
        max_length = 50,
        title = "Color de pelo de la Persona",
        description = " Este es el color de pelo de la persona como minimo 3 a 50 caracteres"
        ),

    is_married: Optional[bool] = Query(
        None,
        title = "Estado civil de la Persona",
        description = " Este es el estado civil de la persona"
        ),
):
    return {
        "person_id": person_id,
        "first_name": first_name,
        "last_name": last_name,
        "age": age,
        "hair_color": hair_color,
        "is_married": is_married
    }

Espero le sirvan alguien

Puedes evitar: git add -A con este comando: git commit -am “Este es un commit ya con git add”`

from typing import Optional
from pydantic import BaseModel
from fastapi import FastAPI
from fastapi import Body, Query, Path

app = FastAPI()

class Person(BaseModeL):
	first_name: str
	 last_name: str
	age: int
	hair_color: Optional[str] = None
	is_maried: Optional[booL] = None


@app.get("/")
def home():
    return {#Hello": "World"}

@app.post("/person/new")
def create_person(person: Person = Body(...)):
	return person

@app.get("/person/detail")
def show_person(
	name: Optional[str] = Query(
	None, 
	min_Length=1, 
	max_Length=50,
	title= "Person Name",
	description="This is te persona name. Its between 1 and 50 characters"
	),
	age: str = Query(
	..., 
	tittle="Person Age",
	description="This is te person age. Its required"
	)
):
	return{name: age}

@app.get("/person/detail/{person_id}")
def show_person(
	person_id: int = Path(
	..., 
	gt=0)
	title: "Person id",
	description="This is te person age. Its required"
):
	return {person_id: "It exists!"}

Con el complemento de chrome Json viewer puede visualizar de una manera ordenada el json que se va generando en el enlace de /openapi.json del home de FastAPI

(https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh)

Hola, les recomiendo utilizar un code formatter como Black

  1. Validaciones int and string: Query parameters
    • Int: max_lenght, min_length, regex
    • String:
      ge (Great or equal than >= )
      le (less or equal than <= )
      gt (great than > )
      lt (less than < )

Esto se pone cada vez más entretenido!!!

#Python
from typing import Optional
from fastapi.params import Path

#Pydantic
from pydantic import BaseModel

# FastAPI
from fastapi import FastAPI
from fastapi import Body, Query, Path

app = FastAPI()

# Models

class Person(BaseModel): # Person parameters
    first_name: str
    last_name: str
    age_person: int
    colos_eye: Optional[str] = None
    maried: Optional[bool] = None

@app.get("/") #Path operation decorator
def home(): #Path operation function
    return {"First API": "Congratulation"} #JSON

# Request and Response Bondy

@app.post("/person/new") # Acces a new person
def create_person(person: Person = Body(...)): # acces to the parameters of person
    return person

# Validations: Query Parameters

@app.get("/person/detail")
def show_person(
    name: Optional[str] = Query(
        None, 
        min_length=3, 
        max_length=35,
        title="Person Name",
        description="This is the person name. It's between 3 and 35 characters."
        ),
    age: str = Query(
        ...,
        title="Person Age",
        description="This is the person age. It's required."
        )
):
    return {name: age}

# Validations: Path Parameters
@app.get("/person/detail/{person_id}")
def show_person(
    person_id: int = Path(
        ..., 
        gt=0,
        title="Person ID",
        description="This is the person ID. It's reqiuired and it's more than 0."
        )
):
    return {person_id: "it_exist!"}

la implementación de las varias opciones de pasar un parametro