zoukankan      html  css  js  c++  java
  • FastAPI 基础学习(五) 请求参数

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

    一、请求参数

    from fastapi import FastAPI
    
    app = FastAPI()
    
    fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]
    
    @app.get("/items/")
    async def read_item(skip: int = 0, limit: int = 10):
        return fake_items_db[skip : skip + limit]

    如上述,如果函数里的参数不是路径参数的一部分,那么这样的参数就自动被解释为请求参数

    请求参数就是URL中问号('?')后面以'&'间隔开的键值对,它们是URL的一部分,并且参数类型都是字符串类型。

    http://127.0.0.1:8000/items/?skip=0&limit=10

    在上面的这个URL中,请求参数分别是:

    skip:值是0

    limit:值是10

    FastAPI中所有适用于路径参数的功能也同样适用于请求参数,例如:

    • 编辑器支持
    • 数据自动解析
    • 数据自动校验
    • 自动化文档

    二、请求参数缺省值

    请求参数在URL路径中并不是固定不变的,它们是可选的,并且也可以有缺省值。

    from fastapi import FastAPI
    
    app = FastAPI()
    
    fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]
    
    @app.get("/items/")
    async def read_item(skip: int = 0, limit: int = 10):
        return fake_items_db[skip : skip + limit]

    在这个例子中,skip和limit都是有缺省值的。因此,下面URL的请求是等同的:

    http://127.0.0.1:8000/items/
    
    等同于
    
    http://127.0.0.1:8000/items/?skip=0&limit=10

    但如果你访问:

    http://127.0.0.1:8000/items/?skip=20

    那么实际的请求参数就是:

    skip=20
    limit=10

    三、可选请求参数

    我们可以声明请求参数是可选的,只要设置参数的缺省值为None

    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    @app.get("/items/{item_id}")
    async def read_item(item_id: str, q: str = None):
        if q:
            return {"item_id": item_id, "q": q}
        return {"item_id": item_id}

    在这个例子中,参数q就是可选的,缺省为None。

    同时在这个例子中,我们可以注意到,FastAPI可以非常智能的识别参数种类,这里参数item_id是一个路径参数,而参数q是一个请求参数。

    四、多路径参数、多请求参数

    你可以同时声明多个路径参数、多个请求参数,并且不用考虑声明顺序。FastAPI可以准确无误的识别参数类型。

    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    @app.get("/users/{user_id}/items/{item_id}")
    async def read_user_item(
        user_id: int, item_id: str, q: str = None, short: bool = False
    ):
        item = {"item_id": item_id, "owner_id": user_id}
        if q:
            item.update({"q": q})
        if not short:
            item.update(
                {"description": "This is an amazing item that has a long description"}
            )
        return item

    五、必选请求参数

    如果一个请求参数没有被设置任何缺省值(包括None),那么它就是必选的。

    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    @app.get("/items/{item_id}")
    async def read_user_item(item_id: str, needy: str):
        item = {"item_id": item_id, "needy": needy}
        return item

    如果我们没有携带请求参数needy,而是直接访问:

    http://127.0.0.1:8000/items/foo-item

    那么我们就会看到如下的错误信息:

    {
        "detail": [
            {
                "loc": [
                    "query",
                    "needy"
                ],
                "msg": "field required",
                "type": "value_error.missing"
            }
        ]
    }

    当然了,我们也可以声明有的参数是必选的,有的参数是有缺省值的,而有的参数是完全可选的。

    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    @app.get("/items/{item_id}")
    async def read_user_item(item_id: str, needy: str, skip: int = 0, limit: int = None):
        item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit}
        return item

    在这个例子中的请求参数中,needy是必选的,skip是有缺省值的,而limit是可选的。

  • 相关阅读:
    WCF 订单服务(2)
    移动应用接口的授权和安全
    数据库服务器死锁的解决方法 (转)
    WCF 订单服务(3)
    sqlservice 表分区方法
    基于.NET解决方案的架构和框架
    IIS7架构原理
    多线程的同步和通信
    【原创】关于wince OS开发面试问题的总结系列之OAL
    【原创】关于noot的学习笔记
  • 原文地址:https://www.cnblogs.com/mazhiyong/p/12900239.html
Copyright © 2011-2022 走看看