[Python] FastAPI responds with required field is missing

Discussão em 'Python' iniciado por Stack, Novembro 30, 2024.

  1. Stack

    Stack Membro Participativo

    I'm following a simple tutorial from the FastAPI docs. I was already using SQLAlchemy in this project just added the fastapi dependency and trying to run it, here's my code:

    import re
    import json
    import copy
    import traceback
    import urllib.parse
    from models import *
    from mangum import Mangum
    from datetime import datetime
    from sqlalchemy.orm import Session
    from sqlalchemy import *
    from sqlalchemy import create_engine
    from collections import defaultdict
    from fastapi import FastAPI, Depends, Request, Response

    app = FastAPI()


    @app.middleware("http")
    async def db_session_middleware(request, call_next):
    response = Response("Internal server error", status_code=500)
    try:
    engine = create_engine(
    "some db"
    )
    base.metadata.create_all(engine)
    request.state.db = Session(engine)
    response = await call_next(request)
    finally:
    request.state.db.close()
    return response


    def get_db(request):
    return request.state.db


    @app.get("/")
    def get_root():
    return {"Status": "OK"}


    @app.get("/products/{sku}")
    def get_product(sku, db=Depends(get_db)):
    pass


    @app.get("/products", status_code=200)
    def get_products(page: int = 1, page_size: int = 50, db: Session = Depends(get_db)):
    try:
    result, sku_list = [], []
    for row in (
    db.query(Product, Image)
    .filter(Product.sku == Image.sku)
    .limit(page_size)
    .offset(page * page_size)
    ):
    if row[0].sku not in sku_list:
    result.append(
    {
    "sku": row[0].sku,
    "brand": row[0].brand,
    "image": row[1].image_url,
    "title": row[0].product_title,
    "price": row[0].original_price,
    "reviewCount": row[0].total_reviews,
    "rating": row[0].overall_rating,
    }
    )
    sku_list.append(row[0].sku)

    print(f"Result: {result}")
    return {"body": {"message": "Success", "result": result}, "statusCode": 200}
    except Exception as err:
    print(traceback.format_exc(err))
    return {
    "body": {"message": "Failure", "result": traceback.format_exc(err)},
    "statusCode": 500,
    }


    When I hit the products endpoint using this url:

    http://127.0.0.1:8000/products?page=1&page_size=100


    I'm getting this response:

    {"detail":[{"loc":["query","request"],"msg":"field required","type":"value_error.missing"}]}


    I'm not sure what it means by query and request missing in the response. What am I doing wrong?

    Continue reading...

Compartilhe esta Página