日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)FastAPI教程:FastAPI教程 獲取當前用戶

在上一章節(jié)中,(基于依賴項注入系統(tǒng)的)安全系統(tǒng)向路徑操作函數(shù)提供了一個 str 類型的 token:

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比樂平網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式樂平網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋樂平地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。

from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")


@app.get("/items/")
async def read_items(token: str = Depends(oauth2_scheme)):
    return {"token": token}

但這還不是很實用。

讓我們來使它返回當前用戶給我們。

創(chuàng)建一個用戶模型

首先,讓我們來創(chuàng)建一個用戶 Pydantic 模型。

與使用 Pydantic 聲明請求體的方式相同,我們可以在其他任何地方使用它:

from typing import Optional

from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
from pydantic import BaseModel

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")


class User(BaseModel):
    username: str
    email: Optional[str] = None
    full_name: Optional[str] = None
    disabled: Optional[bool] = None


def fake_decode_token(token):
    return User(
        username=token + "fakedecoded", email="john@example.com", full_name="John Doe"
    )


async def get_current_user(token: str = Depends(oauth2_scheme)):
    user = fake_decode_token(token)
    return user


@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
    return current_user

創(chuàng)建一個 get_current_user 依賴項

讓我們來創(chuàng)建一個 get_current_user 依賴項。

還記得依賴項可以有子依賴項嗎?

get_current_user 將具有一個我們之前所創(chuàng)建的同一個 oauth2_scheme 作為依賴項。

與我們之前直接在路徑操作中所做的相同,我們新的依賴項 get_current_user 將從子依賴項 oauth2_scheme 中接收一個 str 類型的 token:

from typing import Optional

from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
from pydantic import BaseModel

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")


class User(BaseModel):
    username: str
    email: Optional[str] = None
    full_name: Optional[str] = None
    disabled: Optional[bool] = None


def fake_decode_token(token):
    return User(
        username=token + "fakedecoded", email="john@example.com", full_name="John Doe"
    )


async def get_current_user(token: str = Depends(oauth2_scheme)):
    user = fake_decode_token(token)
    return user


@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
    return current_user

獲取用戶

get_current_user 將使用我們創(chuàng)建的(偽)工具函數(shù),該函數(shù)接收 str 類型的令牌并返回我們的 Pydantic User 模型:

from typing import Optional

from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
from pydantic import BaseModel

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")


class User(BaseModel):
    username: str
    email: Optional[str] = None
    full_name: Optional[str] = None
    disabled: Optional[bool] = None


def fake_decode_token(token):
    return User(
        username=token + "fakedecoded", email="john@example.com", full_name="John Doe"
    )


async def get_current_user(token: str = Depends(oauth2_scheme)):
    user = fake_decode_token(token)
    return user


@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
    return current_user

注入當前用戶

因此現(xiàn)在我們可以在路徑操作中使用 get_current_user 作為 Depends 了:

from typing import Optional

from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
from pydantic import BaseModel

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")


class User(BaseModel):
    username: str
    email: Optional[str] = None
    full_name: Optional[str] = None
    disabled: Optional[bool] = None


def fake_decode_token(token):
    return User(
        username=token + "fakedecoded", email="john@example.com", full_name="John Doe"
    )


async def get_current_user(token: str = Depends(oauth2_scheme)):
    user = fake_decode_token(token)
    return user


@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
    return current_user

注意我們將 current_user 的類型聲明為 Pydantic 模型 User。

這將幫助我們在函數(shù)內部使用所有的代碼補全和類型檢查。

Tip

你可能還記得請求體也是使用 Pydantic 模型來聲明的。

在這里 FastAPI 不會搞混,因為你正在使用的是 Depends。

Check

這種依賴系統(tǒng)的設計方式使我們可以擁有不同的依賴項(不同的「可依賴類型」),并且它們都返回一個 User 模型。

我們并未被局限于只能有一個返回該類型數(shù)據(jù)的依賴項。

其他模型

現(xiàn)在你可以直接在路徑操作函數(shù)中獲取當前用戶,并使用 Depends 在依賴注入級別處理安全性機制。

你可以使用任何模型或數(shù)據(jù)來滿足安全性要求(在這個示例中,使用的是 Pydantic 模型 User)。

但是你并未被限制只能使用某些特定的數(shù)據(jù)模型,類或類型。

你想要在模型中使用 id 和 email 而不使用任何的 username?當然可以。你可以同樣地使用這些工具。

你只想要一個 str?或者僅僅一個 dict?還是直接一個數(shù)據(jù)庫模型類的實例?它們的工作方式都是一樣的。

實際上你沒有用戶登錄到你的應用程序,而是只擁有訪問令牌的機器人,程序或其他系統(tǒng)?再一次,它們的工作方式也是一樣的。

盡管去使用你的應用程序所需要的任何模型,任何類,任何數(shù)據(jù)庫。FastAPI 通過依賴項注入系統(tǒng)都幫你搞定。

代碼體積

這個示例似乎看起來很冗長??紤]到我們在同一文件中混合了安全性,數(shù)據(jù)模型工具函數(shù)和路徑操作等代碼。

但關鍵的是。

安全性和依賴項注入內容只需要編寫一次。

你可以根據(jù)需要使其變得很復雜。而且只需要在一個地方寫一次。但仍然具備所有的靈活性。

但是,你可以有無數(shù)個使用同一安全系統(tǒng)的端點(路徑操作)。

所有(或所需的任何部分)的端點,都可以利用對這些或你創(chuàng)建的其他依賴項進行復用所帶來的優(yōu)勢。

所有的這無數(shù)個路徑操作甚至可以小到只需 3 行代碼:

from typing import Optional

from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
from pydantic import BaseModel

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")


class User(BaseModel):
    username: str
    email: Optional[str] = None
    full_name: Optional[str] = None
    disabled: Optional[bool] = None


def fake_decode_token(token):
    return User(
        username=token + "fakedecoded", email="john@example.com", full_name="John Doe"
    )


async def get_current_user(token: str = Depends(oauth2_scheme)):
    user = fake_decode_token(token)
    return user


@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
    return current_user

總結

現(xiàn)在你可以直接在路徑操作函數(shù)中獲取當前用戶。

我們已經(jīng)進行到一半了。

我們只需要再為用戶/客戶端添加一個真正發(fā)送 username 和 password 的路徑操作。

這些內容在下一章節(jié)。


文章題目:創(chuàng)新互聯(lián)FastAPI教程:FastAPI教程 獲取當前用戶
URL標題:http://www.dlmjj.cn/article/coicoco.html