当前位置: 首页 > 知识库问答 >
问题:

一个endpointfastapi中的多种功能

苏坚成
2023-03-14

我试图创建一个音频服务器,我可以上传各种音频文件,我有一个要求,我只能创建一个endpoint创建,我想出了这个,但它确实显示了输入数据的请求表单。

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

共有1个答案

茅华灿
2023-03-14

您的方法不接受< code >请求对象,而只接受< code>audio_type。< br >另外,根据我对您的代码的理解,您可能有多个请求体(您所指的< code > schema )

你想要什么有两个选择:

>

  • 您需要按如下方式声明endpoint:

    from typing import Union
    
    @app.post("/{audio_type}", status_code=status.HTTP_200_OK)
    def audio(
        request: Union[schemas.Song, schemas.Podcast, 
        schemas.Audiobook], audio_type: AudioType
    ):
        ... Your method ...
    

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

    或者,您可以有一个架构,该架构可以接受所有内容作为可选audio_type参数:

    from typing import Optional
    
    
    class EndpointSchema(BaseModel):
        audio_type: AudioType
        song: Optional[schemas.Song]
        podcast: Optional[schemas.Podcast]
        audiobook: Optional[schemas.Audiobook]
    
    
    @app.post("/audio", status_code=status.HTTP_200_OK)
    def audio(request_body: EndpointSchema):
        if request_body.audio_type == AudioType.Song:
            ... Continue with your request processing ...
    

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

  •  类似资料:
    • 我有0编码知识,但希望你们可以协助修改我在网上找到的代码,以创建多个按钮来执行不同的bat文件。我会将其保存为hta文件,以便在win shell环境中运行。谢谢!!!

    • 编辑: 一些人显然误解了这个问题。。我甚至没有仔细询问如何在python中进行切换/案例。请先读一遍,然后再投票结束 我有不同的函数,它们都高度相关,但参数略有不同。作为一个比喻,考虑它们代表不同的排序算法。现在,我想要一个大的参数化函数,它从外部调用,然后在内部调用正确的排序算法/正确的函数。 作为一个额外的要求,必须能够给所有这些子函数不同的输入信息(不同的参数数)。 我想出了一个解决办法,但

    • 问题内容: 这是“ 用量角器设置Firefox轮廓”主题的后续。 根据howto,可以使用特殊的“ helper” js代码 设置firefox配置文件,该代码使用和库来动态制作编码的firefox配置文件。 这对我一直有效,直到我尝试 使用多个浏览器并进行配置: 通过此设置,我遇到了一个错误(此处完整回溯): 规范模式与任何文件都不匹配。 据我了解,这意味着使用firefox配置文件的设置缺少密

    • 假设我有以下功能文件: 我ogin.feature 功能:登录网站 场景:现场登录验证 给定导航到站点登录页 家特色 功能:欢迎页面验证 场景:验证登录后出现的页面 已成功完成给定登录 登录成功后的页面出现时 然后测试完成 在Home.feature文件中,我需要先执行Login.feature,然后调用home.feature.所以当我从运行器测试中执行home时,它会依次执行login,然后是

    • 本文向大家介绍Android中实现ping功能的多种方法详解,包括了Android中实现ping功能的多种方法详解的使用技巧和注意事项,需要的朋友参考一下 使用java来实现ping功能。 并写入文件。为了使用java来实现ping的功能,有人推荐使用java的 Runtime.exec()方法来直接调用系统的Ping命令,也有人完成了纯Java实现Ping的程序,使用的是Java的NIO包(na

    • 问题内容: 我是Swift的新手,我已经遍历了一些教程,其中许多教程使用同一个名称多次定义了一个函数。 我已经习惯了其他编程语言,否则将无法执行此操作。 因此,我检查了官方的Swift手册,还检查了override关键字,以了解可以得到的结果,但是仍然无法理解以下代码: 从我看到的函数tableView设置在第1行和第5行,我注意到的唯一区别是第一个tableView函数返回,而第二个函数返回(U