fastapi Query参数 & 字符串验证

from fastapi import FastAPI, Query

'''
FastAPI 允许您声明其他信息并验证参数
'''
app = FastAPI()


@app.get("/items/")
async def read_items(q: str = None):
    '''
    query 的参数q是一个字符串,默认为None,说明这个参数是可选参数

    :param q:
    :return:
    '''
    result = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        result.update({"q": q})
    return result


#  为query参数添加验证
'''
我们设置 即使q是可选的,只要提供了q,他的长度就不能超过50个字符串
'''


@app.get("/items_len/")
async def read_items_len(q: str = Query(None, max_length=50)):
    '''

    fastapi已经实现了对参数的验证,可以使用Query函数
    Query的第一个参数是定义的默认值
    :param q:
    :return:
    '''
    result = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        result.update({"q": q})
    return result


#  添加正则表达式验证
@app.get("/items/")
async def read_items_re(q: str =
                        Query(None, min_length=3, max_length=50, regex="^fixedquery$")):
    '''
    result = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        result.update({"q": q})
    return result
    :param q:
    :return:
    '''
    result = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        result.update({"q": q})
    return result


#  设置默认值
@app.get("/items/")
async def read_items_defuat(q: str = Query("fixedquery", min_length=3)):
    '''
    可以不使用None作为Query的第一个参数,也可以设置其他值
    当使用Query声明改查询参数必须的时候 可以使用... 作为第一个参数
    eg:
        def read_items(q: str = Query(..., min_length=3))
    :param q:
    :return:
    '''
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results


#  设置Query参数 列表/多个值
'''
当你明确用Query定义查询参数的时候,你可以声明一个参数来获取列表,或者说多个值
声明参数可以这么写
    eg:
        q: List[str] = Query(None)
    eg:
        from fastapi import FastAPI,Query
        @app.get("/items/")
        async def read_items(q:List[str] = Query(None)):
            results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
            if q:
                results.update({"q": q})
            return results
    访问的url可以是这样的 http://localhost:8000/items/?q=foo&q=bar
    那么函数参数 q中的Python列表中收到多个q查询参数的*值(foo和bar)。
    对应的响应应该是这样的:
        {
            "q": [
                "foo",
                "bar"
            ]
        }
    声明List的查询参数时,需要显示的使用Query,否则他将会被解释为请求正文
    可以对List设置多个默认值q语句要这么写
        q: List[str] = Query(["foo", "bar"])
    整个函数要这么写
        @app.get("/items/")
        async def read_items(q: List[str] = Query(["foo", "bar"])):
            query_items = {"q": q}
            return query_items
    这个时候请求的链接可以这么写:
        http://localhost:8000/items/
    这个链接返回的将是:
        {
          "q": [
            "foo",
            "bar"
          ]
        }
    参数别名
        假设你想设置参数为item-query,这时候你想访问
        http://127.0.0.1:8000/items/?item-query=foobaritems
        但是item-query不是一个有效的Python变量名,你想要使用这个参数
        那么fastapi给你的操作是
            q: str = Query(None, alias="item-query")
        这样你就可以明目张胆的使用这个参数了 这个参数就会被加上户口
'''

 

你可能感兴趣的:(fastapi学习笔记)