首页 > 解决方案 > 如果路径相同,则忽略其中一个路径操作,但其中一个具有查询参数

问题描述

我想要两个具有相同路径的路径操作@app.get("/movies/", ..)

@app.get("/movies/", response_model=schemas.Movie)
def read_movie_by_title(title: str, db: Session = Depends(get_db)):
    db_movie = crud.get_movie_by_title(db, title=title)
    return db_movie


@app.get("/movies/", response_model=List[schemas.Movie])
def read_movies(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
    db_movies = crud.get_movies(db, skip=skip, limit=limit)
    return db_movies

如您所见,第一个用于通过标题获取电影并具有查询参数 ( title),第二个用于获取列表。当我检查生成的文档时,read_movie_by_title缺少一个 for 。

我试图通过删除来更改read_movie_by_titleto的路径来解决这个问题,但我根本不喜欢这个解决方案。/movies/

所以问题是:有没有办法让两条相等的路径,但一条带有查询参数,还是我需要以不同的方式来做这件事?有什么建议么?

标签: pythonrestbackendfastapi

解决方案


您可以通过将端点更改为"/movies/{title}"

@app.get("/movies/{title}", response_model=schemas.Movie)
def read_movie_by_title(title: str, db: Session = Depends(get_db)):
    db_movie = crud.get_movie_by_title(db, title=title)
    return db_movie

# 2nd remains the same
@app.get("/movies/", response_model=List[schemas.Movie])
def read_movies(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
    db_movies = crud.get_movies(db, skip=skip, limit=limit)
    return db_movies

推荐阅读