Bạn có thể sử dụng các chú thích kiểu giống như cách bạn làm với dữ liệu đầu vào trong các tham số hàm, bạn có thể sử dụng các mô hình Pydantic, danh sách, từ điển, giá trị vô hướng như số nguyên, booleans, v.v.
Trăn 3. 6 trở lênPython 3. 9 trở lên Python 3. 10 trở lên
Nếu dữ liệu không hợp lệ (e. g. bạn đang thiếu một trường), điều đó có nghĩa là mã ứng dụng của bạn bị hỏng, không trả về đúng như mong muốn và nó sẽ trả về lỗi máy chủ thay vì trả về dữ liệu không chính xác. Bằng cách này, bạn và khách hàng của mình có thể chắc chắn rằng họ sẽ nhận được dữ liệu và hình dạng dữ liệu như mong đợi
Thêm Lược đồ JSON cho phản hồi, trong thao tác đường dẫn OpenAPI
Điều này sẽ được sử dụng bởi các tài liệu tự động
Nó cũng sẽ được sử dụng bởi các công cụ tạo mã máy khách tự động
Nhưng quan trọng nhất
Nó sẽ giới hạn và lọc dữ liệu đầu ra theo những gì được xác định trong kiểu trả về
Điều này đặc biệt quan trọng đối với bảo mật, chúng ta sẽ xem thêm về điều đó bên dưới
from typing import Any, List, Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
tags: List[str] = []
@app.post("/items/", response_model=Item)
async def create_item(item: Item) -> Any:
return item
@app.get("/items/", response_model=List[Item])
async def read_items() -> Any:
return [
{"name": "Portal Gun", "price": 42.0},
{"name": "Plumbus", "price": 32.0},
]
7 Tham số
Có một số trường hợp bạn cần hoặc muốn trả về một số dữ liệu không chính xác như kiểu khai báo
Ví dụ: bạn có thể muốn trả về một từ điển hoặc đối tượng cơ sở dữ liệu, nhưng khai báo nó dưới dạng mô hình Pydantic. Bằng cách này, mô hình Pydantic sẽ thực hiện tất cả tài liệu dữ liệu, xác thực, v.v. cho đối tượng mà bạn đã trả lại (e. g. một từ điển hoặc đối tượng cơ sở dữ liệu)
Nếu bạn đã thêm chú thích kiểu trả về, các công cụ và trình chỉnh sửa sẽ phàn nàn về lỗi (chính xác) cho bạn biết rằng hàm của bạn đang trả về kiểu (e. g. a dict) khác với những gì bạn đã khai báo (e. g. một mô hình Pydantic)
Trong những trường hợp đó, bạn có thể sử dụng tham số trang trí hoạt động đường dẫn
Bằng cách đó, bạn nói với biên tập viên rằng bạn đang cố tình trả lại bất kỳ thứ gì. Nhưng FastAPI vẫn sẽ thực hiện tài liệu dữ liệu, xác thực, lọc, v.v. với
Bằng cách này, bạn có thể thêm các chú thích loại chính xác vào các chức năng của mình ngay cả khi bạn trả về một loại khác với mô hình phản hồi, được sử dụng bởi trình chỉnh sửa và các công cụ như mypy. Và bạn vẫn có thể yêu cầu FastAPI thực hiện xác thực dữ liệu, tài liệu, v.v. sử dụng
7 để tắt tạo mô hình phản hồi cho thao tác đường dẫn đó, bạn có thể cần làm điều đó nếu bạn đang thêm chú thích loại cho những thứ không phải là trường Pydantic hợp lệ, bạn sẽ thấy ví dụ về điều đó ở một trong các phần bên dưới
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
0
E. g.
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
1 hoặc
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
2
Và chúng tôi đang sử dụng mô hình này để khai báo đầu vào và mô hình tương tự để khai báo đầu ra của chúng tôi
Trăn 3. 6 trở lênPython 3. 10 trở lên
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
Bây giờ, bất cứ khi nào trình duyệt tạo người dùng bằng mật khẩu, API sẽ trả về cùng một mật khẩu trong phản hồi
Trong trường hợp này, đó có thể không phải là vấn đề vì đó là cùng một người dùng gửi mật khẩu
Nhưng nếu chúng tôi sử dụng cùng một mô hình cho hoạt động đường dẫn khác, chúng tôi có thể gửi mật khẩu của người dùng cho mọi khách hàng
Sự nguy hiểm
Không bao giờ lưu trữ mật khẩu đơn giản của người dùng hoặc gửi nó dưới dạng phản hồi như thế này, trừ khi bạn biết tất cả các cảnh báo và bạn biết mình đang làm gì
Thêm một mô hình đầu ra
Thay vào đó, chúng ta có thể tạo một mô hình đầu vào bằng mật khẩu văn bản gốc và một mô hình đầu ra không có nó
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
Vì vậy, FastAPI sẽ đảm nhiệm việc lọc ra tất cả dữ liệu không được khai báo trong mô hình đầu ra (sử dụng Pydantic)
from typing import Any, List, Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
tags: List[str] = []
@app.post("/items/", response_model=Item)
async def create_item(item: Item) -> Any:
return item
@app.get("/items/", response_model=List[Item])
async def read_items() -> Any:
return [
{"name": "Portal Gun", "price": 42.0},
{"name": "Plumbus", "price": 32.0},
]
7 hoặc Loại trả lại
Trong trường hợp này, vì hai mô hình khác nhau, nếu chúng ta chú thích kiểu trả về của hàm là
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
4, trình chỉnh sửa và công cụ sẽ phàn nàn rằng chúng ta đang trả về một kiểu không hợp lệ, vì đó là các lớp khác nhau
Chính vì vậy trong ví dụ này chúng ta phải khai báo nó trong tham số
7. Nhưng điều đó cũng có nghĩa là chúng ta không nhận được sự hỗ trợ từ trình soạn thảo và các công cụ kiểm tra kiểu trả về của hàm
Nhưng trong hầu hết các trường hợp chúng ta cần làm điều gì đó như thế này, chúng ta muốn mô hình chỉ lọc/xóa một số dữ liệu như trong ví dụ này
Và trong những trường hợp đó, chúng ta có thể sử dụng các lớp và tính kế thừa để tận dụng các chú thích kiểu hàm để được hỗ trợ tốt hơn trong trình chỉnh sửa và công cụ, đồng thời vẫn nhận được tính năng lọc dữ liệu FastAPI
Với điều này, chúng tôi nhận được hỗ trợ công cụ, từ người chỉnh sửa và mypy vì mã này đúng về loại, nhưng chúng tôi cũng nhận được bộ lọc dữ liệu từ FastAPI
Cái này hoạt động ra sao? . 🤓
Nhập Chú thích và Công cụ
Trước tiên, hãy xem trình chỉnh sửa, mypy và các công cụ khác sẽ thấy điều này như thế nào
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
9 và thêm trường
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
2, vì vậy, nó sẽ bao gồm tất cả các trường từ cả hai mô hình
Chúng tôi chú thích kiểu trả về của hàm là
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
9, nhưng chúng tôi thực sự đang trả về một phiên bản
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
9, có nghĩa là đây là một loại hợp lệ khi những gì được mong đợi là bất kỳ thứ gì là một
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
9
Lọc dữ liệu FastAPI
Bây giờ, đối với FastAPI, nó sẽ thấy kiểu trả về và đảm bảo rằng những gì bạn trả về chỉ bao gồm các trường được khai báo trong kiểu
FastAPI thực hiện một số điều trong nội bộ với Pydantic để đảm bảo rằng các quy tắc kế thừa lớp tương tự đó không được sử dụng để lọc dữ liệu trả về, nếu không, cuối cùng bạn có thể trả về nhiều dữ liệu hơn những gì bạn mong đợi
Bằng cách này, bạn có thể tận dụng tối đa cả hai thế giới. gõ chú thích với hỗ trợ công cụ và lọc dữ liệu
Xem nó trong các tài liệu
Khi bạn thấy các tài liệu tự động, bạn có thể kiểm tra xem cả mô hình đầu vào và mô hình đầu ra đều có Lược đồ JSON của riêng chúng không
Và cả hai mô hình sẽ được sử dụng cho tài liệu API tương tác
Chú thích loại trả lại khác
Có thể có trường hợp bạn trả về một thứ không phải là trường Pydantic hợp lệ và bạn chú thích nó trong hàm, chỉ để nhận được sự hỗ trợ do công cụ cung cấp (trình chỉnh sửa, mypy, v.v.)
Trả lại phản hồi trực tiếp
Trường hợp phổ biến nhất sẽ trả về một Phản hồi trực tiếp như được giải thích sau trong tài liệu nâng cao
Trường hợp đơn giản này được FastAPI xử lý tự động vì chú thích kiểu trả về là lớp (hoặc lớp con) của
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
8
Và các công cụ cũng sẽ rất vui vì cả
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
9 và
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
0 đều là các lớp con của
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
8, vì vậy chú thích loại là chính xác
Chú thích một lớp con phản hồi
Bạn cũng có thể sử dụng một lớp con của
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
9 là một lớp con của
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
8 và FastAPI sẽ tự động xử lý trường hợp đơn giản này
Chú thích loại trả lại không hợp lệ
Nhưng khi bạn trả về một số đối tượng tùy ý khác không phải là loại Pydantic hợp lệ (e. g. một đối tượng cơ sở dữ liệu) và bạn chú thích nó như vậy trong hàm, FastAPI sẽ cố gắng tạo một mô hình phản hồi Pydantic từ chú thích loại đó và sẽ không thành công
Điều tương tự cũng xảy ra nếu bạn có thứ gì đó giống như sự kết hợp giữa các loại khác nhau trong đó một hoặc nhiều trong số chúng không phải là loại Pydantic hợp lệ, chẳng hạn như điều này sẽ thất bại 💥
điều này không thành công vì chú thích loại không phải là loại Pydantic và không chỉ là một lớp hoặc lớp con
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
8 đơn lẻ, nó là sự kết hợp (bất kỳ trong hai loại) giữa
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
8 và
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
7
Vô hiệu hóa mô hình phản hồi
Tiếp tục từ ví dụ trên, bạn có thể không muốn xác thực dữ liệu mặc định, tài liệu, lọc, v.v. được thực hiện bởi FastAPI
Nhưng bạn có thể vẫn muốn giữ chú thích kiểu trả về trong hàm để nhận được sự hỗ trợ từ các công cụ như trình chỉnh sửa và trình kiểm tra kiểu (e. g. mypy)
Trong trường hợp này, bạn có thể tắt tính năng tạo mô hình phản hồi bằng cách cài đặt ____12_______7
Điều này sẽ làm cho FastAPI bỏ qua việc tạo mô hình phản hồi và theo cách đó bạn có thể có bất kỳ chú thích kiểu trả về nào bạn cần mà không ảnh hưởng đến ứng dụng FastAPI của bạn. 🤓
Thông số mã hóa Mô hình Phản hồi
Mô hình phản hồi của bạn có thể có các giá trị mặc định, như
Trăn 3. 6 trở lênPython 3. 9 trở lên Python 3. 10 trở lên
fromtypingimportUnionfromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:Union[str,None]=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
9 (hoặc
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
0 trong Python 3. 10) có giá trị mặc định là
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
1
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
2 có giá trị mặc định là
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
3
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
4 làm mặc định của danh sách trống.
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
5
nhưng bạn có thể muốn loại bỏ chúng khỏi kết quả nếu chúng không thực sự được lưu trữ
Ví dụ: nếu bạn có các mô hình với nhiều thuộc tính tùy chọn trong cơ sở dữ liệu NoSQL, nhưng bạn không muốn gửi các phản hồi JSON rất dài chứa đầy các giá trị mặc định
Sử dụng tham số from fastapi import FastAPI
from pydantic import BaseModel, EmailStr
app = FastAPI()
class UserIn(BaseModel):
username: str
password: str
email: EmailStr
full_name: str | None = None
# Don't do this in production!
@app.post("/user/")
async def create_user(user: UserIn) -> UserIn:
return user
6
Bạn có thể đặt tham số trang trí hoạt động đường dẫn
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
7
Trăn 3. 6 trở lênPython 3. 9 trở lên Python 3. 10 trở lên
và những giá trị mặc định đó sẽ không được đưa vào phản hồi, chỉ những giá trị thực sự được đặt
Vì vậy, nếu bạn gửi yêu cầu tới thao tác đường dẫn đó cho mục có ID
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
8, thì phản hồi (không bao gồm các giá trị mặc định) sẽ là
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
09 có cùng giá trị như giá trị mặc định, nhưng chúng được đặt rõ ràng (thay vì lấy từ giá trị mặc định)
Vì vậy, chúng sẽ được đưa vào phản hồi JSON
Mẹo
Lưu ý rằng các giá trị mặc định có thể là bất kỳ thứ gì, không chỉ
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
1
Chúng có thể là một danh sách (
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
fromfastapiimportFastAPIfrompydanticimportBaseModel,EmailStrapp=FastAPI()classUserIn(BaseModel):username:strpassword:stremail:EmailStrfull_name:str|None=None# Don't do this in production!@app.post("/user/")asyncdefcreate_user(user:UserIn)->UserIn:returnuser
19 với tên của các thuộc tính để bao gồm (bỏ qua phần còn lại) hoặc để loại trừ (bao gồm phần còn lại)
Điều này có thể được sử dụng như một phím tắt nhanh nếu bạn chỉ có một mô hình Pydantic và muốn xóa một số dữ liệu khỏi đầu ra
Mẹo
Nhưng vẫn nên sử dụng các ý tưởng ở trên, sử dụng nhiều lớp, thay vì các tham số này
Điều này là do Lược đồ JSON được tạo trong OpenAPI của ứng dụng của bạn (và các tài liệu) sẽ vẫn là lược đồ cho mô hình hoàn chỉnh, ngay cả khi bạn sử dụng
7 để xác định các mô hình phản hồi và đặc biệt là để đảm bảo dữ liệu riêng tư được lọc ra
Loại đối tượng nào là danh sách trong Python?
Đối tượng danh sách là chuỗi tổng quát hơn do Python cung cấp. Danh sách là bộ sưu tập được sắp xếp theo thứ tự của các đối tượng được nhập tùy ý . Chúng không có kích thước cố định. Nói cách khác, chúng có thể chứa các đối tượng tùy ý và có thể mở rộng linh hoạt khi các mục mới được thêm vào.
Tôi có thể trả lại danh sách bằng Python không?
Bạn có thể sử dụng bất kỳ đối tượng Python nào làm giá trị trả về. Vì mọi thứ trong Python đều là đối tượng nên bạn có thể trả về chuỗi, danh sách, bộ dữ liệu, từ điển, hàm, lớp, thể hiện, đối tượng do người dùng định nghĩa và thậm chí cả mô-đun hoặc gói.
Kiểu trả về của def trong Python là gì?
Một hàm trong Python được định nghĩa bằng từ khóa def. Các hàm không khai báo kiểu trả về . Một hàm không có câu lệnh trả về rõ ràng sẽ trả về Không có. Trong trường hợp không có đối số và không có giá trị trả về, định nghĩa rất đơn giản.
Danh sách có phải là đối tượng Python không?
Lớp chuỗi có sẵn theo mặc định trong python, vì vậy bạn không cần câu lệnh nhập để sử dụng giao diện đối tượng cho chuỗi. Danh sách cũng là đối tượng . Một phương pháp quan trọng cho danh sách là append(item).