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发布于 2021-03-27 17:45:30
您的方法不接受request对象,只接受audio_type。
根据我对您代码的理解,您可能有多个请求体(引用它们时为schemas)。
有两个选项可供选择:
输入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的自动扩展不会提供模式示例,您必须手动提供示例(这可能是可能的,也可能是不可能的,我真的不知道,也没有尝试过:/)
Optional和audio_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 ...块中!
https://stackoverflow.com/questions/66829247
复制相似问题