Sync fastapi docs from 7cb06f36 on 2026-07-11

This commit is contained in:
The Librarian
2026-07-11 04:00:12 +00:00
parent 2c5483ee1c
commit d71a936809
1032 changed files with 12357 additions and 6438 deletions
+4 -4
View File
@@ -1,21 +1,21 @@
tiangolo:
login: tiangolo
count: 961
count: 1005
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
dependabot:
login: dependabot
count: 201
count: 221
avatarUrl: https://avatars.githubusercontent.com/in/29110?v=4
url: https://github.com/apps/dependabot
YuriiMotov:
login: YuriiMotov
count: 78
count: 82
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
alejsdev:
login: alejsdev
count: 56
count: 57
avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=0facffe3abf87f57a1f05fa773d1119cc5c2f6a5&v=4
url: https://github.com/alejsdev
pre-commit-ci:
+234 -178
View File
@@ -1,15 +1,15 @@
maintainers:
- login: tiangolo
answers: 1929
answers: 1931
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
experts:
- login: tiangolo
count: 1929
count: 1931
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
- login: YuriiMotov
count: 1178
count: 1198
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
- login: github-actions
@@ -17,7 +17,7 @@ experts:
avatarUrl: https://avatars.githubusercontent.com/in/15368?v=4
url: https://github.com/apps/github-actions
- login: Kludex
count: 657
count: 656
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex
- login: jgould22
@@ -49,15 +49,15 @@ experts:
avatarUrl: https://avatars.githubusercontent.com/u/10519440?u=f09cdd745e5bf16138f29b42732dd57c7f02bee1&v=4
url: https://github.com/iudeen
- login: phy25
count: 126
count: 125
avatarUrl: https://avatars.githubusercontent.com/u/331403?v=4
url: https://github.com/phy25
- login: JavierSanchezCastro
count: 109
count: 110
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro
- login: luzzodev
count: 107
count: 109
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: raphaelauv
@@ -246,82 +246,138 @@ experts:
url: https://github.com/abhint
last_month_experts:
- login: YuriiMotov
count: 14
count: 21
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
- login: yudin-s
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/781481?u=8c1ab221edbe051eb55310747ebe39574e808118&v=4
url: https://github.com/yudin-s
- login: BitWeaverDev
- login: Raphasha27
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/220842167?u=a9e66fe06965e3830aecb82be4a442874950babe&v=4
url: https://github.com/Raphasha27
- login: svlandeg
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg
- login: sueun-dev
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/288751066?v=4
url: https://github.com/BitWeaverDev
- login: Zawwarsami16
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/105767627?u=5bb2b7a639a9207a5ded536f963a4c7bd6d04d21&v=4
url: https://github.com/Zawwarsami16
avatarUrl: https://avatars.githubusercontent.com/u/57546981?u=0b0483bdcc7d521e85c06f28d2fc64e258bd466f&v=4
url: https://github.com/sueun-dev
- login: tiangolo
count: 2
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
- login: mg1986jp
- login: vincere-mori
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/57835745?u=37d4cd4a763163dd03f29eff4975c2f1fa2a2d72&v=4
url: https://github.com/vincere-mori
- login: thanos07
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/20254686?u=6da9cdad3ecf8a4f3cbc33a518c3998ed0ac685a&v=4
url: https://github.com/mg1986jp
- login: Bogdusik
avatarUrl: https://avatars.githubusercontent.com/u/68923656?u=dab6d4d9a6800f7d44d8c6df0b9904e17c2ecdb7&v=4
url: https://github.com/thanos07
- login: luzzodev
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/166155258?u=11440b02966a3f5e5eeebc21d67b7bbb7d370487&v=4
url: https://github.com/Bogdusik
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: MajorDallas
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/79329882?u=e611ed986e4a37fd16ab69116a4600d95bfff294&v=4
url: https://github.com/MajorDallas
- login: Francis1998
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/66462431?u=20bdf51356ee7d99a8c8755c09460950d2b84fd0&v=4
url: https://github.com/Francis1998
- login: abdurrahman310303
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/121820588?u=73c72a59ca082ceb8507bb1e2b559e59bdf2358f&v=4
url: https://github.com/abdurrahman310303
- login: Hassanmahmood4
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/193066885?u=0e05f82009f99c53b16781d06a7f8d5fea8cc433&v=4
url: https://github.com/Hassanmahmood4
three_months_experts:
- login: YuriiMotov
count: 57
count: 47
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
- login: Firatasi
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/112112161?u=3219914a49a4a604b3626007823db7de049b6d66&v=4
url: https://github.com/Firatasi
- login: Raphasha27
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/220842167?u=a9e66fe06965e3830aecb82be4a442874950babe&v=4
url: https://github.com/Raphasha27
- login: yudin-s
count: 5
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/781481?u=8c1ab221edbe051eb55310747ebe39574e808118&v=4
url: https://github.com/yudin-s
- login: svlandeg
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg
- login: tiangolo
count: 4
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
- login: BitWeaverDev
- login: luzzodev
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: sueun-dev
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/57546981?u=0b0483bdcc7d521e85c06f28d2fc64e258bd466f&v=4
url: https://github.com/sueun-dev
- login: cookesan
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/288751066?v=4
url: https://github.com/BitWeaverDev
avatarUrl: https://avatars.githubusercontent.com/u/6601329?u=7bfc9b017198a9fa50929ae8ae0a787632424ffd&v=4
url: https://github.com/cookesan
- login: ericgitangu
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/11472845?u=9d916cf0f5c80e63cb1d753b8b50dcb8ced3b883&v=4
url: https://github.com/ericgitangu
- login: BitWeaverDev
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/288751066?u=60ef471e6d3822b99c9a3e7624d510b911004434&v=4
url: https://github.com/BitWeaverDev
- login: vincere-mori
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/57835745?u=37d4cd4a763163dd03f29eff4975c2f1fa2a2d72&v=4
url: https://github.com/vincere-mori
- login: Zawwarsami16
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/105767627?u=5bb2b7a639a9207a5ded536f963a4c7bd6d04d21&v=4
url: https://github.com/Zawwarsami16
- login: luzzodev
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: thanos07
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/68923656?u=dab6d4d9a6800f7d44d8c6df0b9904e17c2ecdb7&v=4
url: https://github.com/thanos07
- login: MajorDallas
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/79329882?u=e611ed986e4a37fd16ab69116a4600d95bfff294&v=4
url: https://github.com/MajorDallas
- login: Francis1998
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/66462431?u=20bdf51356ee7d99a8c8755c09460950d2b84fd0&v=4
url: https://github.com/Francis1998
- login: RichieB2B
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1461970?u=edaa57d1077705244ea5c9244f4783d94ff11f12&v=4
url: https://github.com/RichieB2B
- login: abdurrahman310303
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/121820588?u=73c72a59ca082ceb8507bb1e2b559e59bdf2358f&v=4
url: https://github.com/abdurrahman310303
- login: Hassanmahmood4
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/193066885?u=0e05f82009f99c53b16781d06a7f8d5fea8cc433&v=4
url: https://github.com/Hassanmahmood4
- login: mg1986jp
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/20254686?u=6da9cdad3ecf8a4f3cbc33a518c3998ed0ac685a&v=4
url: https://github.com/mg1986jp
- login: sueun-dev
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/57546981?u=0b0483bdcc7d521e85c06f28d2fc64e258bd466f&v=4
url: https://github.com/sueun-dev
- login: Bogdusik
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/166155258?u=11440b02966a3f5e5eeebc21d67b7bbb7d370487&v=4
url: https://github.com/Bogdusik
- login: cookesan
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/6601329?u=7bfc9b017198a9fa50929ae8ae0a787632424ffd&v=4
url: https://github.com/cookesan
- login: coleifer
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/119974?u=b3a546c94ee1105e792e0acad2c4743d800e7975&v=4
@@ -330,55 +386,51 @@ three_months_experts:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/34988899?u=b8e3c0cf26f4bd1faea265d2f5f66f564af63463&v=4
url: https://github.com/Bahtya
- login: saitarrun
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/116748905?u=3433afbaf06676a482ebf4ba33b08ddb3fc5c5bf&v=4
url: https://github.com/saitarrun
- login: JavierSanchezCastro
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro
- login: christiansousadev
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/103544118?u=690f3f76d1dc4d0929de5020679d5604f860acbc&v=4
url: https://github.com/christiansousadev
- login: DoctorJohn
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/14076775?u=ec43fe79a98dbc864b428afc7220753e25ca3af2&v=4
url: https://github.com/DoctorJohn
six_months_experts:
- login: YuriiMotov
count: 145
count: 127
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
- login: tiangolo
count: 13
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
- login: JavierSanchezCastro
count: 9
count: 10
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro
- login: tiangolo
count: 10
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
- login: luzzodev
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: Firatasi
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/112112161?u=3219914a49a4a604b3626007823db7de049b6d66&v=4
url: https://github.com/Firatasi
- login: Raphasha27
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/220842167?u=a9e66fe06965e3830aecb82be4a442874950babe&v=4
url: https://github.com/Raphasha27
- login: yudin-s
count: 5
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/781481?u=8c1ab221edbe051eb55310747ebe39574e808118&v=4
url: https://github.com/yudin-s
- login: valentinDruzhinin
- login: svlandeg
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/valentinDruzhinin
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg
- login: sueun-dev
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/57546981?u=0b0483bdcc7d521e85c06f28d2fc64e258bd466f&v=4
url: https://github.com/sueun-dev
- login: Toygarmetu
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/92878791?u=538530cb6d5554e71f9c28709d794db9a74d23d9&v=4
url: https://github.com/Toygarmetu
- login: luzzodev
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: ceb10n
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
@@ -387,18 +439,26 @@ six_months_experts:
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/1461970?u=edaa57d1077705244ea5c9244f4783d94ff11f12&v=4
url: https://github.com/RichieB2B
- login: sachinh35
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4
url: https://github.com/sachinh35
- login: BitWeaverDev
- login: cookesan
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/288751066?v=4
url: https://github.com/BitWeaverDev
avatarUrl: https://avatars.githubusercontent.com/u/6601329?u=7bfc9b017198a9fa50929ae8ae0a787632424ffd&v=4
url: https://github.com/cookesan
- login: ericgitangu
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/11472845?u=9d916cf0f5c80e63cb1d753b8b50dcb8ced3b883&v=4
url: https://github.com/ericgitangu
- login: BitWeaverDev
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/288751066?u=60ef471e6d3822b99c9a3e7624d510b911004434&v=4
url: https://github.com/BitWeaverDev
- login: vincere-mori
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/57835745?u=37d4cd4a763163dd03f29eff4975c2f1fa2a2d72&v=4
url: https://github.com/vincere-mori
- login: valentinDruzhinin
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/valentinDruzhinin
- login: Zawwarsami16
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/105767627?u=5bb2b7a639a9207a5ded536f963a4c7bd6d04d21&v=4
@@ -407,6 +467,26 @@ six_months_experts:
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/142030687?u=ab131d5ad4670280a978f489babe71c9bf9c1097&v=4
url: https://github.com/EmmanuelNiyonshuti
- login: thanos07
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/68923656?u=dab6d4d9a6800f7d44d8c6df0b9904e17c2ecdb7&v=4
url: https://github.com/thanos07
- login: MajorDallas
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/79329882?u=e611ed986e4a37fd16ab69116a4600d95bfff294&v=4
url: https://github.com/MajorDallas
- login: Francis1998
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/66462431?u=20bdf51356ee7d99a8c8755c09460950d2b84fd0&v=4
url: https://github.com/Francis1998
- login: abdurrahman310303
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/121820588?u=73c72a59ca082ceb8507bb1e2b559e59bdf2358f&v=4
url: https://github.com/abdurrahman310303
- login: Hassanmahmood4
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/193066885?u=0e05f82009f99c53b16781d06a7f8d5fea8cc433&v=4
url: https://github.com/Hassanmahmood4
- login: Kludex
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
@@ -415,18 +495,14 @@ six_months_experts:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/20254686?u=6da9cdad3ecf8a4f3cbc33a518c3998ed0ac685a&v=4
url: https://github.com/mg1986jp
- login: sueun-dev
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/57546981?u=0b0483bdcc7d521e85c06f28d2fc64e258bd466f&v=4
url: https://github.com/sueun-dev
- login: Bogdusik
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/166155258?u=11440b02966a3f5e5eeebc21d67b7bbb7d370487&v=4
url: https://github.com/Bogdusik
- login: cookesan
- login: sachinh35
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/6601329?u=7bfc9b017198a9fa50929ae8ae0a787632424ffd&v=4
url: https://github.com/cookesan
avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4
url: https://github.com/sachinh35
- login: coleifer
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/119974?u=b3a546c94ee1105e792e0acad2c4743d800e7975&v=4
@@ -451,83 +527,59 @@ six_months_experts:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/46934916?u=18d7aacc6ce59f054749209645d11cfe77b52f90&v=4
url: https://github.com/gaardhus
- login: y2kbugger
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/6101677?u=1d50077e29582dc01fcbdff846f04fe7ec73fe2e&v=4
url: https://github.com/y2kbugger
- login: davidbrochart
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/4711805?u=d39696d995a9e02ec3613ffb2f62b20b14f92f26&v=4
url: https://github.com/davidbrochart
- login: CharlieReitzel
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/20848272?v=4
url: https://github.com/CharlieReitzel
- login: dotmitsu
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/42657211?u=3bccc9a2f386a3f24230ec393080f8904fe2a5b2&v=4
url: https://github.com/dotmitsu
- login: dolfinus
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/4661021?u=ed5ddadcf36d9b943ebe61febe0b96ee34e5425d&v=4
url: https://github.com/dolfinus
- login: florentx
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/142113?u=bf10f10080026346b092633c380977b61cee0d9c&v=4
url: https://github.com/florentx
one_year_experts:
- login: YuriiMotov
count: 647
count: 344
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
- login: luzzodev
count: 35
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: tiangolo
count: 32
count: 34
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
- login: valentinDruzhinin
- login: luzzodev
count: 31
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: valentinDruzhinin
count: 19
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/valentinDruzhinin
- login: JavierSanchezCastro
count: 17
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro
- login: sachinh35
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4
url: https://github.com/sachinh35
- login: svlandeg
count: 10
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg
- login: RichieB2B
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/1461970?u=edaa57d1077705244ea5c9244f4783d94ff11f12&v=4
url: https://github.com/RichieB2B
- login: Firatasi
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/112112161?u=3219914a49a4a604b3626007823db7de049b6d66&v=4
url: https://github.com/Firatasi
- login: DoctorJohn
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/14076775?u=ec43fe79a98dbc864b428afc7220753e25ca3af2&v=4
url: https://github.com/DoctorJohn
- login: svlandeg
- login: Raphasha27
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg
- login: RichieB2B
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/1461970?u=edaa57d1077705244ea5c9244f4783d94ff11f12&v=4
url: https://github.com/RichieB2B
- login: raceychan
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/75417963?u=060c62870ec5a791765e63ac20d8885d11143786&v=4
url: https://github.com/raceychan
- login: yinziyan1206
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/37829370?u=da44ca53aefd5c23f346fab8e9fd2e108294c179&v=4
url: https://github.com/yinziyan1206
avatarUrl: https://avatars.githubusercontent.com/u/220842167?u=a9e66fe06965e3830aecb82be4a442874950babe&v=4
url: https://github.com/Raphasha27
- login: yudin-s
count: 5
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/781481?u=8c1ab221edbe051eb55310747ebe39574e808118&v=4
url: https://github.com/yudin-s
- login: sueun-dev
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/57546981?u=0b0483bdcc7d521e85c06f28d2fc64e258bd466f&v=4
url: https://github.com/sueun-dev
- login: sachinh35
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4
url: https://github.com/sachinh35
- login: Toygarmetu
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/92878791?u=538530cb6d5554e71f9c28709d794db9a74d23d9&v=4
@@ -536,6 +588,10 @@ one_year_experts:
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
url: https://github.com/ceb10n
- login: yinziyan1206
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/37829370?u=da44ca53aefd5c23f346fab8e9fd2e108294c179&v=4
url: https://github.com/yinziyan1206
- login: JunjieAraoXiong
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/167785867?u=b69afe090c8bf5fd73f2d23fc3a887b28f68f192&v=4
@@ -560,18 +616,26 @@ one_year_experts:
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/157279130?u=16d6466476cf7dbc55a4cd575b6ea920ebdd81e1&v=4
url: https://github.com/isgin01
- login: BitWeaverDev
- login: cookesan
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/288751066?v=4
url: https://github.com/BitWeaverDev
- login: Kludex
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex
avatarUrl: https://avatars.githubusercontent.com/u/6601329?u=7bfc9b017198a9fa50929ae8ae0a787632424ffd&v=4
url: https://github.com/cookesan
- login: ericgitangu
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/11472845?u=9d916cf0f5c80e63cb1d753b8b50dcb8ced3b883&v=4
url: https://github.com/ericgitangu
- login: BitWeaverDev
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/288751066?u=60ef471e6d3822b99c9a3e7624d510b911004434&v=4
url: https://github.com/BitWeaverDev
- login: vincere-mori
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/57835745?u=37d4cd4a763163dd03f29eff4975c2f1fa2a2d72&v=4
url: https://github.com/vincere-mori
- login: Kludex
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex
- login: Zawwarsami16
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/105767627?u=5bb2b7a639a9207a5ded536f963a4c7bd6d04d21&v=4
@@ -584,10 +648,6 @@ one_year_experts:
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/4661021?u=ed5ddadcf36d9b943ebe61febe0b96ee34e5425d&v=4
url: https://github.com/dolfinus
- login: jymchng
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/27895426?u=fb88c47775147d62a395fdb895d1af4148c7b566&v=4
url: https://github.com/jymchng
- login: simone-trubian
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/5606840?u=65703af3c605feca61ce49e4009bb4e26495b425&v=4
@@ -604,30 +664,42 @@ one_year_experts:
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/210023470?u=c25d66addf36a747bd9fab773c4a6e7b238f45d4&v=4
url: https://github.com/Jelle-tenB
- login: thanos07
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/68923656?u=dab6d4d9a6800f7d44d8c6df0b9904e17c2ecdb7&v=4
url: https://github.com/thanos07
- login: MajorDallas
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/79329882?u=e611ed986e4a37fd16ab69116a4600d95bfff294&v=4
url: https://github.com/MajorDallas
- login: Francis1998
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/66462431?u=20bdf51356ee7d99a8c8755c09460950d2b84fd0&v=4
url: https://github.com/Francis1998
- login: Garrett-R
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/6614695?u=c128fd775002882f6e391bda5a89d1bdc5bdf45f&v=4
url: https://github.com/Garrett-R
- login: abdurrahman310303
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/121820588?u=73c72a59ca082ceb8507bb1e2b559e59bdf2358f&v=4
url: https://github.com/abdurrahman310303
- login: Hassanmahmood4
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/193066885?u=0e05f82009f99c53b16781d06a7f8d5fea8cc433&v=4
url: https://github.com/Hassanmahmood4
- login: mg1986jp
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/20254686?u=6da9cdad3ecf8a4f3cbc33a518c3998ed0ac685a&v=4
url: https://github.com/mg1986jp
- login: sueun-dev
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/57546981?u=0b0483bdcc7d521e85c06f28d2fc64e258bd466f&v=4
url: https://github.com/sueun-dev
- login: Bogdusik
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/166155258?u=11440b02966a3f5e5eeebc21d67b7bbb7d370487&v=4
url: https://github.com/Bogdusik
- login: cookesan
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/6601329?u=7bfc9b017198a9fa50929ae8ae0a787632424ffd&v=4
url: https://github.com/cookesan
- login: coleifer
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/119974?u=b3a546c94ee1105e792e0acad2c4743d800e7975&v=4
url: https://github.com/coleifer
- login: henrymcl
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/26480299?v=4
url: https://github.com/henrymcl
- login: Bahtya
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/34988899?u=b8e3c0cf26f4bd1faea265d2f5f66f564af63463&v=4
@@ -644,6 +716,10 @@ one_year_experts:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/103544118?u=690f3f76d1dc4d0929de5020679d5604f860acbc&v=4
url: https://github.com/christiansousadev
- login: DoctorJohn
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/14076775?u=ec43fe79a98dbc864b428afc7220753e25ca3af2&v=4
url: https://github.com/DoctorJohn
- login: gaardhus
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/46934916?u=18d7aacc6ce59f054749209645d11cfe77b52f90&v=4
@@ -652,22 +728,10 @@ one_year_experts:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/6101677?u=1d50077e29582dc01fcbdff846f04fe7ec73fe2e&v=4
url: https://github.com/y2kbugger
- login: Garrett-R
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/6614695?u=c128fd775002882f6e391bda5a89d1bdc5bdf45f&v=4
url: https://github.com/Garrett-R
- login: TaigoFr
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/17792131?u=372b27056ec82f1ae03d8b3f37ef55b04a7cfdd1&v=4
url: https://github.com/TaigoFr
- login: stan-dot
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/56644812?u=a7dd773084f1c17c5f05019cc25a984e24873691&v=4
url: https://github.com/stan-dot
- login: Damon0603
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/110039208?u=f24bf5c30317bc4959118d1b919587c473a865b6&v=4
url: https://github.com/Damon0603
- login: huynguyengl99
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/49433085?u=7b626115686c5d97a2a32a03119f5300e425cc9f&v=4
@@ -688,10 +752,6 @@ one_year_experts:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/42657211?u=3bccc9a2f386a3f24230ec393080f8904fe2a5b2&v=4
url: https://github.com/dotmitsu
- login: Brikas
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/80290187?u=2b72e497ca4444ecec1f9dc2d1b8d5437a27b83f&v=4
url: https://github.com/Brikas
- login: usiqwerty
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/37992525?u=0c6e91d7b3887aa558755f4225ce74a003cbe852&v=4
@@ -712,7 +772,3 @@ one_year_experts:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/236391583?u=7f51ff690e3a5711f845a115903c39e21c8af938&v=4
url: https://github.com/bughuntr7
- login: purepani
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/7587353?v=4
url: https://github.com/purepani
+34 -23
View File
@@ -1,55 +1,66 @@
keystone:
- url: https://fastapicloud.com
title: FastAPI Cloud. By the same team behind FastAPI. You code. We Cloud.
img: https://fastapi.tiangolo.com/img/sponsors/fastapicloud.png
img: /img/sponsors/fastapicloud.png
gold:
- url: https://blockbee.io?ref=fastapi
title: BlockBee Cryptocurrency Payment Gateway
img: https://fastapi.tiangolo.com/img/sponsors/blockbee.png
img: /img/sponsors/blockbee.png
banner_img: /img/sponsors/blockbee-banner.png
- url: https://www.propelauth.com/?utm_source=fastapi&utm_campaign=1223&utm_medium=mainbadge
title: Auth, user management and more for your B2B product
img: https://fastapi.tiangolo.com/img/sponsors/propelauth.png
img: /img/sponsors/propelauth.png
banner_url: https://www.propelauth.com/?utm_source=fastapi&utm_campaign=1223&utm_medium=topbanner
banner_img: /img/sponsors/propelauth-banner.png
- url: https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi
title: Deploy & scale any full-stack web app on Render. Focus on building apps, not infra.
img: https://fastapi.tiangolo.com/img/sponsors/render.svg
img: /img/sponsors/render.svg
banner_img: /img/sponsors/render-banner.svg
- url: https://www.coderabbit.ai/?utm_source=fastapi&utm_medium=badge&utm_campaign=fastapi
title: Cut Code Review Time & Bugs in Half with CodeRabbit
img: https://fastapi.tiangolo.com/img/sponsors/coderabbit.png
img: /img/sponsors/coderabbit.png
banner_url: https://www.coderabbit.ai/?utm_source=fastapi&utm_medium=banner&utm_campaign=fastapi
banner_img: /img/sponsors/coderabbit-banner.png
- url: https://subtotal.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=open-source
title: The Gold Standard in Retail Account Linking
img: https://fastapi.tiangolo.com/img/sponsors/subtotal.svg
img: /img/sponsors/subtotal.svg
banner_title: Making Retail Purchases Actionable for Brands and Developers
banner_img: /img/sponsors/subtotal-banner.svg
- url: https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi
title: Deploy enterprise applications at startup speed
img: https://fastapi.tiangolo.com/img/sponsors/railway.png
img: /img/sponsors/railway.png
banner_img: /img/sponsors/railway-banner.png
- url: https://serpapi.com/?utm_source=fastapi_website
title: "SerpApi: Web Search API"
img: https://fastapi.tiangolo.com/img/sponsors/serpapi.png
img: /img/sponsors/serpapi.png
banner_img: /img/sponsors/serpapi-banner.png
- url: https://www.greptile.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=fastapi_sponsor_page
title: "Greptile: The AI Code Reviewer"
img: https://fastapi.tiangolo.com/img/sponsors/greptile.png
img: /img/sponsors/greptile.png
banner_img: /img/sponsors/greptile-banner.png
silver:
- url: https://databento.com/?utm_source=fastapi&utm_medium=sponsor&utm_content=display
title: Pay as you go for market data
img: https://fastapi.tiangolo.com/img/sponsors/databento.svg
img: /img/sponsors/databento.svg
- url: https://www.svix.com/
title: Svix - Webhooks as a service
img: https://fastapi.tiangolo.com/img/sponsors/svix.svg
- url: https://www.stainlessapi.com/?utm_source=fastapi&utm_medium=referral
title: Stainless | Generate best-in-class SDKs
img: https://fastapi.tiangolo.com/img/sponsors/stainless.png
img: /img/sponsors/svix.svg
- url: https://www.permit.io/blog/implement-authorization-in-fastapi?utm_source=github&utm_medium=referral&utm_campaign=fastapi
title: Fine-Grained Authorization for FastAPI
img: https://fastapi.tiangolo.com/img/sponsors/permit.png
img: /img/sponsors/permit.png
- url: https://dribia.com/en/
title: Dribia - Data Science within your reach
img: https://fastapi.tiangolo.com/img/sponsors/dribia.png
- url: https://talordata.com/?campaignid=oh5dVZ3Zc3YGiAI2&utm_source=fastapi&utm_term=fastapi
title: TalorData SERP API - Multi-Engine Search Results Data
img: https://fastapi.tiangolo.com/img/sponsors/talordata.png
- url: https://www.rapidproxy.io/?ref=fastapi
title: Try RapidProxy for free - Residential Proxies with 90M+ Global IPs. Starting from $0.65/GB for web scraping, automation, and data collection.
img: https://fastapi.tiangolo.com/img/sponsors/rapidproxy.png
img: /img/sponsors/dribia.png
- url: https://www.bairesdev.com/
title: "BairesDev | Nearshore Software Development & Staff Augmentation Company"
img: /img/sponsors/bairesdev.svg
- url: https://tutorcruncher.com/?utm_source=fastapi
title: TutorCruncher
img: /img/sponsors/tutorcruncher.png
bronze:
# - url: https://testdriven.io/courses/tdd-fastapi/
# title: Learn to build high-quality web apps with best practices
# img: https://fastapi.tiangolo.com/img/sponsors/testdriven.svg
# img: /img/sponsors/testdriven.svg
- url: https://www.testmu.ai/?utm_source=fastapi&utm_medium=partner&utm_campaign=sponsor&utm_term=opensource&utm_content=webpage
title: TestMu AI. The Native AI-Agentic Cloud Platform to Supercharge Quality Engineering.
img: /img/sponsors/testmu.png
+1
View File
@@ -49,3 +49,4 @@ logins:
- requestly
- greptileai
- talorelowen
- tutorcruncher
+189 -189
View File
@@ -1,186 +1,191 @@
- name: headroom
html_url: https://github.com/headroomlabs-ai/headroom
stars: 55017
owner_login: headroomlabs-ai
owner_html_url: https://github.com/headroomlabs-ai
- name: full-stack-fastapi-template
html_url: https://github.com/fastapi/full-stack-fastapi-template
stars: 43447
stars: 43994
owner_login: fastapi
owner_html_url: https://github.com/fastapi
- name: Hello-Python
html_url: https://github.com/mouredev/Hello-Python
stars: 35831
stars: 36226
owner_login: mouredev
owner_html_url: https://github.com/mouredev
- name: serve
html_url: https://github.com/jina-ai/serve
stars: 21864
stars: 21862
owner_login: jina-ai
owner_html_url: https://github.com/jina-ai
- name: HivisionIDPhotos
html_url: https://github.com/Zeyi-Lin/HivisionIDPhotos
stars: 21144
stars: 21212
owner_login: Zeyi-Lin
owner_html_url: https://github.com/Zeyi-Lin
- name: Douyin_TikTok_Download_API
html_url: https://github.com/Evil0ctal/Douyin_TikTok_Download_API
stars: 18122
stars: 18599
owner_login: Evil0ctal
owner_html_url: https://github.com/Evil0ctal
- name: sqlmodel
html_url: https://github.com/fastapi/sqlmodel
stars: 17987
stars: 18156
owner_login: fastapi
owner_html_url: https://github.com/fastapi
- name: fastapi-best-practices
html_url: https://github.com/zhanymkanov/fastapi-best-practices
stars: 17401
stars: 17608
owner_login: zhanymkanov
owner_html_url: https://github.com/zhanymkanov
- name: SurfSense
html_url: https://github.com/MODSetter/SurfSense
stars: 14374
stars: 15161
owner_login: MODSetter
owner_html_url: https://github.com/MODSetter
- name: machine-learning-zoomcamp
html_url: https://github.com/DataTalksClub/machine-learning-zoomcamp
stars: 13169
stars: 13445
owner_login: DataTalksClub
owner_html_url: https://github.com/DataTalksClub
- name: peewee
html_url: https://github.com/coleifer/peewee
stars: 11976
owner_login: coleifer
owner_html_url: https://github.com/coleifer
- name: fastapi_mcp
html_url: https://github.com/tadata-org/fastapi_mcp
stars: 11885
stars: 11932
owner_login: tadata-org
owner_html_url: https://github.com/tadata-org
- name: awesome-fastapi
html_url: https://github.com/mjhea0/awesome-fastapi
stars: 11406
owner_login: mjhea0
owner_html_url: https://github.com/mjhea0
- name: XHS-Downloader
html_url: https://github.com/JoeanAmier/XHS-Downloader
stars: 11375
stars: 11768
owner_login: JoeanAmier
owner_html_url: https://github.com/JoeanAmier
- name: awesome-fastapi
html_url: https://github.com/mjhea0/awesome-fastapi
stars: 11478
owner_login: mjhea0
owner_html_url: https://github.com/mjhea0
- name: polar
html_url: https://github.com/polarsource/polar
stars: 9894
stars: 9999
owner_login: polarsource
owner_html_url: https://github.com/polarsource
- name: pycaret
html_url: https://github.com/pycaret/pycaret
stars: 9801
stars: 9818
owner_login: pycaret
owner_html_url: https://github.com/pycaret
- name: FastUI
html_url: https://github.com/pydantic/FastUI
stars: 8966
stars: 8970
owner_login: pydantic
owner_html_url: https://github.com/pydantic
- name: FileCodeBox
html_url: https://github.com/vastsa/FileCodeBox
stars: 8305
stars: 8376
owner_login: vastsa
owner_html_url: https://github.com/vastsa
- name: nonebot2
html_url: https://github.com/nonebot/nonebot2
stars: 7544
stars: 7593
owner_login: nonebot
owner_html_url: https://github.com/nonebot
- name: hatchet
html_url: https://github.com/hatchet-dev/hatchet
stars: 7258
stars: 7441
owner_login: hatchet-dev
owner_html_url: https://github.com/hatchet-dev
- name: fastapi-users
html_url: https://github.com/fastapi-users/fastapi-users
stars: 6152
stars: 6182
owner_login: fastapi-users
owner_html_url: https://github.com/fastapi-users
- name: serge
html_url: https://github.com/serge-chat/serge
stars: 5726
owner_login: serge-chat
owner_html_url: https://github.com/serge-chat
- name: Yuxi
html_url: https://github.com/xerrors/Yuxi
stars: 5323
stars: 5926
owner_login: xerrors
owner_html_url: https://github.com/xerrors
- name: serge
html_url: https://github.com/serge-chat/serge
stars: 5723
owner_login: serge-chat
owner_html_url: https://github.com/serge-chat
- name: honcho
html_url: https://github.com/plastic-labs/honcho
stars: 5680
owner_login: plastic-labs
owner_html_url: https://github.com/plastic-labs
- name: Kokoro-FastAPI
html_url: https://github.com/remsky/Kokoro-FastAPI
stars: 4936
stars: 5085
owner_login: remsky
owner_html_url: https://github.com/remsky
- name: devpush
html_url: https://github.com/hunvreus/devpush
stars: 4664
stars: 4693
owner_login: hunvreus
owner_html_url: https://github.com/hunvreus
- name: strawberry
html_url: https://github.com/strawberry-graphql/strawberry
stars: 4663
stars: 4677
owner_login: strawberry-graphql
owner_html_url: https://github.com/strawberry-graphql
- name: honcho
html_url: https://github.com/plastic-labs/honcho
stars: 4606
owner_login: plastic-labs
owner_html_url: https://github.com/plastic-labs
- name: poem
html_url: https://github.com/poem-web/poem
stars: 4398
stars: 4415
owner_login: poem-web
owner_html_url: https://github.com/poem-web
- name: dynaconf
html_url: https://github.com/dynaconf/dynaconf
stars: 4302
owner_login: dynaconf
owner_html_url: https://github.com/dynaconf
- name: logfire
html_url: https://github.com/pydantic/logfire
stars: 4276
stars: 4340
owner_login: pydantic
owner_html_url: https://github.com/pydantic
- name: dynaconf
html_url: https://github.com/dynaconf/dynaconf
stars: 4310
owner_login: dynaconf
owner_html_url: https://github.com/dynaconf
- name: chatgpt-web-share
html_url: https://github.com/chatpire/chatgpt-web-share
stars: 4273
stars: 4269
owner_login: chatpire
owner_html_url: https://github.com/chatpire
- name: huma
html_url: https://github.com/danielgtaylor/huma
stars: 4133
stars: 4203
owner_login: danielgtaylor
owner_html_url: https://github.com/danielgtaylor
- name: atrilabs-engine
html_url: https://github.com/Atri-Labs/atrilabs-engine
stars: 4073
stars: 4071
owner_login: Atri-Labs
owner_html_url: https://github.com/Atri-Labs
- name: mcp-context-forge
html_url: https://github.com/IBM/mcp-context-forge
stars: 3989
owner_login: IBM
owner_html_url: https://github.com/IBM
- name: datamodel-code-generator
html_url: https://github.com/koxudaxi/datamodel-code-generator
stars: 3918
stars: 3952
owner_login: koxudaxi
owner_html_url: https://github.com/koxudaxi
- name: LitServe
html_url: https://github.com/Lightning-AI/LitServe
stars: 3886
stars: 3901
owner_login: Lightning-AI
owner_html_url: https://github.com/Lightning-AI
- name: mcp-context-forge
html_url: https://github.com/IBM/mcp-context-forge
stars: 3797
owner_login: IBM
owner_html_url: https://github.com/IBM
- name: fastapi-admin
html_url: https://github.com/fastapi-admin/fastapi-admin
stars: 3784
stars: 3799
owner_login: fastapi-admin
owner_html_url: https://github.com/fastapi-admin
- name: headroom
html_url: https://github.com/chopratejas/headroom
stars: 3701
owner_login: chopratejas
owner_html_url: https://github.com/chopratejas
- name: tracecat
html_url: https://github.com/TracecatHQ/tracecat
stars: 3624
stars: 3703
owner_login: TracecatHQ
owner_html_url: https://github.com/TracecatHQ
- name: farfalle
@@ -188,139 +193,159 @@
stars: 3535
owner_login: rashadphz
owner_html_url: https://github.com/rashadphz
- name: Rapid-MLX
html_url: https://github.com/raullenchai/Rapid-MLX
stars: 3155
owner_login: raullenchai
owner_html_url: https://github.com/raullenchai
- name: opyrator
html_url: https://github.com/ml-tooling/opyrator
stars: 3136
stars: 3133
owner_login: ml-tooling
owner_html_url: https://github.com/ml-tooling
- name: docarray
html_url: https://github.com/docarray/docarray
stars: 3119
stars: 3121
owner_login: docarray
owner_html_url: https://github.com/docarray
- name: fastapi-realworld-example-app
html_url: https://github.com/nsidnev/fastapi-realworld-example-app
stars: 3110
stars: 3109
owner_login: nsidnev
owner_html_url: https://github.com/nsidnev
- name: uvicorn-gunicorn-fastapi-docker
html_url: https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker
stars: 2910
stars: 2914
owner_login: tiangolo
owner_html_url: https://github.com/tiangolo
- name: any-auto-register
html_url: https://github.com/lxf746/any-auto-register
stars: 2832
owner_login: lxf746
owner_html_url: https://github.com/lxf746
- name: FastAPI-template
html_url: https://github.com/s3rius/FastAPI-template
stars: 2800
stars: 2810
owner_login: s3rius
owner_html_url: https://github.com/s3rius
- name: YC-Killer
html_url: https://github.com/sahibzada-allahyar/YC-Killer
stars: 2770
stars: 2779
owner_login: sahibzada-allahyar
owner_html_url: https://github.com/sahibzada-allahyar
- name: sqladmin
html_url: https://github.com/smithyhq/sqladmin
stars: 2739
stars: 2759
owner_login: smithyhq
owner_html_url: https://github.com/smithyhq
- name: best-of-web-python
html_url: https://github.com/ml-tooling/best-of-web-python
stars: 2723
stars: 2731
owner_login: ml-tooling
owner_html_url: https://github.com/ml-tooling
- name: Rapid-MLX
html_url: https://github.com/raullenchai/Rapid-MLX
stars: 2640
owner_login: raullenchai
owner_html_url: https://github.com/raullenchai
- name: NoteDiscovery
html_url: https://github.com/gamosoft/NoteDiscovery
stars: 2595
owner_login: gamosoft
owner_html_url: https://github.com/gamosoft
- name: fastapi-react
html_url: https://github.com/Buuntu/fastapi-react
stars: 2588
owner_login: Buuntu
owner_html_url: https://github.com/Buuntu
- name: any-auto-register
html_url: https://github.com/lxf746/any-auto-register
stars: 2542
owner_login: lxf746
owner_html_url: https://github.com/lxf746
- name: NoteDiscovery
html_url: https://github.com/gamosoft/NoteDiscovery
stars: 2531
owner_login: gamosoft
owner_html_url: https://github.com/gamosoft
- name: supabase-py
html_url: https://github.com/supabase/supabase-py
stars: 2518
stars: 2530
owner_login: supabase
owner_html_url: https://github.com/supabase
- name: 30-Days-of-Python
html_url: https://github.com/codingforentrepreneurs/30-Days-of-Python
stars: 2470
stars: 2483
owner_login: codingforentrepreneurs
owner_html_url: https://github.com/codingforentrepreneurs
- name: RasaGPT
html_url: https://github.com/paulpierre/RasaGPT
stars: 2466
stars: 2462
owner_login: paulpierre
owner_html_url: https://github.com/paulpierre
- name: AIstudioProxyAPI
html_url: https://github.com/CJackHwang/AIstudioProxyAPI
stars: 2396
owner_login: CJackHwang
owner_html_url: https://github.com/CJackHwang
- name: fastapi-langgraph-agent-production-ready-template
html_url: https://github.com/wassim249/fastapi-langgraph-agent-production-ready-template
stars: 2338
stars: 2456
owner_login: wassim249
owner_html_url: https://github.com/wassim249
- name: AIstudioProxyAPI
html_url: https://github.com/CJackHwang/AIstudioProxyAPI
stars: 2445
owner_login: CJackHwang
owner_html_url: https://github.com/CJackHwang
- name: nextpy
html_url: https://github.com/dot-agent/nextpy
stars: 2336
stars: 2341
owner_login: dot-agent
owner_html_url: https://github.com/dot-agent
- name: langserve
html_url: https://github.com/langchain-ai/langserve
stars: 2330
stars: 2329
owner_login: langchain-ai
owner_html_url: https://github.com/langchain-ai
- name: fastapi-utils
html_url: https://github.com/fastapiutils/fastapi-utils
stars: 2310
owner_login: fastapiutils
owner_html_url: https://github.com/fastapiutils
- name: fastapi-best-architecture
html_url: https://github.com/fastapi-practices/fastapi-best-architecture
stars: 2256
stars: 2318
owner_login: fastapi-practices
owner_html_url: https://github.com/fastapi-practices
- name: solara
html_url: https://github.com/widgetti/solara
stars: 2162
owner_login: widgetti
owner_html_url: https://github.com/widgetti
- name: fastapi-utils
html_url: https://github.com/fastapiutils/fastapi-utils
stars: 2308
owner_login: fastapiutils
owner_html_url: https://github.com/fastapiutils
- name: vue-fastapi-admin
html_url: https://github.com/mizhexiaoxiao/vue-fastapi-admin
stars: 2148
stars: 2184
owner_login: mizhexiaoxiao
owner_html_url: https://github.com/mizhexiaoxiao
- name: solara
html_url: https://github.com/widgetti/solara
stars: 2166
owner_login: widgetti
owner_html_url: https://github.com/widgetti
- name: mangum
html_url: https://github.com/Kludex/mangum
stars: 2119
stars: 2125
owner_login: Kludex
owner_html_url: https://github.com/Kludex
- name: codex-lb
html_url: https://github.com/Soju06/codex-lb
stars: 2122
owner_login: Soju06
owner_html_url: https://github.com/Soju06
- name: kiro-gateway
html_url: https://github.com/jwadow/kiro-gateway
stars: 2068
owner_login: jwadow
owner_html_url: https://github.com/jwadow
- name: open-wearables
html_url: https://github.com/the-momentum/open-wearables
stars: 2036
owner_login: the-momentum
owner_html_url: https://github.com/the-momentum
- name: slowapi
html_url: https://github.com/laurentS/slowapi
stars: 2000
stars: 2022
owner_login: laurentS
owner_html_url: https://github.com/laurentS
- name: xhs_ai_publisher
html_url: https://github.com/BetaStreetOmnis/xhs_ai_publisher
stars: 1980
stars: 2004
owner_login: BetaStreetOmnis
owner_html_url: https://github.com/BetaStreetOmnis
- name: FastAPI-boilerplate
html_url: https://github.com/benavlabs/FastAPI-boilerplate
stars: 1984
owner_login: benavlabs
owner_html_url: https://github.com/benavlabs
- name: openapi-python-client
html_url: https://github.com/openapi-generators/openapi-python-client
stars: 1960
stars: 1967
owner_login: openapi-generators
owner_html_url: https://github.com/openapi-generators
- name: agentkit
@@ -328,34 +353,24 @@
stars: 1944
owner_login: BCG-X-Official
owner_html_url: https://github.com/BCG-X-Official
- name: FastAPI-boilerplate
html_url: https://github.com/benavlabs/FastAPI-boilerplate
stars: 1931
owner_login: benavlabs
owner_html_url: https://github.com/benavlabs
- name: piccolo
html_url: https://github.com/piccolo-orm/piccolo
stars: 1904
stars: 1922
owner_login: piccolo-orm
owner_html_url: https://github.com/piccolo-orm
- name: manage-fastapi
html_url: https://github.com/ycd/manage-fastapi
stars: 1903
stars: 1905
owner_login: ycd
owner_html_url: https://github.com/ycd
- name: fastapi-cache
html_url: https://github.com/long2ice/fastapi-cache
stars: 1865
stars: 1866
owner_login: long2ice
owner_html_url: https://github.com/long2ice
- name: kiro-gateway
html_url: https://github.com/jwadow/kiro-gateway
stars: 1853
owner_login: jwadow
owner_html_url: https://github.com/jwadow
- name: ormar
html_url: https://github.com/ormar-orm/ormar
stars: 1809
stars: 1806
owner_login: ormar-orm
owner_html_url: https://github.com/ormar-orm
- name: python-week-2022
@@ -363,39 +378,29 @@
stars: 1806
owner_login: rochacbruno
owner_html_url: https://github.com/rochacbruno
- name: open-wearables
html_url: https://github.com/the-momentum/open-wearables
stars: 1782
owner_login: the-momentum
owner_html_url: https://github.com/the-momentum
- name: WebRPA
html_url: https://github.com/pmh1314520/WebRPA
stars: 1781
owner_login: pmh1314520
owner_html_url: https://github.com/pmh1314520
- name: termpair
html_url: https://github.com/cs01/termpair
stars: 1735
owner_login: cs01
owner_html_url: https://github.com/cs01
- name: WebRPA
html_url: https://github.com/pmh1314520/WebRPA
stars: 1718
owner_login: pmh1314520
owner_html_url: https://github.com/pmh1314520
- name: codex-lb
html_url: https://github.com/Soju06/codex-lb
stars: 1709
owner_login: Soju06
owner_html_url: https://github.com/Soju06
- name: fastapi-crudrouter
html_url: https://github.com/awtkns/fastapi-crudrouter
stars: 1692
stars: 1694
owner_login: awtkns
owner_html_url: https://github.com/awtkns
- name: bracket
html_url: https://github.com/evroon/bracket
stars: 1682
stars: 1694
owner_login: evroon
owner_html_url: https://github.com/evroon
- name: fastapi-pagination
html_url: https://github.com/uriyyo/fastapi-pagination
stars: 1658
stars: 1670
owner_login: uriyyo
owner_html_url: https://github.com/uriyyo
- name: langchain-serve
@@ -405,91 +410,86 @@
owner_html_url: https://github.com/jina-ai
- name: awesome-fastapi-projects
html_url: https://github.com/Kludex/awesome-fastapi-projects
stars: 1603
stars: 1608
owner_login: Kludex
owner_html_url: https://github.com/Kludex
- name: coronavirus-tracker-api
html_url: https://github.com/ExpDev07/coronavirus-tracker-api
stars: 1567
stars: 1568
owner_login: ExpDev07
owner_html_url: https://github.com/ExpDev07
- name: fastapi-amis-admin
html_url: https://github.com/amisadmin/fastapi-amis-admin
stars: 1554
stars: 1559
owner_login: amisadmin
owner_html_url: https://github.com/amisadmin
- name: fastcrud
html_url: https://github.com/benavlabs/fastcrud
stars: 1519
stars: 1531
owner_login: benavlabs
owner_html_url: https://github.com/benavlabs
- name: tavily-key-generator
html_url: https://github.com/skernelx/tavily-key-generator
stars: 1507
stars: 1526
owner_login: skernelx
owner_html_url: https://github.com/skernelx
- name: fastapi-boilerplate
html_url: https://github.com/teamhide/fastapi-boilerplate
stars: 1490
stars: 1491
owner_login: teamhide
owner_html_url: https://github.com/teamhide
- name: full-stack-ai-agent-template
html_url: https://github.com/vstorm-co/full-stack-ai-agent-template
stars: 1484
owner_login: vstorm-co
owner_html_url: https://github.com/vstorm-co
- name: prometheus-fastapi-instrumentator
html_url: https://github.com/trallnag/prometheus-fastapi-instrumentator
stars: 1458
stars: 1471
owner_login: trallnag
owner_html_url: https://github.com/trallnag
- name: awesome-python-resources
html_url: https://github.com/DjangoEx/awesome-python-resources
stars: 1448
stars: 1451
owner_login: DjangoEx
owner_html_url: https://github.com/DjangoEx
- name: fastapi-tutorial
html_url: https://github.com/liaogx/fastapi-tutorial
stars: 1404
owner_login: liaogx
owner_html_url: https://github.com/liaogx
- name: fastapi-code-generator
html_url: https://github.com/koxudaxi/fastapi-code-generator
stars: 1397
owner_login: koxudaxi
owner_html_url: https://github.com/koxudaxi
- name: aktools
html_url: https://github.com/akfamily/aktools
stars: 1394
stars: 1431
owner_login: akfamily
owner_html_url: https://github.com/akfamily
- name: RuoYi-Vue3-FastAPI
html_url: https://github.com/insistence/RuoYi-Vue3-FastAPI
stars: 1364
stars: 1419
owner_login: insistence
owner_html_url: https://github.com/insistence
- name: budgetml
html_url: https://github.com/ebhy/budgetml
stars: 1345
owner_login: ebhy
owner_html_url: https://github.com/ebhy
- name: full-stack-ai-agent-template
html_url: https://github.com/vstorm-co/full-stack-ai-agent-template
stars: 1316
owner_login: vstorm-co
owner_html_url: https://github.com/vstorm-co
- name: bolt-python
html_url: https://github.com/slackapi/bolt-python
stars: 1308
owner_login: slackapi
owner_html_url: https://github.com/slackapi
- name: bedrock-chat
html_url: https://github.com/aws-samples/bedrock-chat
stars: 1304
owner_login: aws-samples
owner_html_url: https://github.com/aws-samples
- name: restish
html_url: https://github.com/rest-sh/restish
stars: 1303
owner_login: rest-sh
owner_html_url: https://github.com/rest-sh
- name: fastapi-tutorial
html_url: https://github.com/liaogx/fastapi-tutorial
stars: 1418
owner_login: liaogx
owner_html_url: https://github.com/liaogx
- name: fastapi-code-generator
html_url: https://github.com/koxudaxi/fastapi-code-generator
stars: 1396
owner_login: koxudaxi
owner_html_url: https://github.com/koxudaxi
- name: yubal
html_url: https://github.com/guillevc/yubal
stars: 1302
stars: 1388
owner_login: guillevc
owner_html_url: https://github.com/guillevc
- name: budgetml
html_url: https://github.com/ebhy/budgetml
stars: 1343
owner_login: ebhy
owner_html_url: https://github.com/ebhy
- name: Chatterbox-TTS-Server
html_url: https://github.com/devnen/Chatterbox-TTS-Server
stars: 1328
owner_login: devnen
owner_html_url: https://github.com/devnen
- name: restish
html_url: https://github.com/rest-sh/restish
stars: 1321
owner_login: rest-sh
owner_html_url: https://github.com/rest-sh
+19 -19
View File
@@ -28,6 +28,11 @@ hard-coders:
count: 102
avatarUrl: https://avatars.githubusercontent.com/u/9651103?u=78d12d1acdf853c817700145e73de7fd9e5d068b&v=4
url: https://github.com/hard-coders
YuriiMotov:
login: YuriiMotov
count: 95
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
hasansezertasan:
login: hasansezertasan
count: 95
@@ -38,11 +43,6 @@ alv2017:
count: 88
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/alv2017
YuriiMotov:
login: YuriiMotov
count: 87
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
nazarepiedady:
login: nazarepiedady
count: 87
@@ -383,6 +383,11 @@ mastizada:
count: 16
avatarUrl: https://avatars.githubusercontent.com/u/1975818?u=0751a06d7271c8bf17cb73b1b845644ab4d2c6dc&v=4
url: https://github.com/mastizada
waketzheng:
login: waketzheng
count: 16
avatarUrl: https://avatars.githubusercontent.com/u/35413830?u=df19e4fd5bb928e7d086e053ef26a46aad23bf84&v=4
url: https://github.com/waketzheng
Joao-Pedro-P-Holanda:
login: Joao-Pedro-P-Holanda
count: 16
@@ -448,11 +453,6 @@ impocode:
count: 13
avatarUrl: https://avatars.githubusercontent.com/u/109408819?u=9cdfc5ccb31a2094c520f41b6087012fa9048982&v=4
url: https://github.com/impocode
waketzheng:
login: waketzheng
count: 13
avatarUrl: https://avatars.githubusercontent.com/u/35413830?u=df19e4fd5bb928e7d086e053ef26a46aad23bf84&v=4
url: https://github.com/waketzheng
wesinalves:
login: wesinalves
count: 13
@@ -563,6 +563,11 @@ Pyth3rEx:
count: 11
avatarUrl: https://avatars.githubusercontent.com/u/26427764?u=087724f74d813c95925d51e354554bd4b6d6bb60&v=4
url: https://github.com/Pyth3rEx
ABcDexter:
login: ABcDexter
count: 11
avatarUrl: https://avatars.githubusercontent.com/u/7236257?u=baa7e62eb4d0014b5854bfd0d5c2b20bd9617e0d&v=4
url: https://github.com/ABcDexter
mariacamilagl:
login: mariacamilagl
count: 10
@@ -661,7 +666,7 @@ eVery1337:
aykhans:
login: aykhans
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/88669260?u=798da457cc3276d3c6dd7fd628d0005ad8b298cc&v=4
avatarUrl: https://avatars.githubusercontent.com/u/88669260?u=2760f6f6728ed11108b56265682bcf68d46067a5&v=4
url: https://github.com/aykhans
riroan:
login: riroan
@@ -671,7 +676,7 @@ riroan:
MinLee0210:
login: MinLee0210
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/57653278?u=e7c4d8d7eeb7bceed1680ef0e5dafec0695f57e0&v=4
avatarUrl: https://avatars.githubusercontent.com/u/57653278?u=9fef84dd2f7497e8b43db01ba517a5b2bd66ad88&v=4
url: https://github.com/MinLee0210
yodai-yodai:
login: yodai-yodai
@@ -693,11 +698,6 @@ Yarous:
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/61277193?u=5b462347458a373b2d599c6f416d2b75eddbffad&v=4
url: https://github.com/Yarous
ABcDexter:
login: ABcDexter
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/7236257?u=baa7e62eb4d0014b5854bfd0d5c2b20bd9617e0d&v=4
url: https://github.com/ABcDexter
dimaqq:
login: dimaqq
count: 8
@@ -756,7 +756,7 @@ EdmilsonRodrigues:
roli2py:
login: roli2py
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/61126128?u=bcb7a286e435a6b9d6a84b07db1232580ee796d4&v=4
avatarUrl: https://avatars.githubusercontent.com/u/61126128?u=d20921080d6b9499b39ef3431e850432fe68f903&v=4
url: https://github.com/roli2py
Serrones:
login: Serrones
@@ -1281,7 +1281,7 @@ rafsaf:
frnsimoes:
login: frnsimoes
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/66239468?u=be491199e4695bb0ac43d17d59cf7d41f9df629f&v=4
avatarUrl: https://avatars.githubusercontent.com/u/66239468?u=c86ceed4afa180477e28b9ff0019ab894a1e1eb9&v=4
url: https://github.com/frnsimoes
lieryan:
login: lieryan
+7 -7
View File
@@ -5,7 +5,7 @@ nilslindemann:
url: https://github.com/nilslindemann
tiangolo:
login: tiangolo
count: 78
count: 100
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
jaystone776:
@@ -23,6 +23,11 @@ valentinDruzhinin:
count: 29
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/valentinDruzhinin
YuriiMotov:
login: YuriiMotov
count: 24
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
tokusumi:
login: tokusumi
count: 23
@@ -33,11 +38,6 @@ SwftAlpc:
count: 23
avatarUrl: https://avatars.githubusercontent.com/u/52768429?u=6a3aa15277406520ad37f6236e89466ed44bc5b8&v=4
url: https://github.com/SwftAlpc
YuriiMotov:
login: YuriiMotov
count: 23
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
hasansezertasan:
login: hasansezertasan
count: 22
@@ -466,7 +466,7 @@ ArtemKhymenko:
hasnatsajid:
login: hasnatsajid
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/86589885?u=3712c0362d7a4000d76022339c545cf46aa5903f&v=4
avatarUrl: https://avatars.githubusercontent.com/u/86589885?u=a1f0d462a558e4fc7271bfcdc7e5e7de92b9e10b&v=4
url: https://github.com/hasnatsajid
alperiox:
login: alperiox
+2 -2
View File
@@ -185,7 +185,7 @@ See section `### Links` in the general prompt in `scripts/translate.py`.
//// tab | Test
Here some things wrapped in HTML "abbr" elements (Some are invented):
Here are some things wrapped in HTML "abbr" elements (Some are invented):
### The abbr gives a full phrase { #the-abbr-gives-a-full-phrase }
@@ -488,7 +488,7 @@ For some language specific instructions, see e.g. section `### Headings` in `doc
//// tab | Info
This is a not complete and not normative list of (mostly) technical terms seen in the docs. It may be helpful for the prompt designer to figure out for which terms the LLM needs a helping hand. For example when it keeps reverting a good translation to a suboptimal translation. Or when it has problems conjugating/declinating a term in your language.
This is neither a complete nor a normative list of (mostly) technical terms seen in the docs. It may be helpful for the prompt designer to figure out for which terms the LLM needs a helping hand. For example when it keeps reverting a good translation to a suboptimal translation. Or when it has problems conjugating/declinating a term in your language.
See e.g. section `### List of English terms and their preferred German translations` in `docs/de/llm-prompt.md`.
@@ -8,7 +8,7 @@ It will use the default status code or the one you set in your *path operation*.
If you want to return additional status codes apart from the main one, you can do that by returning a `Response` directly, like a `JSONResponse`, and set the additional status code directly.
For example, let's say that you want to have a *path operation* that allows to update items, and returns HTTP status codes of 200 "OK" when successful.
For example, let's say that you want to have a *path operation* that allows updating items, and returns HTTP status codes of 200 "OK" when successful.
But you also want it to accept new items. And when the items didn't exist before, it creates them, and returns an HTTP status code of 201 "Created".
@@ -54,7 +54,7 @@ checker(q="somequery")
/// tip
All this might seem contrived. And it might not be very clear how is it useful yet.
All this might seem contrived. And it might not be very clear how it is useful yet.
These examples are intentionally simple, but show how it all works.
@@ -112,7 +112,7 @@ For example, imagine you have code that uses a database session in a dependency
In this case, the database session would be held until the response is finished being sent, but if you don't use it, then it wouldn't be necessary to hold it.
Here's how it could look like:
Here's how it could look:
{* ../../docs_src/dependencies/tutorial013_an_py310.py *}
+1 -1
View File
@@ -24,7 +24,7 @@ Keep in mind that dataclasses can't do everything Pydantic models can do.
So, you might still need to use Pydantic models.
But if you have a bunch of dataclasses laying around, this is a nice trick to use them to power a web API using FastAPI. 🤓
But if you have a bunch of dataclasses lying around, this is a nice trick to use them to power a web API using FastAPI. 🤓
///
+1 -1
View File
@@ -142,7 +142,7 @@ So, we declare the event handler function with standard `def` instead of `async
There's a high chance that the logic for your *startup* and *shutdown* is connected, you might want to start something and then finish it, acquire a resource and then release it, etc.
Doing that in separated functions that don't share logic or variables together is more difficult as you would need to store values in global variables or similar tricks.
Doing that in separate functions that don't share logic or variables together is more difficult as you would need to store values in global variables or similar tricks.
Because of that, it's now recommended to instead use the `lifespan` as explained above.
-14
View File
@@ -20,20 +20,6 @@ FastAPI automatically generates **OpenAPI 3.1** specifications, so any tool you
///
## SDK Generators from FastAPI Sponsors { #sdk-generators-from-fastapi-sponsors }
This section highlights **venture-backed** and **company-supported** solutions from companies that sponsor FastAPI. These products provide **additional features** and **integrations** on top of high-quality generated SDKs.
By ✨ [**sponsoring FastAPI**](../help-fastapi.md#sponsor-the-author) ✨, these companies help ensure the framework and its **ecosystem** remain healthy and **sustainable**.
Their sponsorship also demonstrates a strong commitment to the FastAPI **community** (you), showing that they care not only about offering a **great service** but also about supporting a **robust and thriving framework**, FastAPI. 🙇
For example, you might want to try:
* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
Some of these solutions may also be open source or offer free tiers, so you can try them without a financial commitment. Other commercial SDK generators are available and can be found online. 🤓
## Create a TypeScript SDK { #create-a-typescript-sdk }
Let's start with a simple FastAPI application:
+1 -1
View File
@@ -4,7 +4,7 @@ If your app needs to receive and send JSON data, but you need to include binary
## Base64 vs Files { #base64-vs-files }
Consider first if you can use [Request Files](../tutorial/request-files.md) for uploading binary data and [Custom Response - FileResponse](./custom-response.md#fileresponse--fileresponse-) for sending binary data, instead of encoding it in JSON.
Consider first if you can use [Request Files](../tutorial/request-files.md) for uploading binary data and [Custom Response - FileResponse](./custom-response.md#fileresponse) for sending binary data, instead of encoding it in JSON.
JSON can only contain UTF-8 encoded strings, so it can't contain raw bytes.
+8 -8
View File
@@ -4,7 +4,7 @@ You could create an API with a *path operation* that could trigger a request to
The process that happens when your API app calls the *external API* is named a "callback". Because the software that the external developer wrote sends a request to your API and then your API *calls back*, sending a request to an *external API* (that was probably created by the same developer).
In this case, you could want to document how that external API *should* look like. What *path operation* it should have, what body it should expect, what response it should return, etc.
In this case, you could want to document how that external API *should* look. What *path operation* it should have, what body it should expect, what response it should return, etc.
## An app with callbacks { #an-app-with-callbacks }
@@ -25,7 +25,7 @@ Then your API will (let's imagine):
## The normal **FastAPI** app { #the-normal-fastapi-app }
Let's first see how the normal API app would look like before adding the callback.
Let's first see how the normal API app would look before adding the callback.
It will have a *path operation* that will receive an `Invoice` body, and a query parameter `callback_url` that will contain the URL for the callback.
@@ -56,7 +56,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
But possibly the most important part of the callback is making sure that your API user (the external developer) implements the *external API* correctly, according to the data that *your API* is going to send in the request body of the callback, etc.
So, what we will do next is add the code to document how that *external API* should look like to receive the callback from *your API*.
So, what we will do next is add the code to document how that *external API* should look to receive the callback from *your API*.
That documentation will show up in the Swagger UI at `/docs` in your API, and it will let external developers know how to build the *external API*.
@@ -72,11 +72,11 @@ When implementing the callback yourself, you could use something like [HTTPX](ht
## Write the callback documentation code { #write-the-callback-documentation-code }
This code won't be executed in your app, we only need it to *document* how that *external API* should look like.
This code won't be executed in your app, we only need it to *document* how that *external API* should look.
But, you already know how to easily create automatic documentation for an API with **FastAPI**.
So we are going to use that same knowledge to document how the *external API* should look like... by creating the *path operation(s)* that the external API should implement (the ones your API will call).
So we are going to use that same knowledge to document how the *external API* should look... by creating the *path operation(s)* that the external API should implement (the ones your API will call).
/// tip
@@ -167,13 +167,13 @@ Notice how the callback URL used contains the URL received as a query parameter
At this point you have the *callback path operation(s)* needed (the one(s) that the *external developer* should implement in the *external API*) in the callback router you created above.
Now use the parameter `callbacks` in *your API's path operation decorator* to pass the attribute `.routes` (that's actually just a `list` of routes/*path operations*) from that callback router:
Now use the parameter `callbacks` in *your API's path operation decorator* to pass the attribute `.routes` from that callback router:
{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *}
/// tip
Notice that you are not passing the router itself (`invoices_callback_router`) to `callback=`, but the attribute `.routes`, as in `invoices_callback_router.routes`.
Notice that you are not passing the router itself (`invoices_callback_router`) to `callbacks=`, but its `.routes`, as in `invoices_callback_router.routes`. FastAPI will use those routes to generate the callback OpenAPI documentation.
///
@@ -181,6 +181,6 @@ Notice that you are not passing the router itself (`invoices_callback_router`) t
Now you can start your app and go to [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
You will see your docs including a "Callbacks" section for your *path operation* that shows how the *external API* should look like:
You will see your docs including a "Callbacks" section for your *path operation* that shows how the *external API* should look:
<img src="/img/tutorial/openapi-callbacks/image01.png">
@@ -16,17 +16,11 @@ You would have to make sure that it is unique for each operation.
### Using the *path operation function* name as the operationId { #using-the-path-operation-function-name-as-the-operationid }
If you want to use your APIs' function names as `operationId`s, you can iterate over all of them and override each *path operation's* `operation_id` using their `APIRoute.name`.
If you want to use your APIs' function names as `operationId`s, you can pass a custom `generate_unique_id_function` to `FastAPI`.
You should do it after adding all your *path operations*.
The function receives each `APIRoute` and returns the `operationId` to use for that path operation.
{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *}
/// tip
If you manually call `app.openapi()`, you should update the `operationId`s before that.
///
{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *}
/// warning
@@ -18,7 +18,7 @@ For those cases, you can use a `Response` parameter.
You can declare a parameter of type `Response` in your *path operation function* (as you can do for cookies and headers).
And then you can set the `status_code` in that *temporal* response object.
And then you can set the `status_code` in that *temporary* response object.
{* ../../docs_src/response_change_status_code/tutorial001_py310.py hl[1,9,12] *}
@@ -26,6 +26,6 @@ And then you can return any object you need, as you normally would (a `dict`, a
And if you declared a `response_model`, it will still be used to filter and convert the object you returned.
**FastAPI** will use that *temporal* response to extract the status code (also cookies and headers), and will put them in the final response that contains the value you returned, filtered by any `response_model`.
**FastAPI** will use that *temporary* response to extract the status code (also cookies and headers), and will put them in the final response that contains the value you returned, filtered by any `response_model`.
You can also declare the `Response` parameter in dependencies, and set the status code in them. But keep in mind that the last one to be set will win.
+2 -2
View File
@@ -4,7 +4,7 @@
You can declare a parameter of type `Response` in your *path operation function*.
And then you can set cookies in that *temporal* response object.
And then you can set cookies in that *temporary* response object.
{* ../../docs_src/response_cookies/tutorial002_py310.py hl[1, 8:9] *}
@@ -12,7 +12,7 @@ And then you can return any object you need, as you normally would (a `dict`, a
And if you declared a `response_model`, it will still be used to filter and convert the object you returned.
**FastAPI** will use that *temporal* response to extract the cookies (also headers and status code), and will put them in the final response that contains the value you returned, filtered by any `response_model`.
**FastAPI** will use that *temporary* response to extract the cookies (also headers and status code), and will put them in the final response that contains the value you returned, filtered by any `response_model`.
You can also declare the `Response` parameter in dependencies, and set cookies (and headers) in them.
+2 -2
View File
@@ -4,7 +4,7 @@
You can declare a parameter of type `Response` in your *path operation function* (as you can do for cookies).
And then you can set headers in that *temporal* response object.
And then you can set headers in that *temporary* response object.
{* ../../docs_src/response_headers/tutorial002_py310.py hl[1, 7:8] *}
@@ -12,7 +12,7 @@ And then you can return any object you need, as you normally would (a `dict`, a
And if you declared a `response_model`, it will still be used to filter and convert the object you returned.
**FastAPI** will use that *temporal* response to extract the headers (also cookies and status code), and will put them in the final response that contains the value you returned, filtered by any `response_model`.
**FastAPI** will use that *temporary* response to extract the headers (also cookies and status code), and will put them in the final response that contains the value you returned, filtered by any `response_model`.
You can also declare the `Response` parameter in dependencies, and set headers (and cookies) in them.
@@ -194,11 +194,11 @@ For this, we use `security_scopes.scopes`, that contains a `list` with all these
Let's review again this dependency tree and the scopes.
As the `get_current_active_user` dependency has as a sub-dependency on `get_current_user`, the scope `"me"` declared at `get_current_active_user` will be included in the list of required scopes in the `security_scopes.scopes` passed to `get_current_user`.
As the `get_current_active_user` dependency has `get_current_user` as a sub-dependency, the scope `"me"` declared at `get_current_active_user` will be included in the list of required scopes in the `security_scopes.scopes` passed to `get_current_user`.
The *path operation* itself also declares a scope, `"items"`, so this will also be in the list of `security_scopes.scopes` passed to `get_current_user`.
Here's how the hierarchy of dependencies and scopes looks like:
Here's what the hierarchy of dependencies and scopes looks like:
* The *path operation* `read_own_items` has:
* Required scopes `["items"]` with the dependency:
+1 -1
View File
@@ -14,7 +14,7 @@ To understand environment variables you can read [Environment Variables](../envi
## Types and validation { #types-and-validation }
These environment variables can only handle text strings, as they are external to Python and have to be compatible with other programs and the rest of the system (and even with different operating systems, as Linux, Windows, macOS).
These environment variables can only handle text strings, as they are external to Python and have to be compatible with other programs and the rest of the system (and even with different operating systems, such as Linux, Windows, and macOS).
That means that any value read in Python from an environment variable will be a `str`, and any conversion to a different type or any validation has to be done in code.
+1 -1
View File
@@ -14,7 +14,7 @@ Added in FastAPI 0.134.0.
You could use this if you want to stream pure strings, for example directly from the output of an **AI LLM** service.
You could also use it to stream **large binary files**, where you stream each chunk of data as you read it, without having to read it all in memory at once.
You could also use it to stream **large binary files**, where you stream each chunk of data as you read it, without having to read it all into memory at once.
You could also stream **video** or **audio** this way, it could even be generated as you process and send it.
+1 -1
View File
@@ -24,7 +24,7 @@ And then mount that under a path.
Previously, it was recommended to use `WSGIMiddleware` from `fastapi.middleware.wsgi`, but it is now deprecated.
Its advised to use the `a2wsgi` package instead. The usage remains the same.
It's advised to use the `a2wsgi` package instead. The usage remains the same.
Just ensure that you have the `a2wsgi` package installed and import `WSGIMiddleware` correctly from `a2wsgi`.
+4 -4
View File
@@ -24,7 +24,7 @@ It was created to generate the HTML in the backend, not to create APIs used by a
### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework }
Django REST framework was created to be a flexible toolkit for building Web APIs using Django underneath, to improve its API capabilities.
Django REST Framework was created to be a flexible toolkit for building Web APIs using Django underneath, to improve its API capabilities.
It is used by many companies including Mozilla, Red Hat and Eventbrite.
@@ -345,7 +345,7 @@ Hug was created by Timothy Crosley, the same creator of [`isort`](https://github
Hug inspired parts of APIStar, and was one of the tools I found most promising, alongside APIStar.
Hug helped inspiring **FastAPI** to use Python type hints to declare parameters, and to generate a schema defining the API automatically.
Hug helped inspire **FastAPI** to use Python type hints to declare parameters, and to generate a schema defining the API automatically.
Hug inspired **FastAPI** to declare a `response` parameter in functions to set headers and cookies.
@@ -380,7 +380,7 @@ Now APIStar is a set of tools to validate OpenAPI specifications, not a web fram
APIStar was created by Tom Christie. The same guy that created:
* Django REST Framework
* Starlette (in which **FastAPI** is based)
* Starlette (on which **FastAPI** is based)
* Uvicorn (used by Starlette and **FastAPI**)
///
@@ -393,7 +393,7 @@ The idea of declaring multiple things (data validation, serialization and docume
And after searching for a long time for a similar framework and testing many different alternatives, APIStar was the best option available.
Then APIStar stopped to exist as a server and Starlette was created, and was a new better foundation for such a system. That was the final inspiration to build **FastAPI**.
Then APIStar stopped existing as a server and Starlette was created, and was a new better foundation for such a system. That was the final inspiration to build **FastAPI**.
I consider **FastAPI** a "spiritual successor" to APIStar, while improving and increasing the features, typing system, and other parts, based on the learnings from all these previous tools.
+7 -7
View File
@@ -70,7 +70,7 @@ Asynchronous code just means that the language 💬 has a way to tell the comput
So, during that time, the computer can go and do some other work, while "slow-file" 📝 finishes.
Then the computer / program 🤖 will come back every time it has a chance because it's waiting again, or whenever it 🤖 finished all the work it had at that point. And it 🤖 will see if any of the tasks it was waiting for have already finished, doing whatever it had to do.
Then the computer / program 🤖 will come back every time it has a chance because it's waiting again, or whenever it 🤖 finishes all the work it had at that point. And it 🤖 will see if any of the tasks it was waiting for have already finished, doing whatever it had to do.
Next, it 🤖 takes the first task to finish (let's say, our "slow-file" 📝) and continues whatever it had to do with it.
@@ -78,7 +78,7 @@ That "wait for something else" normally refers to <abbr title="Input and Output"
* the data from the client to be sent through the network
* the data sent by your program to be received by the client through the network
* the contents of a file in the disk to be read by the system and given to your program
* the contents of a file on the disk to be read by the system and given to your program
* the contents your program gave to the system to be written to disk
* a remote API operation
* a database operation to finish
@@ -257,7 +257,7 @@ And as you can have parallelism and asynchronicity at the same time, you get hig
Nope! That's not the moral of the story.
Concurrency is different than parallelism. And it is better on **specific** scenarios that involve a lot of waiting. Because of that, it generally is a lot better than parallelism for web application development. But not for everything.
Concurrency is different than parallelism. And it is better in **specific** scenarios that involve a lot of waiting. Because of that, it generally is a lot better than parallelism for web application development. But not for everything.
So, to balance that out, imagine the following short story:
@@ -267,7 +267,7 @@ So, to balance that out, imagine the following short story:
---
There's no waiting 🕙 anywhere, just a lot of work to be done, on multiple places of the house.
There's no waiting 🕙 anywhere, just a lot of work to be done, in multiple places of the house.
You could have turns as in the burgers example, first the living room, then the kitchen, but as you are not waiting 🕙 for anything, just cleaning and cleaning, the turns wouldn't affect anything.
@@ -296,7 +296,7 @@ With **FastAPI** you can take advantage of concurrency that is very common for w
But you can also exploit the benefits of parallelism and multiprocessing (having multiple processes running in parallel) for **CPU bound** workloads like those in Machine Learning systems.
That, plus the simple fact that Python is the main language for **Data Science**, Machine Learning and especially Deep Learning, make FastAPI a very good match for Data Science / Machine Learning web APIs and applications (among many others).
That, plus the simple fact that Python is the main language for **Data Science**, Machine Learning and especially Deep Learning, makes FastAPI a very good match for Data Science / Machine Learning web APIs and applications (among many others).
To see how to achieve this parallelism in production see the section about [Deployment](deployment/index.md).
@@ -340,7 +340,7 @@ burgers = get_burgers(2)
---
So, if you are using a library that tells you that you can call it with `await`, you need to create the *path operation functions* that uses it with `async def`, like in:
So, if you are using a library that tells you that you can call it with `await`, you need to create the *path operation functions* that use it with `async def`, like in:
```Python hl_lines="2-3"
@app.get('/burgers')
@@ -435,7 +435,7 @@ Any other utility function that you call directly can be created with normal `de
This is in contrast to the functions that FastAPI calls for you: *path operation functions* and dependencies.
If your utility function is a normal function with `def`, it will be called directly (as you write it in your code), not in a threadpool, if the function is created with `async def` then you should `await` for that function when you call it in your code.
If your utility function is a normal function with `def`, it will be called directly (as you write it in your code), not in a threadpool, if the function is created with `async def` then you should `await` that function when you call it in your code.
---
+1 -1
View File
@@ -16,7 +16,7 @@ FastAPI Cloud is the primary sponsor and funding provider for the *FastAPI and f
## Cloud Providers - Sponsors { #cloud-providers-sponsors }
Some other cloud providers ✨ [**sponsor FastAPI**](../help-fastapi.md#sponsor-the-author) ✨ too. 🙇
Some other cloud providers ✨ [**sponsor FastAPI**](https://github.com/sponsors/tiangolo) ✨ too. 🙇
You might also want to consider them to follow their guides and try their services:
+2 -2
View File
@@ -36,9 +36,9 @@ And there has to be something in charge of **renewing the HTTPS certificates**,
Some of the tools you could use as a TLS Termination Proxy are:
* Traefik
* Automatically handles certificates renewals ✨
* Automatically handles certificate renewals ✨
* Caddy
* Automatically handles certificates renewals ✨
* Automatically handles certificate renewals ✨
* Nginx
* With an external component like Certbot for certificate renewals
* HAProxy
+5 -5
View File
@@ -283,7 +283,7 @@ CMD ["fastapi", "run", "app/main.py", "--proxy-headers", "--port", "80"]
#### Docker Cache { #docker-cache }
There's an important trick in this `Dockerfile`, we first copy the **file with the dependencies alone**, not the rest of the code. Let me tell you why is that.
There's an important trick in this `Dockerfile`, we first copy the **file with the dependencies alone**, not the rest of the code. Let me tell you why that is.
```Dockerfile
COPY ./requirements.txt /code/requirements.txt
@@ -301,7 +301,7 @@ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
The file with the package requirements **won't change frequently**. So, by copying only that file, Docker will be able to **use the cache** for that step.
And then, Docker will be able to **use the cache for the next step** that downloads and install those dependencies. And here's where we **save a lot of time**. ✨ ...and avoid boredom waiting. 😪😆
And then, Docker will be able to **use the cache for the next step** that downloads and installs those dependencies. And here's where we **save a lot of time**. ✨ ...and avoid boredom waiting. 😪😆
Downloading and installing the package dependencies **could take minutes**, but using the **cache** would **take seconds** at most.
@@ -488,7 +488,7 @@ And normally this **load balancer** would be able to handle requests that go to
In this type of scenario, you probably would want to have **a single (Uvicorn) process per container**, as you would already be handling replication at the cluster level.
So, in this case, you **would not** want to have a multiple workers in the container, for example with the `--workers` command line option. You would want to have just a **single Uvicorn process** per container (but probably multiple containers).
So, in this case, you **would not** want to have multiple workers in the container, for example with the `--workers` command line option. You would want to have just a **single Uvicorn process** per container (but probably multiple containers).
Having another process manager inside the container (as would be with multiple workers) would only add **unnecessary complexity** that you are most probably already taking care of with your cluster system.
@@ -519,7 +519,7 @@ Here are some examples of when that could make sense:
#### A Simple App { #a-simple-app }
You could want a process manager in the container if your application is **simple enough** that can run it on a **single server**, not a cluster.
You could want a process manager in the container if your application is **simple enough** that you can run it on a **single server**, not a cluster.
#### Docker Compose { #docker-compose }
@@ -544,7 +544,7 @@ If you run **a single process per container** you will have a more or less well-
And then you can set those same memory limits and requirements in your configurations for your container management system (for example in **Kubernetes**). That way it will be able to **replicate the containers** in the **available machines** taking into account the amount of memory needed by them, and the amount available in the machines in the cluster.
If your application is **simple**, this will probably **not be a problem**, and you might not need to specify hard memory limits. But if you are **using a lot of memory** (for example with **machine learning** models), you should check how much memory you are consuming and adjust the **number of containers** that runs in **each machine** (and maybe add more machines to your cluster).
If your application is **simple**, this will probably **not be a problem**, and you might not need to specify hard memory limits. But if you are **using a lot of memory** (for example with **machine learning** models), you should check how much memory you are consuming and adjust the **number of containers** that run on **each machine** (and maybe add more machines to your cluster).
If you run **multiple processes per container** you will have to make sure that the number of processes started doesn't **consume more memory** than what is available.
+2 -2
View File
@@ -59,7 +59,7 @@ The idea is to automate the acquisition and renewal of these certificates so tha
## HTTPS for Developers { #https-for-developers }
Here's an example of how an HTTPS API could look like, step by step, paying attention mainly to the ideas important for developers.
Here's an example of how an HTTPS API could look, step by step, paying attention mainly to the ideas important for developers.
### Domain Name { #domain-name }
@@ -192,7 +192,7 @@ All this renewal process, while still serving the app, is one of the main reason
## Proxy Forwarded Headers { #proxy-forwarded-headers }
When using a proxy to handle HTTPS, your **application server** (for example Uvicorn via FastAPI CLI) doesn't known anything about the HTTPS process, it communicates with plain HTTP with the **TLS Termination Proxy**.
When using a proxy to handle HTTPS, your **application server** (for example Uvicorn via FastAPI CLI) doesn't know anything about the HTTPS process, it communicates with plain HTTP with the **TLS Termination Proxy**.
This **proxy** would normally set some HTTP headers on the fly before transmitting the request to the **application server**, to let the application server know that the request is being **forwarded** by the proxy.
+1 -1
View File
@@ -93,7 +93,7 @@ A similar process would apply to any other ASGI server program.
By adding the `standard`, Uvicorn will install and use some recommended extra dependencies.
That including `uvloop`, the high-performance drop-in replacement for `asyncio`, that provides the big concurrency performance boost.
That includes `uvloop`, the high-performance drop-in replacement for `asyncio`, that provides the big concurrency performance boost.
When you install FastAPI with something like `pip install "fastapi[standard]"` you already get `uvicorn[standard]` as well.
+1 -1
View File
@@ -20,4 +20,4 @@ By default, the extension will automatically discover FastAPI applications in yo
- **Deploy to FastAPI Cloud** - One-click deployment of your app to [FastAPI Cloud](https://fastapicloud.com/).
- **Stream Application Logs** - Real-time log streaming from your FastAPI Cloud-deployed application with level filtering and text search.
If you'd like to familiarize yourself with the extension's features, you can checkout the extension walkthrough by opening the Command Palette (<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or on macOS: <kbd>Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd>) and selecting "Welcome: Open walkthrough..." and then choosing the "Get started with FastAPI" walkthrough.
If you'd like to familiarize yourself with the extension's features, you can check out the extension walkthrough by opening the Command Palette (<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or on macOS: <kbd>Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd>) and selecting "Welcome: Open walkthrough..." and then choosing the "Get started with FastAPI" walkthrough.
+1 -1
View File
@@ -159,7 +159,7 @@ You can read more about it at [The Twelve-Factor App: Config](https://12factor.n
## Types and Validation { #types-and-validation }
These environment variables can only handle **text strings**, as they are external to Python and have to be compatible with other programs and the rest of the system (and even with different operating systems, as Linux, Windows, macOS).
These environment variables can only handle **text strings**, as they are external to Python and have to be compatible with other programs and the rest of the system (and even with different operating systems, such as Linux, Windows, and macOS).
That means that **any value** read in Python from an environment variable **will be a `str`**, and any conversion to a different type or any validation has to be done in code.
+1 -1
View File
@@ -7,7 +7,7 @@ include_yaml:
**FastAPI** has a great community constantly growing.
There are many posts, articles, tools, and projects, related to **FastAPI**.
There are many posts, articles, tools, and projects related to **FastAPI**.
You could easily use a search engine or video platform to find many resources related to FastAPI.
+17 -8
View File
@@ -31,7 +31,7 @@ This is me:
</div>
I'm the creator of **FastAPI**. You can read more about that in [Help FastAPI - Get Help - Connect with the author](help-fastapi.md#connect-with-the-author).
I'm the creator of **FastAPI**. You can read more about that in [Help FastAPI - Follow the author](help-fastapi.md#follow-the-author).
...But here I want to show you the community.
@@ -42,9 +42,8 @@ I'm the creator of **FastAPI**. You can read more about that in [Help FastAPI -
These are the people that:
* [Help others with questions in GitHub](help-fastapi.md#help-others-with-questions-in-github).
* [Create Pull Requests](help-fastapi.md#create-a-pull-request).
* Review Pull Requests, [especially important for translations](contributing.md#translations).
* Help [manage the repository](management-tasks.md) (team members).
* Create or review Pull Requests.
* Help [manage the repository](https://tiangolo.com/open-source/management-tasks/) (team members).
All these tasks help maintain the repository.
@@ -54,7 +53,7 @@ A round of applause to them. 👏 🙇
This is the current list of team members. 😎
They have different levels of involvement and permissions, they can perform [repository management tasks](./management-tasks.md) and together we [manage the FastAPI repository](./management.md).
They have different levels of involvement and permissions, they can perform [repository management tasks](https://tiangolo.com/open-source/management-tasks/) and together we [manage the FastAPI repository](./management.md).
<div class="user-list user-list-center">
@@ -66,7 +65,7 @@ They have different levels of involvement and permissions, they can perform [rep
</div>
Although the team members have the permissions to perform privileged tasks, all the [help from others maintaining FastAPI](./help-fastapi.md#help-maintain-fastapi) is very much appreciated! 🙇‍♂️
Although the team members have the permissions to perform privileged tasks, all the help from others maintaining FastAPI is very much appreciated! 🙇‍♂️
## FastAPI Experts
@@ -186,7 +185,7 @@ These are the users that have [helped others the most with questions in GitHub](
Here are the **Top Contributors**. 👷
These users have [created the most Pull Requests](help-fastapi.md#create-a-pull-request) that have been *merged*.
These users have created the most Pull Requests that have been *merged*.
They have contributed source code, documentation, etc. 📦
@@ -210,7 +209,7 @@ There are hundreds of other contributors, you can see them all in the [FastAPI G
These users are the **Top Translation Reviewers**. 🕵️
Translation reviewers have the [**power to approve translations**](contributing.md#translations) of the documentation. Without them, there wouldn't be documentation in several other languages.
Translation reviewers have the **power to approve translations** of the documentation. Without them, there wouldn't be documentation in several other languages.
<div class="user-list user-list-center">
{% for user in (translation_reviewers.values() | list)[:50] %}
@@ -250,6 +249,16 @@ They are supporting my work with **FastAPI** (and others), mainly through [GitHu
<a href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
{% endfor %}
{% endif %}
{% if sponsors.bronze %}
### Bronze Sponsors
{% for sponsor in sponsors.bronze -%}
<a href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
{% endfor %}
{% endif %}
{% endif %}
### Individual Sponsors
+4 -4
View File
@@ -73,11 +73,11 @@ Pass the keys and values of the `second_user_data` dict directly as key-value ar
### Editor support { #editor-support }
All the framework was designed to be easy and intuitive to use, all the decisions were tested on multiple editors even before starting development, to ensure the best development experience.
The whole framework was designed to be easy and intuitive to use, all the decisions were tested on multiple editors even before starting development, to ensure the best development experience.
In the Python developer surveys, it's clear [that one of the most used features is "autocompletion"](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features).
The whole **FastAPI** framework is based to satisfy that. Autocompletion works everywhere.
The whole **FastAPI** framework is designed to satisfy that. Autocompletion works everywhere.
You will rarely need to come back to the docs.
@@ -147,7 +147,7 @@ FastAPI includes an extremely easy to use, but extremely powerful <dfn title='al
### Unlimited "plug-ins" { #unlimited-plug-ins }
Or in other way, no need for them, import and use the code you need.
Or, in other words, no need for them, import and use the code you need.
Any integration is designed to be so simple to use (with dependencies) that you can create a "plug-in" for your application in 2 lines of code using the same structure and syntax used for your *path operations*.
@@ -179,7 +179,7 @@ With **FastAPI** you get all of **Starlette**'s features (as FastAPI is just Sta
**FastAPI** is fully compatible with (and based on) [**Pydantic**](https://docs.pydantic.dev/). So, any additional Pydantic code you have, will also work.
Including external libraries also based on Pydantic, as <abbr title="Object-Relational Mapper">ORM</abbr>s, <abbr title="Object-Document Mapper">ODM</abbr>s for databases.
Including external libraries also based on Pydantic, such as <abbr title="Object-Relational Mapper">ORM</abbr>s and <abbr title="Object-Document Mapper">ODM</abbr>s for databases.
This also means that in many cases you can pass the same object you get from a request **directly to the database**, as everything is validated automatically.
+1 -1
View File
@@ -26,7 +26,7 @@ You can follow **FastAPI** online in several places:
You can "star" FastAPI in GitHub (clicking the star button at the top right): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). ⭐️
By adding a star, other users will be able to find it more easily and see that it has been already useful for others.
By adding a star, other users will be able to find it more easily and see that it has already been useful for others.
## Watch the GitHub repository for releases { #watch-the-github-repository-for-releases }
+1 -1
View File
@@ -67,4 +67,4 @@ presets: [
These are **JavaScript** objects, not strings, so you can't pass them from Python code directly.
If you need to use JavaScript-only configurations like those, you can use one of the methods above. Override all the Swagger UI *path operation* and manually write any JavaScript you need.
If you need to use JavaScript-only configurations like those, you can use one of the methods above. Override the whole Swagger UI *path operation* and manually write any JavaScript you need.
@@ -94,7 +94,7 @@ All we need to do is handle the request inside a `try`/`except` block:
{* ../../docs_src/custom_request_and_route/tutorial002_an_py310.py hl[14,16] *}
If an exception occurs, the`Request` instance will still be in scope, so we can read and make use of the request body when handling the error:
If an exception occurs, the `Request` instance will still be in scope, so we can read and make use of the request body when handling the error:
{* ../../docs_src/custom_request_and_route/tutorial002_an_py310.py hl[17:19] *}
+9 -1
View File
@@ -25,7 +25,15 @@ And that function `get_openapi()` receives as parameters:
* `openapi_version`: The version of the OpenAPI specification used. By default, the latest: `3.1.0`.
* `summary`: A short summary of the API.
* `description`: The description of your API, this can include markdown and will be shown in the docs.
* `routes`: A list of routes, these are each of the registered *path operations*. They are taken from `app.routes`.
* `routes`: The routes from the application, taken from `app.routes`. FastAPI uses them to collect the registered *path operations*, including those from included routers.
/// tip | Technical Details
`app.routes` is a lower-level route tree. It can include route candidates that FastAPI uses internally for included routers, not only final `APIRoute` objects.
You can still pass `app.routes` to `get_openapi()`. FastAPI will traverse that route tree to collect the effective path operations.
///
/// note
+1 -1
View File
@@ -57,4 +57,4 @@ If you need GraphQL, I still would recommend you check out [Strawberry](https://
You can learn more about **GraphQL** in the [official GraphQL documentation](https://graphql.org/).
You can also read more about each those libraries described above in their links.
You can also read more about each of those libraries described above in their links.
@@ -8,6 +8,8 @@ FastAPI version 0.119.0 introduced partial support for Pydantic v1 from inside o
FastAPI 0.126.0 dropped support for Pydantic v1, while still supporting `pydantic.v1` for a little while.
FastAPI 0.128.0 dropped support for `pydantic.v1` as well, so the latest versions of FastAPI require Pydantic v2.
/// warning
The Pydantic team stopped support for Pydantic v1 for the latest versions of Python, starting with **Python 3.14**.
@@ -54,6 +56,16 @@ This means that you can install the latest version of Pydantic v2 and import and
### FastAPI support for Pydantic v1 in v2 { #fastapi-support-for-pydantic-v1-in-v2 }
/// warning
This FastAPI support for `pydantic.v1` models was added in **FastAPI 0.119.0** and removed in **FastAPI 0.128.0**. It was meant to be a temporary aid for the migration to Pydantic v2.
In current versions of FastAPI, using a `pydantic.v1` model in your app will raise an error.
The rest of this section describes the temporary support available only in those older versions.
///
Since FastAPI 0.119.0, there's also partial support for Pydantic v1 from inside of Pydantic v2, to facilitate the migration to v2.
So, you could upgrade Pydantic to the latest version 2, and change the imports to use the `pydantic.v1` submodule, and in many cases it would just work.
@@ -88,7 +100,7 @@ graph TB
style V2Field fill:#f9fff3
```
...but, you can have separated models using Pydantic v1 and v2 in the same app.
...but you can have separate models, some using Pydantic v1 and others using Pydantic v2, in the same app.
```mermaid
graph TB
@@ -122,6 +134,12 @@ If you need to use some of the FastAPI-specific tools for parameters like `Body`
### Migrate in steps { #migrate-in-steps }
/// warning
The gradual migration using both Pydantic v1 and v2 models in the same app described below only works in **FastAPI 0.119.0 to 0.127.x**. It was removed in **FastAPI 0.128.0**, the latest versions require **Pydantic v2** models.
///
/// tip
First try with `bump-pydantic`, if your tests pass and that works, then you're done in one command. ✨
@@ -130,6 +148,6 @@ First try with `bump-pydantic`, if your tests pass and that works, then you're d
If `bump-pydantic` doesn't work for your use case, you can use the support for both Pydantic v1 and v2 models in the same app to do the migration to Pydantic v2 gradually.
You could fist upgrade Pydantic to use the latest version 2, and change the imports to use `pydantic.v1` for all your models.
You could first upgrade Pydantic to use the latest version 2, and change the imports to use `pydantic.v1` for all your models.
Then, you can start migrating your models from Pydantic v1 to v2 in groups, in gradual steps. 🚶
@@ -46,7 +46,7 @@ If you interact with the docs and check the response, even though the code didn'
This means that it will **always have a value**, it's just that sometimes the value could be `None` (or `null` in JSON).
That means that, clients using your API don't have to check if the value exists or not, they can **assume the field will always be there**, but just that in some cases it will have the default value of `None`.
That means that clients using your API don't have to check if the value exists or not, they can **assume the field will always be there**, but just that in some cases it will have the default value of `None`.
The way to describe this in OpenAPI, is to mark that field as **required**, because it will always be there.
+16
View File
@@ -0,0 +1,16 @@
<svg width="240" height="100" viewBox="0 0 240 100" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="240" height="100" fill="#0B1020"/>
<g transform="translate(22.1 35.15) scale(1.1)">
<path d="M16.7799 0.19017C23.9999 0.19017 29.85 6.19016 29.85 13.5902C29.85 20.9902 23.9999 26.9902 16.7799 26.9902V0.180176V0.19017Z" fill="#F66135"/>
<path d="M7.52991 0C14.4399 2.13 18.3599 9.61 16.2799 16.7C14.1999 23.79 6.91 27.8 0 25.67L7.52991 0Z" fill="#F66135"/>
<path d="M45.0299 20.8301C46.9999 20.8301 48.3899 19.8401 48.3899 17.6901C48.3899 15.5401 46.7599 14.6101 44.9099 14.6101H41.46V20.8301H45.0299ZM44.9399 11.5301C46.7799 11.5301 47.9299 10.3801 47.9299 8.70007C47.9299 7.02007 46.75 6.00008 45 6.00008H41.46V11.5301H44.9399ZM45.4199 2.58008C49.5299 2.58008 51.9199 5.03008 51.9199 8.30008C51.9199 10.2901 50.9499 11.9101 49.4399 12.8101V13.0001C50.8299 13.5901 52.62 15.1401 52.62 18.0301C52.62 22.0401 49.5299 24.3401 46.0299 24.3401H37.59V2.58008H45.4299H45.4199Z" fill="white"/>
<path d="M66.7799 16.1998C66.7799 13.1198 64.96 11.2598 62.48 11.2598C60 11.2598 58.24 13.3098 58.24 16.1998C58.24 19.0898 59.96 21.1098 62.5 21.1098C65.04 21.1098 66.7599 18.9298 66.7599 16.1998M54.25 16.2598C54.25 11.1298 57.28 7.58984 61.63 7.58984C64.38 7.58984 65.92 9.26985 66.47 10.1098H66.6799V7.99985H70.61V24.3499H66.74V22.2699H66.5299C66.0799 22.9499 64.65 24.7598 61.75 24.7598C57.3 24.7598 54.25 21.3398 54.25 16.2798V16.2598Z" fill="white"/>
<path d="M73.8899 7.99013H77.8199V24.3401H73.8899V7.99013ZM73.4299 3.45012C73.4299 2.05012 74.43 1.12012 75.85 1.12012C77.27 1.12012 78.2699 2.05012 78.2699 3.45012C78.2699 4.85012 77.27 5.81012 75.85 5.81012C74.43 5.81012 73.4299 4.91012 73.4299 3.45012Z" fill="white"/>
<path d="M81.08 7.99017H84.7999V10.6602H85.0399C85.5599 9.39017 87.01 7.93018 89.21 7.93018H90.6599V11.7802H89.0299C86.5199 11.7802 85.0099 13.6802 85.0099 16.6002V24.3402H81.08V7.99017Z" fill="white"/>
<path d="M103.92 14.4899C103.74 12.2799 102.08 10.8199 99.7799 10.8199C97.4799 10.8199 95.8799 12.4399 95.6399 14.4899H103.93H103.92ZM91.7599 16.2598C91.7599 11.0998 95.1199 7.58984 99.7799 7.58984C104.89 7.58984 107.67 11.4799 107.67 16.0699V17.3499H95.5699C95.6899 19.8399 97.3499 21.5098 99.8999 21.5098C101.84 21.5098 103.32 20.5799 103.86 19.2399H107.52C106.73 22.5699 103.89 24.7399 99.7799 24.7399C95.0899 24.7399 91.7599 21.1298 91.7599 16.2598Z" fill="white"/>
<path d="M109.49 19.4299H113.12C113.27 20.8299 114.36 21.5699 116.15 21.5699C117.94 21.5699 118.99 20.7598 118.99 19.6098C118.99 16.1298 109.86 19.4198 109.86 12.5898C109.86 9.81984 112.19 7.58984 116.12 7.58984C119.57 7.58984 122.14 9.38985 122.38 12.6599H118.9C118.72 11.4799 117.81 10.6998 116.09 10.6998C114.49 10.6998 113.46 11.4098 113.46 12.4698C113.46 15.5798 122.81 12.3198 122.81 19.3998C122.81 22.5098 120.36 24.7498 116.1 24.7498C111.84 24.7498 109.66 22.6698 109.51 19.4398" fill="white"/>
<path d="M132.8 20.7301C136.52 20.7301 139.58 18.4901 139.58 13.3901C139.58 8.29008 136.55 6.18008 132.8 6.18008H129.84V20.7301H132.8ZM125.82 2.58008H132.96C139.71 2.58008 143.76 7.05007 143.76 13.4001C143.76 20.1401 139.71 24.3401 132.96 24.3401H125.82V2.58008Z" fill="white"/>
<path d="M157.7 14.4899C157.52 12.2799 155.86 10.8199 153.56 10.8199C151.26 10.8199 149.66 12.4399 149.42 14.4899H157.71H157.7ZM145.54 16.2598C145.54 11.0998 148.9 7.58984 153.56 7.58984C158.67 7.58984 161.45 11.4799 161.45 16.0699V17.3499H149.35C149.47 19.8399 151.13 21.5098 153.68 21.5098C155.62 21.5098 157.1 20.5799 157.64 19.2399H161.3C160.51 22.5699 157.67 24.7399 153.56 24.7399C148.87 24.7399 145.54 21.1298 145.54 16.2598Z" fill="white"/>
<path d="M161.9 7.99023H166.02L169.8 19.5202H170.04L173.79 7.99023H177.99L172.16 24.3402H167.71L161.9 7.99023Z" fill="white"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

+3 -3
View File
@@ -477,13 +477,13 @@ For a more complete example including more features, see the <a href="https://fa
**Spoiler alert**: the tutorial - user guide includes:
* Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**.
* How to set **validation constraints** as `maximum_length` or `regex`.
* Declaration of **parameters** from other different places such as: **headers**, **cookies**, **form fields** and **files**.
* How to set **validation constraints** such as `maximum_length` or `regex`.
* A very powerful and easy to use **<dfn title="also known as components, resources, providers, services, injectables">Dependency Injection</dfn>** system.
* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.
* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).
* **GraphQL** integration with [Strawberry](https://strawberry.rocks) and other libraries.
* Many extra features (thanks to Starlette) as:
* Many extra features (thanks to Starlette) such as:
* **WebSockets**
* extremely easy tests based on HTTPX and `pytest`
* **CORS**
+2 -2
View File
@@ -1,8 +1,8 @@
# Full Stack FastAPI Template { #full-stack-fastapi-template }
Templates, while typically come with a specific setup, are designed to be flexible and customizable. This allows you to modify and adapt them to your project's requirements, making them an excellent starting point. 🏁
Templates, while they typically come with a specific setup, are designed to be flexible and customizable. This allows you to modify and adapt them to your project's requirements, making them an excellent starting point. 🏁
You can use this template to get started, as it includes a lot of the initial set up, security, database and some API endpoints already done for you.
You can use this template to get started, as it includes a lot of the initial setup, security, database and some API endpoints already done for you.
GitHub Repository: [Full Stack FastAPI Template](https://github.com/tiangolo/full-stack-fastapi-template)
+3 -3
View File
@@ -2,7 +2,7 @@
Python has support for optional "type hints" (also called "type annotations").
These **"type hints"** or annotations are a special syntax that allow declaring the <dfn title="for example: str, int, float, bool">type</dfn> of a variable.
These **"type hints"** or annotations are a special syntax that allows declaring the <dfn title="for example: str, int, float, bool">type</dfn> of a variable.
By declaring types for your variables, editors and tools can give you better support.
@@ -44,7 +44,7 @@ It's a very simple program.
But now imagine that you were writing it from scratch.
At some point you would have started the definition of the function, you had the parameters ready...
At some point you start defining the function, and you have the parameters ready...
But then you have to call "that method that converts the first letter to upper case".
@@ -80,7 +80,7 @@ Those are the "type hints":
{* ../../docs_src/python_types/tutorial002_py310.py hl[1] *}
That is not the same as declaring default values like would be with:
That is not the same as declaring default values like it would be with:
```Python
first_name="john", last_name="doe"
+1
View File
@@ -13,6 +13,7 @@ from fastapi import APIRouter
members:
- websocket
- include_router
- frontend
- get
- put
- post
+1
View File
@@ -18,6 +18,7 @@ from fastapi import FastAPI
- openapi
- websocket
- include_router
- frontend
- get
- put
- post
+1 -1
View File
@@ -16,7 +16,7 @@ For example:
* 403: `status.HTTP_403_FORBIDDEN`
* etc.
It can be convenient to quickly access HTTP (and WebSocket) status codes in your app, using autocompletion for the name without having to remember the integer status codes by memory.
It can be convenient to quickly access HTTP (and WebSocket) status codes in your app, using autocompletion for the name without having to memorize the integer status codes.
Read more about it in the [FastAPI docs about Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
+2 -2
View File
@@ -50,7 +50,7 @@ When you want to define dependencies that should be compatible with both HTTP an
Additional classes for handling WebSockets.
Provided directly by Starlette, but you can import it from `fastapi`:
Provided directly by Starlette, but you can import them from `fastapi`:
```python
from fastapi.websockets import WebSocketDisconnect, WebSocketState
@@ -60,7 +60,7 @@ from fastapi.websockets import WebSocketDisconnect, WebSocketState
When a client disconnects, a `WebSocketDisconnect` exception is raised, you can catch it.
You can import it directly form `fastapi`:
You can import it directly from `fastapi`:
```python
from fastapi import WebSocketDisconnect
+225 -15
View File
@@ -7,8 +7,217 @@ hide:
## Latest Changes
### Translations
* 🌐 Update translations for hi (add-missing). PR [#15797](https://github.com/fastapi/fastapi/pull/15797) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update `llm-prompt.md` for Hindi. PR [#15810](https://github.com/fastapi/fastapi/pull/15810) by [@YuriiMotov](https://github.com/YuriiMotov).
* 🌐 Fix language-specific translation prompt for Russian language. PR [#15924](https://github.com/fastapi/fastapi/pull/15924) by [@YuriiMotov](https://github.com/YuriiMotov).
### Internal
* ⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR [#15950](https://github.com/fastapi/fastapi/pull/15950) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⬆ Bump the python-packages group with 8 updates. PR [#15952](https://github.com/fastapi/fastapi/pull/15952) by [@dependabot[bot]](https://github.com/apps/dependabot).
* 🔧 Update sponsors: add TutorCruncher. PR [#15947](https://github.com/fastapi/fastapi/pull/15947) by [@tiangolo](https://github.com/tiangolo).
* 👷 Fix notify translations checkout target. PR [#15933](https://github.com/fastapi/fastapi/pull/15933) by [@tiangolo](https://github.com/tiangolo).
* 👷 Fix latest-changes checkout target. PR [#15932](https://github.com/fastapi/fastapi/pull/15932) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Update sponsors: remove RapidProxy. PR [#15929](https://github.com/fastapi/fastapi/pull/15929) by [@tiangolo](https://github.com/tiangolo).
* ⬆️ Update issue-manager to 0.8.1. PR [#15928](https://github.com/fastapi/fastapi/pull/15928) by [@tiangolo](https://github.com/tiangolo).
* ⬆️ Update latest-changes to 0.6.1. PR [#15926](https://github.com/fastapi/fastapi/pull/15926) by [@tiangolo](https://github.com/tiangolo).
## 0.139.0 (2026-07-01)
### Features
* ✨ Support dependencies in `app.frontend()`, e.g. for automatic cookie authentication for the frontend. PR [#15908](https://github.com/fastapi/fastapi/pull/15908) by [@tiangolo](https://github.com/tiangolo).
### Translations
* 🌐 Update translations for fr (update-outdated). PR [#15897](https://github.com/fastapi/fastapi/pull/15897) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for ja (update-outdated). PR [#15895](https://github.com/fastapi/fastapi/pull/15895) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for zh-hant (update-outdated). PR [#15896](https://github.com/fastapi/fastapi/pull/15896) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for de (update-outdated). PR [#15899](https://github.com/fastapi/fastapi/pull/15899) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for es (update-outdated). PR [#15892](https://github.com/fastapi/fastapi/pull/15892) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for tr (update-outdated). PR [#15891](https://github.com/fastapi/fastapi/pull/15891) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for pt (update-outdated). PR [#15893](https://github.com/fastapi/fastapi/pull/15893) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for zh (update-outdated). PR [#15898](https://github.com/fastapi/fastapi/pull/15898) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for uk (update-outdated). PR [#15900](https://github.com/fastapi/fastapi/pull/15900) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for ko (update-outdated). PR [#15890](https://github.com/fastapi/fastapi/pull/15890) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for ru (update-outdated). PR [#15894](https://github.com/fastapi/fastapi/pull/15894) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for ko (add-missing). PR [#15888](https://github.com/fastapi/fastapi/pull/15888) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for es (add-missing). PR [#15880](https://github.com/fastapi/fastapi/pull/15880) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for zh-hant (add-missing). PR [#15889](https://github.com/fastapi/fastapi/pull/15889) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for pt (add-missing). PR [#15883](https://github.com/fastapi/fastapi/pull/15883) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for zh (add-missing). PR [#15885](https://github.com/fastapi/fastapi/pull/15885) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for ja (add-missing). PR [#15882](https://github.com/fastapi/fastapi/pull/15882) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for tr (add-missing). PR [#15887](https://github.com/fastapi/fastapi/pull/15887) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for uk (add-missing). PR [#15886](https://github.com/fastapi/fastapi/pull/15886) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for fr (add-missing). PR [#15881](https://github.com/fastapi/fastapi/pull/15881) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for de (add-missing). PR [#15884](https://github.com/fastapi/fastapi/pull/15884) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for ru (add-missing). PR [#15879](https://github.com/fastapi/fastapi/pull/15879) by [@tiangolo](https://github.com/tiangolo).
### Internal
* 👥 Update FastAPI People - Experts. PR [#15909](https://github.com/fastapi/fastapi/pull/15909) by [@tiangolo](https://github.com/tiangolo).
* 👥 Update FastAPI GitHub topic repositories. PR [#15906](https://github.com/fastapi/fastapi/pull/15906) by [@tiangolo](https://github.com/tiangolo).
* 👥 Update FastAPI People - Contributors and Translators. PR [#15878](https://github.com/fastapi/fastapi/pull/15878) by [@tiangolo](https://github.com/tiangolo).
* 👷 Remove not needed `allow-unsafe-pr-checkout: true`. PR [#15876](https://github.com/fastapi/fastapi/pull/15876) by [@YuriiMotov](https://github.com/YuriiMotov).
* ⬆ Bump the github-actions group with 5 updates. PR [#15872](https://github.com/fastapi/fastapi/pull/15872) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⬆ Bump the python-packages group across 1 directory with 10 updates. PR [#15870](https://github.com/fastapi/fastapi/pull/15870) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⬆ Bump CodSpeedHQ/action from 4.17.0 to 4.17.5 in the github-actions group. PR [#15826](https://github.com/fastapi/fastapi/pull/15826) by [@dependabot[bot]](https://github.com/apps/dependabot).
## 0.138.2 (2026-06-29)
### Refactors
* ♻️ Make `app.frontend()` return 404 for methods other than `GET` or `HEAD` with no static file matches. PR [#15863](https://github.com/fastapi/fastapi/pull/15863) by [@tiangolo](https://github.com/tiangolo).
### Internal
* 🔧 Update sponsors: remove Stainless. PR [#15862](https://github.com/fastapi/fastapi/pull/15862) by [@tiangolo](https://github.com/tiangolo).
* ♻️ Refactor how sponsors data is handled for banners. PR [#15852](https://github.com/fastapi/fastapi/pull/15852) by [@tiangolo](https://github.com/tiangolo).
## 0.138.1 (2026-06-25)
### Refactors
* ♻️ Refactor Library Skills, make info easier to find for agents. PR [#15841](https://github.com/fastapi/fastapi/pull/15841) by [@tiangolo](https://github.com/tiangolo).
### Internal
* 👷 Simplify pull request workflow triggers. PR [#15836](https://github.com/fastapi/fastapi/pull/15836) by [@tiangolo](https://github.com/tiangolo).
* 👷 Update issue-manager to 0.7.1. PR [#15833](https://github.com/fastapi/fastapi/pull/15833) by [@tiangolo](https://github.com/tiangolo).
* ⬆️ Update issue-manager to 0.7.0. PR [#15831](https://github.com/fastapi/fastapi/pull/15831) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Update sponsors: Add TestMu again. PR [#15830](https://github.com/fastapi/fastapi/pull/15830) by [@tiangolo](https://github.com/tiangolo).
* 🔒️ Update zizmor workflow security checks. PR [#15820](https://github.com/fastapi/fastapi/pull/15820) by [@tiangolo](https://github.com/tiangolo).
* ⬆ Bump pydantic-settings from 2.14.1 to 2.14.2. PR [#15799](https://github.com/fastapi/fastapi/pull/15799) by [@dependabot[bot]](https://github.com/apps/dependabot).
## 0.138.0 (2026-06-20)
### Features
* ✨ Add support for `app.frontend("/", directory="dist")` and `router.frontend("/", directory="dist")`. PR [#15800](https://github.com/fastapi/fastapi/pull/15800) by [@tiangolo](https://github.com/tiangolo).
* Read the docs: [Frontend](https://fastapi.tiangolo.com/tutorial/frontend/).
### Docs
* 📝 Fix typo in release notes. PR [#15807](https://github.com/fastapi/fastapi/pull/15807) by [@tiangolo](https://github.com/tiangolo).
* 📝 Add `app.frontend()` instructions to Agent Library Skill. PR [#15805](https://github.com/fastapi/fastapi/pull/15805) by [@tiangolo](https://github.com/tiangolo).
* 📝 Update release notes link. PR [#15802](https://github.com/fastapi/fastapi/pull/15802) by [@tiangolo](https://github.com/tiangolo).
* ✏️ Update white space characters in bigger apps. PR [#15801](https://github.com/fastapi/fastapi/pull/15801) by [@tiangolo](https://github.com/tiangolo).
* ✏️ Fix grammar, typos, and broken links in docs. PR [#15694](https://github.com/fastapi/fastapi/pull/15694) by [@YuriiMotov](https://github.com/YuriiMotov).
### Translations
* 🌐 Enable Hindi docs translations. PR [#15554](https://github.com/fastapi/fastapi/pull/15554) by [@YuriiMotov](https://github.com/YuriiMotov).
### Internal
* 🐛 Fix failing test, update format for raised errors. PR [#15804](https://github.com/fastapi/fastapi/pull/15804) by [@tiangolo](https://github.com/tiangolo).
* 👷 Fix test-alls-green. PR [#15803](https://github.com/fastapi/fastapi/pull/15803) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Enable checking `release-notes.md` for typos. PR [#15796](https://github.com/fastapi/fastapi/pull/15796) by [@YuriiMotov](https://github.com/YuriiMotov).
* 📝 Tweak wording about deploying to FastAPI Cloud. PR [#15793](https://github.com/fastapi/fastapi/pull/15793) by [@tiangolo](https://github.com/tiangolo).
* 🔨 Use `gpt-5.5` model in `translate.py`, specify `-chat` to avoid warnings. PR [#15792](https://github.com/fastapi/fastapi/pull/15792) by [@YuriiMotov](https://github.com/YuriiMotov).
## 0.137.2 (2026-06-18)
### Features
* ✨ Add `iter_route_contexts()` for advanced use cases that used to use `router.routes` (e.g. Jupyverse). PR [#15785](https://github.com/fastapi/fastapi/pull/15785) by [@tiangolo](https://github.com/tiangolo).
### Translations
* 🌐 Fix broken Markdown in Korean custom response docs. PR [#15774](https://github.com/fastapi/fastapi/pull/15774) by [@kooqooo](https://github.com/kooqooo).
* 🌐 Update translations for fr (update-outdated). PR [#15761](https://github.com/fastapi/fastapi/pull/15761) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for zh-hant (update-outdated). PR [#15760](https://github.com/fastapi/fastapi/pull/15760) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for de (update-outdated). PR [#15759](https://github.com/fastapi/fastapi/pull/15759) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for ko (update-outdated). PR [#15757](https://github.com/fastapi/fastapi/pull/15757) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for uk (update-outdated). PR [#15756](https://github.com/fastapi/fastapi/pull/15756) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for zh (update-outdated). PR [#15755](https://github.com/fastapi/fastapi/pull/15755) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for tr (update-outdated). PR [#15754](https://github.com/fastapi/fastapi/pull/15754) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for pt (update-outdated). PR [#15753](https://github.com/fastapi/fastapi/pull/15753) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for es (update-outdated). PR [#15752](https://github.com/fastapi/fastapi/pull/15752) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for ja (update-outdated). PR [#15751](https://github.com/fastapi/fastapi/pull/15751) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Update translations for ru (update-outdated). PR [#15758](https://github.com/fastapi/fastapi/pull/15758) by [@tiangolo](https://github.com/tiangolo).
### Internal
* 🔧 Update sponsors: add BairesDev. PR [#15787](https://github.com/fastapi/fastapi/pull/15787) by [@tiangolo](https://github.com/tiangolo).
* 🔨 Update sponsors script to simplify previews. PR [#15786](https://github.com/fastapi/fastapi/pull/15786) by [@tiangolo](https://github.com/tiangolo).
* ⬆ Bump the python-packages group across 1 directory with 7 updates. PR [#15777](https://github.com/fastapi/fastapi/pull/15777) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⬆ Bump cryptography from 46.0.7 to 48.0.1. PR [#15779](https://github.com/fastapi/fastapi/pull/15779) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⬆ Bump aiohttp from 3.14.0 to 3.14.1. PR [#15781](https://github.com/fastapi/fastapi/pull/15781) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⬆ Bump starlette from 1.2.1 to 1.3.1. PR [#15780](https://github.com/fastapi/fastapi/pull/15780) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⬆ Bump astral-sh/setup-uv from 8.1.0 to 8.2.0 in the github-actions group. PR [#15776](https://github.com/fastapi/fastapi/pull/15776) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⬆ Bump https://github.com/crate-ci/typos from v1.47.1 to v1.47.2 in the pre-commit group. PR [#15775](https://github.com/fastapi/fastapi/pull/15775) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⬆ Bump python-multipart from 0.0.30 to 0.0.32. PR [#15778](https://github.com/fastapi/fastapi/pull/15778) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⏪️ Revert removing scripts, only remove `coverage.sh`. PR [#15772](https://github.com/fastapi/fastapi/pull/15772) by [@tiangolo](https://github.com/tiangolo).
* 🔥 Remove unused scripts. PR [#15771](https://github.com/fastapi/fastapi/pull/15771) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Add ty configs to check docs sources. PR [#15770](https://github.com/fastapi/fastapi/pull/15770) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Add ty configs to check docs sources. PR [#15769](https://github.com/fastapi/fastapi/pull/15769) by [@tiangolo](https://github.com/tiangolo).
## 0.137.1 (2026-06-15)
### Fixes
* 🚨 Fix typing checks for APIRoute. PR [#15765](https://github.com/fastapi/fastapi/pull/15765) by [@tiangolo](https://github.com/tiangolo).
* 🐛 Fix bug, allow empty path in path operation in prefixless router. PR [#15763](https://github.com/fastapi/fastapi/pull/15763) by [@tiangolo](https://github.com/tiangolo).
## 0.137.0 (2026-06-14)
### Breaking Changes
* ♻️ Refactor internals to preserve `APIRouter` and `APIRoute` instances. PR [#15745](https://github.com/fastapi/fastapi/pull/15745) by [@tiangolo](https://github.com/tiangolo).
Unblocks ✨ SO MANY THINGS ✨
Before this, `router.include_router(other_router)` would take each path operation from `other_router` and "clone" it, or recreate it from scratch.
This would mean that in the end there was only one top level router, part of the app.
The way it is structured here is that there are a few additional classes to handle intermediate metadata for router and route inclusion. That way the information of "router X includes Y and Y includes Z" is stored somewhere, without affecting (recreating / cloning) the final route.
#### Non Objectives
Dependencies for 404: previously I intended to support dependencies that would be executed even for 404, but that would conflict with the fact that a router could _not_ find a match, but the next router _did_ find a match. Executing dependencies in the router that did not find a match would not make sense, they could consume the request, body, etc. This original idea was discarded.
#### Specific Breaking Changes
Now `router.routes` is no longer a plain list of `APIRoute` objects, it can contain these intermediate objects that can contain additional routers, forming a tree.
Any logic that depended on iterating on the `router.routes` directly would be affected, that logic cannot expect to be able to extract data from a plain list of routes, as it's no longer a plain list but a tree.
Additionally, any logic that iterated on `router.routes` to modify them would now also see these new objects, and would not see all the routes in the app.
`router.routes` should be considered an internal implementation detail, only passed around to the FastAPI functions that need it.
#### Features
* Adding routes (path operations) after a router is included now works, they are reflected as they are not copied.
* Including `subrouter` in `mainrouter` can be done before adding routes (path operations) to `subrouter`, because now the entire object is stored instead of copying the routes.
* As routes are not copied, in some cases that might save some memory.
#### Alpha Features
This is not documented yet, so it's not officially supported yet and could change in the future.
But, as `APIRoute` and `APIRouter` instances are now preserved, they could be customized.
`APIRouter` has two new methods, `.matches()` and `.handle()`, counterpart to the existing ones in `APIRoute`. With this a router could customize how it matches and handles requests. For example, it could match only requests that include some specific header, for example for handling versions in headers.
Still, for now, consider this very experimental and potentially changing and breaking in the future.
#### Future Features Enabled
* Custom `APIRoute` subclasses (undocumented, but already works as described above)
* Custom `APIRouter` subclasses (undocumented, but already works as described above)
* Dependencies per router
* Exception handlers per router
* Middleware per router
* Other features planned
### Docs
* 📝 Update release notes. PR [#15747](https://github.com/fastapi/fastapi/pull/15747) by [@tiangolo](https://github.com/tiangolo).
* 📝 Update FastAPI Cloud deployment instructions. PR [#15724](https://github.com/fastapi/fastapi/pull/15724) by [@alejsdev](https://github.com/alejsdev).
* ✏️ Use `Annotated` in inline example in `docs/en/docs/tutorial/body-multiple-params.md`. PR [#15591](https://github.com/fastapi/fastapi/pull/15591) by [@TheArchons](https://github.com/TheArchons).
* 📝 Remove "NGINX Unit" from the list of ASGI-servers in docs. PR [#15475](https://github.com/fastapi/fastapi/pull/15475) by [@angryfoxx](https://github.com/angryfoxx).
@@ -30,6 +239,7 @@ hide:
### Internal
* 🔧 Update sponsors: remove TalorData. PR [#15744](https://github.com/fastapi/fastapi/pull/15744) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Update sponsors: remove ExoFlare. PR [#15736](https://github.com/fastapi/fastapi/pull/15736) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Update sponsors: remove InterviewPal. PR [#15735](https://github.com/fastapi/fastapi/pull/15735) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Update sponsors: remove Liblab. PR [#15731](https://github.com/fastapi/fastapi/pull/15731) by [@tiangolo](https://github.com/tiangolo).
@@ -305,7 +515,7 @@ hide:
### Features
* ✨ Add support for streaming JSON Lines and binary data with `yield`. PR [#15022](https://github.com/fastapi/fastapi/pull/15022) by [@tiangolo](https://github.com/tiangolo).
* This also upgrades Starlette from `>=0.40.0` to `>=0.46.0`, as it's needed to properly unrwap and re-raise exceptions from exception groups.
* This also upgrades Starlette from `>=0.40.0` to `>=0.46.0`, as it's needed to properly unwrap and re-raise exceptions from exception groups.
* New docs: [Stream JSON Lines](https://fastapi.tiangolo.com/tutorial/stream-json-lines/).
* And new docs: [Stream Data](https://fastapi.tiangolo.com/advanced/stream-data/).
@@ -1328,7 +1538,7 @@ You can read more about it in the docs for [Advanced Dependencies - Dependencies
* 🌐 Add Persian translation for `docs/fa/docs/python-types.md`. PR [#13524](https://github.com/fastapi/fastapi/pull/13524) by [@Mohammad222PR](https://github.com/Mohammad222PR).
* 🌐 Update Portuguese Translation for `docs/pt/docs/project-generation.md`. PR [#13875](https://github.com/fastapi/fastapi/pull/13875) by [@EdmilsonRodrigues](https://github.com/EdmilsonRodrigues).
* 🌐 Add Persian translation for `docs/fa/docs/async.md`. PR [#13541](https://github.com/fastapi/fastapi/pull/13541) by [@Mohammad222PR](https://github.com/Mohammad222PR).
* 🌐 Add Bangali translation for `docs/bn/about/index.md`. PR [#13882](https://github.com/fastapi/fastapi/pull/13882) by [@sajjadrahman56](https://github.com/sajjadrahman56).
* 🌐 Add Bengali translation for `docs/bn/about/index.md`. PR [#13882](https://github.com/fastapi/fastapi/pull/13882) by [@sajjadrahman56](https://github.com/sajjadrahman56).
### Internal
@@ -2170,7 +2380,7 @@ If you want to install `fastapi` with the standard dependencies but without `fas
* Add docs dependency: markdown-include-variants. PR [#12399](https://github.com/fastapi/fastapi/pull/12399) by [@tiangolo](https://github.com/tiangolo).
* 📝 Fix extra mdx-base-path paths. PR [#12397](https://github.com/fastapi/fastapi/pull/12397) by [@tiangolo](https://github.com/tiangolo).
* 👷 Tweak labeler to not override custom labels. PR [#12398](https://github.com/fastapi/fastapi/pull/12398) by [@tiangolo](https://github.com/tiangolo).
* 👷 Update worfkow deploy-docs-notify URL. PR [#12392](https://github.com/fastapi/fastapi/pull/12392) by [@tiangolo](https://github.com/tiangolo).
* 👷 Update workflow deploy-docs-notify URL. PR [#12392](https://github.com/fastapi/fastapi/pull/12392) by [@tiangolo](https://github.com/tiangolo).
* 👷 Update Cloudflare GitHub Action. PR [#12387](https://github.com/fastapi/fastapi/pull/12387) by [@tiangolo](https://github.com/tiangolo).
* ⬆ Bump pypa/gh-action-pypi-publish from 1.10.1 to 1.10.3. PR [#12386](https://github.com/fastapi/fastapi/pull/12386) by [@dependabot[bot]](https://github.com/apps/dependabot).
* ⬆ Bump mkdocstrings[python] from 0.25.1 to 0.26.1. PR [#12371](https://github.com/fastapi/fastapi/pull/12371) by [@dependabot[bot]](https://github.com/apps/dependabot).
@@ -2686,7 +2896,7 @@ Discussed here: [#11522](https://github.com/fastapi/fastapi/pull/11522) and here
* 📝 Update `security/first-steps.md`. PR [#11673](https://github.com/tiangolo/fastapi/pull/11673) by [@alejsdev](https://github.com/alejsdev).
* 📝 Update note in `path-params-numeric-validations.md`. PR [#11672](https://github.com/tiangolo/fastapi/pull/11672) by [@alejsdev](https://github.com/alejsdev).
* 📝 Tweak intro docs about `Annotated` and `Query()` params. PR [#11664](https://github.com/tiangolo/fastapi/pull/11664) by [@tiangolo](https://github.com/tiangolo).
* 📝 Update JWT auth documentation to use PyJWT instead of pyhon-jose. PR [#11589](https://github.com/tiangolo/fastapi/pull/11589) by [@estebanx64](https://github.com/estebanx64).
* 📝 Update JWT auth documentation to use PyJWT instead of python-jose. PR [#11589](https://github.com/tiangolo/fastapi/pull/11589) by [@estebanx64](https://github.com/estebanx64).
* 📝 Update docs. PR [#11603](https://github.com/tiangolo/fastapi/pull/11603) by [@alejsdev](https://github.com/alejsdev).
* ✏️ Fix typo: convert every 're-use' to 'reuse'.. PR [#11598](https://github.com/tiangolo/fastapi/pull/11598) by [@hasansezertasan](https://github.com/hasansezertasan).
* ✏️ Fix typo in `fastapi/applications.py`. PR [#11593](https://github.com/tiangolo/fastapi/pull/11593) by [@petarmaric](https://github.com/petarmaric).
@@ -3125,7 +3335,7 @@ def my_dep():
### Security fixes
* ⬆️ Upgrade minimum version of `python-multipart` to `>=0.0.7` to fix a vulnerability when using form data with a ReDos attack. You can also simply upgrade `python-multipart`.
* ⬆️ Upgrade minimum version of `python-multipart` to `>=0.0.7` to fix a vulnerability when using form data with a ReDoS attack. You can also simply upgrade `python-multipart`.
Read more in the [advisory: Content-Type Header ReDoS](https://github.com/tiangolo/fastapi/security/advisories/GHSA-qf9m-vfgh-m389).
@@ -4633,7 +4843,7 @@ You hopefully updated to a supported version of Python a while ago. If you haven
### Fixes
* 🐛 Fix `RuntimeError` raised when `HTTPException` has a status code with no content. PR [#5365](https://github.com/tiangolo/fastapi/pull/5365) by [@iudeen](https://github.com/iudeen).
* 🐛 Fix empty response body when default `status_code` is empty but the a `Response` parameter with `response.status_code` is set. PR [#5360](https://github.com/tiangolo/fastapi/pull/5360) by [@tmeckel](https://github.com/tmeckel).
* 🐛 Fix empty response body when default `status_code` is empty but the `Response` parameter with `response.status_code` is set. PR [#5360](https://github.com/tiangolo/fastapi/pull/5360) by [@tmeckel](https://github.com/tmeckel).
### Docs
@@ -4995,7 +5205,7 @@ def main(
### Internal
* ♻ Refactor dict value extraction to minimize key lookups `fastapi/utils.py`. PR [#3139](https://github.com/tiangolo/fastapi/pull/3139) by [@ShahriyarR](https://github.com/ShahriyarR).
* ✅ Add tests for required nonable parameters and body fields. PR [#4907](https://github.com/tiangolo/fastapi/pull/4907) by [@tiangolo](https://github.com/tiangolo).
* ✅ Add tests for required `None`-able parameters and body fields. PR [#4907](https://github.com/tiangolo/fastapi/pull/4907) by [@tiangolo](https://github.com/tiangolo).
* 👷 Fix installing Material for MkDocs Insiders in CI. PR [#4897](https://github.com/tiangolo/fastapi/pull/4897) by [@tiangolo](https://github.com/tiangolo).
* 👷 Add pre-commit CI instead of custom GitHub Action. PR [#4896](https://github.com/tiangolo/fastapi/pull/4896) by [@tiangolo](https://github.com/tiangolo).
* 👷 Add pre-commit GitHub Action workflow. PR [#4895](https://github.com/tiangolo/fastapi/pull/4895) by [@tiangolo](https://github.com/tiangolo).
@@ -5388,7 +5598,7 @@ Soon there will be a new FastAPI release upgrading Starlette to take advantage o
### Internal
* ✨ Update GitHub Action: notify-translations, to avoid a race conditions. PR [#3989](https://github.com/tiangolo/fastapi/pull/3989) by [@tiangolo](https://github.com/tiangolo).
* ✨ Update GitHub Action: notify-translations, to avoid race conditions. PR [#3989](https://github.com/tiangolo/fastapi/pull/3989) by [@tiangolo](https://github.com/tiangolo).
* ⬆️ Upgrade development `autoflake`, supporting multi-line imports. PR [#3988](https://github.com/tiangolo/fastapi/pull/3988) by [@tiangolo](https://github.com/tiangolo).
* ⬆️ Increase dependency ranges for tests and docs: pytest-cov, pytest-asyncio, black, httpx, sqlalchemy, databases, mkdocs-markdownextradata-plugin. PR [#3987](https://github.com/tiangolo/fastapi/pull/3987) by [@tiangolo](https://github.com/tiangolo).
* 👥 Update FastAPI People. PR [#3986](https://github.com/tiangolo/fastapi/pull/3986) by [@github-actions[bot]](https://github.com/apps/github-actions).
@@ -5776,7 +5986,7 @@ router = APIRouter(prefix="/users", dependencies=[Depends(some_dependency)])
Most of these settings are now supported in `APIRouter`, which normally lives closer to the related code, so it is recommended to use `APIRouter` when possible.
But `include_router` is still useful to, for example, adding options (like `dependencies`, `prefix`, and `tags`) when including a third party router, or a generic router that is shared between several projects.
But `include_router` is still useful to, for example, add options (like `dependencies`, `prefix`, and `tags`) when including a third party router, or a generic router that is shared between several projects.
This PR allows setting the (mostly new) parameters (additionally to the already existing parameters):
@@ -5838,7 +6048,7 @@ Note: all the previous parameters are still there, so it's still possible to dec
* ✏️ Fix typo in Tutorial - Path Parameters. PR [#2231](https://github.com/tiangolo/fastapi/pull/2231) by [@mariacamilagl](https://github.com/mariacamilagl).
* ✏ Fix a stylistic error in docs. PR [#2206](https://github.com/tiangolo/fastapi/pull/2206) by [@ddobrinskiy](https://github.com/ddobrinskiy).
* ✏ Fix capitalizaiton typo in docs. PR [#2204](https://github.com/tiangolo/fastapi/pull/2204) by [@imba-tjd](https://github.com/imba-tjd).
* ✏ Fix capitalization typo in docs. PR [#2204](https://github.com/tiangolo/fastapi/pull/2204) by [@imba-tjd](https://github.com/imba-tjd).
* ✏ Fix typo in docs. PR [#2179](https://github.com/tiangolo/fastapi/pull/2179) by [@ammarasmro](https://github.com/ammarasmro).
* 📝 Update/fix links in docs to use HTTPS. PR [#2165](https://github.com/tiangolo/fastapi/pull/2165) by [@imba-tjd](https://github.com/imba-tjd).
* ✏ Fix typos and add rewording in docs. PR [#2159](https://github.com/tiangolo/fastapi/pull/2159) by [@nukopy](https://github.com/nukopy).
@@ -5966,7 +6176,7 @@ Note: all the previous parameters are still there, so it's still possible to dec
* Fix typo in docs for query parameters. PR [#1832](https://github.com/tiangolo/fastapi/pull/1832) by [@ycd](https://github.com/ycd).
* Add docs about [Async Tests](https://fastapi.tiangolo.com/advanced/async-tests/). PR [#1619](https://github.com/tiangolo/fastapi/pull/1619) by [@empicano](https://github.com/empicano).
* Raise an exception when using form data (`Form`, `File`) without having `python-multipart` installed.
* Up to now the application would run, and raise an exception only when receiving a request with form data, the new behavior, raising early, will prevent from deploying applications with broken dependencies.
* Up to now the application would run, and raise an exception only when receiving a request with form data, the new behavior, raising early, will prevent deploying applications with broken dependencies.
* It also detects if the correct package `python-multipart` is installed instead of the incorrect `multipart` (both importable as `multipart`).
* PR [#1851](https://github.com/tiangolo/fastapi/pull/1851) based on original PR [#1627](https://github.com/tiangolo/fastapi/pull/1627) by [@chrisngyn](https://github.com/chrisngyn), [@YKo20010](https://github.com/YKo20010), [@kx-chen](https://github.com/kx-chen).
* Re-enable Gitter releases bot. PR [#1831](https://github.com/tiangolo/fastapi/pull/1831).
@@ -6116,7 +6326,7 @@ Note: all the previous parameters are still there, so it's still possible to dec
* [Using FastAPI with Django](https://www.stavros.io/posts/fastapi-with-django/) by [Stavros Korokithakis](https://x.com/Stavros).
* [Introducing Dispatch](https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072) by [Netflix](https://netflixtechblog.com/).
* **Podcasts**:
* [Build The Next Generation Of Python Web Applications With FastAPI - Episode 259 - interview to Sebastían Ramírez (tiangolo)](https://www.pythonpodcast.com/fastapi-web-application-framework-episode-259/) by [Podcast.`__init__`](https://www.pythonpodcast.com/).
* [Build The Next Generation Of Python Web Applications With FastAPI - Episode 259 - interview to Sebastn Ramírez (tiangolo)](https://www.pythonpodcast.com/fastapi-web-application-framework-episode-259/) by [Podcast.`__init__`](https://www.pythonpodcast.com/).
* **Talks**:
* [PyConBY 2020: Serve ML models easily with FastAPI](https://www.youtube.com/watch?v=z9K5pwb0rt8) by [Sebastián Ramírez (tiangolo)](https://x.com/tiangolo).
* [[VIRTUAL] Py.Amsterdam's flying Software Circus: Intro to FastAPI](https://www.youtube.com/watch?v=PnpTY1f4k2U) by [Sebastián Ramírez (tiangolo)](https://x.com/tiangolo).
@@ -6131,7 +6341,7 @@ Note: all the previous parameters are still there, so it's still possible to dec
* Allow enums to allow them to have their own schemas in OpenAPI. To support [pydantic/pydantic#1432](https://github.com/pydantic/pydantic/pull/1432) in FastAPI. PR [#1461](https://github.com/tiangolo/fastapi/pull/1461).
* Add links for funding through [GitHub sponsors](https://github.com/sponsors/tiangolo). PR [#1425](https://github.com/tiangolo/fastapi/pull/1425).
* Update issue template for for questions. PR [#1344](https://github.com/tiangolo/fastapi/pull/1344) by [@retnikt](https://github.com/retnikt).
* Update issue template for questions. PR [#1344](https://github.com/tiangolo/fastapi/pull/1344) by [@retnikt](https://github.com/retnikt).
* Update warning about storing passwords in docs. PR [#1336](https://github.com/tiangolo/fastapi/pull/1336) by [@skorokithakis](https://github.com/skorokithakis).
* Fix typo. PR [#1326](https://github.com/tiangolo/fastapi/pull/1326) by [@chenl](https://github.com/chenl).
* Add translation to Portuguese for [Alternatives, Inspiration and Comparisons - Alternativas, Inspiração e Comparações](https://fastapi.tiangolo.com/pt/alternatives/). PR [#1325](https://github.com/tiangolo/fastapi/pull/1325) by [@Serrones](https://github.com/Serrones).
@@ -6522,7 +6732,7 @@ Note: all the previous parameters are still there, so it's still possible to dec
* When declaring a `response_model` it is used directly to generate the response content, from whatever was returned from the *path operation function*.
* Before this, the return content was first passed through `jsonable_encoder` to ensure it was a "jsonable" object, like a `dict`, instead of an arbitrary object with attributes (like an ORM model). That's why you should make sure to update your Pydantic models for objects with attributes to use `orm_mode = True`.
* If you don't have a `response_model`, the return object will still be passed through `jsonable_encoder` first.
* When a `response_model` is declared, the same `response_model` type declaration won't be used as is, it will be "cloned" to create an new one (a cloned Pydantic `Field` with all the submodels cloned as well).
* When a `response_model` is declared, the same `response_model` type declaration won't be used as is, it will be "cloned" to create a new one (a cloned Pydantic `Field` with all the submodels cloned as well).
* This avoids/fixes a potential security issue: as the returned object is passed directly to Pydantic, if the returned object was a subclass of the `response_model` (e.g. you return a `UserInDB` that inherits from `User` but contains extra fields, like `hashed_password`, and `User` is used in the `response_model`), it would still pass the validation (because `UserInDB` is a subclass of `User`) and the object would be returned as-is, including the `hashed_password`. To fix this, the declared `response_model` is cloned, if it is a Pydantic model class (or contains Pydantic model classes in it, e.g. in a `List[Item]`), the Pydantic model class(es) will be a different one (the "cloned" one). So, an object that is a subclass won't simply pass the validation and returned as-is, because it is no longer a sub-class of the cloned `response_model`. Instead, a new Pydantic model object will be created with the contents of the returned object. So, it will be a new object (made with the data from the returned one), and will be filtered by the cloned `response_model`, containing only the declared fields as normally.
* PR [#322](https://github.com/tiangolo/fastapi/pull/322).
@@ -6665,7 +6875,7 @@ Note: all the previous parameters are still there, so it's still possible to dec
* Add support for `dependencies` parameter:
* A parameter in *path operation decorators*, for dependencies that should be executed but the return value is not important or not used in the *path operation function*.
* A parameter in the `.include_router()` method of FastAPI applications and routers, to include dependencies that should be executed in each *path operation* in a router.
* This is useful, for example, to require authentication or permissions in specific group of *path operations*.
* This is useful, for example, to require authentication or permissions in a specific group of *path operations*.
* Different `dependencies` can be applied to different routers.
* These `dependencies` are run before the normal parameter dependencies. And normal dependencies are run too. They can be combined.
* Dependencies declared in a router are executed first, then the ones defined in *path operation decorators*, and then the ones declared in normal parameters. They are all combined and executed.
+2 -2
View File
@@ -16,10 +16,10 @@ PRs with suggestions to the language-specific LLM prompt require approval from a
Let's say that you want to request translations for a language that is not yet translated, not even some pages. For example, Latin.
* The first step would be for you to find other 2 people that would be willing to be reviewing translation PRs for that language with you.
* The first step would be for you to find 2 other people who would be willing to be reviewing translation PRs for that language with you.
* Once there are at least 3 people that would be willing to commit to help maintain that language, you can continue the next steps.
* Create a new discussion following the template.
* Tag the other 2 people that will help with the language, and ask them to confirm there they will help.
* Tag the other 2 people that will help with the language, and ask them to confirm in the comments that they will help.
Once there are several people in the discussion, the FastAPI team can evaluate it and can make it an official translation.
+28 -16
View File
@@ -17,16 +17,16 @@ Let's say you have a file structure like this:
```
.
├── app
   ├── __init__.py
   ├── main.py
   ├── dependencies.py
   └── routers
   │ ├── __init__.py
   │ ├── items.py
   │ └── users.py
   └── internal
   ├── __init__.py
   └── admin.py
├── __init__.py
├── main.py
├── dependencies.py
└── routers
│ ├── __init__.py
│ ├── items.py
│ └── users.py
└── internal
├── __init__.py
└── admin.py
```
/// tip
@@ -232,7 +232,7 @@ would mean:
But that file doesn't exist, our dependencies are in a file at `app/dependencies.py`.
Remember how our app/file structure looks like:
Remember what our app/file structure looks like:
<img src="/img/tutorial/bigger-applications/package.drawio.svg">
@@ -396,9 +396,9 @@ It will include all the routes from that router as part of it.
/// note | Technical Details
It will actually internally create a *path operation* for each *path operation* that was declared in the `APIRouter`.
FastAPI keeps the original `APIRouter` and its `APIRoute`s active when the router is included in the main application.
So, behind the scenes, it will actually work as if everything was the same single app.
That means custom `APIRouter` and `APIRoute` subclasses can still participate after the router is included.
///
@@ -406,7 +406,7 @@ So, behind the scenes, it will actually work as if everything was the same singl
You don't have to worry about performance when including routers.
This will take microseconds and will only happen at startup.
This is designed to be lightweight and to avoid adding overhead to each request.
So it won't affect performance. ⚡
@@ -461,7 +461,7 @@ The `APIRouter`s are not "mounted", they are not isolated from the rest of the a
This is because we want to include their *path operations* in the OpenAPI schema and the user interfaces.
As we cannot just isolate them and "mount" them independently of the rest, the *path operations* are "cloned" (re-created), not included directly.
FastAPI keeps the original routers and path operations active, and combines the router prefixes, dependencies, tags, responses, and other metadata when handling requests and generating OpenAPI.
///
@@ -532,4 +532,16 @@ The same way you can include an `APIRouter` in a `FastAPI` application, you can
router.include_router(other_router)
```
Make sure you do it before including `router` in the `FastAPI` app, so that the *path operations* from `other_router` are also included.
You can do this before or after including `router` in the `FastAPI` app. FastAPI will still include the *path operations* from `other_router` in routing and OpenAPI.
The same applies to *path operations* added later to the routers. They will be visible through the earlier inclusion too.
/// warning | Technical Details
Avoid directly mutating `router.routes` after including a router. FastAPI treats router inclusion as live, so the original router and its routes remain part of routing and OpenAPI generation.
Use documented APIs such as path operation decorators and `.include_router()` to add routes and routers.
Treat `router.routes` as a lower-level route tree that can contain route definitions and included routers, and avoid relying on it as a flat list of final path operations.
///
+1 -1
View File
@@ -96,7 +96,7 @@ Again, doing just that declaration, with **FastAPI** you get:
Apart from normal singular types like `str`, `int`, `float`, etc. you can use more complex singular types that inherit from `str`.
To see all the options you have, checkout [Pydantic's Type Overview](https://docs.pydantic.dev/latest/concepts/types/). You will see some examples in the next chapter.
To see all the options you have, check out [Pydantic's Type Overview](https://docs.pydantic.dev/latest/concepts/types/). You will see some examples in the next chapter.
For example, as in the `Image` model we have a `url` field, we can declare it to be an instance of Pydantic's `HttpUrl` instead of a `str`:
+1 -1
View File
@@ -10,7 +10,7 @@ To declare a **request** body, you use [Pydantic](https://docs.pydantic.dev/) mo
/// note
To send data, you should use one of: `POST` (the more common), `PUT`, `DELETE` or `PATCH`.
To send data, you should use one of: `POST` (the most common), `PUT`, `DELETE` or `PATCH`.
Sending a body with a `GET` request has an undefined behavior in the specifications, nevertheless, it is supported by FastAPI, only for very complex/extreme use cases.
+1 -1
View File
@@ -99,7 +99,7 @@ Here's how it might look:
---
If you use Pycharm, you can:
If you use PyCharm, you can:
* Open the "Run" menu.
* Select the option "Debug...".
@@ -234,6 +234,7 @@ participant operation as Path Operation
Dependencies with `yield` have evolved over time to cover different use cases and fix some issues.
If you want to see what has changed in different versions of FastAPI, you can read more about it in the advanced guide, in [Advanced Dependencies - Dependencies with `yield`, `HTTPException`, `except` and Background Tasks](../../advanced/advanced-dependencies.md#dependencies-with-yield-httpexception-except-and-background-tasks).
## Context Managers { #context-managers }
### What are "Context Managers" { #what-are-context-managers }
+1 -1
View File
@@ -36,7 +36,7 @@ Here are some of the additional data types you can use:
* `datetime.timedelta`:
* A Python `datetime.timedelta`.
* In requests and responses will be represented as a `float` of total seconds.
* Pydantic also allows representing it as a "ISO 8601 time diff encoding", [see the docs for more info](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers).
* Pydantic also allows representing it as an "ISO 8601 time diff encoding", [see the docs for more info](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers).
* `frozenset`:
* In requests and responses, treated the same as a `set`:
* In requests, a list will be read, eliminating duplicates and converting it to a `set`.
+3 -3
View File
@@ -18,7 +18,7 @@ If you don't know, you will learn what a "password hash" is in the [security cha
## Multiple models { #multiple-models }
Here's a general idea of how the models could look like with their password fields and the places where they are used:
Here's a general idea of what the models could look like with their password fields and the places where they are used:
{* ../../docs_src/extra_models/tutorial001_py310.py hl[7,9,14,20,22,27:28,31:33,38:39] *}
@@ -142,7 +142,7 @@ The supporting additional functions `fake_password_hasher` and `fake_save_user`
Reducing code duplication is one of the core ideas in **FastAPI**.
As code duplication increments the chances of bugs, security issues, code desynchronization issues (when you update in one place but not in the others), etc.
As code duplication increases the chances of bugs, security issues, code desynchronization issues (when you update in one place but not in the others), etc.
And these models are all sharing a lot of the data and duplicating attribute names and types.
@@ -208,4 +208,4 @@ In this case, you can use `dict`:
Use multiple Pydantic models and inherit freely for each case.
You don't need to have a single data model per entity if that entity must be able to have different "states". As the case with the user "entity" with a state including `password`, `password_hash` and no password.
You don't need to have a single data model per entity if that entity must be able to have different "states". The **user** "entity" is an example, with states that include `password`, `password_hash`, or no password.
+1 -1
View File
@@ -108,7 +108,7 @@ OpenAPI defines an API schema for your API. And that schema includes definitions
#### Check the `openapi.json` { #check-the-openapi-json }
If you are curious about how the raw OpenAPI schema looks like, FastAPI automatically generates a JSON (schema) with the descriptions of all your API.
If you are curious about what the raw OpenAPI schema looks like, FastAPI automatically generates a JSON (schema) with the descriptions of all your API.
You can see it directly at: [http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json).
+139
View File
@@ -0,0 +1,139 @@
# Frontend { #frontend }
You can serve static frontend apps with `app.frontend()` (or `router.frontend()`).
This is useful for frontend tools that generate static files, like React with Vite, TanStack Router, Astro, Vue, Svelte, Angular, Solid, and others.
With these tools, you normally have a step that builds the frontend, with a command like:
```bash
npm run build
```
That would generate a directory like `./dist/` with your frontend files.
You can use `app.frontend()` to serve that directory following the conventions needed by these frontend frameworks.
**FastAPI** checks *path operations* first. The frontend files are checked only if no normal route matched, so your API won't be affected.
## Serve a Frontend { #serve-a-frontend }
After building your frontend, for example with `npm run build`, put the generated files in a directory, for example, `dist`.
Your project structure could look like this:
```text
.
├── pyproject.toml
├── app
│ ├── __init__.py
│ └── main.py
└── dist
├── index.html
└── assets
└── app.js
```
Then serve it with `app.frontend()`:
{* ../../docs_src/frontend/tutorial001_py310.py hl[5] *}
With this, a request for `/assets/app.js` can serve `dist/assets/app.js`.
If you also have a **FastAPI** *path operation*, the *path operation* wins.
## Client-Side Routing { #client-side-routing }
Many frontend apps, including **single-page apps** (SPAs), use client-side routing. A path like `/dashboard/settings` might not be a real file but the framework would take care of handling it.
So, if accessing that URL directly (instead of navigating through the app), the backend should serve the frontend app from `index.html`, so that the frontend framework can then handle the client-side routing.
For that, use `fallback="index.html"`:
{* ../../docs_src/frontend/tutorial002_py310.py hl[5] *}
**FastAPI** uses this fallback only for `GET` and `HEAD` requests that look like browser navigation. Missing files like JavaScript, CSS, and images still return `404`.
Requests with other methods, like `POST` or `PUT`, to paths that only match the frontend fallback also return `404`. Regular **FastAPI** *path operations* still have higher priority than frontend routes.
/// tip
By default, `fallback` has a value of `fallback="auto"`. In most cases you won't need to specify `fallback`. Read below for details.
///
This is what you would want with many frontend apps that use client-side routing, for example, React with TanStack Router, Vue, Angular, SvelteKit, or Solid.
## Custom 404 Page { #custom-404-page }
You can also serve a static `404.html` page for missing frontend paths:
{* ../../docs_src/frontend/tutorial003_py310.py hl[5] *}
That response keeps a status code of `404`.
In this case, **FastAPI** won't serve `index.html` for missing frontend paths. It will return the `404.html` file instead.
/// tip
By default, `fallback` has a value of `fallback="auto"`. With this, if a `404.html` file is found, it will be used as the fallback automatically.
So, you can normally omit the `fallback` argument.
///
This is useful with frontend tools that generate static HTML files for each page, like Astro.
## Fallback Auto { #fallback-auto }
By default, `app.frontend()` uses `fallback="auto"`.
If there is a `404.html` file in the frontend directory, missing frontend paths serve that file with status code `404`.
Otherwise, if there is an `index.html` file, missing browser navigation paths serve `index.html`, which is what many frontend apps with client-side routing expect.
So, in most cases you can use `app.frontend("/", directory="dist")` without specifying the `fallback` argument.
{* ../../docs_src/frontend/tutorial001_py310.py hl[5] *}
## Disable Fallback { #disable-fallback }
If you don't want to serve a fallback file for missing frontend paths, use `fallback=None`:
{* ../../docs_src/frontend/tutorial005_py310.py hl[5] *}
Then missing frontend paths return the normal `404`.
## Check Directory { #check-directory }
By default, `app.frontend()` checks that the directory exists when the app is created.
This helps catch configuration errors early. For example, if the frontend build output directory is missing, **FastAPI** will raise an error on startup.
If your frontend files are created later, for example by a separate build step after the app object is created, set `check_dir=False`:
{* ../../docs_src/frontend/tutorial006_py310.py hl[5] *}
With `check_dir=False`, **FastAPI** will not check the directory when the app is created. If the configured directory is still missing when a request is handled, **FastAPI** will raise an error then.
## Use it with `APIRouter` { #use-it-with-apirouter }
You can also add frontend files to an `APIRouter` and include it with a prefix:
{* ../../docs_src/frontend/tutorial004_py310.py hl[6,7] *}
In this example, frontend paths are served under `/app`.
Any regular *path operations* in the app will still take precedence, including in other routers.
## Dependencies and Middleware { #dependencies-and-middleware }
Frontend responses run inside the normal **FastAPI** application, so HTTP middleware applies to them.
Dependencies from the app, from an `APIRouter`, and from `include_router()` also apply to frontend responses. This can be useful for protecting a frontend with cookie authentication or similar.
## Static Build Output Only { #static-build-output-only }
`app.frontend()` serves files already generated by your frontend build.
It does not run server-side rendering. It is for frontend frameworks that generate static files, not for frameworks that need dynamic rendering on the server for each request.
+2 -2
View File
@@ -1,6 +1,6 @@
# Handling Errors { #handling-errors }
There are many situations in which you need to notify an error to a client that is using your API.
There are many situations in which you need to report an error to a client that is using your API.
This client could be a browser with a frontend, a code from someone else, an IoT device, etc.
@@ -71,7 +71,7 @@ They are handled automatically by **FastAPI** and converted to JSON.
## Add custom headers { #add-custom-headers }
There are some situations in where it's useful to be able to add custom headers to the HTTP error. For example, for some types of security.
There are some situations where it's useful to be able to add custom headers to the HTTP error. For example, for some types of security.
You probably won't need to use it directly in your code.
+1 -1
View File
@@ -92,7 +92,7 @@ FastAPI has an [official extension for VS Code](https://marketplace.visualstudio
## Advanced User Guide { #advanced-user-guide }
There is also an **Advanced User Guide** that you can read later after this **Tutorial - User guide**.
There is also an **Advanced User Guide** that you can read later after this **Tutorial - User Guide**.
The **Advanced User Guide** builds on this one, uses the same concepts, and teaches you some extra features.
+1 -1
View File
@@ -11,7 +11,7 @@ You can set the following fields that are used in the OpenAPI specification and
| `title` | `str` | The title of the API. |
| `summary` | `str` | A short summary of the API. <small>Available since OpenAPI 3.1.0, FastAPI 0.99.0.</small> |
| `description` | `str` | A short description of the API. It can use Markdown. |
| `version` | `string` | The version of the API. This is the version of your own application, not of OpenAPI. For example `2.5.0`. |
| `version` | `str` | The version of the API. This is the version of your own application, not of OpenAPI. For example `2.5.0`. |
| `terms_of_service` | `str` | A URL to the Terms of Service for the API. If provided, this has to be a URL. |
| `contact` | `dict` | The contact information for the exposed API. It can contain several fields. <details><summary><code>contact</code> fields</summary><table><thead><tr><th>Parameter</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td>The identifying name of the contact person/organization.</td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>The URL pointing to the contact information. MUST be in the format of a URL.</td></tr><tr><td><code>email</code></td><td><code>str</code></td><td>The email address of the contact person/organization. MUST be in the format of an email address.</td></tr></tbody></table></details> |
| `license_info` | `dict` | The license information for the exposed API. It can contain several fields. <details><summary><code>license_info</code> fields</summary><table><thead><tr><th>Parameter</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td><strong>REQUIRED</strong> (if a <code>license_info</code> is set). The license name used for the API.</td></tr><tr><td><code>identifier</code></td><td><code>str</code></td><td>An [SPDX](https://spdx.org/licenses/) license expression for the API. The <code>identifier</code> field is mutually exclusive of the <code>url</code> field. <small>Available since OpenAPI 3.1.0, FastAPI 0.99.0.</small></td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>A URL to the license used for the API. MUST be in the format of a URL.</td></tr></tbody></table></details> |
@@ -98,7 +98,7 @@ It will be clearly marked as deprecated in the interactive docs:
<img src="/img/tutorial/path-operation-configuration/image04.png">
Check how deprecated and non-deprecated *path operations* look like:
Check how deprecated and non-deprecated *path operations* look:
<img src="/img/tutorial/path-operation-configuration/image05.png">
@@ -406,7 +406,7 @@ But if you're curious about this specific code example and you're still entertai
#### String with `value.startswith()` { #string-with-value-startswith }
Did you notice? a string using `value.startswith()` can take a tuple, and it will check each value in the tuple:
Did you notice? A string using `value.startswith()` can take a tuple, and it will check each value in the tuple:
{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py ln[16:19] hl[17] *}
+1 -1
View File
@@ -21,7 +21,7 @@ As they are part of the URL, they are "naturally" strings.
But when you declare them with Python types (in the example above, as `int`), they are converted to that type and validated against it.
All the same process that applied for path parameters also applies for query parameters:
All the same processes that apply to path parameters also apply to query parameters:
* Editor support (obviously)
* Data <dfn title="converting the string that comes from an HTTP request into Python data">"parsing"</dfn>
+2 -2
View File
@@ -60,7 +60,7 @@ Using `UploadFile` has several advantages over `bytes`:
* You don't have to use `File()` in the default value of the parameter.
* It uses a "spooled" file:
* A file stored in memory up to a maximum size limit, and after passing this limit it will be stored in disk.
* A file stored in memory up to a maximum size limit, and after passing this limit it will be stored on disk.
* This means that it will work well for large files like images, videos, large binaries, etc. without consuming all the memory.
* You can get metadata from the uploaded file.
* It has a [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) `async` interface.
@@ -111,7 +111,7 @@ When you use the `async` methods, **FastAPI** runs the file methods in a threadp
## What is "Form Data" { #what-is-form-data }
The way HTML forms (`<form></form>`) sends the data to the server normally uses a "special" encoding for that data, it's different from JSON.
The way HTML forms (`<form></form>`) send the data to the server normally uses a "special" encoding for that data, it's different from JSON.
**FastAPI** will make sure to read that data from the right place instead of JSON.
+1 -1
View File
@@ -46,7 +46,7 @@ To declare form bodies, you need to use `Form` explicitly, because without it th
## About "Form Fields" { #about-form-fields }
The way HTML forms (`<form></form>`) sends the data to the server normally uses a "special" encoding for that data, it's different from JSON.
The way HTML forms (`<form></form>`) send the data to the server normally uses a "special" encoding for that data, it's different from JSON.
**FastAPI** will make sure to read that data from the right place instead of JSON.
@@ -49,7 +49,7 @@ If you already know what HTTP status codes are, skip to the next section.
In HTTP, you send a numeric status code of 3 digits as part of the response.
These status codes have a name associated to recognize them, but the important part is the number.
These status codes have an associated name to help recognize them, but the important part is the number.
In short:
@@ -78,7 +78,7 @@ Nevertheless, at the <dfn title="2023-08-26">time of writing this</dfn>, Swagger
### OpenAPI-specific `examples` { #openapi-specific-examples }
Since before **JSON Schema** supported `examples` OpenAPI had support for a different field also called `examples`.
Since before **JSON Schema** supported `examples`, OpenAPI had support for a different field also called `examples`.
This **OpenAPI-specific** `examples` goes in another section in the OpenAPI specification. It goes in the **details for each *path operation***, not inside each JSON Schema.
@@ -88,7 +88,7 @@ And it can also be used by yourself, to debug, check and test the same applicati
## The `password` flow { #the-password-flow }
Now let's go back a bit and understand what is all that.
Now let's go back a bit and understand what all that is.
The `password` "flow" is one of the ways ("flows") defined in OAuth2, to handle security and authentication.
@@ -14,7 +14,7 @@ First, let's create a Pydantic user model.
The same way we use Pydantic to declare bodies, we can use it anywhere else:
{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:6] *}
{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:16] *}
## Create a `get_current_user` dependency { #create-a-get-current-user-dependency }
+1 -1
View File
@@ -124,7 +124,7 @@ This ensures the endpoint takes roughly the same amount of time to respond wheth
/// note
If you check the new (fake) database `fake_users_db`, you will see how the hashed password looks like now: `"$argon2id$v=19$m=65536,t=3,p=4$wagCPXjifgvUFBzq4hqe3w$CYaIb8sB+wtD+Vu/P4uod1+Qof8h+1g7bbDlBID48Rc"`.
If you check the new (fake) database `fake_users_db`, you will see what the hashed password looks like now: `"$argon2id$v=19$m=65536,t=3,p=4$wagCPXjifgvUFBzq4hqe3w$CYaIb8sB+wtD+Vu/P4uod1+Qof8h+1g7bbDlBID48Rc"`.
///
@@ -6,7 +6,7 @@ Now let's build from the previous chapter and add the missing parts to have a co
We are going to use **FastAPI** security utilities to get the `username` and `password`.
OAuth2 specifies that when using the "password flow" (that we are using) the client/user must send a `username` and `password` fields as form data.
OAuth2 specifies that when using the "password flow" (that we are using) the client/user must send `username` and `password` fields as form data.
And the spec says that the fields have to be named like that. So `user-name` or `email` wouldn't work.
@@ -146,7 +146,7 @@ UserInDB(
/// note
For a more complete explanation of `**user_dict` check back in [the documentation for **Extra Models**](../extra-models.md#about-user-in-dict).
For a more complete explanation of `**user_dict` check back in [the documentation for **Extra Models**](../extra-models.md#about-user-in-model-dump).
///
@@ -190,7 +190,7 @@ We want to get the `current_user` *only* if this user is active.
So, we create an additional dependency `get_current_active_user` that in turn uses `get_current_user` as a dependency.
Both of these dependencies will just return an HTTP error if the user doesn't exist, or if is inactive.
Both of these dependencies will just return an HTTP error if the user doesn't exist, or is inactive.
So, in our endpoint, we will only get a user if the user exists, was correctly authenticated, and is active:
+1 -1
View File
@@ -201,7 +201,7 @@ Then let's create `Hero`, the actual *table model*, with the **extra fields** th
* `id`
* `secret_name`
Because `Hero` inherits form `HeroBase`, it **also** has the **fields** declared in `HeroBase`, so all the fields for `Hero` are:
Because `Hero` inherits from `HeroBase`, it **also** has the **fields** declared in `HeroBase`, so all the fields for `Hero` are:
* `id`
* `name`
+9 -1
View File
@@ -2,6 +2,14 @@
You can serve static files automatically from a directory using `StaticFiles`.
/// tip
If you need to host a frontend, use `app.frontend()` instead, read about it in [Frontend](frontend.md).
`app.frontend()` uses `StaticFiles` underneath, with several additional advantages for frontends, like handling client-side routing.
///
## Use `StaticFiles` { #use-staticfiles }
* Import `StaticFiles`.
@@ -33,7 +41,7 @@ The `directory="static"` refers to the name of the directory that contains your
The `name="static"` gives it a name that can be used internally by **FastAPI**.
All these parameters can be different than "`static`", adjust them with the needs and specific details of your own application.
All these parameters can be different than "`static`", adjust them to the needs and specific details of your own application.
## More info { #more-info }
+1 -1
View File
@@ -24,7 +24,7 @@ Import `TestClient`.
Create a `TestClient` by passing your **FastAPI** application to it.
Create functions with a name that starts with `test_` (this is standard `pytest` conventions).
Create functions with a name that starts with `test_` (this is a standard `pytest` convention).
Use the `TestClient` object the same way as you do with `httpx`.
+6 -6
View File
@@ -100,7 +100,7 @@ $ uv venv
By default, `uv` will create a virtual environment in a directory called `.venv`.
But you could customize it passing an additional argument with the directory name.
But you could customize it by passing an additional argument with the directory name.
///
@@ -258,7 +258,7 @@ $ python -m ensurepip --upgrade
</div>
This command will install pip if it is not already installed and also ensures that the installed version of pip is at least as recent as the one available in `ensurepip`.
This command will install pip if it is not already installed and also ensure that the installed version of pip is at least as recent as the one available in `ensurepip`.
///
@@ -447,7 +447,7 @@ Now you're ready to start working on your project.
/// tip
Do you want to understand what's all that above?
Do you want to understand what all that above is?
Continue reading. 👇🤓
@@ -548,7 +548,7 @@ Also, depending on your operating system (e.g. Linux, Windows, macOS), it could
## Where are Packages Installed { #where-are-packages-installed }
When you install Python, it creates some directories with some files in your computer.
When you install Python, it creates some directories with some files on your computer.
Some of these directories are the ones in charge of having all the packages you install.
@@ -568,7 +568,7 @@ That will download a compressed file with the FastAPI code, normally from [PyPI]
It will also **download** files for other packages that FastAPI depends on.
Then it will **extract** all those files and put them in a directory in your computer.
Then it will **extract** all those files and put them in a directory on your computer.
By default, it will put those files downloaded and extracted in the directory that comes with your Python installation, that's the **global environment**.
@@ -846,7 +846,7 @@ This is a simple guide to get you started and teach you how everything works **u
There are many **alternatives** to managing virtual environments, package dependencies (requirements), projects.
Once you are ready and want to use a tool to **manage the entire project**, packages dependencies, virtual environments, etc. I would suggest you try [uv](https://github.com/astral-sh/uv).
Once you are ready and want to use a tool to **manage the entire project**, package dependencies, virtual environments, etc. I would suggest you try [uv](https://github.com/astral-sh/uv).
`uv` can do a lot of things, it can:
+3
View File
@@ -133,6 +133,7 @@ nav:
- tutorial/server-sent-events.md
- tutorial/background-tasks.md
- tutorial/metadata.md
- tutorial/frontend.md
- tutorial/static-files.md
- tutorial/testing.md
- tutorial/debugging.md
@@ -303,6 +304,8 @@ extra:
name: es - español
- link: /fr/
name: fr - français
- link: /hi/
name: hi - हिन्दी
- link: /ja/
name: ja - 日本語
- link: /ko/
+2 -49
View File
@@ -7,7 +7,7 @@
<a class="announce-link" href="https://fastapicloud.com" target="_blank">
<span class="twemoji">
{% include ".icons/material/cloud-arrow-up.svg" %}
</span> Join the <strong>FastAPI Cloud</strong> waiting list 🚀
</span> Deploy on <strong>FastAPI Cloud</strong> 🚀
</a>
</div>
<div class="item">
@@ -40,54 +40,7 @@
</div>
</div>
<div id="announce-right" style="position: relative;">
<div class="item">
<a title="BlockBee Cryptocurrency Payment Gateway" style="display: block; position: relative;" href="https://blockbee.io?ref=fastapi" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/blockbee-banner.png" />
</a>
</div>
<div class="item">
<a title="Auth, user management and more for your B2B product" style="display: block; position: relative;" href="https://www.propelauth.com/?utm_source=fastapi&utm_campaign=1223&utm_medium=topbanner" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/propelauth-banner.png" />
</a>
</div>
<div class="item">
<a title="Deploy & scale any full-stack web app on Render. Focus on building apps, not infra." style="display: block; position: relative;" href="https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/render-banner.svg" />
</a>
</div>
<div class="item">
<a title="Cut Code Review Time & Bugs in Half with CodeRabbit" style="display: block; position: relative;" href="https://www.coderabbit.ai/?utm_source=fastapi&utm_medium=banner&utm_campaign=fastapi" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/coderabbit-banner.png" />
</a>
</div>
<div class="item">
<a title="Making Retail Purchases Actionable for Brands and Developers" style="display: block; position: relative;" href="https://subtotal.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=open-source" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/subtotal-banner.svg" />
</a>
</div>
<div class="item">
<a title="Deploy enterprise applications at startup speed" style="display: block; position: relative;" href="https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/railway-banner.png" />
</a>
</div>
<div class="item">
<a title="SerpApi: Web Search API" style="display: block; position: relative;" href="https://serpapi.com/?utm_source=fastapi_website" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/serpapi-banner.png" />
</a>
</div>
<div class="item">
<a title="Greptile: The AI Code Reviewer" style="display: block; position: relative;" href="https://www.greptile.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=fastapi_sponsor_page" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/greptile-banner.png" />
</a>
</div>
{% include "partials/banner-sponsors.html" %}
</div>
</div>
{% endblock %}
@@ -0,0 +1,48 @@
<div class="item">
<a title="BlockBee Cryptocurrency Payment Gateway" style="display: block; position: relative;" href="https://blockbee.io?ref=fastapi" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/blockbee-banner.png" alt="BlockBee Cryptocurrency Payment Gateway" />
</a>
</div>
<div class="item">
<a title="Auth, user management and more for your B2B product" style="display: block; position: relative;" href="https://www.propelauth.com/?utm_source=fastapi&utm_campaign=1223&utm_medium=topbanner" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/propelauth-banner.png" alt="Auth, user management and more for your B2B product" />
</a>
</div>
<div class="item">
<a title="Deploy & scale any full-stack web app on Render. Focus on building apps, not infra." style="display: block; position: relative;" href="https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/render-banner.svg" alt="Deploy & scale any full-stack web app on Render. Focus on building apps, not infra." />
</a>
</div>
<div class="item">
<a title="Cut Code Review Time & Bugs in Half with CodeRabbit" style="display: block; position: relative;" href="https://www.coderabbit.ai/?utm_source=fastapi&utm_medium=banner&utm_campaign=fastapi" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/coderabbit-banner.png" alt="Cut Code Review Time & Bugs in Half with CodeRabbit" />
</a>
</div>
<div class="item">
<a title="Making Retail Purchases Actionable for Brands and Developers" style="display: block; position: relative;" href="https://subtotal.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=open-source" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/subtotal-banner.svg" alt="Making Retail Purchases Actionable for Brands and Developers" />
</a>
</div>
<div class="item">
<a title="Deploy enterprise applications at startup speed" style="display: block; position: relative;" href="https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/railway-banner.png" alt="Deploy enterprise applications at startup speed" />
</a>
</div>
<div class="item">
<a title="SerpApi: Web Search API" style="display: block; position: relative;" href="https://serpapi.com/?utm_source=fastapi_website" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/serpapi-banner.png" alt="SerpApi: Web Search API" />
</a>
</div>
<div class="item">
<a title="Greptile: The AI Code Reviewer" style="display: block; position: relative;" href="https://www.greptile.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=fastapi_sponsor_page" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/greptile-banner.png" alt="Greptile: The AI Code Reviewer" />
</a>
</div>