# โž• ๐Ÿท โ–ถ๏ธ โฎ๏ธ โฎ๏ธ ๐Ÿ–ผ, โšซ๏ธ ๐Ÿ”œ โš  โœ”๏ธ ๐ŸŒ… ๐ŸŒ˜ 1๏ธโƒฃ ๐Ÿ”— ๐Ÿท. ๐Ÿ‘‰ โœด๏ธ ๐Ÿ’ผ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿท, โ†ฉ๏ธ: * **๐Ÿ”ข ๐Ÿท** ๐Ÿ’ช ๐Ÿ’ช โœ”๏ธ ๐Ÿ”. * **๐Ÿ”ข ๐Ÿท** ๐Ÿ”œ ๐Ÿšซ โœ”๏ธ ๐Ÿ”. * **๐Ÿ’ฝ ๐Ÿท** ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’ช โœ”๏ธ #๏ธโƒฃ ๐Ÿ”. !!! danger ๐Ÿ™… ๐Ÿช ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿ”. ๐Ÿ•ง ๐Ÿช "๐Ÿ” #๏ธโƒฃ" ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โคด๏ธ โœ”. ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ญ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ก โšซ๏ธโ” "๐Ÿ”#๏ธโƒฃ" [๐Ÿ’‚โ€โ™‚ ๐Ÿ“ƒ](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}. ## ๐Ÿ’— ๐Ÿท ๐Ÿ“ฅ ๐Ÿข ๐Ÿ’ญ โ” ๐Ÿท ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’– โฎ๏ธ ๐Ÿ‘ซ ๐Ÿ” ๐Ÿ‘ & ๐Ÿฅ‰ ๐ŸŒโ” ๐Ÿ‘ซ โš™๏ธ: === "๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”›" ```Python hl_lines="9 11 16 22 24 29-30 33-35 40-41" {!> ../../../docs_src/extra_models/tutorial001.py!} ``` === "๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ & ๐Ÿ”›" ```Python hl_lines="7 9 14 20 22 27-28 31-33 38-39" {!> ../../../docs_src/extra_models/tutorial001_py310.py!} ``` ### ๐Ÿ”ƒ `**user_in.dict()` #### Pydantic `.dict()` `user_in` Pydantic ๐Ÿท ๐ŸŽ“ `UserIn`. Pydantic ๐Ÿท โœ”๏ธ `.dict()` ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ‘ˆ ๐Ÿ“จ `dict` โฎ๏ธ ๐Ÿท ๐Ÿ’ฝ. , ๐Ÿšฅ ๐Ÿ‘ฅ โœ Pydantic ๐ŸŽš `user_in` ๐Ÿ’–: ```Python user_in = UserIn(username="john", password="secret", email="john.doe@example.com") ``` & โคด๏ธ ๐Ÿ‘ฅ ๐Ÿค™: ```Python user_dict = user_in.dict() ``` ๐Ÿ‘ฅ ๐Ÿ”œ โœ”๏ธ `dict` โฎ๏ธ ๐Ÿ’ฝ ๐Ÿ”ข `user_dict` (โšซ๏ธ `dict` โ†ฉ๏ธ Pydantic ๐Ÿท ๐ŸŽš). & ๐Ÿšฅ ๐Ÿ‘ฅ ๐Ÿค™: ```Python print(user_dict) ``` ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿคš ๐Ÿ `dict` โฎ๏ธ: ```Python { 'username': 'john', 'password': 'secret', 'email': 'john.doe@example.com', 'full_name': None, } ``` #### ๐ŸŽ `dict` ๐Ÿšฅ ๐Ÿ‘ฅ โœŠ `dict` ๐Ÿ’– `user_dict` & ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐Ÿ”ข (โš–๏ธ ๐ŸŽ“) โฎ๏ธ `**user_dict`, ๐Ÿ ๐Ÿ”œ "๐ŸŽ" โšซ๏ธ. โšซ๏ธ ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”‘ & ๐Ÿ’ฒ `user_dict` ๐Ÿ”— ๐Ÿ”‘-๐Ÿ’ฒ โŒ. , โ–ถ๏ธ โฎ๏ธ `user_dict` โšช๏ธโžก๏ธ ๐Ÿ”›, โœ: ```Python UserInDB(**user_dict) ``` ๐Ÿ”œ ๐Ÿ ๐Ÿ•ณ ๐ŸŒ“: ```Python UserInDB( username="john", password="secret", email="john.doe@example.com", full_name=None, ) ``` โš–๏ธ ๐ŸŒ… โšซ๏ธโ”, โš™๏ธ `user_dict` ๐Ÿ”—, โฎ๏ธ โšซ๏ธโ” ๐ŸŽš โšซ๏ธ ๐Ÿ’ช โœ”๏ธ ๐Ÿ”ฎ: ```Python UserInDB( username = user_dict["username"], password = user_dict["password"], email = user_dict["email"], full_name = user_dict["full_name"], ) ``` #### Pydantic ๐Ÿท โšช๏ธโžก๏ธ ๐ŸŽš โž•1๏ธโƒฃ ๐Ÿ–ผ ๐Ÿ”› ๐Ÿ‘ฅ ๐Ÿคš `user_dict` โšช๏ธโžก๏ธ `user_in.dict()`, ๐Ÿ‘‰ ๐Ÿ“Ÿ: ```Python user_dict = user_in.dict() UserInDB(**user_dict) ``` ๐Ÿ”œ ๐ŸŒ“: ```Python UserInDB(**user_in.dict()) ``` ...โ†ฉ๏ธ `user_in.dict()` `dict`, & โคด๏ธ ๐Ÿ‘ฅ โš’ ๐Ÿ "๐ŸŽ" โšซ๏ธ ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ `UserInDB` ๐Ÿ”  โฎ๏ธ `**`. , ๐Ÿ‘ฅ ๐Ÿคš Pydantic ๐Ÿท โšช๏ธโžก๏ธ ๐Ÿ’ฝ โž•1๏ธโƒฃ Pydantic ๐Ÿท. #### ๐ŸŽ `dict` & โž• ๐Ÿ‡จ๐Ÿ‡ป & โคด๏ธ โŽ โž• ๐Ÿ‡จ๐Ÿ‡ป โŒ `hashed_password=hashed_password`, ๐Ÿ’–: ```Python UserInDB(**user_in.dict(), hashed_password=hashed_password) ``` ...๐Ÿ”š ๐Ÿ†™ ๐Ÿ’†โ€โ™‚ ๐Ÿ’–: ```Python UserInDB( username = user_dict["username"], password = user_dict["password"], email = user_dict["email"], full_name = user_dict["full_name"], hashed_password = hashed_password, ) ``` !!! warning ๐Ÿ”— ๐ŸŒ– ๐Ÿ”ข ๐Ÿค– ๐Ÿ’ช ๐Ÿ’ง ๐Ÿ’ฝ, โœ‹๏ธ ๐Ÿ‘ซ โ†—๏ธ ๐Ÿšซ ๐Ÿšš ๐Ÿ™† ๐ŸŽฐ ๐Ÿ’‚โ€โ™‚. ## ๐Ÿ“‰ โŽ ๐Ÿ“‰ ๐Ÿ“Ÿ โŽ 1๏ธโƒฃ ๐Ÿš ๐Ÿ’ญ **FastAPI**. ๐Ÿ“Ÿ โŽ ๐Ÿ“ˆ ๐Ÿคž ๐Ÿ›, ๐Ÿ’‚โ€โ™‚ โ”, ๐Ÿ“Ÿ ๐Ÿ” โ” (๐Ÿ•โ” ๐Ÿ‘† โ„น 1๏ธโƒฃ ๐Ÿฅ‰ โœ‹๏ธ ๐Ÿšซ ๐ŸŽ), โ™’๏ธ. & ๐Ÿ‘‰ ๐Ÿท ๐ŸŒ ๐Ÿค ๐Ÿ“š ๐Ÿ’ฝ & โŽ ๐Ÿ”ข ๐Ÿ“› & ๐Ÿ†Ž. ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ‘ป. ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ“ฃ `UserBase` ๐Ÿท ๐Ÿ‘ˆ ๐Ÿฆ ๐Ÿงข ๐Ÿ‘† ๐ŸŽ ๐Ÿท. & โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช โš’ ๐Ÿฟ ๐Ÿ‘ˆ ๐Ÿท ๐Ÿ‘ˆ ๐Ÿ˜– ๐Ÿšฎ ๐Ÿ”ข (๐Ÿ†Ž ๐Ÿ“„, ๐Ÿ”ฌ, โ™’๏ธ). ๐ŸŒ ๐Ÿ’ฝ ๐Ÿ› ๏ธ, ๐Ÿ”ฌ, ๐Ÿงพ, โ™’๏ธ. ๐Ÿ”œ ๐Ÿ‘ท ๐Ÿ›Ž. ๐Ÿ‘ˆ ๐ŸŒŒ, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”บ ๐Ÿ–– ๐Ÿท (โฎ๏ธ ๐Ÿ”ข `password`, โฎ๏ธ `hashed_password` & ๐Ÿต ๐Ÿ”): === "๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”›" ```Python hl_lines="9 15-16 19-20 23-24" {!> ../../../docs_src/extra_models/tutorial002.py!} ``` === "๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ & ๐Ÿ”›" ```Python hl_lines="7 13-14 17-18 21-22" {!> ../../../docs_src/extra_models/tutorial002_py310.py!} ``` ## `Union` โš–๏ธ `anyOf` ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“จ `Union` 2๏ธโƒฃ ๐Ÿ†Ž, ๐Ÿ‘ˆ โ›“, ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ”œ ๐Ÿ™† 2๏ธโƒฃ. โšซ๏ธ ๐Ÿ”œ ๐Ÿ”ฌ ๐Ÿ—„ โฎ๏ธ `anyOf`. ๐Ÿ‘ˆ, โš™๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘ `typing.Union`: !!! note ๐Ÿ•โ” โš– `Union`, ๐Ÿ”Œ ๐Ÿ† ๐ŸŽฏ ๐Ÿ†Ž ๐Ÿฅ‡, โฉ ๐ŸŒ˜ ๐ŸŽฏ ๐Ÿ†Ž. ๐Ÿ–ผ ๐Ÿ”›, ๐ŸŒ– ๐ŸŽฏ `PlaneItem` ๐Ÿ‘Ÿ โญ `CarItem` `Union[PlaneItem, CarItem]`. === "๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”›" ```Python hl_lines="1 14-15 18-20 33" {!> ../../../docs_src/extra_models/tutorial003.py!} ``` === "๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ & ๐Ÿ”›" ```Python hl_lines="1 14-15 18-20 33" {!> ../../../docs_src/extra_models/tutorial003_py310.py!} ``` ### `Union` ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ ๐Ÿ‘‰ ๐Ÿ–ผ ๐Ÿ‘ฅ ๐Ÿšถโ€โ™€๏ธ `Union[PlaneItem, CarItem]` ๐Ÿ’ฒ โŒ `response_model`. โ†ฉ๏ธ ๐Ÿ‘ฅ ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ **๐Ÿ’ฒ โŒ** โ†ฉ๏ธ ๐Ÿšฎ โšซ๏ธ **๐Ÿ†Ž โœ**, ๐Ÿ‘ฅ โœ”๏ธ โš™๏ธ `Union` ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ. ๐Ÿšฅ โšซ๏ธ ๐Ÿ†Ž โœ ๐Ÿ‘ฅ ๐Ÿ’ช โœ”๏ธ โš™๏ธ โธ โธ,: ```Python some_variable: PlaneItem | CarItem ``` โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘ฅ ๐Ÿšฎ ๐Ÿ‘ˆ `response_model=PlaneItem | CarItem` ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿคš โŒ, โ†ฉ๏ธ ๐Ÿ ๐Ÿ”œ ๐Ÿ”„ ๐ŸŽญ **โŒ ๐Ÿ› ๏ธ** ๐Ÿ–– `PlaneItem` & `CarItem` โ†ฉ๏ธ ๐Ÿ”ฌ ๐Ÿ‘ˆ ๐Ÿ†Ž โœ. ## ๐Ÿ“‡ ๐Ÿท ๐ŸŽ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“จ ๐Ÿ“‡ ๐ŸŽš. ๐Ÿ‘ˆ, โš™๏ธ ๐Ÿฉ ๐Ÿ `typing.List` (โš–๏ธ `list` ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”›): === "๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”›" ```Python hl_lines="1 20" {!> ../../../docs_src/extra_models/tutorial004.py!} ``` === "๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”›" ```Python hl_lines="18" {!> ../../../docs_src/extra_models/tutorial004_py39.py!} ``` ## ๐Ÿ“จ โฎ๏ธ โŒ `dict` ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“จ โš™๏ธ โœ… โŒ `dict`, ๐Ÿ“ฃ ๐Ÿ†Ž ๐Ÿ”‘ & ๐Ÿ’ฒ, ๐Ÿต โš™๏ธ Pydantic ๐Ÿท. ๐Ÿ‘‰ โš  ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ญ โ˜‘ ๐Ÿ‘/๐Ÿ”ข ๐Ÿ“› (๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ’ช Pydantic ๐Ÿท) โช. ๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `typing.Dict` (โš–๏ธ `dict` ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”›): === "๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”›" ```Python hl_lines="1 8" {!> ../../../docs_src/extra_models/tutorial005.py!} ``` === "๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”›" ```Python hl_lines="6" {!> ../../../docs_src/extra_models/tutorial005_py39.py!} ``` ## ๐ŸŒƒ โš™๏ธ ๐Ÿ’— Pydantic ๐Ÿท & ๐Ÿ˜– โžก ๐Ÿ”  ๐Ÿ’ผ. ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ช โœ”๏ธ ๐Ÿ‘ ๐Ÿ’ฝ ๐Ÿท ๐Ÿ“ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿšฅ ๐Ÿ‘ˆ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ”œ ๐Ÿ’ช โœ”๏ธ ๐ŸŽ "๐Ÿ‡ต๐Ÿ‡ธ". ๐Ÿ’ผ โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป "๐Ÿ‘จโ€๐Ÿ’ผ" โฎ๏ธ ๐Ÿ‡ต๐Ÿ‡ธ โœ… `password`, `password_hash` & ๐Ÿ™…โ€โ™‚ ๐Ÿ”.