No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Creación de routers

9/17
Recursos

Aportes 9

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para un reemplazo rápido en VScode solo seleccionen un app y presionen Ctrl+D todas las veces necesarias para que se seleccionen todos los textos “app”, el resto es borrar y pegar el texto deseado y el cambio se aplicara en todos.

Este es mi router para login_users

from fastapi import APIRouter
from pydantic import BaseModel
from fastapi.responses import HTMLResponse, JSONResponse
from jwt_manager import create_token

login_router = APIRouter()

class User(BaseModel):
    email: str
    password: str

@login_router.get("/", tags=['home'])
def massege():
    return HTMLResponse('<h1>Hello World!</h1>')


@login_router.post("/login", tags=['auth'])
def login(user: User):
    if user.email == "[email protected]" and user.password == "admin":
        token: str = create_token(user.dict())
        return JSONResponse(status_code=200, content=token)
  
*# Importaciones de módulos y clases necesarios*from fastapi import APIRouterfrom fastapi.responses import JSONResponsefrom pydantic import BaseModel *# Importaciones personalizadas*from jwt\_manager import create\_token login\_router = APIRouter() *# Definición del modelo de usuario*class User(BaseModel):    email: str    password: str *# Ruta de autenticación*@login\_router.post('/login', *tags*=\['auth'])def login(*user*: User):    if *user*.email == '[email protected]' and *user*.password == 'admin':        token: str = create\_token(*user*.dict())        return JSONResponse(*status\_code*=200, *content*=token)

Mi resumen:

Creación de routers

Creamos un directorio routers y en el el fichero del nombre de nuestra entidad por ejemplo movie.py

Definimos nuestra schema de clase de la entidad y cada uno de nuestros endpoint cambiando @app por el nombre de nuestro router

...
movie_router = APIRouter()

@movie_router.get('/movies', tags=['movies'], response_model=List[Movie], status_code=200, dependencies=[Depends(JWTBearer())])
def get_movies() -> List[Movie]:
    db = Session()
    result = db.query(MovieModel).all()
    return JSONResponse(status_code=200, content=jsonable_encoder(result))

...

dentro de nuestro archivo main.py

...
from routers.movie import movie_router
...
app.include_router(movie_router)

Finalmente el main queda asi basnte limpio

from fastapi import FastAPI

from config.database import engine, Base
from middlewares.error_handler import ErrorHandler

from routers.movie import movie_router
from routers.login_users import login_router
from routers.home_tag import home_router

app = FastAPI()
app.title = "Mi aplicación con FastAPI"
app.version = "0.0.4"

app.add_middleware(ErrorHandler)
app.include_router(movie_router)
app.include_router(login_router)
app.include_router(home_router)

Base.metadata.create_all(bind=engine)

Mi aporte para home_tag.py

from fastapi import APIRouter
from fastapi.responses import HTMLResponse

home_router = APIRouter()

@home_router.get('/', tags=['home'])
def message():
    return HTMLResponse('<h1>Hello World</h1>')

Mi aporte para login_users.py

from fastapi import APIRouter

from fastapi.responses import JSONResponse

from pydantic import BaseModel

from jwt_manager import create_token


login_router = APIRouter()

class User(BaseModel):
    email: str
    password: str


@login_router.post('/login', tags=['auth'])
def login(user: User):
    if user.email == "[email protected]" and user.password == "admin123":
        token: str = create_token(user.model_dump())
        return JSONResponse(status_code=200, content=token)

Aquí mi código:

from fastapi import APIRouter, HTTPException
from models.users import User
from jwt_manager import create_token


users_router = APIRouter()

# Function to do user login.
@users_router.post('/login', tags=['auth'], status_code=200)
def login(user: User):
    if user.email == '[email protected]' and user.password == 'password':
        token: str = create_token(user.model_dump())        # Create a token.
        return {'token': token}
    raise HTTPException(status_code=401, detail='Invalid email or password')