Тип SecretStr
Тип SecretStr применяется в моделях Pydantic
для хранения секретных данных: паролей, токенов, ключей.
При выводе модели или преобразовании в строку
значение маскируется как '**********'.
Реальное значение доступно только через метод
get_secret_value.
Тип импортируется из модуля pydantic.
Синтаксис
from pydantic import SecretStr
secret: SecretStr
Пример
Давайте создадим модель с секретным полем и посмотрим, как значение отображается при выводе:
<+python+>
from fastapi import FastAPI
from pydantic import BaseModel, SecretStr
app = FastAPI()
class User(BaseModel):
name: str
password: SecretStr
@app.post('/user')
def create_user(user: User):
return {'name': user.name, 'password': str(user.password)}
<-python+>
Результат выполнения запроса с телом
{"name": "user", "password": "abcde"}:
{"name": "user", "password": "**********"}
Пример
Давайте извлечём реальное значение секрета
через метод get_secret_value:
<+python+>
from fastapi import FastAPI
from pydantic import BaseModel, SecretStr
app = FastAPI()
class User(BaseModel):
name: str
password: SecretStr
@app.post('/user')
def create_user(user: User):
secret = user.password.get_secret_value()
return {'name': user.name, 'length': len(secret)}
<-python+>
Результат выполнения запроса с телом
{"name": "user", "password": "abcde"}:
{"name": "user", "length": 5}
Пример
Давайте сравним два секретных значения. Сравнение происходит по реальному содержимому:
<+python+>
from pydantic import SecretStr
a = SecretStr('abcde')
b = SecretStr('abcde')
c = SecretStr('hello')
res = [a == b, a == c, str(a)]
<-python+>
Результат выполнения кода:
[True, False, '**********']