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.
Conexión con bases de datos
SQLAlchemy: el ORM de FastAPI
Instalación y configuración de SQLAlchemy
Creación de modelos
Registro de datos
Consulta de datos
Modificación y eliminación de datos
SQLModel: el futuro ORM de FastAPI
Modularización
Manejo de errores y middlewares
Creación de routers
Servicios para consultar datos
Servicios para registrar y modificar datos
Despliegue
Preparando el proyecto para desplegar a producción
Creando el repositorio en GitLab
Creando el Droplet en Digital Ocean
Instalación de herramientas para el servidor
Ejecutando FastAPI con NGINX
Próximos pasos
¿Quieres más cursos de FastAPI?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 9
Preguntas 1
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)
Mi resumen:
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')
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?