首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个端点中的多个功能fastapi

一个端点中的多个功能fastapi
EN

Stack Overflow用户
提问于 2021-03-27 16:07:40
回答 1查看 471关注 0票数 1
代码语言:javascript
复制
class AudioType(str, Enum):
    Song = "Song"
    Podcast = "Podcast"
    Audiobook = "Audiobook"


@app.post("/{audio_type}", status_code=status.HTTP_200_OK)
def audio(audio_type: AudioType):
    if audio_type == AudioType.Song:
        def create_song(request: schemas.Song, db: Session = Depends(database.get_db)):
            new_song = models.Song(name=request.name, duration=request.duration, uploadTime=request.uploadTime)
            db.add(new_song)
            db.commit()
            db.refresh(new_song)
            return new_song
    elif audio_type == AudioType.Podcast:
        def create_podcast(request: schemas.Podcast, db: Session = Depends(database.get_db)):
            new_podcast = models.Podcast(name=request.name,  duration=request.duration, uploadTime=request.uploadTime,                                         host=request.host)
            db.add(new_podcast)
            db.commit()
            db.refresh(new_podcast)
            return new_podcast
    elif audio_type == AudioType.Audiobook:
        def create_audiobook(request: schemas.Audiobook, db: Session = Depends(database.get_db)):
            new_audiobook = models.Audiobook(titile=request.title, author=request.author, narrator=request.narrator,                                              duration=request.duration, uploadTime=request.uploadTime)
            db.add(new_audiobook)
            db.commit()
            db.refresh(new_audiobook)
            return new_audiobook
EN

回答 1

Stack Overflow用户

发布于 2021-03-27 17:45:30

您的方法不接受request对象,只接受audio_type

根据我对您代码的理解,您可能有多个请求体(引用它们时为schemas)。

有两个选项可供选择:

  1. 您需要按如下方式声明终结点:

输入import Union @app.post("/{audio_type}",status_code=status.HTTP_200_OK) def audio( request: Unionschemas.Song,schemas.Podcast,schemas.Audiobook,audio_type: AudioType ):...你的方法...

但是fastapi的自动扩展不会提供模式示例,您必须手动提供示例(这可能是可能的,也可能是不可能的,我真的不知道,也没有尝试过:/)

  1. 或者您可以拥有一个可以接受Optionalaudio_type参数形式的所有内容的架构:

通过键入导入可选类EndpointSchema(BaseModel):audio_type: AudioType歌曲: Optionalschemas.Song播客: Optionalschemas.Podcast audiobook: Optionalschemas.Audiobook @app.post("/audio",status_code=status.HTTP_200_OK)定义音频(request_body: EndpointSchema):if request_body.audio_type == AudioType.Song:...继续处理您的请求...

最后,非常重要的:声明内部方法(create_song等)。之后您不会调用,因此您的代码将不会执行任何操作。你不需要这样做,使用代码来创建一首歌,播客,或有声读物直接在if, elif ...块中!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66829247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档