mirror of
https://github.com/fastapi-users/fastapi-users.git
synced 2026-03-13 07:49:55 +08:00
Deployed 7f80895 to dev with MkDocs 1.6.1 and mike 2.1.3
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
|
||||
|
||||
<link rel="icon" href="../../favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.49">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.22">
|
||||
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/main.6f8fc17f.min.css">
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
|
||||
@@ -94,7 +94,7 @@
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<script>var el=document.querySelector("[data-md-component=outdated]"),outdated=__md_get("__outdated",sessionStorage);!0===outdated&&el&&(el.hidden=!1)</script>
|
||||
<script>var el=document.querySelector("[data-md-component=outdated]"),base=new URL("../.."),outdated=__md_get("__outdated",sessionStorage,base);!0===outdated&&el&&(el.hidden=!1)</script>
|
||||
</aside>
|
||||
|
||||
</div>
|
||||
@@ -164,11 +164,13 @@
|
||||
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" for="__search">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
||||
</label>
|
||||
<div class="md-search" data-md-component="search" role="dialog">
|
||||
<label class="md-search__overlay" for="__search"></label>
|
||||
<div class="md-search__inner" role="search">
|
||||
<form class="md-search__form" name="search">
|
||||
@@ -202,13 +204,14 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/fastapi-users/fastapi-users" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
fastapi-users/fastapi-users
|
||||
@@ -254,7 +257,7 @@
|
||||
<a href="https://github.com/fastapi-users/fastapi-users" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
fastapi-users/fastapi-users
|
||||
@@ -274,8 +277,10 @@
|
||||
<a href="../.." class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
About
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -294,8 +299,10 @@
|
||||
<a href="../../installation/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Installation
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -313,6 +320,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -329,8 +337,10 @@
|
||||
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Configuration
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -354,8 +364,10 @@
|
||||
<a href="../../configuration/overview/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Overview
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -374,6 +386,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -387,8 +400,10 @@
|
||||
<label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
User model and databases
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -412,8 +427,10 @@
|
||||
<a href="../../configuration/databases/sqlalchemy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
SQLAlchemy
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -433,8 +450,10 @@
|
||||
<a href="../../configuration/databases/beanie/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Beanie
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -461,6 +480,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -474,8 +494,10 @@
|
||||
<label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Authentication backends
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -499,8 +521,10 @@
|
||||
<a href="../../configuration/authentication/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Introduction
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -519,6 +543,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -532,8 +557,10 @@
|
||||
<label class="md-nav__link" for="__nav_3_3_2" id="__nav_3_3_2_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Transports
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -557,8 +584,10 @@
|
||||
<a href="../../configuration/authentication/transports/cookie/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Cookie
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -578,8 +607,10 @@
|
||||
<a href="../../configuration/authentication/transports/bearer/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Bearer
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -606,6 +637,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -619,8 +651,10 @@
|
||||
<label class="md-nav__link" for="__nav_3_3_3" id="__nav_3_3_3_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Strategies
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -644,8 +678,10 @@
|
||||
<a href="../../configuration/authentication/strategies/database/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Database
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -665,8 +701,10 @@
|
||||
<a href="../../configuration/authentication/strategies/jwt/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
JWT
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -686,8 +724,10 @@
|
||||
<a href="../../configuration/authentication/strategies/redis/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Redis
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -715,8 +755,10 @@
|
||||
<a href="../../configuration/authentication/backend/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Create a backend
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -744,8 +786,10 @@
|
||||
<a href="../../configuration/user-manager/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
UserManager
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -765,8 +809,10 @@
|
||||
<a href="../../configuration/schemas/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Schemas
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -785,6 +831,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -798,8 +845,10 @@
|
||||
<label class="md-nav__link" for="__nav_3_6" id="__nav_3_6_label" tabindex="0">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Routers
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -823,8 +872,10 @@
|
||||
<a href="../../configuration/routers/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Introduction
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -844,8 +895,10 @@
|
||||
<a href="../../configuration/routers/auth/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Auth router
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -865,8 +918,10 @@
|
||||
<a href="../../configuration/routers/register/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Register routes
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -886,8 +941,10 @@
|
||||
<a href="../../configuration/routers/verify/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Verify router
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -907,8 +964,10 @@
|
||||
<a href="../../configuration/routers/reset/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Reset password router
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -928,8 +987,10 @@
|
||||
<a href="../../configuration/routers/users/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Users router
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -957,8 +1018,10 @@
|
||||
<a href="../../configuration/full-example/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Full example
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -978,8 +1041,10 @@
|
||||
<a href="../../configuration/oauth/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
OAuth2
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -999,8 +1064,10 @@
|
||||
<a href="../../configuration/password-hash/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Password hash
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1026,6 +1093,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1042,8 +1110,10 @@
|
||||
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Usage
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1067,8 +1137,10 @@
|
||||
<a href="../../usage/flow/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Flow
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1088,8 +1160,10 @@
|
||||
<a href="../../usage/routes/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Routes
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1109,8 +1183,10 @@
|
||||
<a href="../../usage/current-user/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Get current user
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1138,6 +1214,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1154,8 +1231,10 @@
|
||||
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Cookbook
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1188,8 +1267,10 @@
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Create a user programmatically
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1199,8 +1280,10 @@
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Create a user programmatically
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1273,6 +1356,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1289,8 +1373,10 @@
|
||||
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
Migration
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1314,8 +1400,10 @@
|
||||
<a href="../../migration/08_to_1x/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
0.8.x ➡️ 1.x.x
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1335,8 +1423,10 @@
|
||||
<a href="../../migration/1x_to_2x/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
1.x.x ➡️ 2.x.x
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1356,8 +1446,10 @@
|
||||
<a href="../../migration/2x_to_3x/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
2.x.x ➡️ 3.x.x
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1377,8 +1469,10 @@
|
||||
<a href="../../migration/3x_to_4x/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
3.x.x ➡️ 4.x.x
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1398,8 +1492,10 @@
|
||||
<a href="../../migration/4x_to_5x/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
4.x.x ➡️ 5.x.x
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1419,8 +1515,10 @@
|
||||
<a href="../../migration/6x_to_7x/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
6.x.x ➡️ 7.x.x
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1440,8 +1538,10 @@
|
||||
<a href="../../migration/7x_to_8x/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
7.x.x ➡️ 8.x.x
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1461,8 +1561,10 @@
|
||||
<a href="../../migration/8x_to_9x/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
8.x.x ➡️ 9.x.x
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1482,8 +1584,10 @@
|
||||
<a href="../../migration/9x_to_10x/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
9.x.x ➡️ 10.x.x
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
@@ -1568,30 +1672,31 @@
|
||||
|
||||
|
||||
|
||||
|
||||
<h1 id="create-a-user-programmatically">Create a user programmatically<a class="headerlink" href="#create-a-user-programmatically" title="Permanent link">¶</a></h1>
|
||||
<p>Sometimes, you'll need to create a user programmatically in the code rather than passing by the REST API endpoint. To do this, we'll create a function that you can call from your code.</p>
|
||||
<p>In this context, we are outside the dependency injection mechanism of FastAPI, so we have to take care of instantiating the <a href="../../configuration/user-manager/"><code>UserManager</code> class</a> and all other dependent objects <strong>manually</strong>.</p>
|
||||
<p>For this cookbook, we'll consider you are starting from the <a href="../../configuration/full-example/">SQLAlchemy full example</a>, but it'll be rather similar for other DBMS.</p>
|
||||
<h2 id="1-define-dependencies-as-context-managers">1. Define dependencies as context managers<a class="headerlink" href="#1-define-dependencies-as-context-managers" title="Permanent link">¶</a></h2>
|
||||
<p>Generally, FastAPI dependencies are defined as <strong>generators</strong>, using the <code>yield</code> keyword. FastAPI knows very well to handle them inside its dependency injection system. For example, here is the definition of the <code>get_user_manager</code> dependency:</p>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="k">async</span> <span class="k">def</span> <span class="nf">get_user_manager</span><span class="p">(</span><span class="n">user_db</span><span class="p">:</span> <span class="n">SQLAlchemyUserDatabase</span> <span class="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_user_db</span><span class="p">)):</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_user_manager</span><span class="p">(</span><span class="n">user_db</span><span class="p">:</span> <span class="n">SQLAlchemyUserDatabase</span> <span class="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_user_db</span><span class="p">)):</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="k">yield</span> <span class="n">UserManager</span><span class="p">(</span><span class="n">user_db</span><span class="p">)</span>
|
||||
</code></pre></div>
|
||||
<p>In Python, when we want to use a generator, we have to use a <code>for</code> loop, which would be a bit unnatural in this context since we have only one value to get, the user manager instance. To avoid this, we'll transform them into <strong>context managers</strong>, so we can call them using the <code>with..as</code> syntax. Fortunately, the standard library provides tools to automatically transform generators into context managers.</p>
|
||||
<p>In the following sample, we import our dependencies and create a context manager version using <code>contextlib.asynccontextmanager</code>:</p>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="kn">import</span> <span class="nn">contextlib</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="kn">import</span><span class="w"> </span><span class="nn">contextlib</span>
|
||||
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="kn">from</span> <span class="nn">app.db</span> <span class="kn">import</span> <span class="n">get_async_session</span><span class="p">,</span> <span class="n">get_user_db</span>
|
||||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="kn">from</span> <span class="nn">app.schemas</span> <span class="kn">import</span> <span class="n">UserCreate</span>
|
||||
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="kn">from</span> <span class="nn">app.users</span> <span class="kn">import</span> <span class="n">get_user_manager</span>
|
||||
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="kn">from</span> <span class="nn">fastapi_users.exceptions</span> <span class="kn">import</span> <span class="n">UserAlreadyExists</span>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="kn">from</span><span class="w"> </span><span class="nn">app.db</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_async_session</span><span class="p">,</span> <span class="n">get_user_db</span>
|
||||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="kn">from</span><span class="w"> </span><span class="nn">app.schemas</span><span class="w"> </span><span class="kn">import</span> <span class="n">UserCreate</span>
|
||||
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="kn">from</span><span class="w"> </span><span class="nn">app.users</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_user_manager</span>
|
||||
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="kn">from</span><span class="w"> </span><span class="nn">fastapi_users.exceptions</span><span class="w"> </span><span class="kn">import</span> <span class="n">UserAlreadyExists</span>
|
||||
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a>
|
||||
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="hll"><span class="n">get_async_session_context</span> <span class="o">=</span> <span class="n">contextlib</span><span class="o">.</span><span class="n">asynccontextmanager</span><span class="p">(</span><span class="n">get_async_session</span><span class="p">)</span>
|
||||
</span><a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="hll"><span class="n">get_user_db_context</span> <span class="o">=</span> <span class="n">contextlib</span><span class="o">.</span><span class="n">asynccontextmanager</span><span class="p">(</span><span class="n">get_user_db</span><span class="p">)</span>
|
||||
</span><a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a><span class="hll"><span class="n">get_user_manager_context</span> <span class="o">=</span> <span class="n">contextlib</span><span class="o">.</span><span class="n">asynccontextmanager</span><span class="p">(</span><span class="n">get_user_manager</span><span class="p">)</span>
|
||||
</span><a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a>
|
||||
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a>
|
||||
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="k">async</span> <span class="k">def</span> <span class="nf">create_user</span><span class="p">(</span><span class="n">email</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">is_superuser</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
|
||||
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">create_user</span><span class="p">(</span><span class="n">email</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">is_superuser</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
|
||||
<a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a> <span class="k">try</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a> <span class="k">async</span> <span class="k">with</span> <span class="n">get_async_session_context</span><span class="p">()</span> <span class="k">as</span> <span class="n">session</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a> <span class="k">async</span> <span class="k">with</span> <span class="n">get_user_db_context</span><span class="p">(</span><span class="n">session</span><span class="p">)</span> <span class="k">as</span> <span class="n">user_db</span><span class="p">:</span>
|
||||
@@ -1613,19 +1718,19 @@
|
||||
</div>
|
||||
<h2 id="2-write-a-function">2. Write a function<a class="headerlink" href="#2-write-a-function" title="Permanent link">¶</a></h2>
|
||||
<p>We are now ready to write a function. The example below shows you a basic example but you can of course adapt it to your own needs. The key part here is once again to <strong>take care of opening every context managers and pass them every required arguments</strong>, as the dependency manager would do.</p>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="kn">import</span> <span class="nn">contextlib</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="kn">import</span><span class="w"> </span><span class="nn">contextlib</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="kn">from</span> <span class="nn">app.db</span> <span class="kn">import</span> <span class="n">get_async_session</span><span class="p">,</span> <span class="n">get_user_db</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="kn">from</span> <span class="nn">app.schemas</span> <span class="kn">import</span> <span class="n">UserCreate</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="kn">from</span> <span class="nn">app.users</span> <span class="kn">import</span> <span class="n">get_user_manager</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="kn">from</span> <span class="nn">fastapi_users.exceptions</span> <span class="kn">import</span> <span class="n">UserAlreadyExists</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="kn">from</span><span class="w"> </span><span class="nn">app.db</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_async_session</span><span class="p">,</span> <span class="n">get_user_db</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="kn">from</span><span class="w"> </span><span class="nn">app.schemas</span><span class="w"> </span><span class="kn">import</span> <span class="n">UserCreate</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="kn">from</span><span class="w"> </span><span class="nn">app.users</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_user_manager</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="kn">from</span><span class="w"> </span><span class="nn">fastapi_users.exceptions</span><span class="w"> </span><span class="kn">import</span> <span class="n">UserAlreadyExists</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a><span class="n">get_async_session_context</span> <span class="o">=</span> <span class="n">contextlib</span><span class="o">.</span><span class="n">asynccontextmanager</span><span class="p">(</span><span class="n">get_async_session</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a><span class="n">get_user_db_context</span> <span class="o">=</span> <span class="n">contextlib</span><span class="o">.</span><span class="n">asynccontextmanager</span><span class="p">(</span><span class="n">get_user_db</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a><span class="n">get_user_manager_context</span> <span class="o">=</span> <span class="n">contextlib</span><span class="o">.</span><span class="n">asynccontextmanager</span><span class="p">(</span><span class="n">get_user_manager</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a>
|
||||
<a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a>
|
||||
<a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a><span class="hll"><span class="k">async</span> <span class="k">def</span> <span class="nf">create_user</span><span class="p">(</span><span class="n">email</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">is_superuser</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
|
||||
<a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a><span class="hll"><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">create_user</span><span class="p">(</span><span class="n">email</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">is_superuser</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
|
||||
</span><a id="__codelineno-2-14" name="__codelineno-2-14" href="#__codelineno-2-14"></a><span class="hll"> <span class="k">try</span><span class="p">:</span>
|
||||
</span><a id="__codelineno-2-15" name="__codelineno-2-15" href="#__codelineno-2-15"></a><span class="hll"> <span class="k">async</span> <span class="k">with</span> <span class="n">get_async_session_context</span><span class="p">()</span> <span class="k">as</span> <span class="n">session</span><span class="p">:</span>
|
||||
</span><a id="__codelineno-2-16" name="__codelineno-2-16" href="#__codelineno-2-16"></a><span class="hll"> <span class="k">async</span> <span class="k">with</span> <span class="n">get_user_db_context</span><span class="p">(</span><span class="n">session</span><span class="p">)</span> <span class="k">as</span> <span class="n">user_db</span><span class="p">:</span>
|
||||
@@ -1643,7 +1748,7 @@
|
||||
</span></code></pre></div>
|
||||
<h2 id="3-use-it">3. Use it<a class="headerlink" href="#3-use-it" title="Permanent link">¶</a></h2>
|
||||
<p>You can now easily use it in a script. For example:</p>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="kn">import</span> <span class="nn">asyncio</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="kn">import</span><span class="w"> </span><span class="nn">asyncio</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>
|
||||
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> <span class="n">asyncio</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">create_user</span><span class="p">(</span><span class="s2">"king.arthur@camelot.bt"</span><span class="p">,</span> <span class="s2">"guinevere"</span><span class="p">))</span>
|
||||
@@ -1700,10 +1805,12 @@
|
||||
</div>
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.instant", "navigation.top", "navigation.sections", "search.suggest", "search.highlight", "content.code.annotate"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.instant", "navigation.top", "navigation.sections", "search.suggest", "search.highlight", "content.code.annotate"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
|
||||
|
||||
|
||||
<script src="../../assets/javascripts/bundle.88dd0f4e.min.js"></script>
|
||||
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user