zoukankan      html  css  js  c++  java
  • FastAPI Response(二) 直接返回Response对象

    作者:麦克煎蛋   出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢!

    在FastAPI路径操作中,我们通常直接返回以下数据类型:dict,list,Pydantic模型,数据库模型以及其他数据类型。

    FastAPI通过jsonable_encoder函数自动把返回数据转换为JSON格式,然后把JSON兼容的数据内容传送给JSONResponse对象并返回给终端用户。

    在有些情况下,我们需要在路径操作中直接返回Response对象,这样我们能有更多的操作灵活性,比如自定义头信息、自定义Cookie信息等。

    返回Response

    我们可以直接返回Response或者它的任何子类。 JSONResponse实际上也是Response的子类。

    这个时候FastAPI不会做任何数据转换和数据校验,而是直接返回数据。

    我们具有很大的灵活性,可以返回任何数据类型,重写数据声明或者数据校验。

    我们可以利用jsonable_encoder把数据转换成JSON兼容格式。

    from datetime import datetime
    from typing import Optional
    
    from fastapi import FastAPI
    from fastapi.encoders import jsonable_encoder
    from fastapi.responses import JSONResponse
    from pydantic import BaseModel
    
    
    class Item(BaseModel):
        title: str
        timestamp: datetime
        description: Optional[str] = None
    
    
    app = FastAPI()
    
    
    @app.put("/items/{id}")
    def update_item(id: str, item: Item):
    json_compatible_item_data = jsonable_encoder(item) return JSONResponse(content=json_compatible_item_data)

    返回自定义Response

    我们来看一下如何返回一个自定义的Response,比如返回XML格式的数据。

    from fastapi import FastAPI, Response
    
    app = FastAPI()
    
    
    @app.get("/legacy/")
    def get_legacy_data():
        data = """<?xml version="1.0"?>
        <shampoo>
        <Header>
            Apply shampoo here.
        </Header>
        <Body>
            You'll have to use soap here.
        </Body>
        </shampoo>
        """
        return Response(content=data, media_type="application/xml")
  • 相关阅读:
    MySQL中tinytext、text、mediumtext和longtext详解
    端口冲突
    Form绑定
    Uri绑定
    只绑定Get参数
    Linux:Day4(上) 文件管理、管道
    selenium之frame
    selenium之选项卡管理
    Request
    爬虫常用库
  • 原文地址:https://www.cnblogs.com/mazhiyong/p/13279543.html
Copyright © 2011-2022 走看看