FastAPI學習 3 路由引數詳解

2021-10-06 07:08:55 字數 4481 閱讀 9490

1.路徑引數

宣告路徑引數時,可以使用python格式字串使用的相同語法宣告路徑「引數」或「變數」

from fastapi import fastapi

)"/items/"

)async

defread_item

(item_id)

:return

**中沒有規定引數item_id的資料型別

from fastapi import fastapi

)"/items/"

)async

defread_item

(item_id:

int)

:return

**中規定了item_id的引數型別為int,如果傳入的引數型別不符合規定的型別,則會返回錯誤,如下:

]}

該錯誤會清楚的指明驗證未通過的點

注意:建立路由的時候,你需要對路由的操作順序進行調整,例如,您用/ users / me這個路由去獲取當前的所有使用者資訊,然後通過/ users / 這個路由來獲取某個使用者id的資訊,但是在fastapi中的路由操作是按順序來查詢的,如果/ users / 這個路由寫在了/ users / me的前面,當您請求/ users / me時候,預設的會去匹配/ users / 的執行方法,此時的user_id的值是me

from fastapi import fastapi

)"/users/me"

)async

defread_user_me()

:return

"/users/"

)async

defread_user

(user_id:

str)

:return

from enum import enum 

from fastapi import fastapi

class

modelname

(str

, enum)

: alexnet =

"alexnet" resnet =

"resnet" lenet =

"lenet"

)"/model/"

)async

defget_model

(model_name: modelname)

:# 規定了model_name 的資料型別在modelname中選擇

if model_name == modelname.alexnet:

# model_name 指向modelname的列舉成員

return

if model_name.value ==

"lenet"

:# model_name.value是獲取列舉成員的值

return

return

# model_name,列舉型別的成員可以作為返回值,返回時,自動對應該列舉型別成員的值

from fastapi import fastapi

)"/files/"

)# path 定義了引數file_path是個路徑,可以將引數以『/』開頭,url就是/files//home/johndoe/myfile.txt

async

defread_user_me

(file_path:

str)

:return

2.查詢引數

當你宣告不屬於路徑引數的其他函式引數時,他們就自動解釋為查詢引數,也就是query引數

from fastapi import fastapi

)"/items/"

)async

defread_item

(skip:

int=

0, limit:

int=10)

:return

如在get請求中,在url中?後面的所有用&分割的鍵值對引數都是查詢引數,例:

/user?username=zhangsan&pwd=zweasd此時的查詢引數就是username和pwd,對應的值是zhangsan, zweasd,所有適應於路徑引數的所有過程都適用於查詢引數

設定查詢引數的預設值:

比如在註冊的時候,有些引數是必填的,有些引數可以不填,但是要給定乙個預設值,這時候,這些不是必填的引數可以不用出現在請求路由的引數列表裡面,可以如下設定預設引數:

from fastapi import fastapi

)"/items/"

)async

defread_item

(item_id:

str, name:

str=

'zhangsan'

, age:

int=18)

:return

""" item_id: 路徑引數,型別為str,必選

name: 查詢引數,型別為str,可選,預設值為zhangsan

age: 查詢引數,型別為int,可以,預設值為18

"""

查詢引數資料型別轉換:

from fastapi import fastapi

)"/items"

)async

defread_item

(name:

str=

none

, is_delete:

bool

=false):

item =

if name:

item.update()if

not is_delete:

item.update(

存在".format

(name)})

return item

""" 此時請求 http:.0.1:8000/items?name=zhangsan&short=0

請求引數short都會進行資料轉換,轉換為true或者false

"""

可選的型別宣告:

如果宣告查詢引數的時候,spik: int = none, 因為none不是int型別,這樣會報如下錯誤:

incompatible types in assignment (expression has type

"none"

, variable has type

"int"

)

可以用optional 告訴 mypy,這個值可能是 none:

from typing import optional

from fastapi import fastapi

)"/items/"

)# 路徑引數不可以用optional

async

defread_user_item

(item_id:

str, limit: optional[

int]

=none):

item =

return item

3.boby引數

不能通過get請求傳送boby引數,常見傳送boby引數的請求方法有,post, put, delete, patch

請求體引數也可以和查詢傳參一樣,定義在宣告的函式中,當請求體(boby)引數過多時,一般會引用pydantic中basemodel去定義boby引數,**如下:

from fastapi import fastapi

from pydantic import basemodel

class

item

(basemodel)

: name:

str description:

str=

none

price:

float

tax:

float

=none

)"/items/"

)async

defcreate_item

(item: item)

:return item

"""可以用none預設賦值,去定義引數是否是必填

"""

FastAPI學習 2 fastapi引數詳解

1.檢視fastapi原始碼 引數如下 from fastapi import fastapi from starlette.responses import jsonresponse 此型別不可少 from starlette.routing import route request引數不可少 a...

Vue學習之路 3 路由

在乙個系統中,一般會由很多頁面組成,當乙個頁面要跳轉到另外乙個頁面的時候是通過改變url路徑來實現的,這個時候vue需要知道當前url對應的那個元件頁面,這個控制者就是vue router。使用vue router需要載入vue router.js。csdn資源 布局 主頁資訊 設定元件html頁面...

3 路由配置

一 路由配置 path path 函式 匯入 from django.urls import path 語法 path route,views,name none 引數 1.route 字串型別,匹配的請求路徑 2.views 指定路徑所對應的檢視處理函式的名稱 3.name 為位址起別名,在模版中...