Compare commits

..

380 Commits

Author SHA1 Message Date
dependabot[bot]
a84fdd8871 ⬆ Bump https://github.com/crate-ci/typos in the pre-commit group
Bumps the pre-commit group with 1 update: [https://github.com/crate-ci/typos](https://github.com/crate-ci/typos).


Updates `https://github.com/crate-ci/typos` from v1.47.2 to 5.0.7
- [Release notes](https://github.com/crate-ci/typos/releases)
- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)
- [Commits](37bb98842b...b859c0df7f)

---
updated-dependencies:
- dependency-name: https://github.com/crate-ci/typos
  dependency-version: 5.0.7
  dependency-type: direct:production
  dependency-group: pre-commit
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-23 11:43:59 +00:00
github-actions[bot]
a497a025e7 📝 Update release notes
[skip ci]
2026-06-21 19:39:49 +00:00
Sebastián Ramírez
8f3db3d3e7 🔒️ Update zizmor workflow security checks (#15820) 2026-06-21 21:39:25 +02:00
github-actions[bot]
0cb4a8e284 📝 Update release notes
[skip ci]
2026-06-20 16:31:34 +00:00
dependabot[bot]
d69774c23d ⬆ Bump pydantic-settings from 2.14.1 to 2.14.2 (#15799)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-06-20 18:31:07 +02:00
Sebastián Ramírez
4b83b0d409 🔖 Release version 0.138.0 (#15808)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-20 01:14:30 +00:00
github-actions[bot]
041cb0cdfa 📝 Update release notes
[skip ci]
2026-06-20 01:07:09 +00:00
Sebastián Ramírez
10393846ed 📝 Fix typo in release notes (#15807) 2026-06-20 01:06:46 +00:00
github-actions[bot]
0303491b69 📝 Update release notes
[skip ci]
2026-06-20 00:59:37 +00:00
Sebastián Ramírez
190f6e2033 📝 Add Frontend instructions to Agent Library Skill (#15805) 2026-06-20 00:59:14 +00:00
github-actions[bot]
17945e5ab7 📝 Update release notes
[skip ci]
2026-06-20 00:51:57 +00:00
Sebastián Ramírez
2260afaf43 🐛 Fix failing test, update format for raised errors (#15804) 2026-06-20 00:51:31 +00:00
github-actions[bot]
0cd5001d0e 📝 Update release notes
[skip ci]
2026-06-20 00:45:46 +00:00
Sebastián Ramírez
7cb1ab6264 👷 Fix test-alls-green (#15803) 2026-06-20 02:45:19 +02:00
github-actions[bot]
9c7eceb00f 📝 Update release notes
[skip ci]
2026-06-20 00:30:21 +00:00
Sebastián Ramírez
d176e00b9f 📝 Udpate release notes link (#15802) 2026-06-20 00:29:58 +00:00
github-actions[bot]
71e608e00e 📝 Update release notes
[skip ci]
2026-06-20 00:26:30 +00:00
Sebastián Ramírez
459a51097b ✏️ Update white space characters in bigger apps (#15801) 2026-06-20 00:26:04 +00:00
github-actions[bot]
e12833aaa2 📝 Update release notes
[skip ci]
2026-06-20 00:21:10 +00:00
Sebastián Ramírez
4d3dc78b26 Add support for app.frontend("/", directory="dist") and router.frontend("/", directory="dist") (#15800) 2026-06-20 00:20:49 +00:00
github-actions[bot]
f1d750fdda 📝 Update release notes
[skip ci]
2026-06-19 22:28:49 +00:00
Yurii Motov
22f99d9ad3 🔧 Enable checking release-notes.md for typos (#15796) 2026-06-20 00:28:24 +02:00
github-actions[bot]
2d00470875 📝 Update release notes
[skip ci]
2026-06-19 20:16:30 +00:00
Yurii Motov
6e6c74fc16 🌐 Enable Hindi docs translations (#15554)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-19 22:16:06 +02:00
github-actions[bot]
1b68e378ef 📝 Update release notes
[skip ci]
2026-06-19 09:30:09 +00:00
Yurii Motov
da9d05bc7a ✏️ Fix grammar, typos, and broken links in docs (#15694)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
2026-06-19 09:29:44 +00:00
github-actions[bot]
c61384e3d7 📝 Update release notes
[skip ci]
2026-06-18 10:15:47 +00:00
Sebastián Ramírez
08321394ab 📝 Tweak wording about deploying to FastAPI Cloud (#15793) 2026-06-18 10:15:16 +00:00
github-actions[bot]
c744991f96 📝 Update release notes
[skip ci]
2026-06-18 09:00:03 +00:00
Yurii Motov
2f4ba0bdd1 🔨 Use gpt-5.5 model in translate.py, specify -chat to avoid warnings (#15792) 2026-06-18 10:59:31 +02:00
Sebastián Ramírez
6a0ba7bb1f 🔖 Release version 0.137.2 (#15790)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-18 06:56:45 +00:00
github-actions[bot]
5d421ae977 📝 Update release notes
[skip ci]
2026-06-18 06:50:13 +00:00
Sebastián Ramírez
6ac122071d Add iter_route_contexts() for advanced use cases that used to use router.routes (e.g. Jupyverse) (#15785) 2026-06-18 08:49:38 +02:00
github-actions[bot]
7feb17f80a 📝 Update release notes
[skip ci]
2026-06-17 20:50:29 +00:00
Sebastián Ramírez
d514109e42 🔧 Update sponsors: add BairesDev (#15787) 2026-06-17 22:50:01 +02:00
github-actions[bot]
1c1edb9b55 📝 Update release notes
[skip ci]
2026-06-17 20:36:51 +00:00
Sebastián Ramírez
32d711f6d2 🔨 Update sponsors script to simplify previews (#15786) 2026-06-17 22:36:24 +02:00
github-actions[bot]
202b2d2f5f 📝 Update release notes
[skip ci]
2026-06-16 20:10:12 +00:00
dependabot[bot]
e26e64381c ⬆ Bump the python-packages group across 1 directory with 7 updates (#15777)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 22:09:35 +02:00
github-actions[bot]
c66d1c222b 📝 Update release notes
[skip ci]
2026-06-16 18:01:49 +00:00
dependabot[bot]
705324ed29 ⬆ Bump cryptography from 46.0.7 to 48.0.1 (#15779)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 20:01:02 +02:00
github-actions[bot]
627636b617 📝 Update release notes
[skip ci]
2026-06-16 17:59:45 +00:00
dependabot[bot]
84304df58f ⬆ Bump aiohttp from 3.14.0 to 3.14.1 (#15781)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 19:59:13 +02:00
github-actions[bot]
aaf70c196c 📝 Update release notes
[skip ci]
2026-06-16 15:47:51 +00:00
dependabot[bot]
69f8d87fb7 ⬆ Bump starlette from 1.2.1 to 1.3.1 (#15780)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 17:47:19 +02:00
github-actions[bot]
a62dd75022 📝 Update release notes
[skip ci]
2026-06-16 15:29:42 +00:00
dependabot[bot]
2c77ae3f76 ⬆ Bump astral-sh/setup-uv from 8.1.0 to 8.2.0 in the github-actions group (#15776)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-06-16 17:29:07 +02:00
github-actions[bot]
06074e739b 📝 Update release notes
[skip ci]
2026-06-16 12:54:08 +00:00
dependabot[bot]
5ebf2ab2d1 ⬆ Bump https://github.com/crate-ci/typos from v1.47.1 to v1.47.2 in the pre-commit group (#15775)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-06-16 14:53:10 +02:00
github-actions[bot]
88683944c7 📝 Update release notes
[skip ci]
2026-06-16 12:29:19 +00:00
dependabot[bot]
9ca069f2be ⬆ Bump python-multipart from 0.0.30 to 0.0.32 (#15778)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 14:28:41 +02:00
github-actions[bot]
2f5ba0d503 📝 Update release notes
[skip ci]
2026-06-16 11:38:50 +00:00
구희찬
44e5b99853 🌐 Fix broken Markdown in Korean custom response docs (#15774) 2026-06-16 11:38:18 +00:00
github-actions[bot]
2f836a9e70 📝 Update release notes
[skip ci]
2026-06-16 08:34:59 +00:00
Sebastián Ramírez
818b97a68b ️ Revert removing scripts, only remove coverage.sh (#15772) 2026-06-16 08:34:25 +00:00
github-actions[bot]
aa5eeb3652 📝 Update release notes
[skip ci]
2026-06-15 22:12:18 +00:00
github-actions[bot]
090386b10e 📝 Update release notes
[skip ci]
2026-06-15 22:11:15 +00:00
Sebastián Ramírez
aeeb29f6d0 🌐 Update translations for fr (update-outdated) (#15761)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-16 00:10:59 +02:00
Sebastián Ramírez
b401cb71c0 🌐 Update translations for zh-hant (update-outdated) (#15760)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-06-16 00:10:42 +02:00
github-actions[bot]
76008f778b 📝 Update release notes
[skip ci]
2026-06-15 21:25:25 +00:00
Sebastián Ramírez
011da093e1 🌐 Update translations for de (update-outdated) (#15759)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-06-15 23:24:43 +02:00
github-actions[bot]
132c533ace 📝 Update release notes
[skip ci]
2026-06-15 21:14:49 +00:00
Sebastián Ramírez
2f69b265ef 🌐 Update translations for ko (update-outdated) (#15757)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-15 21:13:54 +00:00
github-actions[bot]
89fcd722e3 📝 Update release notes
[skip ci]
2026-06-15 21:09:01 +00:00
Sebastián Ramírez
3b9f938e50 🌐 Update translations for uk (update-outdated) (#15756)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-15 21:08:29 +00:00
github-actions[bot]
a4bd128ed5 📝 Update release notes
[skip ci]
2026-06-15 20:12:49 +00:00
github-actions[bot]
8012339dc2 📝 Update release notes
[skip ci]
2026-06-15 20:12:22 +00:00
Sebastián Ramírez
d026f79b82 🌐 Update translations for zh (update-outdated) (#15755)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-06-15 22:12:19 +02:00
Sebastián Ramírez
43520809e9 🌐 Update translations for tr (update-outdated) (#15754)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-15 20:11:49 +00:00
github-actions[bot]
93610bbbcc 📝 Update release notes
[skip ci]
2026-06-15 19:51:12 +00:00
Sebastián Ramírez
b82ab2fb41 🌐 Update translations for pt (update-outdated) (#15753)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-15 21:50:40 +02:00
github-actions[bot]
451eb49bbc 📝 Update release notes
[skip ci]
2026-06-15 19:33:11 +00:00
Sebastián Ramírez
96592d954b 🌐 Update translations for es (update-outdated) (#15752)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-15 21:32:43 +02:00
github-actions[bot]
eaf1d94925 📝 Update release notes
[skip ci]
2026-06-15 19:09:23 +00:00
Sebastián Ramírez
9871e03c8a 🌐 Update translations for ja (update-outdated) (#15751)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-15 21:08:51 +02:00
github-actions[bot]
c9d3e82500 📝 Update release notes
[skip ci]
2026-06-15 18:37:06 +00:00
Sebastián Ramírez
864c29f075 🌐 Update translations for ru (update-outdated) (#15758)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-06-15 20:36:31 +02:00
github-actions[bot]
1b284435ee 📝 Update release notes
[skip ci]
2026-06-15 16:04:17 +00:00
Sebastián Ramírez
c054476c6f 🔥 Remove unused scripts (#15771) 2026-06-15 16:03:45 +00:00
github-actions[bot]
8c5a830b6d 📝 Update release notes
[skip ci]
2026-06-15 15:54:17 +00:00
Sebastián Ramírez
b7de2b7feb 🔧 Add ty configs to check docs sources (#15770) 2026-06-15 17:53:46 +02:00
github-actions[bot]
4473a0cd91 📝 Update release notes
[skip ci]
2026-06-15 14:31:50 +00:00
Sebastián Ramírez
76876e5a81 🔧 Add ty configs to check docs sources (#15769) 2026-06-15 14:31:14 +00:00
Sebastián Ramírez
a82e5f2fac 🔖 Release version 0.137.1 (#15766)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-15 11:26:48 +00:00
github-actions[bot]
edd1461589 📝 Update release notes
[skip ci]
2026-06-15 11:20:24 +00:00
Sebastián Ramírez
b78c82262f 🚨 Fix typing checks for APIRoute (#15765) 2026-06-15 13:19:51 +02:00
github-actions[bot]
e0f8cadf09 📝 Update release notes
[skip ci]
2026-06-15 10:55:32 +00:00
Sebastián Ramírez
d8aad201eb 🐛 Fix bug, allow empty path in path operation in prefixless router (#15763) 2026-06-15 12:55:06 +02:00
Sebastián Ramírez
9a9c4ad5d0 🔖 Release version 0.137.0 (#15748)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-14 12:47:28 +00:00
github-actions[bot]
c6d5897826 📝 Update release notes
[skip ci]
2026-06-14 12:40:20 +00:00
Sebastián Ramírez
31d097f286 📝 Update release notes (#15747) 2026-06-14 12:39:49 +00:00
github-actions[bot]
ba609a8946 📝 Update release notes
[skip ci]
2026-06-14 12:36:16 +00:00
Sebastián Ramírez
8e1d774cef ♻️ Refactor internals to preserve APIRouter and APIRoute instances (#15745) 2026-06-14 14:35:48 +02:00
github-actions[bot]
016ab760fa 📝 Update release notes
[skip ci]
2026-06-13 18:22:48 +00:00
Sebastián Ramírez
e2fcd5562f 🔧 Update sponsors: remove TalorData (#15744) 2026-06-13 18:22:22 +00:00
github-actions[bot]
d3e6a2931f 📝 Update release notes
[skip ci]
2026-06-10 23:14:26 +00:00
Sebastián Ramírez
e4b6a36c4f 🔧 Update sponsors: remove ExoFlare (#15736) 2026-06-10 23:13:56 +00:00
github-actions[bot]
944fb70622 📝 Update release notes
[skip ci]
2026-06-10 23:05:07 +00:00
Sebastián Ramírez
5d2dae82c4 🔧 Update sponsors: remove InterviewPal (#15735) 2026-06-10 23:04:41 +00:00
github-actions[bot]
e680fd6c8c 📝 Update release notes
[skip ci]
2026-06-10 22:59:54 +00:00
Sebastián Ramírez
ee036a111e 🔧 Update sponsors: remove Liblab (#15731) 2026-06-11 00:59:29 +02:00
github-actions[bot]
b98fb552e6 📝 Update release notes
[skip ci]
2026-06-10 22:44:58 +00:00
Sebastián Ramírez
e52919282a 🔧 Update sponsors: remove Scalar (#15730) 2026-06-10 22:44:29 +00:00
github-actions[bot]
b31720337a 📝 Update release notes
[skip ci]
2026-06-09 22:07:36 +00:00
dependabot[bot]
e133ffbc1b ⬆ Bump the python-packages group across 1 directory with 6 updates (#15721)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-10 00:05:55 +02:00
github-actions[bot]
4be770779e 📝 Update release notes
[skip ci]
2026-06-09 22:04:54 +00:00
dependabot[bot]
2015b63561 ⬆ Bump python-multipart from 0.0.29 to 0.0.30 (#15723)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-06-10 00:04:26 +02:00
github-actions[bot]
3c5d5bb497 📝 Update release notes
[skip ci]
2026-06-09 21:55:01 +00:00
dependabot[bot]
13b2b4cb34 ⬆ Bump the github-actions group with 3 updates (#15720)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-06-09 23:54:29 +02:00
github-actions[bot]
b6ed4666fe 📝 Update release notes
[skip ci]
2026-06-09 21:52:25 +00:00
dependabot[bot]
8b80abfbf3 ⬆ Bump starlette from 1.1.0 to 1.2.1 (#15722)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-09 23:51:55 +02:00
github-actions[bot]
e42d913c60 📝 Update release notes
[skip ci]
2026-06-09 21:50:10 +00:00
dependabot[bot]
0cf3f76e7c ⬆ Bump https://github.com/crate-ci/typos from v1.46.0 to v1.47.1 in the pre-commit group (#15719)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-06-09 23:49:44 +02:00
github-actions[bot]
706e20da5e 📝 Update release notes
[skip ci]
2026-06-09 12:05:54 +00:00
Alejandra
71ea74fb8f 📝 Update FastAPI Cloud deployment instructions (#15724)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-09 14:05:27 +02:00
github-actions[bot]
5cdf820c80 📝 Update release notes
[skip ci]
2026-06-04 12:45:13 +00:00
Sebastián Ramírez
782476e7db 🔧 Update sponsors, add Rapidproxy (#15689) 2026-06-04 14:44:48 +02:00
github-actions[bot]
7eb2bf5c4e 📝 Update release notes
[skip ci]
2026-06-04 12:31:15 +00:00
Sebastián Ramírez
b3b6aba5ab 🔧 Update sponsors: Remove TestMu (#15688) 2026-06-04 14:30:46 +02:00
github-actions[bot]
433a7ef39b 📝 Update release notes
[skip ci]
2026-06-04 12:24:31 +00:00
dependabot[bot]
df3c778ae6 ⬆ Bump the python-packages group across 1 directory with 11 updates (#15683)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-04 14:24:07 +02:00
github-actions[bot]
09e615a6fc 📝 Update release notes
[skip ci]
2026-06-04 10:38:33 +00:00
dependabot[bot]
81c243f86d ⬆ Bump aiohttp from 3.13.4 to 3.14.0 (#15681)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-04 12:38:07 +02:00
github-actions[bot]
5d2320fca6 📝 Update release notes
[skip ci]
2026-06-04 08:49:36 +00:00
dependabot[bot]
e95d3aab28 ⬆ Bump the github-actions group with 2 updates (#15682)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-04 10:49:11 +02:00
github-actions[bot]
2441eff837 📝 Update release notes
[skip ci]
2026-06-04 08:43:06 +00:00
dependabot[bot]
460f8d2cc8 ⬆ Bump starlette from 1.0.0 to 1.1.0 (#15684)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-04 10:42:42 +02:00
github-actions[bot]
3d2aace42f 📝 Update release notes
[skip ci]
2026-06-01 17:55:53 +00:00
github-actions[bot]
566bc53187 📝 Update release notes
[skip ci]
2026-06-01 17:55:37 +00:00
Sebastián Ramírez
4cc0e5b3ce 🌐 Update translations for zh-hant (update-outdated) (#15671)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 19:55:14 +02:00
Sebastián Ramírez
d144531caa 🌐 Update translations for es (update-outdated) (#15670)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 19:54:40 +02:00
github-actions[bot]
57b42cc138 📝 Update release notes
[skip ci]
2026-06-01 17:54:15 +00:00
Sebastián Ramírez
2d5e2a4b29 🌐 Update translations for fr (update-outdated) (#15669)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 19:53:50 +02:00
github-actions[bot]
6999d21e98 📝 Update release notes
[skip ci]
2026-06-01 17:49:54 +00:00
Sebastián Ramírez
c4cf1341a1 👥 Update FastAPI People - Experts (#15677)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 19:49:30 +02:00
github-actions[bot]
a5a68f14e7 📝 Update release notes
[skip ci]
2026-06-01 15:20:38 +00:00
Sebastián Ramírez
6926656247 👥 Update FastAPI GitHub topic repositories (#15675)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 17:20:05 +02:00
github-actions[bot]
9f4f3fdc5b 📝 Update release notes
[skip ci]
2026-06-01 11:56:34 +00:00
Sebastián Ramírez
d6629f7dfc 🌐 Update translations for ja (update-outdated) (#15668)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-06-01 13:56:02 +02:00
github-actions[bot]
dbe984018b 📝 Update release notes
[skip ci]
2026-06-01 10:57:22 +00:00
github-actions[bot]
46bc43a04a 📝 Update release notes
[skip ci]
2026-06-01 10:56:17 +00:00
github-actions[bot]
4bdda67fb2 📝 Update release notes
[skip ci]
2026-06-01 10:55:45 +00:00
Sebastián Ramírez
2b70d68942 🌐 Update translations for pt (update-outdated) (#15667)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 12:54:59 +02:00
Sebastián Ramírez
2aa88900df 🌐 Update translations for tr (update-outdated) (#15666)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 12:54:44 +02:00
github-actions[bot]
7b262b3d54 📝 Update release notes
[skip ci]
2026-06-01 10:54:29 +00:00
Sebastián Ramírez
d822aefc8a 🌐 Update translations for zh (update-outdated) (#15665)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 12:54:26 +02:00
Sebastián Ramírez
502d20c441 🌐 Update translations for ko (update-outdated) (#15664)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 12:53:57 +02:00
github-actions[bot]
cf2369a597 📝 Update release notes
[skip ci]
2026-06-01 10:29:51 +00:00
Sebastián Ramírez
674a625ae9 🌐 Update translations for de (update-outdated) (#15673)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 12:29:20 +02:00
github-actions[bot]
e1c1299bb5 📝 Update release notes
[skip ci]
2026-06-01 10:28:32 +00:00
Sebastián Ramírez
bb6dbdb6cd 🌐 Update translations for uk (update-outdated) (#15672)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 12:28:01 +02:00
github-actions[bot]
e29b179705 📝 Update release notes
[skip ci]
2026-06-01 08:42:21 +00:00
Sebastián Ramírez
d1216e7352 🌐 Update translations for ru (update-outdated) (#15674)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-06-01 10:41:55 +02:00
github-actions[bot]
d390d514eb 📝 Update release notes
[skip ci]
2026-06-01 06:25:13 +00:00
Sebastián Ramírez
37c92a87ff 👥 Update FastAPI People - Contributors and Translators (#15662)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 08:24:46 +02:00
github-actions[bot]
0ee8a24249 📝 Update release notes
[skip ci]
2026-05-31 16:01:07 +00:00
Sebastián Ramírez
b4d58fddee 👷 Automate release preparation (#15661) 2026-05-31 16:00:38 +00:00
github-actions[bot]
ee22a4b8ca 📝 Update release notes
[skip ci]
2026-05-30 17:18:39 +00:00
Sebastián Ramírez
1990ecb446 🔥 Remove slim package stub, deprecated for a while (#15649) 2026-05-30 19:17:33 +02:00
github-actions[bot]
91dba4484d 📝 Update release notes
[skip ci]
2026-05-28 10:49:01 +00:00
dependabot[bot]
99a1b1edee ⬆ Bump authlib from 1.6.11 to 1.7.2 (#15512)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-05-28 12:48:36 +02:00
github-actions[bot]
199415da85 📝 Update release notes
[skip ci]
2026-05-28 10:34:26 +00:00
dependabot[bot]
dcac2f0d95 ⬆ Bump pymdown-extensions from 10.21.2 to 10.21.3 (#15569)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-05-28 12:34:00 +02:00
github-actions[bot]
334582bfe4 📝 Update release notes
[skip ci]
2026-05-28 10:29:52 +00:00
dependabot[bot]
2a1506d167 ⬆ Bump CodSpeedHQ/action from 4.14.0 to 4.15.1 (#15513)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-05-28 12:29:24 +02:00
github-actions[bot]
136b55f3d8 📝 Update release notes
[skip ci]
2026-05-28 10:20:07 +00:00
dependabot[bot]
4a5f0cd370 ⬆ Bump python-multipart from 0.0.26 to 0.0.29 (#15595)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-05-28 12:19:23 +02:00
github-actions[bot]
2bd97a6013 📝 Update release notes
[skip ci]
2026-05-27 20:58:15 +00:00
Yurii Motov
a3558be5f8 🔒️ Improve GitHub actions security (#15607) 2026-05-27 22:57:52 +02:00
github-actions[bot]
c9343d2cf0 📝 Update release notes
[skip ci]
2026-05-27 20:53:41 +00:00
Yurii Motov
a53efbcae9 ⚰️ Remove ruff and coverage ignores for non-existing files (#15610)
Co-authored-by: AshNicolus <yashnema52@gmail.com>
2026-05-27 22:53:15 +02:00
github-actions[bot]
ad09734fa3 📝 Update release notes
[skip ci]
2026-05-27 20:23:09 +00:00
Yurii Motov
57535ef85b Use custom changing_dir instead of CLIRunner.isolated_filesystem to set working dir (#15616) 2026-05-27 22:22:44 +02:00
github-actions[bot]
dbfd55cea3 📝 Update release notes
[skip ci]
2026-05-27 10:47:52 +00:00
Yurii Motov
59d4a80fcf Add httpx2 test dependency to avoid deprecation warning (#15603) 2026-05-27 12:47:28 +02:00
github-actions[bot]
6cbdde2315 📝 Update release notes
[skip ci]
2026-05-24 13:03:53 +00:00
dependabot[bot]
1464678ba6 ⬆ Bump the python-packages group with 15 updates (#15594)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-24 15:03:23 +02:00
github-actions[bot]
1a84bbc00b 📝 Update release notes
[skip ci]
2026-05-24 11:07:04 +00:00
Yurii Motov
3fdc54edab 👷 Configure Dependabot to group updates and update weekly (#15560) 2026-05-24 13:06:37 +02:00
github-actions[bot]
09ba2cec98 📝 Update release notes
[skip ci]
2026-05-24 11:01:06 +00:00
Alexander Li
3e3d38930e ✏️ Use Annotated in inline example in docs/en/docs/tutorial/body-multiple-params.md (#15591) 2026-05-24 13:00:37 +02:00
github-actions[bot]
84f205c8f7 📝 Update release notes
[skip ci]
2026-05-24 10:57:12 +00:00
Ömer 🇹🇷
7baefe7144 📝 Remove "NGINX Unit" from the list of ASGI-servers in docs (#15475) 2026-05-24 12:56:40 +02:00
github-actions[bot]
2895c51ba8 📝 Update release notes
[skip ci]
2026-05-24 10:29:48 +00:00
zadevhub
21c46919fc 📝 Update docs/en/docs/tutorial/security/oauth2-jwt.md (#14781)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-05-24 10:29:22 +00:00
Sebastián Ramírez
8206485753 🔖 Release version 0.136.3 2026-05-23 20:51:45 +02:00
github-actions[bot]
c910e0139f 📝 Update release notes
[skip ci]
2026-05-23 18:40:42 +00:00
Sebastián Ramírez
063b5bf582 ♻️ Do not accept underscore headers when using convert_underscores=True (the default) (#15589) 2026-05-23 18:35:05 +00:00
Sebastián Ramírez
22b02e26f9 🔖 Release version 0.136.2 2026-05-23 19:24:08 +02:00
github-actions[bot]
3b252a2a22 📝 Update release notes
[skip ci]
2026-05-23 17:23:30 +00:00
Sebastián Ramírez
c7fb7851b3 ♻️ Validate Server Sent Event fields to avoid applications from sending broken data (#15588) 2026-05-23 17:23:05 +00:00
github-actions[bot]
cb83b83dcf 📝 Update release notes
[skip ci]
2026-05-23 17:02:38 +00:00
Sebastián Ramírez
00f805cec9 Update tests, don't double dispose the engine (#15587) 2026-05-23 17:02:16 +00:00
github-actions[bot]
3675137523 📝 Update release notes
[skip ci]
2026-05-23 16:36:21 +00:00
Yurii Motov
7b57e42986 📝 Document --entrypoint CLI option (#15464) 2026-05-23 18:35:54 +02:00
github-actions[bot]
e16894ec5b 📝 Update release notes
[skip ci]
2026-05-23 15:33:10 +00:00
Roman Postnov
8b647e3405 ️ Speed up test suite via caching and fixture scopes to make it ~24% faster (#13583)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
2026-05-23 17:32:48 +02:00
github-actions[bot]
4f37a43d32 📝 Update release notes
[skip ci]
2026-05-22 17:16:06 +00:00
Sebastián Ramírez
973230c782 🔥 Remove config files now in central GitHub repo (#15585) 2026-05-22 19:15:08 +02:00
github-actions[bot]
ecd70826eb 📝 Update release notes
[skip ci]
2026-05-22 09:11:29 +00:00
Sebastián Ramírez
c347875c9c 📝 Update and simplify docs about help and management (#15583) 2026-05-22 11:10:53 +02:00
github-actions[bot]
0b9863020d 📝 Update release notes
[skip ci]
2026-05-21 20:03:55 +00:00
Sebastián Ramírez
55a9ff2e5e 📝 Add docs references to central contributing docs (#15580) 2026-05-21 20:03:25 +00:00
github-actions[bot]
b95681eb5b 📝 Update release notes
[skip ci]
2026-05-21 06:55:49 +00:00
dependabot[bot]
c99e215ed8 ⬆ Bump urllib3 from 2.6.3 to 2.7.0 (#15502)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-21 08:55:21 +02:00
github-actions[bot]
4232d80e84 📝 Update release notes
[skip ci]
2026-05-21 06:49:11 +00:00
dependabot[bot]
87d1daeeea ⬆ Bump idna from 3.11 to 3.15 (#15565)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-21 08:48:48 +02:00
github-actions[bot]
60571d7ada 📝 Update release notes
[skip ci]
2026-05-21 06:39:04 +00:00
dependabot[bot]
a314e3be3b ⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0 (#15571)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-21 08:38:39 +02:00
github-actions[bot]
b11805add7 📝 Update release notes
[skip ci]
2026-05-21 05:29:09 +00:00
Francisco Silva
74d735d518 🌐 Improve translation consistency in ‎docs/pt/docs/advanced/generate-clients.md‎ (#15456)
Co-authored-by: uilton <uilton@meta4chain.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-05-21 07:28:41 +02:00
github-actions[bot]
ed7f49ed69 📝 Update release notes
[skip ci]
2026-05-20 16:12:24 +00:00
Sebastián Ramírez
3969ae8f38 📝 Update security policy (#15577) 2026-05-20 16:11:48 +00:00
github-actions[bot]
f4cafbc467 📝 Update release notes
[skip ci]
2026-05-19 17:41:11 +00:00
Sebastián Ramírez
31ced9d49e 🔧 Migrate docs from MkDocs to Zensical (#15563) 2026-05-19 19:40:41 +02:00
github-actions[bot]
6f9dcdf61a 📝 Update release notes
[skip ci]
2026-05-19 13:42:52 +00:00
Sebastián Ramírez
2b5cd26248 🍱 Update sponsors: TalorData image (#15562) 2026-05-19 15:42:23 +02:00
github-actions[bot]
5341528623 📝 Update release notes
[skip ci]
2026-05-18 15:40:01 +00:00
Sebastián Ramírez
ff6a38a434 🌐 Update translations for ja (update-outdated) (#15530)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-05-18 17:39:27 +02:00
github-actions[bot]
626ae1918c 📝 Update release notes
[skip ci]
2026-05-18 15:22:32 +00:00
Sebastián Ramírez
3780ba5472 🌐 Update translations for uk (update-outdated) (#15529)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-05-18 17:21:59 +02:00
github-actions[bot]
21697d9794 📝 Update release notes
[skip ci]
2026-05-18 15:19:10 +00:00
Sebastián Ramírez
628ff21528 🌐 Update translations for pt (update-outdated) (#15528)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-05-18 17:15:46 +02:00
github-actions[bot]
bf3668de89 📝 Update release notes
[skip ci]
2026-05-18 15:14:32 +00:00
Sebastián Ramírez
f343905934 🌐 Update translations for de (update-outdated) (#15527)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-05-18 17:13:52 +02:00
github-actions[bot]
3ab6f1b31d 📝 Update release notes
[skip ci]
2026-05-18 15:07:31 +00:00
Sebastián Ramírez
f3963927ec 🌐 Update translations for tr (update-outdated) (#15526)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-05-18 17:06:50 +02:00
github-actions[bot]
1f48fb42fc 📝 Update release notes
[skip ci]
2026-05-18 15:00:52 +00:00
Sebastián Ramírez
5cfd983e1d 🌐 Update translations for ko (update-outdated) (#15525)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-05-18 17:00:20 +02:00
github-actions[bot]
e3844f1972 📝 Update release notes
[skip ci]
2026-05-18 11:55:46 +00:00
Sebastián Ramírez
99812444ab 📝 Update docs, simplify usage of admonitions, only default ones (#15553) 2026-05-18 13:55:19 +02:00
github-actions[bot]
480fdba26a 📝 Update release notes
[skip ci]
2026-05-18 09:54:43 +00:00
Sebastián Ramírez
f0c3d87da2 🌐 Update translations for zh-hant (update-outdated) (#15524)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-05-18 11:53:58 +02:00
github-actions[bot]
4047993ba8 📝 Update release notes
[skip ci]
2026-05-18 09:52:55 +00:00
Sebastián Ramírez
e6edf14a27 🌐 Update translations for fr (update-outdated) (#15522)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-05-18 11:52:29 +02:00
github-actions[bot]
34a82b1b87 📝 Update release notes
[skip ci]
2026-05-18 09:06:54 +00:00
Sofie Van Landeghem
622dcdc99c 🔒️ Only allow team members to modify dependencies (#15548) 2026-05-18 11:06:23 +02:00
github-actions[bot]
8106d6391d 📝 Update release notes
[skip ci]
2026-05-18 08:55:57 +00:00
Sebastián Ramírez
6163cc7996 🌐 Update translations for es (update-outdated) (#15523)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-05-18 08:55:28 +00:00
github-actions[bot]
c7171f86b2 📝 Update release notes
[skip ci]
2026-05-18 08:38:07 +00:00
Sebastián Ramírez
eff8bc4e66 🌐 Update translations for zh (update-outdated) (#15520)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
2026-05-18 10:37:41 +02:00
github-actions[bot]
9364f552e6 📝 Update release notes
[skip ci]
2026-05-18 08:26:50 +00:00
Sebastián Ramírez
72f127ddad 🌐 Update translations for ru (update-outdated) (#15521)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
2026-05-18 08:26:15 +00:00
github-actions[bot]
a35a0b8b62 📝 Update release notes
[skip ci]
2026-05-18 07:03:26 +00:00
Yurii Motov
3e2ef69479 📝 Fix image URLs in index.md (#15534) 2026-05-18 09:03:01 +02:00
github-actions[bot]
ecace740f3 📝 Update release notes
[skip ci]
2026-05-15 15:18:26 +00:00
dependabot[bot]
6939bf8bb7 ⬆ Bump actions/add-to-project from 1.0.2 to 2.0.0 (#15490)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-15 17:17:52 +02:00
github-actions[bot]
40e383e0b2 📝 Update release notes
[skip ci]
2026-05-15 13:03:21 +00:00
dependabot[bot]
a0f42dd7d5 ⬆ Bump actions/labeler from 6.0.1 to 6.1.0 (#15507)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-15 15:02:56 +02:00
github-actions[bot]
6f2dbb96ac 📝 Update release notes
[skip ci]
2026-05-15 10:16:08 +00:00
Sebastián Ramírez
b6abc93bff 🔧 Remove Ruff ignored rule for tabs (#15533) 2026-05-15 10:15:37 +00:00
github-actions[bot]
b31ffc1efd 📝 Update release notes
[skip ci]
2026-05-15 07:43:05 +00:00
Sebastián Ramírez
b71da659cf 🔧 Update sponsors badge (#15532) 2026-05-15 07:42:33 +00:00
github-actions[bot]
b70238d9e3 📝 Update release notes
[skip ci]
2026-05-15 07:10:03 +00:00
Sebastián Ramírez
2c26191e30 🔧 Add sponsor: TalorData (#15531) 2026-05-15 09:09:35 +02:00
github-actions[bot]
e89a37e50d 📝 Update release notes
[skip ci]
2026-05-11 15:00:29 +00:00
dependabot[bot]
5d5666bec5 ⬆ Bump ty from 0.0.21 to 0.0.34 (#15443)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: svlandeg <sofie.vanlandeghem@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-11 16:59:50 +02:00
github-actions[bot]
7cb195394c 📝 Update release notes
[skip ci]
2026-05-11 11:58:59 +00:00
dependabot[bot]
3ec959abc7 ⬆ Bump pydantic from 2.13.2 to 2.13.3 (#15444)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-11 13:58:35 +02:00
github-actions[bot]
622b6356b5 📝 Update release notes
[skip ci]
2026-05-05 09:45:26 +00:00
Sebastián Ramírez
fb7429378d 👷 Add pre-commit to check typos (#15482) 2026-05-05 09:44:36 +00:00
github-actions[bot]
3efd86c1fd 📝 Update release notes
[skip ci]
2026-05-05 08:05:22 +00:00
Carlos Rodríguez Romo
f8cbeabf81 🌐 Fix typos in Spanish LLM-prompt (#15472)
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-05-05 10:04:50 +02:00
github-actions[bot]
8c660a6819 📝 Update release notes
[skip ci]
2026-05-04 14:54:02 +00:00
Isaac
810fd2a888 ✏️ Fix Azkaban spelling typo in virtual-environments.md‎ (#15463) 2026-05-04 16:53:29 +02:00
github-actions[bot]
ecf73d61c3 📝 Update release notes
[skip ci]
2026-05-03 13:45:03 +00:00
Sebastián Ramírez
9ccaab154a 👥 Update FastAPI GitHub topic repositories (#15470)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-03 15:44:38 +02:00
github-actions[bot]
f72afb6f6e 📝 Update release notes
[skip ci]
2026-05-03 13:37:48 +00:00
Sebastián Ramírez
8da79ec2fe 👥 Update FastAPI People - Experts (#15471)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-03 15:37:17 +02:00
github-actions[bot]
205bd85a46 📝 Update release notes
[skip ci]
2026-05-03 13:27:17 +00:00
Sebastián Ramírez
bc8b1d101c 👥 Update FastAPI People - Contributors and Translators (#15467)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-03 15:26:47 +02:00
github-actions[bot]
e0a2c75b1a 📝 Update release notes
[skip ci]
2026-05-01 14:30:09 +00:00
Motov Yurii
33ed5aecdf 👷 Fix missing credentials issue in translate workflow (#15468) 2026-05-01 16:29:41 +02:00
github-actions[bot]
d8a2c1edaa 📝 Update release notes
[skip ci]
2026-04-30 16:04:10 +00:00
Alejandra
b363a1d002 💄 Improve layout and styling (#15462)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-30 18:03:33 +02:00
github-actions[bot]
a3ceb9ca74 📝 Update release notes
[skip ci]
2026-04-30 13:40:02 +00:00
Alejandra
aff0b7cd43 💄 Refactor opinions section with interactive tabs and new logos (#15458)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-30 15:39:30 +02:00
github-actions[bot]
6b20159c59 📝 Update release notes
[skip ci]
2026-04-30 10:15:55 +00:00
Alejandra
a217d2ff2a 📝 Add FastAPI Conf '26 announcement to docs (#15457)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-30 12:15:20 +02:00
github-actions[bot]
4f64b8f651 📝 Update release notes
[skip ci]
2026-04-27 20:25:54 +00:00
dependabot[bot]
1f7c8c1ad3 ⬆ Bump sqlmodel from 0.0.32 to 0.0.38 (#15437)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-04-27 22:25:27 +02:00
github-actions[bot]
0e78824634 📝 Update release notes
[skip ci]
2026-04-27 20:22:35 +00:00
dependabot[bot]
4bad6d2597 ⬆ Bump CodSpeedHQ/action from 4.12.1 to 4.14.0 (#15436)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 22:22:06 +02:00
github-actions[bot]
44ddc3e7c8 📝 Update release notes
[skip ci]
2026-04-27 20:11:55 +00:00
dependabot[bot]
edc4c8ba33 ⬆ Bump pydantic from 2.12.5 to 2.13.2 (#15439)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 22:11:27 +02:00
github-actions[bot]
b44585589a 📝 Update release notes
[skip ci]
2026-04-24 13:06:36 +00:00
dependabot[bot]
f43cc1c0ef ⬆ Bump pydantic-ai from 1.63.0 to 1.83.0 (#15417)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-24 15:06:10 +02:00
github-actions[bot]
5c89b88c9f 📝 Update release notes
[skip ci]
2026-04-24 12:37:51 +00:00
dependabot[bot]
4216f99515 ⬆ Bump prek from 0.3.2 to 0.3.9 (#15418)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-24 14:37:27 +02:00
github-actions[bot]
33aa27c7b7 📝 Update release notes
[skip ci]
2026-04-24 12:25:32 +00:00
dependabot[bot]
086048e395 ⬆ Bump fastar from 0.9.0 to 0.11.0 (#15419)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-24 14:25:04 +02:00
github-actions[bot]
91dd310da9 📝 Update release notes
[skip ci]
2026-04-24 09:34:53 +00:00
dependabot[bot]
3747204677 ⬆ Bump astral-sh/setup-uv from 7.6.0 to 8.1.0 (#15415)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-24 11:34:24 +02:00
Sebastián Ramírez
e54e5a8980 🔖 Release version 0.136.1 2026-04-23 18:45:55 +02:00
github-actions[bot]
9a8a5fd999 📝 Update release notes
[skip ci]
2026-04-23 16:40:58 +00:00
Sofie Van Landeghem
7815a32f2e ⬆️ Update Pydantic v2 code to address deprecations (#15101)
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
2026-04-23 18:40:29 +02:00
github-actions[bot]
ef1c927b05 📝 Update release notes
[skip ci]
2026-04-23 16:36:15 +00:00
Motov Yurii
38039e12a8 🔨 Tweak translation script (#15174) 2026-04-23 18:35:43 +02:00
github-actions[bot]
4fa826ce0a 📝 Update release notes
[skip ci]
2026-04-22 13:11:11 +00:00
dependabot[bot]
c39415673e ⬆ Bump mkdocs-material from 9.7.1 to 9.7.6 (#15408)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 15:10:45 +02:00
github-actions[bot]
ae230ad2f9 📝 Update release notes
[skip ci]
2026-04-22 13:04:53 +00:00
dependabot[bot]
d9eb39d1a1 ⬆ Bump inline-snapshot from 0.31.1 to 0.32.6 (#15409)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-04-22 15:04:27 +02:00
github-actions[bot]
4f8b5d14d3 📝 Update release notes
[skip ci]
2026-04-22 12:53:59 +00:00
dependabot[bot]
04958499e0 ⬆ Bump pytest-codspeed from 4.3.0 to 4.4.0 (#15407)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 14:53:36 +02:00
github-actions[bot]
71f3c30108 📝 Update release notes
[skip ci]
2026-04-22 12:49:37 +00:00
dependabot[bot]
ea230dc80b ⬆ Bump pytest-cov from 7.0.0 to 7.1.0 (#15406)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 14:49:01 +02:00
github-actions[bot]
5f68b19002 📝 Update release notes
[skip ci]
2026-04-22 12:45:14 +00:00
dependabot[bot]
7402e33375 ⬆ Bump cloudflare/wrangler-action from 3.14.1 to 3.15.0 (#15405)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 14:44:48 +02:00
github-actions[bot]
750ef483f2 📝 Update release notes
[skip ci]
2026-04-22 12:41:48 +00:00
dependabot[bot]
7c6b79eb3b ⬆ Bump mypy from 1.19.1 to 1.20.1 (#15410)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 14:41:23 +02:00
github-actions[bot]
c38782e0e8 📝 Update release notes
[skip ci]
2026-04-22 07:43:16 +00:00
dependabot[bot]
840e462667 ⬆ Bump python-dotenv from 1.2.1 to 1.2.2 (#15400)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 09:42:50 +02:00
github-actions[bot]
88021c3dc0 📝 Update release notes
[skip ci]
2026-04-21 12:46:11 +00:00
dependabot[bot]
13eade2fd9 ⬆ Bump starlette from 0.52.1 to 1.0.0 (#15397)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 14:45:41 +02:00
github-actions[bot]
e0900abc6d 📝 Update release notes
[skip ci]
2026-04-21 12:43:48 +00:00
dependabot[bot]
4e6d8dc600 ⬆ Bump pygithub from 2.8.1 to 2.9.1 (#15396)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 14:43:25 +02:00
github-actions[bot]
2bf3cdeb19 📝 Update release notes
[skip ci]
2026-04-21 12:34:33 +00:00
dependabot[bot]
043fdce921 ⬆ Bump pyjwt from 2.12.0 to 2.12.1 (#15393)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 14:34:09 +02:00
github-actions[bot]
9d79b257ad 📝 Update release notes
[skip ci]
2026-04-21 12:27:48 +00:00
dependabot[bot]
6fadc67d62 ⬆ Bump zizmor from 1.23.1 to 1.24.1 (#15394)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 14:27:24 +02:00
github-actions[bot]
a93b1db937 📝 Update release notes
[skip ci]
2026-04-21 12:25:12 +00:00
dependabot[bot]
e5a86c3972 ⬆ Bump strawberry-graphql from 0.312.3 to 0.314.3 (#15395)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 14:24:45 +02:00
github-actions[bot]
916edab526 📝 Update release notes
[skip ci]
2026-04-21 08:16:18 +00:00
dependabot[bot]
355c12ce0e ⬆ Bump python-multipart from 0.0.22 to 0.0.26 (#15360)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-04-21 10:15:51 +02:00
github-actions[bot]
4a29794efb 📝 Update release notes
[skip ci]
2026-04-21 08:13:27 +00:00
dependabot[bot]
c6bf1a9702 ⬆ Bump authlib from 1.6.9 to 1.6.11 (#15373)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-04-21 08:12:58 +00:00
github-actions[bot]
19c7b4bc28 📝 Update release notes
[skip ci]
2026-04-21 07:57:39 +00:00
dependabot[bot]
0d68ccc87c ⬆ Bump aiohttp from 3.13.3 to 3.13.4 (#15282)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-04-21 07:57:13 +00:00
github-actions[bot]
fb5f830bf8 📝 Update release notes
[skip ci]
2026-04-21 07:47:30 +00:00
dependabot[bot]
7ce742e2c1 ⬆ Bump pygments from 2.19.2 to 2.20.0 (#15263)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-04-21 07:47:00 +00:00
github-actions[bot]
28b18ced2d 📝 Update release notes
[skip ci]
2026-04-21 07:38:46 +00:00
Motov Yurii
2d625c0962 ⬆ Bump pymdown-extensions from 10.20.1 to 10.21.2 (#15391) 2026-04-21 09:38:21 +02:00
github-actions[bot]
ecc9069b90 📝 Update release notes
[skip ci]
2026-04-20 21:41:14 +00:00
dependabot[bot]
7d23cc8fe8 ⬆ Bump pillow from 12.1.1 to 12.2.0 (#15333)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-04-20 21:40:49 +00:00
github-actions[bot]
636998e53a 📝 Update release notes
[skip ci]
2026-04-20 21:33:25 +00:00
dependabot[bot]
a8773aadf8 ⬆ Bump pytest from 9.0.2 to 9.0.3 (#15334)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 23:32:59 +02:00
github-actions[bot]
2378fbbc45 📝 Update release notes
[skip ci]
2026-04-20 21:20:00 +00:00
dependabot[bot]
c874e067dc ⬆ Bump actions/upload-artifact from 7.0.0 to 7.0.1 (#15374)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 23:19:34 +02:00
github-actions[bot]
bdd6c70760 📝 Update release notes
[skip ci]
2026-04-20 21:10:31 +00:00
dependabot[bot]
a595e44d28 ⬆ Bump actions/cache from 5.0.4 to 5.0.5 (#15385)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 23:10:03 +02:00
github-actions[bot]
2fa00db858 📝 Update release notes
[skip ci]
2026-04-16 12:48:09 +00:00
Sebastián Ramírez
41df44a29c 🔧 Update sponsors: remove Zuplo (#15369) 2026-04-16 12:47:22 +00:00
github-actions[bot]
6976b0d4e6 📝 Update release notes
[skip ci]
2026-04-16 12:42:52 +00:00
Sebastián Ramírez
3808d8540f 🔧 Update sponsors: remove Speakeasy (#15368) 2026-04-16 12:42:27 +00:00
github-actions[bot]
24db1286eb 📝 Update release notes
[skip ci]
2026-04-16 12:21:29 +00:00
Motov Yurii
3f4169be1a 🔒️ Add zizmor and fix audit findings (#15316) 2026-04-16 12:21:03 +00:00
Sebastián Ramírez
708606c982 🔖 Release version 0.136.0 2026-04-16 13:45:09 +02:00
github-actions[bot]
13be6a3a0f 📝 Update release notes
[skip ci]
2026-04-16 11:42:31 +00:00
Sofie Van Landeghem
4b264878d7 ⬆️ Support free-threaded Python 3.14t (#15149) 2026-04-16 13:42:00 +02:00
Sebastián Ramírez
f796c346a8 🔖 Release version 0.135.4 2026-04-16 13:37:43 +02:00
github-actions[bot]
09d1d1cb70 📝 Update release notes
[skip ci]
2026-04-16 11:35:32 +00:00
Sebastián Ramírez
ae4e45c5cc 🔥 Remove April Fool's @app.vibe() 🤪 (#15363) 2026-04-16 11:35:06 +00:00
github-actions[bot]
9653034b8d 📝 Update release notes
[skip ci]
2026-04-13 12:43:51 +00:00
dependabot[bot]
6f9a102faf ⬆ Bump cryptography from 46.0.5 to 46.0.7 (#15314)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-13 14:43:26 +02:00
github-actions[bot]
eba8942c81 📝 Update release notes
[skip ci]
2026-04-07 09:50:22 +00:00
dependabot[bot]
77d080caf8 ⬆ Bump strawberry-graphql from 0.307.1 to 0.312.3 (#15309)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-07 11:49:52 +02:00
github-actions[bot]
c3c9dd6b1a 📝 Update release notes
[skip ci]
2026-04-03 12:07:04 +00:00
Motov Yurii
180e81bb4b 🔨 Add pre-commit hook to ensure latest release header has date (#15293) 2026-04-03 14:06:36 +02:00
Sebastián Ramírez
1f442c454f 🔖 Release version 0.135.3 2026-04-01 18:21:01 +02:00
Sebastián Ramírez
8f5d1577b4 📝 Update release notes 2026-04-01 18:18:42 +02:00
github-actions[bot]
428452a710 📝 Update release notes
[skip ci]
2026-04-01 16:16:52 +00:00
Sebastián Ramírez
70580da818 Add support for @app.vibe() (#15280) 2026-04-01 18:16:24 +02:00
github-actions[bot]
6ee87478d8 📝 Update release notes
[skip ci]
2026-04-01 15:47:49 +00:00
Sebastián Ramírez
3e72c09a2a 👥 Update FastAPI People - Experts (#15279)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-01 17:47:21 +02:00
github-actions[bot]
96df35f7a4 📝 Update release notes
[skip ci]
2026-04-01 14:30:30 +00:00
dependabot[bot]
6c8112555b ⬆ Bump orjson from 3.11.7 to 3.11.8 (#15276)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-01 16:29:59 +02:00
github-actions[bot]
428f82c936 📝 Update release notes
[skip ci]
2026-04-01 14:27:53 +00:00
dependabot[bot]
5599c59b9e ⬆ Bump ruff from 0.15.0 to 0.15.8 (#15277)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-01 16:27:20 +02:00
github-actions[bot]
cc47796509 📝 Update release notes
[skip ci]
2026-04-01 12:37:11 +00:00
Sebastián Ramírez
9274097c30 👥 Update FastAPI GitHub topic repositories (#15274)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-01 14:36:41 +02:00
github-actions[bot]
681146d90b 📝 Update release notes
[skip ci]
2026-04-01 07:33:52 +00:00
dependabot[bot]
cb4fe1b453 ⬆ Bump fastmcp from 2.14.5 to 3.2.0 (#15267)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-01 09:33:06 +02:00
github-actions[bot]
a15609f56d 📝 Update release notes
[skip ci]
2026-04-01 07:32:21 +00:00
Sebastián Ramírez
81194139aa 👥 Update FastAPI People - Contributors and Translators (#15270)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-01 09:31:54 +02:00
github-actions[bot]
d128a7089a 📝 Update release notes
[skip ci]
2026-03-26 21:53:12 +00:00
dependabot[bot]
3b9d8481c5 ⬆ Bump requests from 2.32.5 to 2.33.0 (#15228)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-26 22:52:50 +01:00
github-actions[bot]
937d3075f9 📝 Update release notes
[skip ci]
2026-03-24 16:39:58 +00:00
Sofie Van Landeghem
8238446b1b 👷 Add ty check to lint.sh (#15136) 2026-03-24 17:39:32 +01:00
github-actions[bot]
e2a0fd4ad8 📝 Update release notes
[skip ci]
2026-03-24 16:32:36 +00:00
Kadir Can Ozden
fa3588c38c ✏️ Fix typo for client_secret in OAuth2 form docstrings (#14946) 2026-03-24 17:32:10 +01:00
950 changed files with 13143 additions and 9232 deletions

1
.github/FUNDING.yml vendored
View File

@@ -1 +0,0 @@
github: [tiangolo]

View File

@@ -4,13 +4,47 @@ updates:
- package-ecosystem: "github-actions" - package-ecosystem: "github-actions"
directory: "/" directory: "/"
schedule: schedule:
interval: "daily" interval: "weekly"
cooldown:
default-days: 7
commit-message: commit-message:
prefix: prefix:
labels:
- "internal"
- "dependencies"
- "github_actions"
groups:
github-actions:
patterns:
- "*"
# Python # Python
- package-ecosystem: "uv" - package-ecosystem: "uv"
directory: "/" directory: "/"
schedule: schedule:
interval: "monthly" interval: "weekly"
cooldown:
default-days: 7
commit-message: commit-message:
prefix: prefix:
groups:
python-packages:
dependency-type: "development"
patterns:
- "*"
# pre-commit
- package-ecosystem: "pre-commit"
directory: "/"
schedule:
interval: "weekly"
cooldown:
default-days: 7
commit-message:
prefix:
labels:
- "internal"
- "dependencies"
- "pre-commit"
groups:
pre-commit:
patterns:
- "*"

View File

@@ -1,18 +1,21 @@
name: Add to Project name: Add to Project
on: on:
pull_request_target: pull_request_target: # zizmor: ignore[dangerous-triggers]
issues: issues:
types: types:
- opened - opened
- reopened - reopened
permissions: {}
jobs: jobs:
add-to-project: add-to-project:
name: Add to project name: Add to project
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
steps: steps:
- uses: actions/add-to-project@v1.0.2 - uses: actions/add-to-project@5afcf98fcd03f1c2f92c3c83f58ae24323cc57fd # v2.0.0
with: with:
project-url: https://github.com/orgs/fastapi/projects/2 project-url: https://github.com/orgs/fastapi/projects/2
github-token: ${{ secrets.PROJECTS_TOKEN }} github-token: ${{ secrets.PROJECTS_TOKEN }} # zizmor: ignore[secrets-outside-env]

View File

@@ -8,19 +8,24 @@ on:
- opened - opened
- synchronize - synchronize
permissions: {}
jobs: jobs:
changes: changes:
runs-on: ubuntu-latest runs-on: ubuntu-latest
# Required permissions # Required permissions
permissions: permissions:
pull-requests: read pull-requests: read
timeout-minutes: 5
# Set job outputs to values from filter step # Set job outputs to values from filter step
outputs: outputs:
docs: ${{ steps.filter.outputs.docs }} docs: ${{ steps.filter.outputs.docs }}
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
# For pull requests it's not necessary to checkout the code but for the main branch it is # For pull requests it's not necessary to checkout the code but for the main branch it is
- uses: dorny/paths-filter@v4 - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
id: filter id: filter
with: with:
filters: | filters: |
@@ -30,26 +35,31 @@ jobs:
- docs_src/** - docs_src/**
- pyproject.toml - pyproject.toml
- uv.lock - uv.lock
- mkdocs.yml
- mkdocs.env.yml
- .github/workflows/build-docs.yml - .github/workflows/build-docs.yml
- .github/workflows/deploy-docs.yml - .github/workflows/deploy-docs.yml
- scripts/mkdocs_hooks.py - scripts/docs.py
langs: langs:
needs: needs:
- changes - changes
if: ${{ needs.changes.outputs.docs == 'true' }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
outputs: outputs:
langs: ${{ steps.show-langs.outputs.langs }} langs: ${{ steps.show-langs.outputs.langs }}
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
@@ -67,6 +77,7 @@ jobs:
- langs - langs
if: ${{ needs.changes.outputs.docs == 'true' }} if: ${{ needs.changes.outputs.docs == 'true' }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 7
strategy: strategy:
matrix: matrix:
lang: ${{ fromJson(needs.langs.outputs.langs) }} lang: ${{ fromJson(needs.langs.outputs.langs) }}
@@ -75,14 +86,19 @@ jobs:
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
@@ -91,27 +107,35 @@ jobs:
run: uv sync --locked --no-dev --group docs run: uv sync --locked --no-dev --group docs
- name: Update Languages - name: Update Languages
run: uv run ./scripts/docs.py update-languages run: uv run ./scripts/docs.py update-languages
- uses: actions/cache@v5 - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with: with:
key: mkdocs-cards-${{ matrix.lang }}-${{ github.ref }} key: zensical-${{ matrix.lang }}-${{ github.ref }}
path: docs/${{ matrix.lang }}/.cache path: site_zensical_src/${{ matrix.lang }}/.cache
- name: Build Docs - name: Build Docs
run: uv run ./scripts/docs.py build-lang ${{ matrix.lang }} run: | # zizmor: ignore[template-injection] - comes from trusted source
- uses: actions/upload-artifact@v7 uv run ./scripts/docs.py build-lang ${{ matrix.lang }}
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with: with:
name: docs-site-${{ matrix.lang }} name: docs-site-${{ matrix.lang }}
path: ./site/** # English owns root static assets. Translated pages reference /img, /css,
# and /js, so omit duplicated language-local copies from artifacts.
path: |
./site/**
!./site/${{ matrix.lang }}/img/**
!./site/${{ matrix.lang }}/css/**
!./site/${{ matrix.lang }}/js/**
include-hidden-files: true include-hidden-files: true
# https://github.com/marketplace/actions/alls-green#why # https://github.com/marketplace/actions/alls-green#why
docs-all-green: # This job does nothing and is only used for the branch protection docs-all-green: # This job does nothing and is only used for the branch protection
if: always() if: always()
needs: needs:
- langs
- build-docs - build-docs
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Decide whether the needed jobs succeeded or failed - name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1 uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
with: with:
jobs: ${{ toJSON(needs) }} jobs: ${{ toJSON(needs) }}
allowed-skips: build-docs allowed-skips: langs, build-docs

View File

@@ -10,6 +10,8 @@ on:
required: false required: false
default: "false" default: "false"
permissions: {}
jobs: jobs:
job: job:
if: github.repository_owner == 'fastapi' if: github.repository_owner == 'fastapi'
@@ -21,14 +23,19 @@ jobs:
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: true # Required for `git push` in `contributors.py`
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
@@ -37,13 +44,13 @@ jobs:
run: uv sync --locked --no-dev --group github-actions run: uv sync --locked --no-dev --group github-actions
# Allow debugging with tmate # Allow debugging with tmate
- name: Setup tmate session - name: Setup tmate session
uses: mxschmitt/action-tmate@v3 uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113 # v3.24
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }} if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }}
with: with:
limit-access-to-actor: true limit-access-to-actor: true
env: env:
GITHUB_TOKEN: ${{ secrets.FASTAPI_PR_TOKEN }} GITHUB_TOKEN: ${{ secrets.FASTAPI_PR_TOKEN }} # zizmor: ignore[secrets-outside-env]
- name: FastAPI People Contributors - name: FastAPI People Contributors
run: uv run ./scripts/contributors.py run: uv run ./scripts/contributors.py
env: env:
GITHUB_TOKEN: ${{ secrets.FASTAPI_PR_TOKEN }} GITHUB_TOKEN: ${{ secrets.FASTAPI_PR_TOKEN }} # zizmor: ignore[secrets-outside-env]

View File

@@ -0,0 +1,56 @@
name: Create Draft Release
on:
pull_request:
types:
- closed
permissions: {}
jobs:
create-draft-release:
if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'release')
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: write
env:
PREPARE_RELEASE_VERSION_FILE: fastapi/__init__.py
PREPARE_RELEASE_RELEASE_NOTES_FILE: docs/en/docs/release-notes.md
steps:
- name: Dump GitHub context
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
ref: ${{ github.event.repository.default_branch }}
persist-credentials: true
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version-file: ".python-version"
- name: Install uv
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
- name: Extract release details
id: release-details
run: |
set -euo pipefail
version="$(uv run python scripts/prepare_release.py current-version)"
uv run python scripts/prepare_release.py release-notes > draft-release-notes.md
echo "version=$version" >> "$GITHUB_OUTPUT"
- name: Create draft release
env:
GH_TOKEN: ${{ github.token }}
VERSION: ${{ steps.release-details.outputs.version }}
run: |
set -euo pipefail
gh release create "$VERSION" \
--draft \
--title "$VERSION" \
--notes-file draft-release-notes.md \
--target "$(git rev-parse HEAD)"

View File

@@ -1,37 +1,41 @@
name: Deploy Docs name: Deploy Docs
on: on:
workflow_run: workflow_run: # zizmor: ignore[dangerous-triggers]
workflows: workflows:
- Build Docs - Build Docs
types: types:
- completed - completed
permissions: permissions: {}
deployments: write
issues: write
pull-requests: write
statuses: write
jobs: jobs:
deploy-docs: deploy-docs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
deployments: write
issues: write
pull-requests: write
statuses: write
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
enable-cache: true # Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
cache-dependency-glob: | # See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
pyproject.toml version: "0.11.18"
uv.lock enable-cache: false
- name: Install GitHub Actions dependencies - name: Install GitHub Actions dependencies
run: uv sync --locked --no-dev --group github-actions run: uv sync --locked --no-dev --group github-actions
- name: Deploy Docs Status Pending - name: Deploy Docs Status Pending
@@ -45,7 +49,7 @@ jobs:
run: | run: |
rm -rf ./site rm -rf ./site
mkdir ./site mkdir ./site
- uses: actions/download-artifact@v8 - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with: with:
path: ./site/ path: ./site/
pattern: docs-site-* pattern: docs-site-*
@@ -59,10 +63,10 @@ jobs:
env: env:
PROJECT_NAME: fastapitiangolo PROJECT_NAME: fastapitiangolo
BRANCH: ${{ ( github.event.workflow_run.head_repository.full_name == github.repository && github.event.workflow_run.head_branch == 'master' && 'main' ) || ( github.event.workflow_run.head_sha ) }} BRANCH: ${{ ( github.event.workflow_run.head_repository.full_name == github.repository && github.event.workflow_run.head_branch == 'master' && 'main' ) || ( github.event.workflow_run.head_sha ) }}
uses: cloudflare/wrangler-action@v3 uses: cloudflare/wrangler-action@ebbaa1584979971c8614a24965b4405ff95890e0 # v4.0.0
with: with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} # zizmor: ignore[secrets-outside-env]
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} # zizmor: ignore[secrets-outside-env]
command: pages deploy ./site --project-name=${{ env.PROJECT_NAME }} --branch=${{ env.BRANCH }} command: pages deploy ./site --project-name=${{ env.PROJECT_NAME }} --branch=${{ env.BRANCH }}
- name: Deploy Docs Status Error - name: Deploy Docs Status Error
if: failure() if: failure()

View File

@@ -1,18 +1,21 @@
name: "Conflict detector" name: "Conflict detector"
on: on:
push: push:
pull_request_target: pull_request_target: # zizmor: ignore[dangerous-triggers]
types: [synchronize] types: [synchronize]
permissions: {}
jobs: jobs:
main: main:
permissions: permissions:
contents: read contents: read
pull-requests: write pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
steps: steps:
- name: Check if PRs have merge conflicts - name: Check if PRs have merge conflicts
uses: eps1lon/actions-label-merge-conflict@v3 uses: eps1lon/actions-label-merge-conflict@0273be72a0bbd58fcd71d0d6c02c209b50d1e5e1 # v3.1.0
with: with:
dirtyLabel: "conflicts" dirtyLabel: "conflicts"
repoToken: "${{ secrets.GITHUB_TOKEN }}" repoToken: "${{ secrets.GITHUB_TOKEN }}"

View File

@@ -0,0 +1,53 @@
name: Guard Dependencies
on:
pull_request_target: # zizmor: ignore[dangerous-triggers] -- This workflow only reads context.payload metadata, never checks out PR code
branches: [master]
paths:
- pyproject.toml
- uv.lock
permissions:
contents: read
issues: write
pull-requests: write
jobs:
check-author:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Check if author is org member or allowed bot
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const pr = context.payload.pull_request;
const author = pr.user.login;
const assoc = pr.author_association;
const botAllowlist = new Set(['dependabot[bot]']);
const orgAuthorAssociations = new Set(['MEMBER', 'OWNER']);
const allowed =
botAllowlist.has(author) ||
(assoc != null && orgAuthorAssociations.has(assoc));
if (!allowed) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: `This PR modifies dependency files (\`pyproject.toml\` or \`uv.lock\`), which is restricted to members of the **${context.repo.owner}** organization on GitHub.\n\nIf you need a dependency change, please [open a discussion](https://github.com/${context.repo.owner}/${context.repo.repo}/discussions/new) describing what you need and why.\n\nClosing this PR automatically.`
});
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
state: 'closed'
});
core.setFailed('Dependency changes are restricted to organization members.');
} else {
console.log(`Author ${author} (author_association=${assoc}) is allowed to make dependency changes.`);
}

View File

@@ -9,25 +9,27 @@ on:
issues: issues:
types: types:
- labeled - labeled
pull_request_target: pull_request_target: # zizmor: ignore[dangerous-triggers]
types: types:
- labeled - labeled
workflow_dispatch: workflow_dispatch:
permissions: permissions: {}
issues: write
pull-requests: write
jobs: jobs:
issue-manager: issue-manager:
if: github.repository_owner == 'fastapi' if: github.repository_owner == 'fastapi'
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: tiangolo/issue-manager@0.6.0 - uses: tiangolo/issue-manager@2fb3484ec9279485df8659e8ec73de262431737d # 0.6.0
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
config: > config: >

View File

@@ -5,26 +5,33 @@ on:
- cron: "0 12 * * *" - cron: "0 12 * * *"
workflow_dispatch: workflow_dispatch:
permissions: permissions: {}
pull-requests: write
jobs: jobs:
label-approved: label-approved:
if: github.repository_owner == 'fastapi' if: github.repository_owner == 'fastapi'
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
pull-requests: write
timeout-minutes: 7
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml

View File

@@ -1,6 +1,6 @@
name: Labels name: Labels
on: on:
pull_request_target: pull_request_target: # zizmor: ignore[dangerous-triggers]
types: types:
- opened - opened
- synchronize - synchronize
@@ -9,14 +9,17 @@ on:
- labeled - labeled
- unlabeled - unlabeled
permissions: {}
jobs: jobs:
labeler: labeler:
permissions: permissions:
contents: read contents: read
pull-requests: write pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
steps: steps:
- uses: actions/labeler@v6 - uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 # v6.1.0
if: ${{ github.event.action != 'labeled' && github.event.action != 'unlabeled' }} if: ${{ github.event.action != 'labeled' && github.event.action != 'unlabeled' }}
- run: echo "Done adding labels" - run: echo "Done adding labels"
# Run this after labeler applied labels # Run this after labeler applied labels
@@ -26,8 +29,9 @@ jobs:
permissions: permissions:
pull-requests: read pull-requests: read
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
steps: steps:
- uses: docker://agilepathway/pull-request-label-checker:latest - uses: agilepathway/label-checker@c3d16ad512e7cea5961df85ff2486bb774caf3c5 # v1.6.65
with: with:
one_of: breaking,security,feature,bug,refactor,upgrade,docs,lang-all,internal one_of: breaking,security,feature,bug,refactor,upgrade,docs,lang-all,internal,release
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,7 +1,7 @@
name: Latest Changes name: Latest Changes
on: on:
pull_request_target: pull_request_target: # zizmor: ignore[dangerous-triggers]
branches: branches:
- master - master
types: types:
@@ -16,27 +16,30 @@ on:
required: false required: false
default: 'false' default: 'false'
permissions: {}
jobs: jobs:
latest-changes: latest-changes:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' || github.event.pull_request.merged == true
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
# pin to actions/checkout@v5 for compatibility with latest-changes - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
# Ref: https://github.com/actions/checkout/issues/2313
- uses: actions/checkout@v5
with: with:
# To allow latest-changes to commit to the main branch # To allow latest-changes to commit to the main branch
token: ${{ secrets.FASTAPI_LATEST_CHANGES }} token: ${{ secrets.FASTAPI_LATEST_CHANGES }} # zizmor: ignore[secrets-outside-env]
persist-credentials: true # required by tiangolo/latest-changes
# Allow debugging with tmate # Allow debugging with tmate
- name: Setup tmate session - name: Setup tmate session
uses: mxschmitt/action-tmate@v3 uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113 # v3.24
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }} if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }}
with: with:
limit-access-to-actor: true limit-access-to-actor: true
- uses: tiangolo/latest-changes@0.4.1 - uses: tiangolo/latest-changes@eb3f6e7ff0073896ecb561e774a121de9418fa06 # 0.5.0
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
latest_changes_file: docs/en/docs/release-notes.md latest_changes_file: docs/en/docs/release-notes.md

View File

@@ -1,10 +1,12 @@
name: Notify Translations name: Notify Translations
on: on:
pull_request_target: pull_request_target: # zizmor: ignore[dangerous-triggers]
types: types:
- labeled - labeled
- closed - closed
branches:
- master
workflow_dispatch: workflow_dispatch:
inputs: inputs:
number: number:
@@ -15,24 +17,32 @@ on:
required: false required: false
default: 'false' default: 'false'
permissions: {}
jobs: jobs:
job: job:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
discussions: write discussions: write
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
@@ -41,7 +51,7 @@ jobs:
run: uv sync --locked --no-dev --group github-actions run: uv sync --locked --no-dev --group github-actions
# Allow debugging with tmate # Allow debugging with tmate
- name: Setup tmate session - name: Setup tmate session
uses: mxschmitt/action-tmate@v3 uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113 # v3.24
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }} if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }}
with: with:
limit-access-to-actor: true limit-access-to-actor: true

View File

@@ -10,6 +10,8 @@ on:
required: false required: false
default: "false" default: "false"
permissions: {}
jobs: jobs:
job: job:
if: github.repository_owner == 'fastapi' if: github.repository_owner == 'fastapi'
@@ -21,14 +23,19 @@ jobs:
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: true # Required for `git push` in `people.py`
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
@@ -37,14 +44,14 @@ jobs:
run: uv sync --locked --no-dev --group github-actions run: uv sync --locked --no-dev --group github-actions
# Allow debugging with tmate # Allow debugging with tmate
- name: Setup tmate session - name: Setup tmate session
uses: mxschmitt/action-tmate@v3 uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113 # v3.24
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }} if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }}
with: with:
limit-access-to-actor: true limit-access-to-actor: true
env: env:
GITHUB_TOKEN: ${{ secrets.FASTAPI_PEOPLE }} GITHUB_TOKEN: ${{ secrets.FASTAPI_PEOPLE }} # zizmor: ignore[secrets-outside-env]
- name: FastAPI People Experts - name: FastAPI People Experts
run: uv run ./scripts/people.py run: uv run ./scripts/people.py
env: env:
GITHUB_TOKEN: ${{ secrets.FASTAPI_PEOPLE }} GITHUB_TOKEN: ${{ secrets.FASTAPI_PEOPLE }} # zizmor: ignore[secrets-outside-env]
SLEEP_INTERVAL: ${{ vars.PEOPLE_SLEEP_INTERVAL }} SLEEP_INTERVAL: ${{ vars.PEOPLE_SLEEP_INTERVAL }}

View File

@@ -6,6 +6,8 @@ on:
- opened - opened
- synchronize - synchronize
permissions: {}
env: env:
# Forks and Dependabot don't have access to secrets # Forks and Dependabot don't have access to secrets
HAS_SECRETS: ${{ secrets.PRE_COMMIT != '' }} HAS_SECRETS: ${{ secrets.PRE_COMMIT != '' }}
@@ -13,12 +15,13 @@ env:
jobs: jobs:
pre-commit: pre-commit:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v5 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
name: Checkout PR for own repo name: Checkout PR for own repo
if: env.HAS_SECRETS == 'true' if: env.HAS_SECRETS == 'true'
with: with:
@@ -28,22 +31,27 @@ jobs:
# And it needs the full history to be able to compute diffs # And it needs the full history to be able to compute diffs
fetch-depth: 0 fetch-depth: 0
# A token other than the default GITHUB_TOKEN is needed to be able to trigger CI # A token other than the default GITHUB_TOKEN is needed to be able to trigger CI
token: ${{ secrets.PRE_COMMIT }} token: ${{ secrets.PRE_COMMIT }} # zizmor: ignore[secrets-outside-env]
persist-credentials: true # Required for `git push` command
# pre-commit lite ci needs the default checkout configs to work # pre-commit lite ci needs the default checkout configs to work
- uses: actions/checkout@v5 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
name: Checkout PR for fork name: Checkout PR for fork
if: env.HAS_SECRETS == 'false' if: env.HAS_SECRETS == 'false'
with: with:
# To be able to commit it needs the head branch of the PR, the remote one # To be able to commit it needs the head branch of the PR, the remote one
ref: ${{ github.event.pull_request.head.sha }} ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0 fetch-depth: 0
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
uv.lock uv.lock
@@ -51,7 +59,7 @@ jobs:
run: uv sync --locked --extra all run: uv sync --locked --extra all
- name: Run prek - pre-commit - name: Run prek - pre-commit
id: precommit id: precommit
run: uvx prek run --from-ref origin/${GITHUB_BASE_REF} --to-ref HEAD --show-diff-on-failure run: uv run prek run --from-ref origin/${GITHUB_BASE_REF} --to-ref HEAD --show-diff-on-failure
continue-on-error: true continue-on-error: true
- name: Commit and push changes - name: Commit and push changes
if: env.HAS_SECRETS == 'true' if: env.HAS_SECRETS == 'true'
@@ -65,7 +73,7 @@ jobs:
git commit -m "🎨 Auto format" git commit -m "🎨 Auto format"
git push git push
fi fi
- uses: pre-commit-ci/lite-action@v1.1.0 - uses: pre-commit-ci/lite-action@5d6cc0eb514c891a40562a58a8e71576c5c7fb43 # v1.1.0
if: env.HAS_SECRETS == 'false' if: env.HAS_SECRETS == 'false'
with: with:
msg: 🎨 Auto format msg: 🎨 Auto format
@@ -79,12 +87,13 @@ jobs:
needs: needs:
- pre-commit - pre-commit
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- name: Decide whether the needed jobs succeeded or failed - name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1 uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
with: with:
jobs: ${{ toJSON(needs) }} jobs: ${{ toJSON(needs) }}

80
.github/workflows/prepare-release.yml vendored Normal file
View File

@@ -0,0 +1,80 @@
name: Prepare Release
on:
workflow_dispatch:
inputs:
bump:
description: Release bump
required: true
type: choice
options:
- patch
- minor
- major
date:
description: Release date in YYYY-MM-DD format. Defaults to today.
required: false
type: string
permissions: {}
jobs:
prepare-release:
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: write
issues: write
pull-requests: write
env:
PREPARE_RELEASE_VERSION_FILE: fastapi/__init__.py
PREPARE_RELEASE_RELEASE_NOTES_FILE: docs/en/docs/release-notes.md
steps:
- name: Dump GitHub context
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
token: ${{ secrets.FASTAPI_LATEST_CHANGES }} # zizmor: ignore[secrets-outside-env]
persist-credentials: true
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version-file: ".python-version"
- name: Install uv
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
- name: Prepare release
env:
PREPARE_RELEASE_BUMP: ${{ inputs.bump }}
PREPARE_RELEASE_DATE: ${{ inputs.date }}
run: uv run python scripts/prepare_release.py prepare
- name: Get release version
id: release-version
run: |
version="$(uv run python scripts/prepare_release.py current-version)"
echo "$version"
echo "version=$version" >> "$GITHUB_OUTPUT"
- name: Create release pull request
env:
GH_TOKEN: ${{ secrets.FASTAPI_LATEST_CHANGES }}
VERSION: ${{ steps.release-version.outputs.version }}
run: |
set -euo pipefail
branch="release-${VERSION}-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}"
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git switch -c "$branch"
git add $PREPARE_RELEASE_VERSION_FILE $PREPARE_RELEASE_RELEASE_NOTES_FILE
git commit -m "🔖 Release version ${VERSION}"
git push --set-upstream origin "$branch"
gh pr create \
--base master \
--head "$branch" \
--title "🔖 Release version ${VERSION}" \
--body "Prepare release ${VERSION}." \
--label release

View File

@@ -3,7 +3,9 @@ name: Publish
on: on:
release: release:
types: types:
- created - published
permissions: {}
jobs: jobs:
publish: publish:
@@ -11,18 +13,26 @@ jobs:
permissions: permissions:
id-token: write id-token: write
contents: read contents: read
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Install uv - name: Install uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: "false"
- name: Build distribution - name: Build distribution
run: uv build run: uv build
- name: Publish - name: Publish

View File

@@ -1,34 +1,41 @@
name: Smokeshow name: Smokeshow
on: on:
workflow_run: workflow_run: # zizmor: ignore[dangerous-triggers]
workflows: [Test] workflows: [Test]
types: [completed] types: [completed]
permissions: permissions: {}
statuses: write
jobs: jobs:
smokeshow: smokeshow:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
statuses: write
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/setup-python@v6 with:
persist-credentials: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
uv.lock uv.lock
- run: uv sync --locked --no-dev --group github-actions - run: uv sync --locked --no-dev --group github-actions
- uses: actions/download-artifact@v8 - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with: with:
name: coverage-html name: coverage-html
path: htmlcov path: htmlcov
@@ -51,4 +58,4 @@ jobs:
SMOKESHOW_GITHUB_CONTEXT: coverage SMOKESHOW_GITHUB_CONTEXT: coverage
SMOKESHOW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SMOKESHOW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SMOKESHOW_GITHUB_PR_HEAD_SHA: ${{ github.event.workflow_run.head_sha }} SMOKESHOW_GITHUB_PR_HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
SMOKESHOW_AUTH_KEY: ${{ secrets.SMOKESHOW_AUTH_KEY }} SMOKESHOW_AUTH_KEY: ${{ secrets.SMOKESHOW_AUTH_KEY }} # zizmor: ignore[secrets-outside-env]

View File

@@ -10,25 +10,33 @@ on:
required: false required: false
default: "false" default: "false"
permissions: {}
jobs: jobs:
job: job:
if: github.repository_owner == 'fastapi' if: github.repository_owner == 'fastapi'
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
contents: write contents: write
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: true # Required for `git push` in `sponsors.py`
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
@@ -37,12 +45,12 @@ jobs:
run: uv sync --locked --no-dev --group github-actions run: uv sync --locked --no-dev --group github-actions
# Allow debugging with tmate # Allow debugging with tmate
- name: Setup tmate session - name: Setup tmate session
uses: mxschmitt/action-tmate@v3 uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113 # v3.24
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }} if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }}
with: with:
limit-access-to-actor: true limit-access-to-actor: true
- name: FastAPI People Sponsors - name: FastAPI People Sponsors
run: uv run ./scripts/sponsors.py run: uv run ./scripts/sponsors.py
env: env:
SPONSORS_TOKEN: ${{ secrets.SPONSORS_TOKEN }} SPONSORS_TOKEN: ${{ secrets.SPONSORS_TOKEN }} # zizmor: ignore[secrets-outside-env]
PR_TOKEN: ${{ secrets.FASTAPI_PR_TOKEN }} PR_TOKEN: ${{ secrets.FASTAPI_PR_TOKEN }} # zizmor: ignore[secrets-outside-env]

View File

@@ -9,17 +9,22 @@ on:
- opened - opened
- synchronize - synchronize
permissions: {}
jobs: jobs:
test-redistribute: test-redistribute:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Install build dependencies - name: Install build dependencies
@@ -53,8 +58,9 @@ jobs:
needs: needs:
- test-redistribute - test-redistribute
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
steps: steps:
- name: Decide whether the needed jobs succeeded or failed - name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1 uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
with: with:
jobs: ${{ toJSON(needs) }} jobs: ${{ toJSON(needs) }}

View File

@@ -12,6 +12,8 @@ on:
# cron every week on monday # cron every week on monday
- cron: "0 0 * * 1" - cron: "0 0 * * 1"
permissions: {}
env: env:
UV_NO_SYNC: true UV_NO_SYNC: true
INLINE_SNAPSHOT_DEFAULT_FLAGS: review INLINE_SNAPSHOT_DEFAULT_FLAGS: review
@@ -23,12 +25,15 @@ jobs:
permissions: permissions:
pull-requests: read pull-requests: read
# Set job outputs to values from filter step # Set job outputs to values from filter step
timeout-minutes: 5
outputs: outputs:
src: ${{ steps.filter.outputs.src }} src: ${{ steps.filter.outputs.src }}
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
# For pull requests it's not necessary to checkout the code but for the main branch it is # For pull requests it's not necessary to checkout the code but for the main branch it is
- uses: dorny/paths-filter@v4 - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
id: filter id: filter
with: with:
filters: | filters: |
@@ -46,10 +51,12 @@ jobs:
needs: needs:
- changes - changes
if: needs.changes.outputs.src == 'true' || github.ref == 'refs/heads/master' if: needs.changes.outputs.src == 'true' || github.ref == 'refs/heads/master'
timeout-minutes: 10
strategy: strategy:
matrix: matrix:
os: [ windows-latest, macos-latest ] os: [ windows-latest, macos-latest ]
python-version: [ "3.14" ] python-version: [ "3.14", "3.14t" ]
deprecated-tests: [ "no-deprecation" ]
uv-resolution: uv-resolution:
- highest - highest
starlette-src: starlette-src:
@@ -60,23 +67,38 @@ jobs:
python-version: "3.10" python-version: "3.10"
coverage: coverage coverage: coverage
uv-resolution: lowest-direct uv-resolution: lowest-direct
deprecated-tests: "no-deprecation"
- os: windows-latest - os: windows-latest
python-version: "3.12" python-version: "3.12"
coverage: coverage coverage: coverage
uv-resolution: lowest-direct uv-resolution: lowest-direct
deprecated-tests: "no-deprecation"
- os: ubuntu-latest - os: ubuntu-latest
python-version: "3.13" python-version: "3.13"
coverage: coverage coverage: coverage
uv-resolution: highest uv-resolution: highest
deprecated-tests: "no-deprecation"
- os: ubuntu-latest - os: ubuntu-latest
python-version: "3.13" python-version: "3.13"
uv-resolution: highest uv-resolution: highest
codspeed: codspeed codspeed: codspeed
deprecated-tests: "no-deprecation"
- os: ubuntu-latest
python-version: "3.13"
uv-resolution: highest
deprecated-tests: "no-deprecation"
without-httpx2: true
- os: ubuntu-latest - os: ubuntu-latest
python-version: "3.14" python-version: "3.14"
coverage: coverage coverage: coverage
uv-resolution: highest uv-resolution: highest
starlette-src: starlette-git starlette-src: starlette-git
deprecated-tests: "test-deprecation"
- os: ubuntu-latest
python-version: "3.14t"
coverage: coverage
uv-resolution: highest
deprecated-tests: "no-deprecation"
fail-fast: false fail-fast: false
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
env: env:
@@ -88,14 +110,19 @@ jobs:
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version: ${{ matrix.python-version }} python-version: ${{ matrix.python-version }}
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
@@ -108,18 +135,28 @@ jobs:
- name: Install Starlette from source - name: Install Starlette from source
if: matrix.starlette-src == 'starlette-git' if: matrix.starlette-src == 'starlette-git'
run: uv pip install "git+https://github.com/Kludex/starlette@main" run: uv pip install "git+https://github.com/Kludex/starlette@main"
- name: Install deprecated libraries just for testing
if: matrix.deprecated-tests == 'test-deprecation'
run: uv pip install orjson ujson
- name: Uninstall httpx2 to run tests with httpx
if: matrix.without-httpx2 == 'true'
run: uv pip uninstall httpx2
- name: Reinstall SQLAlchemy without Cython extensions
if: matrix.python-version == '3.14t' && matrix.os == 'ubuntu-latest'
run: "DISABLE_SQLALCHEMY_CEXT=1 uv pip install --force-reinstall --no-binary :all: sqlalchemy"
- run: mkdir coverage - run: mkdir coverage
- name: Test - name: Test
run: uv run --no-sync bash scripts/test-cov.sh run: uv run --no-sync bash scripts/test-cov.sh $PYTEST_OPTIONS
env: env:
COVERAGE_FILE: coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }} COVERAGE_FILE: coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }}-${{ matrix.deprecated-tests}}
CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }} CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }}-${{ matrix.deprecated-tests}}
PYTEST_OPTIONS: ${{ (matrix.without-httpx2 == 'true') && '-W ignore::UserWarning' || '' }}
# Do not store coverage for all possible combinations to avoid file size max errors in Smokeshow # Do not store coverage for all possible combinations to avoid file size max errors in Smokeshow
- name: Store coverage files - name: Store coverage files
if: matrix.coverage == 'coverage' if: matrix.coverage == 'coverage'
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with: with:
name: coverage-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/coverage/.coverage.*') }} name: coverage-${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.deprecated-tests}}-${{ hashFiles('**/coverage/.coverage.*') }}
path: coverage path: coverage
include-hidden-files: true include-hidden-files: true
@@ -128,6 +165,7 @@ jobs:
- changes - changes
if: needs.changes.outputs.src == 'true' || github.ref == 'refs/heads/master' if: needs.changes.outputs.src == 'true' || github.ref == 'refs/heads/master'
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
env: env:
UV_PYTHON: "3.13" UV_PYTHON: "3.13"
UV_RESOLUTION: highest UV_RESOLUTION: highest
@@ -136,14 +174,19 @@ jobs:
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version: "3.13" python-version: "3.13"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
@@ -151,7 +194,7 @@ jobs:
- name: Install Dependencies - name: Install Dependencies
run: uv sync --no-dev --group tests --extra all run: uv sync --no-dev --group tests --extra all
- name: CodSpeed benchmarks - name: CodSpeed benchmarks
uses: CodSpeedHQ/action@v4 uses: CodSpeedHQ/action@9d332c4d90b43981c3e55ae8e38e68709996240f # v4.17.0
with: with:
mode: simulation mode: simulation
run: uv run --no-sync pytest tests/benchmarks --codspeed run: uv run --no-sync pytest tests/benchmarks --codspeed
@@ -160,18 +203,24 @@ jobs:
needs: needs:
- test - test
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: actions/setup-python@v6 with:
persist-credentials: false
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
@@ -179,7 +228,7 @@ jobs:
- name: Install Dependencies - name: Install Dependencies
run: uv sync --locked --no-dev --group tests --extra all run: uv sync --locked --no-dev --group tests --extra all
- name: Get coverage files - name: Get coverage files
uses: actions/download-artifact@v8 uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with: with:
pattern: coverage-* pattern: coverage-*
path: coverage path: coverage
@@ -188,7 +237,7 @@ jobs:
- run: uv run coverage combine coverage - run: uv run coverage combine coverage
- run: uv run coverage html --title "Coverage for ${{ github.sha }}" - run: uv run coverage html --title "Coverage for ${{ github.sha }}"
- name: Store coverage HTML - name: Store coverage HTML
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with: with:
name: coverage-html name: coverage-html
path: htmlcov path: htmlcov
@@ -196,19 +245,21 @@ jobs:
- run: uv run coverage report --fail-under=100 - run: uv run coverage report --fail-under=100
# https://github.com/marketplace/actions/alls-green#why # https://github.com/marketplace/actions/alls-green#why
check: # This job does nothing and is only used for the branch protection test-alls-green: # This job does nothing and is only used for the branch protection
if: always() if: always()
needs: needs:
- test
- coverage-combine - coverage-combine
- benchmark - benchmark
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- name: Decide whether the needed jobs succeeded or failed - name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1 uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
with: with:
jobs: ${{ toJSON(needs) }} jobs: ${{ toJSON(needs) }}
allowed-skips: coverage-combine,test,benchmark allowed-skips: coverage-combine,test,benchmark

View File

@@ -5,25 +5,33 @@ on:
- cron: "0 12 1 * *" - cron: "0 12 1 * *"
workflow_dispatch: workflow_dispatch:
permissions: {}
jobs: jobs:
topic-repos: topic-repos:
if: github.repository_owner == 'fastapi' if: github.repository_owner == 'fastapi'
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
contents: write contents: write
timeout-minutes: 5
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: true # Required for `git push` in `topic_repos.py`
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
enable-cache: true enable-cache: true
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
@@ -33,4 +41,4 @@ jobs:
- name: Update Topic Repos - name: Update Topic Repos
run: uv run ./scripts/topic_repos.py run: uv run ./scripts/topic_repos.py
env: env:
GITHUB_TOKEN: ${{ secrets.FASTAPI_PR_TOKEN }} GITHUB_TOKEN: ${{ secrets.FASTAPI_PR_TOKEN }} # zizmor: ignore[secrets-outside-env]

View File

@@ -41,6 +41,8 @@ on:
required: false required: false
default: 10 default: 10
permissions: {}
jobs: jobs:
langs: langs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -48,14 +50,19 @@ jobs:
langs: ${{ steps.show-langs.outputs.langs }} langs: ${{ steps.show-langs.outputs.langs }}
commands: ${{ steps.show-langs.outputs.commands }} commands: ${{ steps.show-langs.outputs.commands }}
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
uv.lock uv.lock
@@ -74,27 +81,31 @@ jobs:
if: github.repository_owner == 'fastapi' if: github.repository_owner == 'fastapi'
needs: langs needs: langs
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
contents: write
strategy: strategy:
matrix: matrix:
lang: ${{ fromJson(needs.langs.outputs.langs) }} lang: ${{ fromJson(needs.langs.outputs.langs) }}
command: ${{ fromJson(needs.langs.outputs.commands) }} command: ${{ fromJson(needs.langs.outputs.commands) }}
permissions:
contents: write
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT" run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v6 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: true # Required for `git push` in `translate.py`
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version-file: ".python-version" python-version-file: ".python-version"
- name: Setup uv - name: Setup uv
uses: astral-sh/setup-uv@v7 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
# Before upgrading uv version, make sure astral-sh/setup-uv knows its checksum.
# See: https://github.com/astral-sh/setup-uv/issues/851#issuecomment-4282017837
version: "0.11.18"
cache-dependency-glob: | cache-dependency-glob: |
pyproject.toml pyproject.toml
uv.lock uv.lock
@@ -102,20 +113,20 @@ jobs:
run: uv sync --locked --no-dev --group github-actions --group translations run: uv sync --locked --no-dev --group github-actions --group translations
# Allow debugging with tmate # Allow debugging with tmate
- name: Setup tmate session - name: Setup tmate session
uses: mxschmitt/action-tmate@v3 uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113 # v3.24
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }} if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }}
with: with:
limit-access-to-actor: true limit-access-to-actor: true
env: env:
GITHUB_TOKEN: ${{ secrets.FASTAPI_TRANSLATIONS }} GITHUB_TOKEN: ${{ secrets.FASTAPI_TRANSLATIONS }} # zizmor: ignore[secrets-outside-env]
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} # zizmor: ignore[secrets-outside-env]
- name: FastAPI Translate - name: FastAPI Translate
run: | run: |
uv run ./scripts/translate.py ${{ matrix.command }} uv run ./scripts/translate.py "$COMMAND"
uv run ./scripts/translate.py make-pr uv run ./scripts/translate.py make-pr
env: env:
GITHUB_TOKEN: ${{ secrets.FASTAPI_TRANSLATIONS }} GITHUB_TOKEN: ${{ secrets.FASTAPI_TRANSLATIONS }} # zizmor: ignore[secrets-outside-env]
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} # zizmor: ignore[secrets-outside-env]
LANGUAGE: ${{ matrix.lang }} LANGUAGE: ${{ matrix.lang }}
EN_PATH: ${{ github.event.inputs.en_path }} EN_PATH: ${{ github.event.inputs.en_path }}
COMMAND: ${{ matrix.command }} COMMAND: ${{ matrix.command }}

25
.github/workflows/zizmor.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
name: Zizmor
on:
push:
branches:
- main
pull_request:
workflow_dispatch:
permissions: {}
jobs:
zizmor:
name: Run zizmor
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
security-events: write # Required for upload-sarif (used by zizmor-action) to upload SARIF files.
steps:
- name: Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Run zizmor
uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6

1
.gitignore vendored
View File

@@ -7,6 +7,7 @@ __pycache__
htmlcov htmlcov
dist dist
site site
site_zensical_src
.coverage* .coverage*
coverage.xml coverage.xml
.netlify .netlify

View File

@@ -2,7 +2,7 @@
# See https://pre-commit.com/hooks.html for more hooks # See https://pre-commit.com/hooks.html for more hooks
repos: repos:
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0 rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # v6.0.0
hooks: hooks:
- id: check-added-large-files - id: check-added-large-files
args: ['--maxkb=750'] args: ['--maxkb=750']
@@ -14,6 +14,12 @@ repos:
- id: end-of-file-fixer - id: end-of-file-fixer
- id: trailing-whitespace - id: trailing-whitespace
- repo: https://github.com/crate-ci/typos
rev: b859c0df7f391deba73030f79b957e62b4d81dc6 # varcon-core-v5.0.7
hooks:
- id: typos
args: [--force-exclude]
- repo: local - repo: local
hooks: hooks:
- id: local-ruff-check - id: local-ruff-check
@@ -39,7 +45,7 @@ repos:
- id: local-ty - id: local-ty
name: ty check name: ty check
entry: uv run ty check fastapi entry: uv run ty check
require_serial: true require_serial: true
language: unsupported language: unsupported
pass_filenames: false pass_filenames: false
@@ -78,3 +84,18 @@ repos:
name: fix translations name: fix translations
entry: uv run ./scripts/translation_fixer.py fix-pages entry: uv run ./scripts/translation_fixer.py fix-pages
files: ^docs/(?!en/).*/docs/.*\.md$ files: ^docs/(?!en/).*/docs/.*\.md$
- id: add-release-date
language: unsupported
name: add date to latest release header
entry: uv run python scripts/add_latest_release_date.py
files: ^docs/en/docs/release-notes\.md$
pass_filenames: false
- id: zizmor
name: zizmor
language: python
entry: uv run zizmor .
files: ^\.github/workflows/|^uv\.lock$
require_serial: true
pass_filenames: false

View File

@@ -1 +0,0 @@
Please read the [Development - Contributing](https://fastapi.tiangolo.com/contributing/) guidelines in the documentation site.

View File

@@ -49,26 +49,26 @@ The key features are:
<a href="https://fastapicloud.com" target="_blank" title="FastAPI Cloud. By the same team behind FastAPI. You code. We Cloud."><img src="https://fastapi.tiangolo.com/img/sponsors/fastapicloud.png"></a> <a href="https://fastapicloud.com" target="_blank" title="FastAPI Cloud. By the same team behind FastAPI. You code. We Cloud."><img src="https://fastapi.tiangolo.com/img/sponsors/fastapicloud.png"></a>
### Gold and Silver Sponsors ### Gold Sponsors
<a href="https://blockbee.io?ref=fastapi" target="_blank" title="BlockBee Cryptocurrency Payment Gateway"><img src="https://fastapi.tiangolo.com/img/sponsors/blockbee.png"></a> <a href="https://blockbee.io?ref=fastapi" target="_blank" title="BlockBee Cryptocurrency Payment Gateway"><img src="https://fastapi.tiangolo.com/img/sponsors/blockbee.png"></a>
<a href="https://github.com/scalar/scalar/?utm_source=fastapi&utm_medium=website&utm_campaign=main-badge" target="_blank" title="Scalar: Beautiful Open-Source API References from Swagger/OpenAPI files"><img src="https://fastapi.tiangolo.com/img/sponsors/scalar.svg"></a>
<a href="https://www.propelauth.com/?utm_source=fastapi&utm_campaign=1223&utm_medium=mainbadge" target="_blank" title="Auth, user management and more for your B2B product"><img src="https://fastapi.tiangolo.com/img/sponsors/propelauth.png"></a> <a href="https://www.propelauth.com/?utm_source=fastapi&utm_campaign=1223&utm_medium=mainbadge" target="_blank" title="Auth, user management and more for your B2B product"><img src="https://fastapi.tiangolo.com/img/sponsors/propelauth.png"></a>
<a href="https://zuplo.link/fastapi-gh" target="_blank" title="Zuplo: Deploy, Secure, Document, and Monetize your FastAPI"><img src="https://fastapi.tiangolo.com/img/sponsors/zuplo.png"></a>
<a href="https://liblab.com?utm_source=fastapi" target="_blank" title="liblab - Generate SDKs from FastAPI"><img src="https://fastapi.tiangolo.com/img/sponsors/liblab.png"></a>
<a href="https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi" target="_blank" title="Deploy & scale any full-stack web app on Render. Focus on building apps, not infra."><img src="https://fastapi.tiangolo.com/img/sponsors/render.svg"></a> <a href="https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi" target="_blank" title="Deploy & scale any full-stack web app on Render. Focus on building apps, not infra."><img src="https://fastapi.tiangolo.com/img/sponsors/render.svg"></a>
<a href="https://www.coderabbit.ai/?utm_source=fastapi&utm_medium=badge&utm_campaign=fastapi" target="_blank" title="Cut Code Review Time & Bugs in Half with CodeRabbit"><img src="https://fastapi.tiangolo.com/img/sponsors/coderabbit.png"></a> <a href="https://www.coderabbit.ai/?utm_source=fastapi&utm_medium=badge&utm_campaign=fastapi" target="_blank" title="Cut Code Review Time & Bugs in Half with CodeRabbit"><img src="https://fastapi.tiangolo.com/img/sponsors/coderabbit.png"></a>
<a href="https://subtotal.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=open-source" target="_blank" title="The Gold Standard in Retail Account Linking"><img src="https://fastapi.tiangolo.com/img/sponsors/subtotal.svg"></a> <a href="https://subtotal.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=open-source" target="_blank" title="The Gold Standard in Retail Account Linking"><img src="https://fastapi.tiangolo.com/img/sponsors/subtotal.svg"></a>
<a href="https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi" target="_blank" title="Deploy enterprise applications at startup speed"><img src="https://fastapi.tiangolo.com/img/sponsors/railway.png"></a> <a href="https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi" target="_blank" title="Deploy enterprise applications at startup speed"><img src="https://fastapi.tiangolo.com/img/sponsors/railway.png"></a>
<a href="https://serpapi.com/?utm_source=fastapi_website" target="_blank" title="SerpApi: Web Search API"><img src="https://fastapi.tiangolo.com/img/sponsors/serpapi.png"></a> <a href="https://serpapi.com/?utm_source=fastapi_website" target="_blank" title="SerpApi: Web Search API"><img src="https://fastapi.tiangolo.com/img/sponsors/serpapi.png"></a>
<a href="https://www.greptile.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=fastapi_sponsor_page" target="_blank" title="Greptile: The AI Code Reviewer"><img src="https://fastapi.tiangolo.com/img/sponsors/greptile.png"></a> <a href="https://www.greptile.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=fastapi_sponsor_page" target="_blank" title="Greptile: The AI Code Reviewer"><img src="https://fastapi.tiangolo.com/img/sponsors/greptile.png"></a>
### Silver Sponsors
<a href="https://databento.com/?utm_source=fastapi&utm_medium=sponsor&utm_content=display" target="_blank" title="Pay as you go for market data"><img src="https://fastapi.tiangolo.com/img/sponsors/databento.svg"></a> <a href="https://databento.com/?utm_source=fastapi&utm_medium=sponsor&utm_content=display" target="_blank" title="Pay as you go for market data"><img src="https://fastapi.tiangolo.com/img/sponsors/databento.svg"></a>
<a href="https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship" target="_blank" title="SDKs for your API | Speakeasy"><img src="https://fastapi.tiangolo.com/img/sponsors/speakeasy.png"></a>
<a href="https://www.svix.com/" target="_blank" title="Svix - Webhooks as a service"><img src="https://fastapi.tiangolo.com/img/sponsors/svix.svg"></a> <a href="https://www.svix.com/" target="_blank" title="Svix - Webhooks as a service"><img src="https://fastapi.tiangolo.com/img/sponsors/svix.svg"></a>
<a href="https://www.stainlessapi.com/?utm_source=fastapi&utm_medium=referral" target="_blank" title="Stainless | Generate best-in-class SDKs"><img src="https://fastapi.tiangolo.com/img/sponsors/stainless.png"></a> <a href="https://www.stainlessapi.com/?utm_source=fastapi&utm_medium=referral" target="_blank" title="Stainless | Generate best-in-class SDKs"><img src="https://fastapi.tiangolo.com/img/sponsors/stainless.png"></a>
<a href="https://www.permit.io/blog/implement-authorization-in-fastapi?utm_source=github&utm_medium=referral&utm_campaign=fastapi" target="_blank" title="Fine-Grained Authorization for FastAPI"><img src="https://fastapi.tiangolo.com/img/sponsors/permit.png"></a> <a href="https://www.permit.io/blog/implement-authorization-in-fastapi?utm_source=github&utm_medium=referral&utm_campaign=fastapi" target="_blank" title="Fine-Grained Authorization for FastAPI"><img src="https://fastapi.tiangolo.com/img/sponsors/permit.png"></a>
<a href="https://www.interviewpal.com/?utm_source=fastapi&utm_medium=open-source&utm_campaign=dev-hiring" target="_blank" title="InterviewPal - AI Interview Coach for Engineers and Devs"><img src="https://fastapi.tiangolo.com/img/sponsors/interviewpal.png"></a>
<a href="https://dribia.com/en/" target="_blank" title="Dribia - Data Science within your reach"><img src="https://fastapi.tiangolo.com/img/sponsors/dribia.png"></a> <a href="https://dribia.com/en/" target="_blank" title="Dribia - Data Science within your reach"><img src="https://fastapi.tiangolo.com/img/sponsors/dribia.png"></a>
<a href="https://www.rapidproxy.io/?ref=fastapi" target="_blank" title="Try RapidProxy for free - Residential Proxies with 90M+ Global IPs. Starting from $0.65/GB for web scraping, automation, and data collection."><img src="https://fastapi.tiangolo.com/img/sponsors/rapidproxy.png"></a>
<a href="https://www.bairesdev.com/" target="_blank" title="BairesDev | Nearshore Software Development & Staff Augmentation Company"><img src="https://fastapi.tiangolo.com/img/sponsors/bairesdev.svg"></a>
<!-- /sponsors --> <!-- /sponsors -->
@@ -76,6 +76,10 @@ The key features are:
## Opinions ## Opinions
<div class="only-github" markdown="1">
"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._" "_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._"
<div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/fastapi/fastapi/pull/26"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/fastapi/fastapi/pull/26"><small>(ref)</small></a></div>
@@ -94,37 +98,25 @@ The key features are:
--- ---
"_Im over the moon excited about **FastAPI**. Its so fun!_"
<div style="text-align: right; margin-right: 10%;">Brian Okken - <strong>[Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) podcast host</strong> <a href="https://x.com/brianokken/status/1112220079972728832"><small>(ref)</small></a></div>
---
"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted **Hug** to be - it's really inspiring to see someone build that._"
<div style="text-align: right; margin-right: 10%;">Timothy Crosley - <strong>[Hug](https://github.com/hugapi/hug) creator</strong> <a href="https://news.ycombinator.com/item?id=19455465"><small>(ref)</small></a></div>
---
"_If you're looking to learn one **modern framework** for building REST APIs, check out **FastAPI** [...] It's fast, easy to use and easy to learn [...]_"
"_We've switched over to **FastAPI** for our **APIs** [...] I think you'll like it [...]_"
<div style="text-align: right; margin-right: 10%;">Ines Montani - Matthew Honnibal - <strong>[Explosion AI](https://explosion.ai) founders - [spaCy](https://spacy.io) creators</strong> <a href="https://x.com/_inesmontani/status/1144173225322143744"><small>(ref)</small></a> - <a href="https://x.com/honnibal/status/1144031421859655680"><small>(ref)</small></a></div>
---
"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._" "_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._"
<div style="text-align: right; margin-right: 10%;">Deon Pillsbury - <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Deon Pillsbury - <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/"><small>(ref)</small></a></div>
--- ---
</div>
## FastAPI Conf
[**FastAPI Conf '26**](https://fastapiconf.com) is happening on **October 28, 2026** in **Amsterdam, NL**. All about FastAPI, right from the source. 🎤
<a class="fastapi-feature-banner" href="https://fastapiconf.com"><img src="https://fastapi.tiangolo.com/img/fastapi-conf.jpeg" alt="FastAPI Conf '26 - October 28, 2026 - Amsterdam, NL"></a>
## FastAPI mini documentary ## FastAPI mini documentary
There's a [FastAPI mini documentary](https://www.youtube.com/watch?v=mpR8ngthqiE) released at the end of 2025, you can watch it online: There's a [FastAPI mini documentary](https://www.youtube.com/watch?v=mpR8ngthqiE) released at the end of 2025, you can watch it online:
<a href="https://www.youtube.com/watch?v=mpR8ngthqiE"><img src="https://fastapi.tiangolo.com/img/fastapi-documentary.jpg" alt="FastAPI Mini Documentary"></a> <a class="fastapi-feature-banner" href="https://www.youtube.com/watch?v=mpR8ngthqiE"><img src="https://fastapi.tiangolo.com/img/fastapi-documentary.jpg" alt="FastAPI Mini Documentary"></a>
## **Typer**, the FastAPI of CLIs ## **Typer**, the FastAPI of CLIs
@@ -440,13 +432,13 @@ For a more complete example including more features, see the <a href="https://fa
**Spoiler alert**: the tutorial - user guide includes: **Spoiler alert**: the tutorial - user guide includes:
* Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**. * Declaration of **parameters** from other different places such as: **headers**, **cookies**, **form fields** and **files**.
* How to set **validation constraints** as `maximum_length` or `regex`. * 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. * 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. * 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). * 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. * **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** * **WebSockets**
* extremely easy tests based on HTTPX and `pytest` * extremely easy tests based on HTTPX and `pytest`
* **CORS** * **CORS**
@@ -455,9 +447,7 @@ For a more complete example including more features, see the <a href="https://fa
### Deploy your app (optional) ### Deploy your app (optional)
You can optionally deploy your FastAPI app to [FastAPI Cloud](https://fastapicloud.com), go and join the waiting list if you haven't. 🚀 You can optionally deploy your FastAPI app to [FastAPI Cloud](https://fastapicloud.com) with a single command. 🚀
If you already have a **FastAPI Cloud** account (we invited you from the waiting list 😉), you can deploy your application with one command.
<div class="termy"> <div class="termy">
@@ -473,6 +463,8 @@ Deploying to FastAPI Cloud...
</div> </div>
The CLI will automatically detect your FastAPI application and deploy it to the cloud. If you are not logged in, your browser will open to complete the authentication process.
That's it! Now you can access your app at that URL. ✨ That's it! Now you can access your app at that URL. ✨
#### About FastAPI Cloud #### About FastAPI Cloud

View File

@@ -1,31 +0,0 @@
# Security Policy
Security is very important for FastAPI and its community. 🔒
Learn more about it below. 👇
## Versions
The latest version of FastAPI is supported.
You are encouraged to [write tests](https://fastapi.tiangolo.com/tutorial/testing/) for your application and update your FastAPI version frequently after ensuring that your tests are passing. This way you will benefit from the latest features, bug fixes, and **security fixes**.
You can learn more about [FastAPI versions and how to pin and upgrade them](https://fastapi.tiangolo.com/deployment/versions/) for your project in the docs.
## Reporting a Vulnerability
If you think you found a vulnerability, and even if you are not sure about it, please report it right away by sending an email to: security@tiangolo.com. Please try to be as explicit as possible, describing all the steps and example code to reproduce the security issue.
I (the author, [@tiangolo](https://x.com/tiangolo)) will review it thoroughly and get back to you.
## Public Discussions
Please restrain from publicly discussing a potential security vulnerability. 🙊
It's better to discuss privately and try to find a solution first, to limit the potential impact as much as possible.
---
Thanks for your help!
The FastAPI community and I thank you for that. 🙇

View File

@@ -1,6 +1,6 @@
# LLM-Testdatei { #llm-test-file } # LLM-Testdatei { #llm-test-file }
Dieses Dokument testet, ob das <abbr title="Large Language Model Großes Sprachmodell">LLM</abbr>, das die Dokumentation übersetzt, den <abbr title="General Prompt Allgemeiner Prompt">`general_prompt`</abbr> in `scripts/translate.py` und den sprachspezifischen Prompt in `docs/{language code}/llm-prompt.md` versteht. Der sprachsspezifische Prompt wird an `general_prompt` angehängt. Dieses Dokument testet, ob das <abbr title="Large Language Model - Großes Sprachmodell">LLM</abbr>, das die Dokumentation übersetzt, den <abbr title="General Prompt - Allgemeiner Prompt">`general_prompt`</abbr> in `scripts/translate.py` und den sprachspezifischen Prompt in `docs/{language code}/llm-prompt.md` versteht. Der sprachsspezifische Prompt wird an `general_prompt` angehängt.
Hier hinzugefügte Tests werden von allen Erstellern sprachsspezifischer Prompts gesehen. Hier hinzugefügte Tests werden von allen Erstellern sprachsspezifischer Prompts gesehen.
@@ -95,7 +95,7 @@ $ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid
... und noch ein Konsolen-Codebeispiel ... ... und noch ein Konsolen-Codebeispiel ...
```console ```console
// Create a directory "Code" // Ein Verzeichnis "Code" erstellen
$ mkdir code $ mkdir code
// In dieses Verzeichnis wechseln // In dieses Verzeichnis wechseln
$ cd code $ cd code
@@ -124,10 +124,6 @@ Siehe Abschnitt `### Content of code blocks` im allgemeinen Prompt in `scripts/t
//// tab | Test //// tab | Test
/// info | Info
Etwas Text
///
/// note | Hinweis /// note | Hinweis
Etwas Text Etwas Text
/// ///
@@ -136,10 +132,6 @@ Etwas Text
Etwas Text Etwas Text
/// ///
/// check | Testen
Etwas Text
///
/// tip | Tipp /// tip | Tipp
Etwas Text Etwas Text
/// ///
@@ -197,15 +189,15 @@ Hier einige Dinge, die in HTML-„abbr“-Elemente gepackt sind (einige sind erf
### Das abbr gibt eine vollständige Phrase { #the-abbr-gives-a-full-phrase } ### Das abbr gibt eine vollständige Phrase { #the-abbr-gives-a-full-phrase }
* <abbr title="Getting Things Done Dinge erledigt bekommen">GTD</abbr> * <abbr title="Getting Things Done - Dinge erledigt bekommen">GTD</abbr>
* <abbr title="less than kleiner als"><code>lt</code></abbr> * <abbr title="less than - kleiner als"><code>lt</code></abbr>
* <abbr title="XML Web Token">XWT</abbr> * <abbr title="XML Web Token">XWT</abbr>
* <abbr title="Paralleles Server-Gateway-Interface">PSGI</abbr> * <abbr title="Paralleles Server-Gateway-Interface">PSGI</abbr>
### Das abbr gibt eine vollständige Phrase und eine Erklärung { #the-abbr-gives-a-full-phrase-and-an-explanation } ### Das abbr gibt eine vollständige Phrase und eine Erklärung { #the-abbr-gives-a-full-phrase-and-an-explanation }
* <abbr title="Mozilla Developer Network Mozilla-Entwicklernetzwerk: Dokumentation für Entwickler, geschrieben von den Firefox-Leuten">MDN</abbr> * <abbr title="Mozilla Developer Network - Mozilla-Entwicklernetzwerk: Dokumentation für Entwickler, geschrieben von den Firefox-Leuten">MDN</abbr>
* <abbr title="Input/Output Eingabe/Ausgabe: Lesen oder Schreiben auf der Festplatte, Netzwerkkommunikation.">I/O</abbr>. * <abbr title="Input/Output - Eingabe/Ausgabe: Lesen oder Schreiben auf der Festplatte, Netzwerkkommunikation.">I/O</abbr>.
//// ////

View File

@@ -34,7 +34,7 @@ Beachten Sie, dass Sie die `JSONResponse` direkt zurückgeben müssen.
/// ///
/// info | Info /// note | Hinweis
Der `model`-Schlüssel ist nicht Teil von OpenAPI. Der `model`-Schlüssel ist nicht Teil von OpenAPI.
@@ -183,7 +183,7 @@ Beachten Sie, dass Sie das Bild direkt mit einer `FileResponse` zurückgeben mü
/// ///
/// info | Info /// note | Hinweis
Sofern Sie in Ihrem Parameter `responses` nicht explizit einen anderen Medientyp angeben, geht FastAPI davon aus, dass die Response denselben Medientyp wie die Haupt-Response-Klasse hat (Standardmäßig `application/json`). Sofern Sie in Ihrem Parameter `responses` nicht explizit einen anderen Medientyp angeben, geht FastAPI davon aus, dass die Response denselben Medientyp wie die Haupt-Response-Klasse hat (Standardmäßig `application/json`).

View File

@@ -98,7 +98,7 @@ Wenn Sie beispielsweise eine Datenbanksession in einer Abhängigkeit mit `yield`
Dieses Verhalten wurde in 0.118.0 zurückgenommen, sodass der Exit-Code nach `yield` ausgeführt wird, nachdem die Response gesendet wurde. Dieses Verhalten wurde in 0.118.0 zurückgenommen, sodass der Exit-Code nach `yield` ausgeführt wird, nachdem die Response gesendet wurde.
/// info | Info /// note | Hinweis
Wie Sie unten sehen werden, ähnelt dies sehr dem Verhalten vor Version 0.106.0, jedoch mit mehreren Verbesserungen und Bugfixes für Sonderfälle. Wie Sie unten sehen werden, ähnelt dies sehr dem Verhalten vor Version 0.106.0, jedoch mit mehreren Verbesserungen und Bugfixes für Sonderfälle.

View File

@@ -41,7 +41,7 @@ Um eine Response mit HTML direkt von **FastAPI** zurückzugeben, verwenden Sie `
{* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *} {* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
/// info | Info /// note | Hinweis
Der Parameter `response_class` wird auch verwendet, um den „Medientyp“ der Response zu definieren. Der Parameter `response_class` wird auch verwendet, um den „Medientyp“ der Response zu definieren.
@@ -65,7 +65,7 @@ Eine `Response`, die direkt von Ihrer *Pfadoperation-Funktion* zurückgegeben wi
/// ///
/// info | Info /// note | Hinweis
Natürlich stammen der eigentliche `Content-Type`-Header, der Statuscode, usw., aus dem `Response`-Objekt, das Sie zurückgegeben haben. Natürlich stammen der eigentliche `Content-Type`-Header, der Statuscode, usw., aus dem `Response`-Objekt, das Sie zurückgegeben haben.
@@ -158,6 +158,7 @@ Sie können eine `RedirectResponse` direkt zurückgeben:
Oder Sie können sie im Parameter `response_class` verwenden: Oder Sie können sie im Parameter `response_class` verwenden:
{* ../../docs_src/custom_response/tutorial006b_py310.py hl[2,7,9] *} {* ../../docs_src/custom_response/tutorial006b_py310.py hl[2,7,9] *}
Wenn Sie das tun, können Sie die URL direkt von Ihrer *Pfadoperation*-Funktion zurückgeben. Wenn Sie das tun, können Sie die URL direkt von Ihrer *Pfadoperation*-Funktion zurückgeben.

View File

@@ -18,7 +18,7 @@ Und natürlich wird das gleiche unterstützt:
Das funktioniert genauso wie mit Pydantic-Modellen. Und tatsächlich wird es unter der Haube mittels Pydantic auf die gleiche Weise bewerkstelligt. Das funktioniert genauso wie mit Pydantic-Modellen. Und tatsächlich wird es unter der Haube mittels Pydantic auf die gleiche Weise bewerkstelligt.
/// info | Info /// note | Hinweis
Bedenken Sie, dass Datenklassen nicht alles können, was Pydantic-Modelle können. Bedenken Sie, dass Datenklassen nicht alles können, was Pydantic-Modelle können.

View File

@@ -120,7 +120,7 @@ Um eine Funktion hinzuzufügen, die beim Shutdown der Anwendung ausgeführt werd
Hier schreibt die `shutdown`-Eventhandler-Funktion eine Textzeile `"Application shutdown"` in eine Datei `log.txt`. Hier schreibt die `shutdown`-Eventhandler-Funktion eine Textzeile `"Application shutdown"` in eine Datei `log.txt`.
/// info | Info /// note | Hinweis
In der Funktion `open()` bedeutet `mode="a"` „append“ („anhängen“), sodass die Zeile nach dem, was sich in dieser Datei befindet, hinzugefügt wird, ohne den vorherigen Inhalt zu überschreiben. In der Funktion `open()` bedeutet `mode="a"` „append“ („anhängen“), sodass die Zeile nach dem, was sich in dieser Datei befindet, hinzugefügt wird, ohne den vorherigen Inhalt zu überschreiben.
@@ -152,7 +152,7 @@ Nur ein technisches Detail für die neugierigen Nerds. 🤓
In der technischen ASGI-Spezifikation ist dies Teil des [Lifespan Protokolls](https://asgi.readthedocs.io/en/latest/specs/lifespan.html) und definiert Events namens `startup` und `shutdown`. In der technischen ASGI-Spezifikation ist dies Teil des [Lifespan Protokolls](https://asgi.readthedocs.io/en/latest/specs/lifespan.html) und definiert Events namens `startup` und `shutdown`.
/// info | Info /// note | Hinweis
Weitere Informationen zu Starlettes `lifespan`-Handlern finden Sie in [Starlettes Lifespan-Dokumentation](https://www.starlette.dev/lifespan/). Weitere Informationen zu Starlettes `lifespan`-Handlern finden Sie in [Starlettes Lifespan-Dokumentation](https://www.starlette.dev/lifespan/).

View File

@@ -30,9 +30,7 @@ Ihr Sponsoring zeigt auch ein starkes Engagement für die FastAPI-**Community**
Zum Beispiel könnten Sie ausprobieren: Zum Beispiel könnten Sie ausprobieren:
* [Speakeasy](https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship)
* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral) * [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi)
Einige dieser Lösungen sind möglicherweise auch Open Source oder bieten kostenlose Tarife an, sodass Sie diese ohne finanzielle Verpflichtung ausprobieren können. Andere kommerzielle SDK-Generatoren sind online verfügbar und können dort gefunden werden. 🤓 Einige dieser Lösungen sind möglicherweise auch Open Source oder bieten kostenlose Tarife an, sodass Sie diese ohne finanzielle Verpflichtung ausprobieren können. Andere kommerzielle SDK-Generatoren sind online verfügbar und können dort gefunden werden. 🤓

View File

@@ -173,7 +173,7 @@ Verwenden Sie nun den Parameter `callbacks` im *Pfadoperation-Dekorator Ihrer AP
/// tip | Tipp /// tip | Tipp
Beachten Sie, dass Sie nicht den Router selbst (`invoices_callback_router`) an `callback=` übergeben, sondern das Attribut `.routes`, wie in `invoices_callback_router.routes`. Beachten Sie, dass Sie nicht den Router selbst (`invoices_callback_router`) an `callback=` übergeben, sondern das Attribut `.routes`, wie in `invoices_callback_router.routes`. FastAPI wird diese Routen verwenden, um die Callback-OpenAPI-Dokumentation zu generieren.
/// ///

View File

@@ -22,7 +22,7 @@ Mit **FastAPI**, mithilfe von OpenAPI, können Sie die Namen dieser Webhooks, di
Dies kann es Ihren Benutzern viel einfacher machen, **deren APIs zu implementieren**, um Ihre **Webhook**-Requests zu empfangen. Möglicherweise können diese sogar einen Teil ihres eigenen API-Codes automatisch generieren. Dies kann es Ihren Benutzern viel einfacher machen, **deren APIs zu implementieren**, um Ihre **Webhook**-Requests zu empfangen. Möglicherweise können diese sogar einen Teil ihres eigenen API-Codes automatisch generieren.
/// info | Info /// note | Hinweis
Webhooks sind in OpenAPI 3.1.0 und höher verfügbar und werden von FastAPI `0.99.0` und höher unterstützt. Webhooks sind in OpenAPI 3.1.0 und höher verfügbar und werden von FastAPI `0.99.0` und höher unterstützt.
@@ -36,7 +36,7 @@ Wenn Sie eine **FastAPI**-Anwendung erstellen, gibt es ein `webhooks`-Attribut,
Die von Ihnen definierten Webhooks landen im **OpenAPI**-Schema und der automatischen **Dokumentations-Oberfläche**. Die von Ihnen definierten Webhooks landen im **OpenAPI**-Schema und der automatischen **Dokumentations-Oberfläche**.
/// info | Info /// note | Hinweis
Das `app.webhooks`-Objekt ist eigentlich nur ein `APIRouter`, derselbe Typ, den Sie verwenden würden, wenn Sie Ihre App mit mehreren Dateien strukturieren. Das `app.webhooks`-Objekt ist eigentlich nur ein `APIRouter`, derselbe Typ, den Sie verwenden würden, wenn Sie Ihre App mit mehreren Dateien strukturieren.

View File

@@ -16,17 +16,11 @@ Sie müssten sicherstellen, dass sie für jede Operation eindeutig ist.
### Verwendung des Namens der *Pfadoperation-Funktion* als operationId { #using-the-path-operation-function-name-as-the-operationid } ### Verwendung des Namens der *Pfadoperation-Funktion* als operationId { #using-the-path-operation-function-name-as-the-operationid }
Wenn Sie die Funktionsnamen Ihrer API als `operationId`s verwenden möchten, können Sie über alle iterieren und die `operation_id` jeder *Pfadoperation* mit deren `APIRoute.name` überschreiben. Wenn Sie die Funktionsnamen Ihrer APIs als `operationId`s verwenden möchten, können Sie `FastAPI` eine eigene `generate_unique_id_function` übergeben.
Sie sollten dies tun, nachdem Sie alle Ihre *Pfadoperationen* hinzugefügt haben. Diese Funktion erhält jeweils die `APIRoute` und gibt die `operationId` zurück, die für diese Pfadoperation verwendet werden soll.
{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *} {* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *}
/// tip | Tipp
Wenn Sie `app.openapi()` manuell aufrufen, sollten Sie vorher die `operationId`s aktualisiert haben.
///
/// warning | Achtung /// warning | Achtung

View File

@@ -16,9 +16,9 @@ Normalerweise erzielen Sie eine deutlich bessere Leistung, wenn Sie ein [Respons
## Eine `Response` zurückgeben { #return-a-response } ## Eine `Response` zurückgeben { #return-a-response }
Tatsächlich können Sie jede `Response` oder jede Unterklasse davon zurückgeben. Sie können eine `Response` oder jede Unterklasse davon zurückgeben.
/// info | Info /// note | Hinweis
`JSONResponse` selbst ist eine Unterklasse von `Response`. `JSONResponse` selbst ist eine Unterklasse von `Response`.

View File

@@ -18,7 +18,7 @@ Sie benötigen nicht unbedingt OAuth2-Scopes, und Sie können die Authentifizier
Aber OAuth2 mit Scopes kann bequem in Ihre API (mit OpenAPI) und deren API-Dokumentation integriert werden. Aber OAuth2 mit Scopes kann bequem in Ihre API (mit OpenAPI) und deren API-Dokumentation integriert werden.
Dennoch, verwenden Sie solche Scopes oder andere Sicherheits-/Autorisierungsanforderungen in Ihrem Code so wie Sie es möchten. Dennoch erzwingen Sie solche Scopes oder andere Sicherheits-/Autorisierungsanforderungen in Ihrem Code so, wie Sie es benötigen.
In vielen Fällen kann OAuth2 mit Scopes ein Overkill sein. In vielen Fällen kann OAuth2 mit Scopes ein Overkill sein.
@@ -46,7 +46,7 @@ Er wird normalerweise verwendet, um bestimmte Sicherheitsberechtigungen zu dekla
* `instagram_basic` wird von Facebook / Instagram verwendet. * `instagram_basic` wird von Facebook / Instagram verwendet.
* `https://www.googleapis.com/auth/drive` wird von Google verwendet. * `https://www.googleapis.com/auth/drive` wird von Google verwendet.
/// info | Info /// note | Hinweis
In OAuth2 ist ein „Scope“ nur ein String, der eine bestimmte erforderliche Berechtigung deklariert. In OAuth2 ist ein „Scope“ nur ein String, der eine bestimmte erforderliche Berechtigung deklariert.
@@ -126,7 +126,7 @@ Wir tun dies hier, um zu demonstrieren, wie **FastAPI** auf verschiedenen Ebenen
{* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *} {* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *}
/// info | Technische Details /// note | Technische Details
`Security` ist tatsächlich eine Unterklasse von `Depends` und hat nur noch einen zusätzlichen Parameter, den wir später kennenlernen werden. `Security` ist tatsächlich eine Unterklasse von `Depends` und hat nur noch einen zusätzlichen Parameter, den wir später kennenlernen werden.

View File

@@ -4,7 +4,7 @@ Wenn Sie Daten streamen möchten, die als JSON strukturiert werden können, soll
Wenn Sie jedoch **reine Binärdaten** oder Strings streamen möchten, so können Sie es machen. Wenn Sie jedoch **reine Binärdaten** oder Strings streamen möchten, so können Sie es machen.
/// info | Info /// note | Hinweis
Hinzugefügt in FastAPI 0.134.0. Hinzugefügt in FastAPI 0.134.0.
@@ -90,7 +90,7 @@ Beispielsweise haben sie kein `await file.read()` oder `async for chunk in file`
Und in vielen Fällen wäre das Lesen eine blockierende Operation (die die Event-Loop blockieren könnte), weil von der Festplatte oder aus dem Netzwerk gelesen wird. Und in vielen Fällen wäre das Lesen eine blockierende Operation (die die Event-Loop blockieren könnte), weil von der Festplatte oder aus dem Netzwerk gelesen wird.
/// info | Info /// note | Hinweis
Das obige Beispiel ist tatsächlich eine Ausnahme, weil sich das `io.BytesIO`-Objekt bereits im Speicher befindet, daher blockiert sein Lesen nichts. Das obige Beispiel ist tatsächlich eine Ausnahme, weil sich das `io.BytesIO`-Objekt bereits im Speicher befindet, daher blockiert sein Lesen nichts.

View File

@@ -81,7 +81,7 @@ Wenn Sie Clients unterstützen müssen, die keinen `Content-Type`-Header senden,
Mit dieser Einstellung werden Requests ohne `Content-Type`-Header im Body als JSON geparst. Das entspricht dem Verhalten älterer FastAPI-Versionen. Mit dieser Einstellung werden Requests ohne `Content-Type`-Header im Body als JSON geparst. Das entspricht dem Verhalten älterer FastAPI-Versionen.
/// info | Info /// note | Hinweis
Dieses Verhalten und diese Konfiguration wurden in FastAPI 0.132.0 hinzugefügt. Dieses Verhalten und diese Konfiguration wurden in FastAPI 0.132.0 hinzugefügt.

View File

@@ -111,7 +111,7 @@ Diese funktionieren auf die gleiche Weise wie für andere FastAPI-Endpunkte/*Pfa
{* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *} {* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
/// info | Info /// note | Hinweis
Da es sich um einen WebSocket handelt, macht es keinen Sinn, eine `HTTPException` auszulösen, stattdessen lösen wir eine `WebSocketException` aus. Da es sich um einen WebSocket handelt, macht es keinen Sinn, eine `HTTPException` auszulösen, stattdessen lösen wir eine `WebSocketException` aus.

View File

@@ -6,7 +6,7 @@ Dazu können Sie die `WSGIMiddleware` verwenden und damit Ihre WSGI-Anwendung wr
## `WSGIMiddleware` verwenden { #using-wsgimiddleware } ## `WSGIMiddleware` verwenden { #using-wsgimiddleware }
/// info | Info /// note | Hinweis
Dafür muss `a2wsgi` installiert sein, z. B. mit `pip install a2wsgi`. Dafür muss `a2wsgi` installiert sein, z. B. mit `pip install a2wsgi`.

View File

@@ -36,7 +36,7 @@ Das Django REST Framework wurde von Tom Christie erstellt. Derselbe Schöpfer vo
/// ///
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Eine automatische API-Dokumentationsoberfläche zu haben. Eine automatische API-Dokumentationsoberfläche zu haben.
@@ -56,7 +56,7 @@ Diese Entkopplung der Teile und die Tatsache, dass es sich um ein „Mikroframew
Angesichts der Einfachheit von Flask schien es eine gute Ergänzung zum Erstellen von APIs zu sein. Als Nächstes musste ein „Django REST Framework“ für Flask gefunden werden. Angesichts der Einfachheit von Flask schien es eine gute Ergänzung zum Erstellen von APIs zu sein. Als Nächstes musste ein „Django REST Framework“ für Flask gefunden werden.
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Ein Mikroframework zu sein. Es einfach zu machen, die benötigten Tools und Teile zu kombinieren. Ein Mikroframework zu sein. Es einfach zu machen, die benötigten Tools und Teile zu kombinieren.
@@ -98,7 +98,7 @@ def read_url():
Sehen Sie sich die Ähnlichkeiten in `requests.get(...)` und `@app.get(...)` an. Sehen Sie sich die Ähnlichkeiten in `requests.get(...)` und `@app.get(...)` an.
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
* Über eine einfache und intuitive API zu verfügen. * Über eine einfache und intuitive API zu verfügen.
* HTTP-Methodennamen (Operationen) direkt, auf einfache und intuitive Weise zu verwenden. * HTTP-Methodennamen (Operationen) direkt, auf einfache und intuitive Weise zu verwenden.
@@ -118,7 +118,7 @@ Irgendwann wurde Swagger an die Linux Foundation übergeben und in OpenAPI umben
Aus diesem Grund spricht man bei Version 2.0 häufig von „Swagger“ und ab Version 3 von „OpenAPI“. Aus diesem Grund spricht man bei Version 2.0 häufig von „Swagger“ und ab Version 3 von „OpenAPI“.
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Einen offenen Standard für API-Spezifikationen zu übernehmen und zu verwenden, anstelle eines benutzerdefinierten Schemas. Einen offenen Standard für API-Spezifikationen zu übernehmen und zu verwenden, anstelle eines benutzerdefinierten Schemas.
@@ -147,7 +147,7 @@ Für diese Funktionen wurde Marshmallow entwickelt. Es ist eine großartige Bibl
Aber sie wurde erstellt, bevor Typhinweise in Python existierten. Um also ein <dfn title="die Definition, wie Daten geformt sein sollen">Schema</dfn> zu definieren, müssen Sie bestimmte Werkzeuge und Klassen verwenden, die von Marshmallow bereitgestellt werden. Aber sie wurde erstellt, bevor Typhinweise in Python existierten. Um also ein <dfn title="die Definition, wie Daten geformt sein sollen">Schema</dfn> zu definieren, müssen Sie bestimmte Werkzeuge und Klassen verwenden, die von Marshmallow bereitgestellt werden.
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Code zu verwenden, um „Schemas“ zu definieren, welche Datentypen und Validierung automatisch bereitstellen. Code zu verwenden, um „Schemas“ zu definieren, welche Datentypen und Validierung automatisch bereitstellen.
@@ -163,13 +163,13 @@ Es verwendet unter der Haube Marshmallow, um die Datenvalidierung durchzuführen
Es ist ein großartiges Tool und ich habe es auch oft verwendet, bevor ich **FastAPI** hatte. Es ist ein großartiges Tool und ich habe es auch oft verwendet, bevor ich **FastAPI** hatte.
/// info | Info /// note | Hinweis
Webargs wurde von denselben Marshmallow-Entwicklern erstellt. Webargs wurde von denselben Marshmallow-Entwicklern erstellt.
/// ///
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Eingehende Requestdaten automatisch zu validieren. Eingehende Requestdaten automatisch zu validieren.
@@ -193,13 +193,13 @@ Aber dann haben wir wieder das Problem einer Mikrosyntax innerhalb eines Python-
Der Texteditor kann dabei nicht viel helfen. Und wenn wir Parameter oder Marshmallow-Schemas ändern und vergessen, auch den YAML-Docstring zu ändern, wäre das generierte Schema veraltet. Der Texteditor kann dabei nicht viel helfen. Und wenn wir Parameter oder Marshmallow-Schemas ändern und vergessen, auch den YAML-Docstring zu ändern, wäre das generierte Schema veraltet.
/// info | Info /// note | Hinweis
APISpec wurde von denselben Marshmallow-Entwicklern erstellt. APISpec wurde von denselben Marshmallow-Entwicklern erstellt.
/// ///
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Den offenen Standard für APIs, OpenAPI, zu unterstützen. Den offenen Standard für APIs, OpenAPI, zu unterstützen.
@@ -225,13 +225,13 @@ Die Verwendung führte zur Entwicklung mehrerer Flask-Full-Stack-Generatoren. Di
Und dieselben Full-Stack-Generatoren bildeten die Basis der [**FastAPI**-Projektgeneratoren](project-generation.md). Und dieselben Full-Stack-Generatoren bildeten die Basis der [**FastAPI**-Projektgeneratoren](project-generation.md).
/// info | Info /// note | Hinweis
Flask-apispec wurde von denselben Marshmallow-Entwicklern erstellt. Flask-apispec wurde von denselben Marshmallow-Entwicklern erstellt.
/// ///
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Das OpenAPI-Schema automatisch zu generieren, aus demselben Code, welcher die Serialisierung und Validierung definiert. Das OpenAPI-Schema automatisch zu generieren, aus demselben Code, welcher die Serialisierung und Validierung definiert.
@@ -251,7 +251,7 @@ Da TypeScript-Daten jedoch nach der Kompilierung nach JavaScript nicht erhalten
Es kann nicht sehr gut mit verschachtelten Modellen umgehen. Wenn es sich beim JSON-Body im Request also um ein JSON-Objekt mit inneren Feldern handelt, die wiederum verschachtelte JSON-Objekte sind, kann er nicht richtig dokumentiert und validiert werden. Es kann nicht sehr gut mit verschachtelten Modellen umgehen. Wenn es sich beim JSON-Body im Request also um ein JSON-Objekt mit inneren Feldern handelt, die wiederum verschachtelte JSON-Objekte sind, kann er nicht richtig dokumentiert und validiert werden.
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Python-Typen zu verwenden, um eine hervorragende Editorunterstützung zu erhalten. Python-Typen zu verwenden, um eine hervorragende Editorunterstützung zu erhalten.
@@ -271,7 +271,7 @@ Hat eindeutig Uvicorn und Starlette inspiriert, welche derzeit in offenen Benchm
/// ///
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Einen Weg zu finden, eine hervorragende Performanz zu haben. Einen Weg zu finden, eine hervorragende Performanz zu haben.
@@ -287,7 +287,7 @@ Es ist so konzipiert, dass es über Funktionen verfügt, welche zwei Parameter e
Daher müssen Datenvalidierung, Serialisierung und Dokumentation im Code und nicht automatisch erfolgen. Oder sie müssen als Framework oberhalb von Falcon implementiert werden, so wie Hug. Dieselbe Unterscheidung findet auch in anderen Frameworks statt, die vom Design von Falcon inspiriert sind und ein Requestobjekt und ein Responseobjekt als Parameter haben. Daher müssen Datenvalidierung, Serialisierung und Dokumentation im Code und nicht automatisch erfolgen. Oder sie müssen als Framework oberhalb von Falcon implementiert werden, so wie Hug. Dieselbe Unterscheidung findet auch in anderen Frameworks statt, die vom Design von Falcon inspiriert sind und ein Requestobjekt und ein Responseobjekt als Parameter haben.
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Wege zu finden, eine großartige Performanz zu erzielen. Wege zu finden, eine großartige Performanz zu erzielen.
@@ -313,7 +313,7 @@ Das Dependency Injection System erfordert eine Vorab-Registrierung der Abhängig
Routen werden an einer einzigen Stelle deklariert, indem Funktionen verwendet werden, die an anderen Stellen deklariert wurden (anstatt Dekoratoren zu verwenden, welche direkt über der Funktion platziert werden können, welche den Endpunkt verarbeitet). Dies ähnelt eher der Vorgehensweise von Django als der Vorgehensweise von Flask (und Starlette). Es trennt im Code Dinge, die relativ eng miteinander gekoppelt sind. Routen werden an einer einzigen Stelle deklariert, indem Funktionen verwendet werden, die an anderen Stellen deklariert wurden (anstatt Dekoratoren zu verwenden, welche direkt über der Funktion platziert werden können, welche den Endpunkt verarbeitet). Dies ähnelt eher der Vorgehensweise von Django als der Vorgehensweise von Flask (und Starlette). Es trennt im Code Dinge, die relativ eng miteinander gekoppelt sind.
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Zusätzliche Validierungen für Datentypen zu definieren, mithilfe des „Default“-Werts von Modellattributen. Dies verbessert die Editorunterstützung und war zuvor in Pydantic nicht verfügbar. Zusätzliche Validierungen für Datentypen zu definieren, mithilfe des „Default“-Werts von Modellattributen. Dies verbessert die Editorunterstützung und war zuvor in Pydantic nicht verfügbar.
@@ -335,13 +335,13 @@ Es verfügt über eine interessante, ungewöhnliche Funktion: Mit demselben Fram
Da es auf dem bisherigen Standard für synchrone Python-Webframeworks (WSGI) basiert, kann es nicht mit Websockets und anderen Dingen umgehen, verfügt aber dennoch über eine hohe Performanz. Da es auf dem bisherigen Standard für synchrone Python-Webframeworks (WSGI) basiert, kann es nicht mit Websockets und anderen Dingen umgehen, verfügt aber dennoch über eine hohe Performanz.
/// info | Info /// note | Hinweis
Hug wurde von Timothy Crosley erstellt, demselben Schöpfer von [`isort`](https://github.com/timothycrosley/isort), einem großartigen Tool zum automatischen Sortieren von Importen in Python-Dateien. Hug wurde von Timothy Crosley erstellt, demselben Schöpfer von [`isort`](https://github.com/timothycrosley/isort), einem großartigen Tool zum automatischen Sortieren von Importen in Python-Dateien.
/// ///
/// check | Ideen, die **FastAPI** inspiriert haben /// tip | Ideen, die **FastAPI** inspiriert haben
Hug inspirierte Teile von APIStar und war eines der Tools, die ich am vielversprechendsten fand, neben APIStar. Hug inspirierte Teile von APIStar und war eines der Tools, die ich am vielversprechendsten fand, neben APIStar.
@@ -375,7 +375,7 @@ Es handelte sich nicht länger um ein API-Webframework, da sich der Entwickler a
Jetzt handelt es sich bei APIStar um eine Reihe von Tools zur Validierung von OpenAPI-Spezifikationen, nicht um ein Webframework. Jetzt handelt es sich bei APIStar um eine Reihe von Tools zur Validierung von OpenAPI-Spezifikationen, nicht um ein Webframework.
/// info | Info /// note | Hinweis
APIStar wurde von Tom Christie erstellt. Derselbe, welcher Folgendes erstellt hat: APIStar wurde von Tom Christie erstellt. Derselbe, welcher Folgendes erstellt hat:
@@ -385,7 +385,7 @@ APIStar wurde von Tom Christie erstellt. Derselbe, welcher Folgendes erstellt ha
/// ///
/// check | Inspirierte **FastAPI** /// tip | Inspirierte **FastAPI** dazu
Zu existieren. Zu existieren.
@@ -409,7 +409,7 @@ Das macht es äußerst intuitiv.
Es ist vergleichbar mit Marshmallow. Obwohl es in Benchmarks schneller als Marshmallow ist. Und da es auf den gleichen Python-Typhinweisen basiert, ist die Editorunterstützung großartig. Es ist vergleichbar mit Marshmallow. Obwohl es in Benchmarks schneller als Marshmallow ist. Und da es auf den gleichen Python-Typhinweisen basiert, ist die Editorunterstützung großartig.
/// check | **FastAPI** verwendet es, um /// tip | **FastAPI** verwendet es, um
Die gesamte Datenvalidierung, Datenserialisierung und automatische Modelldokumentation (basierend auf JSON Schema) zu erledigen. Die gesamte Datenvalidierung, Datenserialisierung und automatische Modelldokumentation (basierend auf JSON Schema) zu erledigen.
@@ -452,7 +452,7 @@ Dennoch wird es bereits von mehreren Tools als „Standard“ verwendet. Das ver
/// ///
/// check | **FastAPI** verwendet es, um /// tip | **FastAPI** verwendet es, um
Alle Kern-Webaspekte zu handhaben. Und fügt Funktionen obenauf. Alle Kern-Webaspekte zu handhaben. Und fügt Funktionen obenauf.
@@ -470,7 +470,7 @@ Es handelt sich nicht um ein Webframework, sondern um einen Server. Beispielswei
Es ist der empfohlene Server für Starlette und **FastAPI**. Es ist der empfohlene Server für Starlette und **FastAPI**.
/// check | **FastAPI** empfiehlt es als /// tip | **FastAPI** empfiehlt es als
Hauptwebserver zum Ausführen von **FastAPI**-Anwendungen. Hauptwebserver zum Ausführen von **FastAPI**-Anwendungen.

View File

@@ -139,7 +139,7 @@ Sie und Ihr Schwarm essen die Burger und haben eine schöne Zeit. ✨
<img src="/img/async/concurrent-burgers/concurrent-burgers-07.png" class="illustration"> <img src="/img/async/concurrent-burgers/concurrent-burgers-07.png" class="illustration">
/// info | Info /// note | Hinweis
Die wunderschönen Illustrationen stammen von [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨 Die wunderschönen Illustrationen stammen von [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨
@@ -205,7 +205,7 @@ Sie essen sie und sind fertig. ⏹
Es wurde nicht viel geredet oder geflirtet, da die meiste Zeit mit Warten 🕙 vor der Theke verbracht wurde. 😞 Es wurde nicht viel geredet oder geflirtet, da die meiste Zeit mit Warten 🕙 vor der Theke verbracht wurde. 😞
/// info | Info /// note | Hinweis
Die wunderschönen Illustrationen stammen von [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨 Die wunderschönen Illustrationen stammen von [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨

View File

@@ -132,7 +132,7 @@ Successfully installed fastapi pydantic
</div> </div>
/// info | Info /// note | Hinweis
Es gibt andere Formate und Tools zum Definieren und Installieren von Paketabhängigkeiten. Es gibt andere Formate und Tools zum Definieren und Installieren von Paketabhängigkeiten.
@@ -334,7 +334,7 @@ $ docker build -t myimage .
Beachten Sie das `.` am Ende, es entspricht `./` und teilt Docker mit, welches Verzeichnis zum Erstellen des Containerimages verwendet werden soll. Beachten Sie das `.` am Ende, es entspricht `./` und teilt Docker mit, welches Verzeichnis zum Erstellen des Containerimages verwendet werden soll.
In diesem Fall handelt es sich um dasselbe aktuelle Verzeichnis (`.`). In diesem Case handelt es sich um dasselbe aktuelle Verzeichnis (`.`).
/// ///
@@ -556,7 +556,7 @@ Wenn Sie Container (z. B. Docker, Kubernetes) verwenden, können Sie hauptsächl
Wenn Sie **mehrere Container** haben, von denen wahrscheinlich jeder einen **einzelnen Prozess** ausführt (z. B. in einem **Kubernetes**-Cluster), dann möchten Sie wahrscheinlich einen **separaten Container** haben, welcher die Arbeit der **Vorab-Schritte** in einem einzelnen Container, mit einem einzelnen Prozess ausführt, **bevor** die replizierten Workercontainer ausgeführt werden. Wenn Sie **mehrere Container** haben, von denen wahrscheinlich jeder einen **einzelnen Prozess** ausführt (z. B. in einem **Kubernetes**-Cluster), dann möchten Sie wahrscheinlich einen **separaten Container** haben, welcher die Arbeit der **Vorab-Schritte** in einem einzelnen Container, mit einem einzelnen Prozess ausführt, **bevor** die replizierten Workercontainer ausgeführt werden.
/// info | Info /// note | Hinweis
Wenn Sie Kubernetes verwenden, wäre dies wahrscheinlich ein [Init-Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/). Wenn Sie Kubernetes verwenden, wäre dies wahrscheinlich ein [Init-Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/).

View File

@@ -1,26 +1,6 @@
# FastAPI Cloud { #fastapi-cloud } # FastAPI Cloud { #fastapi-cloud }
Sie können Ihre FastAPI-App in der [FastAPI Cloud](https://fastapicloud.com) mit **einem einzigen Befehl** deployen tragen Sie sich in die Warteliste ein, falls noch nicht geschehen. 🚀 Sie können Ihre FastAPI-App in der [FastAPI Cloud](https://fastapicloud.com) mit **einem einzigen Befehl** deployen. 🚀
## Anmelden { #login }
Stellen Sie sicher, dass Sie bereits ein **FastAPI-Cloud-Konto** haben (wir haben Sie von der Warteliste eingeladen 😉).
Melden Sie sich dann an:
<div class="termy">
```console
$ fastapi login
You are logged in to FastAPI Cloud 🚀
```
</div>
## Deployen { #deploy }
Stellen Sie Ihre App jetzt mit **einem einzigen Befehl** bereit:
<div class="termy"> <div class="termy">
@@ -36,6 +16,8 @@ Deploying to FastAPI Cloud...
</div> </div>
Das CLI erkennt Ihre FastAPI-App automatisch und deployt sie in die Cloud. Wenn Sie nicht angemeldet sind, öffnet sich Ihr Browser, um den Authentifizierungsprozess abzuschließen.
Das wars! Jetzt können Sie Ihre App unter dieser URL aufrufen. ✨ Das wars! Jetzt können Sie Ihre App unter dieser URL aufrufen. ✨
## Über FastAPI Cloud { #about-fastapi-cloud } ## Über FastAPI Cloud { #about-fastapi-cloud }
@@ -62,4 +44,4 @@ Folgen Sie den Anleitungen Ihres Cloudanbieters, um dort FastAPI-Apps zu deploye
## Auf den eigenen Server deployen { #deploy-your-own-server } ## Auf den eigenen Server deployen { #deploy-your-own-server }
Ich werde Ihnen später in diesem **Deployment-Leitfaden** auch alle Details zeigen, sodass Sie verstehen, was passiert, was geschehen muss und wie Sie FastAPI-Apps selbst deployen können, auch auf Ihre eigenen Server. 🤓 Ich werde Ihnen später in diesem **Deployment**-Leitfaden auch alle Details zeigen, sodass Sie verstehen, was passiert, was geschehen muss und wie Sie FastAPI-Apps selbst deployen können, auch auf Ihre eigenen Server. 🤓

View File

@@ -56,7 +56,6 @@ Es gibt mehrere Alternativen, einschließlich:
* [Hypercorn](https://hypercorn.readthedocs.io/): ein ASGI-Server, der unter anderem kompatibel mit HTTP/2 und Trio ist. * [Hypercorn](https://hypercorn.readthedocs.io/): ein ASGI-Server, der unter anderem kompatibel mit HTTP/2 und Trio ist.
* [Daphne](https://github.com/django/daphne): der für Django Channels entwickelte ASGI-Server. * [Daphne](https://github.com/django/daphne): der für Django Channels entwickelte ASGI-Server.
* [Granian](https://github.com/emmett-framework/granian): Ein Rust HTTP-Server für Python-Anwendungen. * [Granian](https://github.com/emmett-framework/granian): Ein Rust HTTP-Server für Python-Anwendungen.
* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unit ist eine leichte und vielseitige Laufzeitumgebung für Webanwendungen.
## Servermaschine und Serverprogramm { #server-machine-and-server-program } ## Servermaschine und Serverprogramm { #server-machine-and-server-program }

View File

@@ -17,7 +17,7 @@ Wie Sie im vorherigen Kapitel über [Deployment-Konzepte](concepts.md) gesehen h
Hier zeige ich Ihnen, wie Sie **Uvicorn** mit **Workerprozessen** verwenden, indem Sie den `fastapi`-Befehl oder den `uvicorn`-Befehl direkt verwenden. Hier zeige ich Ihnen, wie Sie **Uvicorn** mit **Workerprozessen** verwenden, indem Sie den `fastapi`-Befehl oder den `uvicorn`-Befehl direkt verwenden.
/// info | Info /// note | Hinweis
Wenn Sie Container verwenden, beispielsweise mit Docker oder Kubernetes, erzähle ich Ihnen mehr darüber im nächsten Kapitel: [FastAPI in Containern Docker](docker.md). Wenn Sie Container verwenden, beispielsweise mit Docker oder Kubernetes, erzähle ich Ihnen mehr darüber im nächsten Kapitel: [FastAPI in Containern Docker](docker.md).

View File

@@ -95,7 +95,7 @@ was gleichbedeutend wäre mit:
from backend.main import app from backend.main import app
``` ```
### `fastapi dev` mit Pfad { #fastapi-dev-with-path } ### `fastapi dev` mit Pfad oder mit der CLI-Option `--entrypoint` { #fastapi-dev-with-path-or-with-entrypoint-cli-option }
Sie können auch den Dateipfad an den Befehl `fastapi dev` übergeben, dann wird das zu verwendende FastAPI-App-Objekt erraten: Sie können auch den Dateipfad an den Befehl `fastapi dev` übergeben, dann wird das zu verwendende FastAPI-App-Objekt erraten:
@@ -103,7 +103,13 @@ Sie können auch den Dateipfad an den Befehl `fastapi dev` übergeben, dann wird
$ fastapi dev main.py $ fastapi dev main.py
``` ```
Aber Sie müssten sich merken, bei jedem Aufruf des `fastapi`-Befehls den korrekten Pfad zu übergeben. Oder Sie können auch die Option `--entrypoint` an den Befehl `fastapi dev` übergeben:
```console
$ fastapi dev --entrypoint main:app
```
Aber Sie müssten sich merken, bei jedem Aufruf des `fastapi`-Befehls den korrekten Pfad\entrypoint zu übergeben.
Zusätzlich könnten andere Tools sie nicht finden, z. B. die [VS Code Extension](editor-support.md) oder [FastAPI Cloud](https://fastapicloud.com), daher wird empfohlen, den `entrypoint` in `pyproject.toml` zu verwenden. Zusätzlich könnten andere Tools sie nicht finden, z. B. die [VS Code Extension](editor-support.md) oder [FastAPI Cloud](https://fastapicloud.com), daher wird empfohlen, den `entrypoint` in `pyproject.toml` zu verwenden.

View File

@@ -63,7 +63,7 @@ second_user_data = {
my_second_user: User = User(**second_user_data) my_second_user: User = User(**second_user_data)
``` ```
/// info | Info /// note | Hinweis
`**second_user_data` bedeutet: `**second_user_data` bedeutet:

View File

@@ -1,18 +1,12 @@
# FastAPI helfen Hilfe erhalten { #help-fastapi-get-help } # Helfen { #help }
gen Sie **FastAPI**? chten Sie FastAPI helfen oder Hilfe zu FastAPI erhalten?
Möchten Sie FastAPI, anderen Benutzern und dem Autor helfen? Es gibt sehr einfache Möglichkeiten, zu helfen und Hilfe zu bekommen.
Oder möchten Sie Hilfe zu **FastAPI** erhalten?
Es gibt sehr einfache Möglichkeiten zu helfen (einige erfordern nur ein oder zwei Klicks).
Und es gibt auch mehrere Möglichkeiten, Hilfe zu bekommen.
## Newsletter abonnieren { #subscribe-to-the-newsletter } ## Newsletter abonnieren { #subscribe-to-the-newsletter }
Sie können den (unregelmäßigen) [**FastAPI and friends**-Newsletter](newsletter.md) abonnieren, um über folgende Themen informiert zu bleiben: Sie können den (unregelmäßigen) [**FastAPI and friends**-Newsletter](newsletter.md) abonnieren, um über Folgendes informiert zu bleiben:
* Neuigkeiten über FastAPI und Freunde 🚀 * Neuigkeiten über FastAPI und Freunde 🚀
* Anleitungen 📝 * Anleitungen 📝
@@ -20,9 +14,13 @@ Sie können den (unregelmäßigen) [**FastAPI and friends**-Newsletter](newslett
* Breaking Changes 🚨 * Breaking Changes 🚨
* Tipps und Tricks ✅ * Tipps und Tricks ✅
## FastAPI auf X (Twitter) folgen { #follow-fastapi-on-x-twitter } ## FastAPI online folgen { #follow-fastapi-online }
[Folgen Sie @fastapi auf **X (Twitter)**](https://x.com/fastapi), um die neuesten Nachrichten über **FastAPI** zu erhalten. 🐦 Sie können **FastAPI** an mehreren Orten online folgen:
* [@fastapi auf **X / Twitter**](https://x.com/fastapi)
* [@fastapi.tiangolo.com auf **Bluesky**](https://bsky.app/profile/fastapi.tiangolo.com)
* [FastAPI auf **LinkedIn**](https://www.linkedin.com/company/fastapi/)
## **FastAPI** auf GitHub einen Stern geben { #star-fastapi-in-github } ## **FastAPI** auf GitHub einen Stern geben { #star-fastapi-in-github }
@@ -30,200 +28,43 @@ Sie können FastAPI auf GitHub „starren“ (klicken Sie auf den Stern-Button o
Durch das Hinzufügen eines Sterns können andere Benutzer es leichter finden und sehen, dass es für andere bereits nützlich war. Durch das Hinzufügen eines Sterns können andere Benutzer es leichter finden und sehen, dass es für andere bereits nützlich war.
## Das GitHub-Repository auf Releases überwachen { #watch-the-github-repository-for-releases } ## Das GitHub-Repository auf Releases beobachten { #watch-the-github-repository-for-releases }
Sie können FastAPI auf GitHub „beobachten“ (klicken Sie auf den „watch“-Button oben rechts): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). 👀 Sie können FastAPI auf GitHub „beobachten“ (klicken Sie auf den „Watch“-Button oben rechts): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). 👀
Dort können Sie „Releases only“ auswählen. Dort können Sie „Releases only“ auswählen.
Auf diese Weise erhalten Sie Benachrichtigungen (per E-Mail), wenn es ein neues Release (eine neue Version) von **FastAPI** mit Bugfixes und neuen Funktionen gibt. Auf diese Weise erhalten Sie Benachrichtigungen (per EMail), wenn es ein neues Release (eine neue Version) von **FastAPI** mit Bugfixes und neuen Funktionen gibt.
## Mit dem Autor vernetzen { #connect-with-the-author } ## Dem Autor folgen { #follow-the-author }
Sie können sich mit [mir (Sebastián Ramírez / `tiangolo`)](https://tiangolo.com), dem Autor, vernetzen. Sie können [mir (Sebastián Ramírez / `tiangolo`)](https://tiangolo.com), dem Autor, an einigen Orten folgen, um mitzubekommen, wenn ich Neuigkeiten zu FastAPI und Freunden habe:
Sie können: * [@tiangolo auf **GitHub**](https://github.com/tiangolo).
* [@tiangolo auf **X (Twitter)**](https://x.com/tiangolo)
* [Mir auf **GitHub** folgen](https://github.com/tiangolo). * [@tiangolo.com auf **Bluesky**](https://bsky.app/profile/tiangolo.com)
* Andere Open-Source-Projekte sehen, die ich erstellt habe und die Ihnen helfen könnten. * [@tiangolo auf **LinkedIn**](https://www.linkedin.com/in/tiangolo/).
* Mir folgen, um zu sehen, wenn ich ein neues Open-Source-Projekt erstelle.
* [Mir auf **X (Twitter)** folgen](https://x.com/tiangolo) oder [Mastodon](https://fosstodon.org/@tiangolo).
* Mir mitteilen, wie Sie FastAPI verwenden (ich höre das gerne).
* Mitbekommen, wenn ich Ankündigungen mache oder neue Tools veröffentliche.
* Sie können auch [@fastapi auf X (Twitter) folgen](https://x.com/fastapi) (ein separates Konto).
* [Mir auf **LinkedIn** folgen](https://www.linkedin.com/in/tiangolo/).
* Mitbekommen, wenn ich Ankündigungen mache oder neue Tools veröffentliche (obwohl ich X (Twitter) häufiger verwende 🤷‍♂).
* Lesen, was ich schreibe (oder mir folgen) auf [**Dev.to**](https://dev.to/tiangolo) oder [**Medium**](https://medium.com/@tiangolo).
* Andere Ideen, Artikel lesen und mehr über die von mir erstellten Tools erfahren.
* Mir folgen, um zu lesen, wenn ich etwas Neues veröffentliche.
## Über **FastAPI** tweeten { #tweet-about-fastapi }
[Tweeten Sie über **FastAPI**](https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi) und teilen Sie mir und anderen mit, warum es Ihnen gefällt. 🎉
Ich höre gerne, wie **FastAPI** verwendet wird, was Ihnen daran gefallen hat, in welchem Projekt/Unternehmen Sie es verwenden, usw.
## Für FastAPI abstimmen { #vote-for-fastapi }
* [Stimmen Sie für **FastAPI** auf Slant](https://www.slant.co/options/34241/~fastapi-review).
* [Stimmen Sie für **FastAPI** auf AlternativeTo](https://alternativeto.net/software/fastapi/about/).
* [Sagen Sie auf StackShare, dass Sie **FastAPI** verwenden](https://stackshare.io/pypi-fastapi).
## Anderen bei Fragen auf GitHub helfen { #help-others-with-questions-in-github } ## Anderen bei Fragen auf GitHub helfen { #help-others-with-questions-in-github }
Sie können versuchen, anderen bei ihren Fragen zu helfen: Sie können versuchen, anderen bei ihren Fragen in [GitHub-Diskussionen](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered) zu helfen.
* [GitHub-Diskussionen](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered)
* [GitHub-Issues](https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+)
In vielen Fällen kennen Sie möglicherweise bereits die Antwort auf diese Fragen. 🤓 In vielen Fällen kennen Sie möglicherweise bereits die Antwort auf diese Fragen. 🤓
Wenn Sie vielen Menschen bei ihren Fragen helfen, werden Sie offizieller [FastAPI-Experte](fastapi-people.md#fastapi-experts). 🎉 Wenn Sie vielen Menschen bei ihren Fragen helfen, werden Sie offizieller [FastAPI-Experte](fastapi-people.md#fastapi-experts). 🎉
Denken Sie daran, der wichtigste Punkt ist: Versuchen Sie, freundlich zu sein. Die Leute bringen ihre Frustrationen mit und fragen in vielen Fällen nicht auf die beste Art und Weise, aber versuchen Sie dennoch so gut wie möglich, freundlich zu sein. 🤗 Denken Sie daran, der wichtigste Punkt ist: Versuchen Sie, freundlich zu sein. 🤗
Die **FastAPI**-Community soll freundlich und einladend sein. Akzeptieren Sie gleichzeitig kein Mobbing oder respektloses Verhalten gegenüber anderen. Wir müssen uns umeinander kümmern. ### So helfen { #how-to-help }
--- Folgen Sie der [Anleitung, wie Sie helfen können](https://tiangolo.com/open-source/help/#help-others-with-questions-in-github) hier.
So helfen Sie anderen bei Fragen (in Diskussionen oder Issues):
### Die Frage verstehen { #understand-the-question }
* Prüfen Sie, ob Sie verstehen können, was der **Zweck** und der Anwendungsfall der fragenden Person ist.
* Überprüfen Sie dann, ob die Frage (die überwiegende Mehrheit sind Fragen) **klar** ist.
* In vielen Fällen handelt es sich bei der gestellten Frage um eine Lösung, die der Benutzer sich vorstellt, aber es könnte eine **bessere** Lösung geben. Wenn Sie das Problem und den Anwendungsfall besser verstehen, können Sie eine bessere **Alternativlösung** vorschlagen.
* Wenn Sie die Frage nicht verstehen können, fragen Sie nach weiteren **Details**.
### Das Problem reproduzieren { #reproduce-the-problem }
In den meisten Fällen und bei den meisten Fragen gibt es etwas in Bezug auf den **originalen Code** der Person.
In vielen Fällen wird nur ein Fragment des Codes gepostet, aber das reicht nicht aus, um **das Problem zu reproduzieren**.
* Sie können die Person bitten, ein [minimales, reproduzierbares Beispiel](https://stackoverflow.com/help/minimal-reproducible-example) bereitzustellen, welches Sie **kopieren, einfügen** und lokal ausführen können, um den gleichen Fehler oder das gleiche Verhalten zu sehen, das die Person sieht, oder um ihren Anwendungsfall besser zu verstehen.
* Wenn Sie in Geberlaune sind, können Sie ein solches Beispiel selbst erstellen, nur basierend auf der Beschreibung des Problems. Denken Sie jedoch daran, dass dies viel Zeit in Anspruch nehmen kann und dass es besser sein kann, zunächst um eine Klärung des Problems zu bitten.
### Lösungen vorschlagen { #suggest-solutions }
* Nachdem Sie die Frage verstanden haben, können Sie eine mögliche **Antwort** geben.
* In vielen Fällen ist es besser, das **zugrunde liegende Problem oder den Anwendungsfall** zu verstehen, da es möglicherweise einen besseren Weg zur Lösung gibt als das, was die Person versucht.
### Um Schließung bitten { #ask-to-close }
Wenn die Person antwortet, besteht eine hohe Chance, dass Sie ihr Problem gelöst haben. Herzlichen Glückwunsch, **Sie sind ein Held**! 🦸
* Wenn es tatsächlich das Problem gelöst hat, können Sie sie darum bitten:
* In GitHub-Diskussionen: den Kommentar als **Antwort** zu markieren.
* In GitHub-Issues: Das Issue zu **schließen**.
## Das GitHub-Repository beobachten { #watch-the-github-repository }
Sie können FastAPI auf GitHub „beobachten“ (klicken Sie auf den „watch“-Button oben rechts): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). 👀
Wenn Sie dann „Watching“ statt „Releases only“ auswählen, erhalten Sie Benachrichtigungen, wenn jemand ein neues Issue eröffnet oder eine neue Frage stellt. Sie können auch spezifizieren, dass Sie nur über neue Issues, Diskussionen, PRs usw. benachrichtigt werden möchten.
Dann können Sie versuchen, bei der Lösung solcher Fragen zu helfen.
## Fragen stellen { #ask-questions } ## Fragen stellen { #ask-questions }
Sie können im GitHub-Repository [eine neue Frage erstellen](https://github.com/fastapi/fastapi/discussions/new?category=questions), zum Beispiel: Sie können im GitHub-Repository [eine neue Frage erstellen](https://github.com/fastapi/fastapi/discussions/new?category=questions), zum Beispiel um:
* Stellen Sie eine **Frage** oder bitten Sie um Hilfe mit einem **Problem**. * Eine **Frage** zu stellen oder nach einem **Problem** zu fragen.
* Schlagen Sie eine neue **Funktionalität** vor. * Eine neue **Funktionalität** vorzuschlagen.
**Hinweis**: Wenn Sie das tun, bitte ich Sie, auch anderen zu helfen. 😉
## Pull Requests prüfen { #review-pull-requests }
Sie können mir helfen, Pull Requests von anderen zu überprüfen.
Noch einmal, bitte versuchen Sie Ihr Bestes, freundlich zu sein. 🤗
---
Hier ist, was Sie beachten sollten und wie Sie einen Pull Request überprüfen:
### Das Problem verstehen { #understand-the-problem }
* Stellen Sie zunächst sicher, dass Sie **das Problem verstehen**, welches der Pull Request zu lösen versucht. Möglicherweise gibt es eine längere Diskussion dazu in einer GitHub-Diskussion oder einem GitHub-Issue.
* Es besteht auch eine gute Chance, dass der Pull Request nicht wirklich benötigt wird, da das Problem auf **andere Weise** gelöst werden kann. Dann können Sie das vorschlagen oder danach fragen.
### Keine Panik wegen des Stils { #dont-worry-about-style }
* Machen Sie sich keine Sorgen über Dinge wie den Stil von Commit-Nachrichten. Ich werde den Commit zusammenführen und manuell anpassen.
* Außerdem, keine Sorgen über Stilregeln, es gibt bereits automatisierte Tools, die das überprüfen.
Und wenn es irgendeinen anderen Stil- oder Konsistenzbedarf gibt, werde ich direkt danach fragen oder zusätzliche Commits mit den erforderlichen Änderungen hinzufügen.
### Den Code testen { #check-the-code }
* Prüfen und lesen Sie den Code, fragen Sie sich, ob er Sinn macht, **führen Sie ihn lokal aus** und testen Sie, ob er das Problem tatsächlich löst.
* Schreiben Sie dann einen **Kommentar** und berichten, dass Sie das getan haben. So weiß ich, dass Sie ihn wirklich überprüft haben.
/// info | Info
Leider kann ich PRs, nur weil sie von mehreren gutgeheißen wurden, nicht einfach vertrauen.
Es ist mehrmals passiert, dass es PRs mit drei, fünf oder mehr Zustimmungen gibt, wahrscheinlich weil die Beschreibung ansprechend ist, aber wenn ich die PRs überprüfe, sind sie tatsächlich fehlerhaft, haben einen Bug, oder lösen das Problem nicht, welches sie behaupten, zu lösen. 😅
Daher ist es wirklich wichtig, dass Sie den Code wirklich lesen und ausführen und mir in den Kommentaren mitteilen, dass Sie dies getan haben. 🤓
///
* Wenn der PR in irgendeiner Weise vereinfacht werden kann, können Sie danach fragen, aber es gibt keinen Grund, zu wählerisch zu sein. Es gibt viele subjektive Standpunkte (und ich habe auch meinen eigenen 🙈), also ist es besser, wenn man sich auf die grundlegenden Dinge konzentriert.
### Tests { #tests }
* Helfen Sie mir zu überprüfen, dass der PR **Tests** hat.
* Überprüfen Sie, dass diese Tests vor dem PR **fehlschlagen**. 🚨
* Überprüfen Sie dann, dass diese Tests nach dem PR **bestanden** werden. ✅
* Viele PRs haben keine Tests. Sie können den Autor daran **erinnern**, Tests hinzuzufügen, oder Sie können sogar selbst einige Tests **vorschlagen**. Das ist eines der Dinge, die am meisten Zeit in Anspruch nehmen, und Sie können dabei viel helfen.
* Kommentieren Sie auch hier anschließend, was Sie versucht haben, sodass ich weiß, dass Sie es überprüft haben. 🤓
## Einen Pull Request erstellen { #create-a-pull-request }
Sie können [zum Quellcode mit Pull Requests beitragen](contributing.md), zum Beispiel:
* Um einen Tippfehler zu beheben, den Sie in der Dokumentation gefunden haben.
* Um einen Artikel, ein Video oder einen Podcast über FastAPI zu teilen, den Sie erstellt oder gefunden haben, indem Sie [diese Datei bearbeiten](https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml).
* Stellen Sie sicher, dass Sie Ihren Link am Anfang des entsprechenden Abschnitts einfügen.
* Um zu helfen, [die Dokumentation in Ihre Sprache zu übersetzen](contributing.md#translations).
* Sie können auch dabei helfen, die von anderen erstellten Übersetzungen zu überprüfen.
* Um neue Dokumentationsabschnitte vorzuschlagen.
* Um ein bestehendes Problem/Bug zu beheben.
* Stellen Sie sicher, dass Sie Tests hinzufügen.
* Um eine neue Funktionalität hinzuzufügen.
* Stellen Sie sicher, dass Sie Tests hinzufügen.
* Stellen Sie sicher, dass Sie Dokumentation hinzufügen, falls das notwendig ist.
## FastAPI pflegen { #help-maintain-fastapi }
Helfen Sie mir, **FastAPI** zu pflegen! 🤓
Es gibt viel zu tun, und das meiste davon können **SIE** tun.
Die Hauptaufgaben, die Sie jetzt erledigen können, sind:
* [Anderen bei Fragen auf GitHub helfen](#help-others-with-questions-in-github) (siehe Abschnitt oben).
* [Pull Requests prüfen](#review-pull-requests) (siehe Abschnitt oben).
Diese beiden Aufgaben sind die Dinge, die **am meisten Zeit verbrauchen**. Das ist die Hauptarbeit bei der Wartung von FastAPI.
Wenn Sie mir dabei helfen können, **helfen Sie mir, FastAPI zu pflegen** und Sie stellen sicher, dass es weiterhin **schneller und besser voranschreitet**. 🚀
## Am Chat teilnehmen { #join-the-chat } ## Am Chat teilnehmen { #join-the-chat }
@@ -231,7 +72,7 @@ Treten Sie dem 👥 [Discord-Chatserver](https://discord.gg/VQjSZaeJmf) 👥 bei
/// tip | Tipp /// tip | Tipp
Bei Fragen stellen Sie sie in [GitHub-Diskussionen](https://github.com/fastapi/fastapi/discussions/new?category=questions), dort besteht eine viel größere Chance, dass Sie Hilfe von den [FastAPI-Experten](fastapi-people.md#fastapi-experts) erhalten. Bei Fragen stellen Sie sie in GitHub-Diskussionen, dort besteht eine viel größere Chance, dass Sie Hilfe erhalten.
Nutzen Sie den Chat nur für andere allgemeine Gespräche. Nutzen Sie den Chat nur für andere allgemeine Gespräche.
@@ -241,16 +82,6 @@ Nutzen Sie den Chat nur für andere allgemeine Gespräche.
Bedenken Sie, dass Sie in Chats, die „freie Konversation“ erlauben, leicht Fragen stellen können, die zu allgemein und schwer zu beantworten sind, sodass Sie möglicherweise keine Antworten erhalten. Bedenken Sie, dass Sie in Chats, die „freie Konversation“ erlauben, leicht Fragen stellen können, die zu allgemein und schwer zu beantworten sind, sodass Sie möglicherweise keine Antworten erhalten.
Auf GitHub hilft Ihnen die Vorlage dabei, die richtige Frage zu stellen, sodass Sie leichter eine gute Antwort erhalten können, oder sogar das Problem selbst lösen, bevor Sie überhaupt fragen. Und auf GitHub kann ich sicherstellen, dass ich immer alles beantworte, auch wenn es einige Zeit dauert. Persönlich kann ich das mit den Chat-Systemen nicht machen. 😅 Auf GitHub hilft Ihnen die Vorlage dabei, die richtige Frage zu stellen, sodass Sie leichter eine gute Antwort erhalten können, oder sogar das Problem selbst lösen, bevor Sie überhaupt fragen.
Unterhaltungen in den Chat-Systemen sind auch nicht so leicht durchsuchbar wie auf GitHub, sodass Fragen und Antworten möglicherweise im Gespräch verloren gehen. Und nur die auf GitHub machen einen [FastAPI-Experten](fastapi-people.md#fastapi-experts), Sie werden also höchstwahrscheinlich mehr Aufmerksamkeit auf GitHub erhalten. Unterhaltungen in den Chat-Systemen sind auch nicht so leicht durchsuchbar wie auf GitHub, sie gehen verloren.
Auf der anderen Seite gibt es Tausende von Benutzern in den Chat-Systemen, sodass die Wahrscheinlichkeit hoch ist, dass Sie dort fast immer jemanden zum Reden finden. 😄
## Den Autor sponsern { #sponsor-the-author }
Wenn Ihr **Produkt/Firma** auf **FastAPI** angewiesen ist oder in Zusammenhang steht und Sie seine Benutzer erreichen möchten, können Sie den Autor (mich) über [GitHub-Sponsoren](https://github.com/sponsors/tiangolo) unterstützen. Je nach Stufe können Sie einige zusätzliche Vorteile erhalten, wie z. B. ein Abzeichen in der Dokumentation. 🎁
---
Danke! 🚀

View File

@@ -25,9 +25,17 @@ Diese Funktion `get_openapi()` erhält als Parameter:
* `openapi_version`: Die Version der verwendeten OpenAPI-Spezifikation. Standardmäßig die neueste Version: `3.1.0`. * `openapi_version`: Die Version der verwendeten OpenAPI-Spezifikation. Standardmäßig die neueste Version: `3.1.0`.
* `summary`: Eine kurze Zusammenfassung der API. * `summary`: Eine kurze Zusammenfassung der API.
* `description`: Die Beschreibung Ihrer API. Dies kann Markdown enthalten und wird in der Dokumentation angezeigt. * `description`: Die Beschreibung Ihrer API. Dies kann Markdown enthalten und wird in der Dokumentation angezeigt.
* `routes`: Eine Liste von Routen, dies sind alle registrierten *Pfadoperationen*. Sie stammen von `app.routes`. * `routes`: Die Routen der Anwendung, entnommen aus `app.routes`. FastAPI nutzt sie, um die registrierten *Pfadoperationen* zu sammeln, einschließlich derer aus eingebundenen Routern.
/// info | Info /// tip | Technische Details
`app.routes` ist eine Routenstruktur auf niedrigerer Ebene. Sie kann Routenkandidaten enthalten, die FastAPI intern für eingebundene Router verwendet, nicht nur endgültige `APIRoute`-Objekte.
Sie können dennoch `app.routes` an `get_openapi()` übergeben. FastAPI durchläuft diesen Routenbaum, um die tatsächlich wirksamen Pfadoperationen zu sammeln.
///
/// note | Hinweis
Der Parameter `summary` ist in OpenAPI 3.1.0 und höher verfügbar und wird von FastAPI 0.99.0 und höher unterstützt. Der Parameter `summary` ist in OpenAPI 3.1.0 und höher verfügbar und wird von FastAPI 0.99.0 und höher unterstützt.

View File

@@ -85,7 +85,7 @@ Der Hauptanwendungsfall hierfür besteht wahrscheinlich darin, dass Sie das mal
In diesem Fall können Sie diese Funktion in **FastAPI** mit dem Parameter `separate_input_output_schemas=False` deaktivieren. In diesem Fall können Sie diese Funktion in **FastAPI** mit dem Parameter `separate_input_output_schemas=False` deaktivieren.
/// info | Info /// note | Hinweis
Unterstützung für `separate_input_output_schemas` wurde in FastAPI `0.102.0` hinzugefügt. 🤓 Unterstützung für `separate_input_output_schemas` wurde in FastAPI `0.102.0` hinzugefügt. 🤓

View File

@@ -1,3 +1,8 @@
---
include_yaml:
sponsors: data/sponsors.yml
---
# FastAPI { #fastapi } # FastAPI { #fastapi }
<style> <style>
@@ -54,18 +59,27 @@ Seine Schlüssel-Merkmale sind:
### Keystone-Sponsor { #keystone-sponsor } ### Keystone-Sponsor { #keystone-sponsor }
<div class="fastapi-sponsors fastapi-sponsors--keystone">
{% for sponsor in sponsors.keystone -%} {% for sponsor in sponsors.keystone -%}
<a href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a> <a class="fastapi-sponsors__card fastapi-sponsors__card--keystone" href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img class="fastapi-sponsors__banner" src="{{ sponsor.img }}" alt="{{ sponsor.title }}"></a>
{% endfor -%} {% endfor -%}
</div>
### Gold- und Silber-Sponsoren { #gold-and-silver-sponsors } ### Gold-Sponsoren { #gold-sponsors }
<div class="fastapi-sponsors fastapi-sponsors--gold">
{% for sponsor in sponsors.gold -%} {% for sponsor in sponsors.gold -%}
<a href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a> <a class="fastapi-sponsors__card fastapi-sponsors__card--gold" href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img class="fastapi-sponsors__banner" src="{{ sponsor.img }}" alt="{{ sponsor.title }}" loading="lazy"></a>
{% endfor -%} {% endfor -%}
{%- for sponsor in sponsors.silver -%} </div>
<a href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
### Silber-Sponsoren { #silver-sponsors }
<div class="fastapi-sponsors fastapi-sponsors--silver">
{% for sponsor in sponsors.silver -%}
<a class="fastapi-sponsors__card fastapi-sponsors__card--silver" href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img class="fastapi-sponsors__banner" src="{{ sponsor.img }}" alt="{{ sponsor.title }}" loading="lazy"></a>
{% endfor %} {% endfor %}
</div>
<!-- /sponsors --> <!-- /sponsors -->
@@ -73,6 +87,44 @@ Seine Schlüssel-Merkmale sind:
## Meinungen { #opinions } ## Meinungen { #opinions }
<!-- only-mkdocs -->
<div class="fastapi-opinions" data-fastapi-opinions>
<div class="fastapi-opinions__tabs" role="tablist" aria-label="Companies using FastAPI">
<button class="fastapi-opinions__tab" role="tab" type="button" id="fo-tab-microsoft" aria-controls="fo-panel-microsoft" aria-selected="true" tabindex="0">
<span class="fastapi-opinions__mark"><img src="/img/logos/microsoft.svg" alt="Microsoft" loading="lazy"></span>
</button>
<button class="fastapi-opinions__tab" role="tab" type="button" id="fo-tab-uber" aria-controls="fo-panel-uber" aria-selected="false" tabindex="-1">
<span class="fastapi-opinions__mark"><img src="/img/logos/uber.svg" alt="Uber" loading="lazy"></span>
</button>
<button class="fastapi-opinions__tab" role="tab" type="button" id="fo-tab-netflix" aria-controls="fo-panel-netflix" aria-selected="false" tabindex="-1">
<span class="fastapi-opinions__mark"><img src="/img/logos/netflix.svg" alt="Netflix" loading="lazy"></span>
</button>
<button class="fastapi-opinions__tab" role="tab" type="button" id="fo-tab-cisco" aria-controls="fo-panel-cisco" aria-selected="false" tabindex="-1">
<span class="fastapi-opinions__mark"><img src="/img/logos/cisco.svg" alt="Cisco" loading="lazy"></span>
</button>
</div>
<div class="fastapi-opinions__panel" id="fo-panel-microsoft" role="tabpanel" aria-labelledby="fo-tab-microsoft" tabindex="0">
<blockquote class="fastapi-opinions__quote">„Ich verwende <strong>FastAPI</strong> heutzutage sehr oft. Ich plane tatsächlich, es für alle <strong>ML-Services meines Teams bei Microsoft</strong> zu verwenden. Einige davon werden in das Kernprodukt <strong>Windows</strong> und einige <strong>Office</strong>-Produkte integriert.“</blockquote>
<div class="fastapi-opinions__attr">— Kabir Khan, <strong>Microsoft</strong> <a href="https://github.com/fastapi/fastapi/pull/26">(Ref.)</a></div>
</div>
<div class="fastapi-opinions__panel" id="fo-panel-uber" role="tabpanel" aria-labelledby="fo-tab-uber" tabindex="0" hidden>
<blockquote class="fastapi-opinions__quote">„Wir haben die <strong>FastAPI</strong>-Bibliothek übernommen, um einen <strong>REST</strong>-Server zu erstellen, der für <strong>Vorhersagen</strong> abgefragt werden kann.“ <em>[für Ludwig]</em></blockquote>
<div class="fastapi-opinions__attr">— Piero Molino, Yaroslav Dudin, Sai Sumanth Miryala, <strong>Uber</strong> <a href="https://eng.uber.com/ludwig-v0-2/">(Ref.)</a></div>
</div>
<div class="fastapi-opinions__panel" id="fo-panel-netflix" role="tabpanel" aria-labelledby="fo-tab-netflix" tabindex="0" hidden>
<blockquote class="fastapi-opinions__quote">„<strong>Netflix</strong> freut sich, die Open-Source-Veröffentlichung unseres <strong>Krisenmanagement</strong>-Orchestrierungsframeworks bekannt zu geben: <strong>Dispatch</strong>!“ <em>[erstellt mit FastAPI]</em></blockquote>
<div class="fastapi-opinions__attr">— Kevin Glisson, Marc Vilanova, Forest Monsen, <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072">(Ref.)</a></div>
</div>
<div class="fastapi-opinions__panel" id="fo-panel-cisco" role="tabpanel" aria-labelledby="fo-tab-cisco" tabindex="0" hidden>
<blockquote class="fastapi-opinions__quote">„Falls irgendjemand eine Produktions-Python-API erstellen möchte, kann ich <strong>FastAPI</strong> wärmstens empfehlen. Es ist <strong>wunderschön konzipiert</strong>, <strong>einfach zu verwenden</strong> und <strong>hoch skalierbar</strong> es ist zu einer <strong>Schlüsselkomponente</strong> unserer API-First-Entwicklungsstrategie geworden.“</blockquote>
<div class="fastapi-opinions__attr">— Deon Pillsbury, <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/">(Ref.)</a></div>
</div>
</div>
<!-- /only-mkdocs -->
<div class="only-github" markdown="1">
„_[...] Ich verwende **FastAPI** heutzutage sehr oft. [...] Ich habe tatsächlich vor, es für alle **ML-Services meines Teams bei Microsoft** zu verwenden. Einige davon werden in das Kernprodukt **Windows** und einige **Office**-Produkte integriert._“ „_[...] Ich verwende **FastAPI** heutzutage sehr oft. [...] Ich habe tatsächlich vor, es für alle **ML-Services meines Teams bei Microsoft** zu verwenden. Einige davon werden in das Kernprodukt **Windows** und einige **Office**-Produkte integriert._“
<div style="text-align: right; margin-right: 10%;">Kabir Khan <strong>Microsoft</strong> <a href="https://github.com/fastapi/fastapi/pull/26"><small>(Ref.)</small></a></div> <div style="text-align: right; margin-right: 10%;">Kabir Khan <strong>Microsoft</strong> <a href="https://github.com/fastapi/fastapi/pull/26"><small>(Ref.)</small></a></div>
@@ -85,43 +137,31 @@ Seine Schlüssel-Merkmale sind:
--- ---
„_**Netflix** freut sich, die Open-Source-Veröffentlichung unseres **Krisenmanagement**-Orchestrierung-Frameworks bekannt zu geben: **Dispatch**! [erstellt mit **FastAPI**]_“ „_**Netflix** freut sich, die Open-Source-Veröffentlichung unseres **Krisenmanagement**-Orchestrierungsframeworks bekannt zu geben: **Dispatch**! [erstellt mit **FastAPI**]_“
<div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072"><small>(Ref.)</small></a></div> <div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072"><small>(Ref.)</small></a></div>
--- ---
„_Ich bin hellauf begeistert von **FastAPI**. Es macht so viel Spaß!_“
<div style="text-align: right; margin-right: 10%;">Brian Okken <strong>[Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) Podcast-Host</strong> <a href="https://x.com/brianokken/status/1112220079972728832"><small>(Ref.)</small></a></div>
---
„_Ehrlich, was Du gebaut hast, sieht super solide und poliert aus. In vielerlei Hinsicht ist es so, wie ich **Hug** haben wollte es ist wirklich inspirierend, jemanden so etwas bauen zu sehen._“
<div style="text-align: right; margin-right: 10%;">Timothy Crosley <strong>[Hug](https://github.com/hugapi/hug)-Autor</strong> <a href="https://news.ycombinator.com/item?id=19455465"><small>(Ref.)</small></a></div>
---
„_Wenn Sie ein **modernes Framework** zum Erstellen von REST-APIs erlernen möchten, schauen Sie sich **FastAPI** an. [...] Es ist schnell, einfach zu verwenden und leicht zu lernen [...]_“
„_Wir haben zu **FastAPI** für unsere **APIs** gewechselt [...] Ich denke, es wird Ihnen gefallen [...]_“
<div style="text-align: right; margin-right: 10%;">Ines Montani Matthew Honnibal <strong>[Explosion AI](https://explosion.ai)-Gründer [spaCy](https://spacy.io)-Autoren</strong> <a href="https://x.com/_inesmontani/status/1144173225322143744"><small>(Ref.)</small></a> <a href="https://x.com/honnibal/status/1144031421859655680"><small>(Ref.)</small></a></div>
---
„_Falls irgendjemand eine Produktions-Python-API erstellen möchte, kann ich **FastAPI** wärmstens empfehlen. Es ist **wunderschön konzipiert**, **einfach zu verwenden** und **hoch skalierbar**; es ist zu einer **Schlüsselkomponente** unserer API-First-Entwicklungsstrategie geworden und treibt viele Automatisierungen und Services an, wie etwa unseren Virtual TAC Engineer._“ „_Falls irgendjemand eine Produktions-Python-API erstellen möchte, kann ich **FastAPI** wärmstens empfehlen. Es ist **wunderschön konzipiert**, **einfach zu verwenden** und **hoch skalierbar**; es ist zu einer **Schlüsselkomponente** unserer API-First-Entwicklungsstrategie geworden und treibt viele Automatisierungen und Services an, wie etwa unseren Virtual TAC Engineer._“
<div style="text-align: right; margin-right: 10%;">Deon Pillsbury <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/"><small>(Ref.)</small></a></div> <div style="text-align: right; margin-right: 10%;">Deon Pillsbury <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/"><small>(Ref.)</small></a></div>
--- ---
</div>
## FastAPI Conf { #fastapi-conf }
[**FastAPI Conf 26**](https://fastapiconf.com) findet am **28. Oktober 2026** in **Amsterdam, NL** statt. Alles über FastAPI, direkt von der Quelle. 🎤
<a class="fastapi-feature-banner" href="https://fastapiconf.com"><img src="https://fastapi.tiangolo.com/img/fastapi-conf.jpeg" alt="FastAPI Conf 26 - 28. Oktober 2026 - Amsterdam, NL"></a>
## FastAPI Mini-Dokumentarfilm { #fastapi-mini-documentary } ## FastAPI Mini-Dokumentarfilm { #fastapi-mini-documentary }
Es gibt einen [FastAPI-Mini-Dokumentarfilm](https://www.youtube.com/watch?v=mpR8ngthqiE), veröffentlicht Ende 2025, Sie können ihn online ansehen: Es gibt einen [FastAPI-Mini-Dokumentarfilm](https://www.youtube.com/watch?v=mpR8ngthqiE), veröffentlicht Ende 2025, Sie können ihn online ansehen:
<a href="https://www.youtube.com/watch?v=mpR8ngthqiE"><img src="https://fastapi.tiangolo.com/img/fastapi-documentary.jpg" alt="FastAPI Mini-Dokumentarfilm"></a> <a class="fastapi-feature-banner" href="https://www.youtube.com/watch?v=mpR8ngthqiE"><img src="https://fastapi.tiangolo.com/img/fastapi-documentary.jpg" alt="FastAPI Mini-Dokumentarfilm"></a>
## **Typer**, das FastAPI der CLIs { #typer-the-fastapi-of-clis } ## **Typer**, das FastAPI der CLIs { #typer-the-fastapi-of-clis }
@@ -152,7 +192,7 @@ $ pip install "fastapi[standard]"
</div> </div>
**Hinweis**: Stellen Sie sicher, dass Sie `"fastapi[standard]"` in Anführungszeichen setzen, damit es in allen Terminals funktioniert. **Hinweis**: Stellen Sie sicher, dass Sie fastapi[standard] in Anführungszeichen setzen, damit es in allen Terminals funktioniert.
## Beispiel { #example } ## Beispiel { #example }
@@ -452,9 +492,7 @@ Für ein vollständigeres Beispiel, mit weiteren Funktionen, siehe das <a href="
### Ihre App deployen (optional) { #deploy-your-app-optional } ### Ihre App deployen (optional) { #deploy-your-app-optional }
Optional können Sie Ihre FastAPI-App in die [FastAPI Cloud](https://fastapicloud.com) deployen, gehen Sie und treten Sie der Warteliste bei, falls noch nicht geschehen. 🚀 Optional können Sie Ihre FastAPI-App mit einem einzigen Befehl in die [FastAPI Cloud](https://fastapicloud.com) deployen. 🚀
Wenn Sie bereits ein **FastAPI Cloud**-Konto haben (wir haben Sie von der Warteliste eingeladen 😉), können Sie Ihre Anwendung mit einem einzigen Befehl deployen.
<div class="termy"> <div class="termy">
@@ -470,6 +508,8 @@ Deploying to FastAPI Cloud...
</div> </div>
Das CLI erkennt Ihre FastAPI-Anwendung automatisch und deployt sie in die Cloud. Wenn Sie nicht eingeloggt sind, wird Ihr Browser geöffnet, um den Authentifizierungsprozess abzuschließen.
Das wars! Jetzt können Sie unter dieser URL auf Ihre App zugreifen. ✨ Das wars! Jetzt können Sie unter dieser URL auf Ihre App zugreifen. ✨
#### Über FastAPI Cloud { #about-fastapi-cloud } #### Über FastAPI Cloud { #about-fastapi-cloud }

View File

@@ -172,7 +172,7 @@ Da die Liste ein Typ ist, welcher innere Typen enthält, werden diese von eckige
{* ../../docs_src/python_types/tutorial006_py310.py hl[1] *} {* ../../docs_src/python_types/tutorial006_py310.py hl[1] *}
/// info | Info /// note | Hinweis
Die inneren Typen in den eckigen Klammern werden als „Typ-Parameter“ bezeichnet. Die inneren Typen in den eckigen Klammern werden als „Typ-Parameter“ bezeichnet.
@@ -283,7 +283,7 @@ Ein Beispiel aus der offiziellen Pydantic Dokumentation:
{* ../../docs_src/python_types/tutorial011_py310.py *} {* ../../docs_src/python_types/tutorial011_py310.py *}
/// info | Info /// note | Hinweis
Um mehr über [Pydantic zu erfahren, schauen Sie sich dessen Dokumentation an](https://docs.pydantic.dev/). Um mehr über [Pydantic zu erfahren, schauen Sie sich dessen Dokumentation an](https://docs.pydantic.dev/).
@@ -341,7 +341,7 @@ Das mag alles abstrakt klingen. Machen Sie sich keine Sorgen. Sie werden all das
Das Wichtigste ist, dass **FastAPI** durch die Verwendung von Standard-Python-Typen an einer einzigen Stelle (anstatt weitere Klassen, Dekoratoren usw. hinzuzufügen) einen Großteil der Arbeit für Sie erledigt. Das Wichtigste ist, dass **FastAPI** durch die Verwendung von Standard-Python-Typen an einer einzigen Stelle (anstatt weitere Klassen, Dekoratoren usw. hinzuzufügen) einen Großteil der Arbeit für Sie erledigt.
/// info | Info /// note | Hinweis
Wenn Sie bereits das ganze Tutorial durchgearbeitet haben und mehr über Typen erfahren wollen, dann ist eine gute Ressource [der „Cheat Sheet“ von `mypy`](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html). Wenn Sie bereits das ganze Tutorial durchgearbeitet haben und mehr über Typen erfahren wollen, dann ist eine gute Ressource [der „Cheat Sheet“ von `mypy`](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html).

View File

@@ -4,7 +4,7 @@ Wenn Sie eine Anwendung oder eine Web-API erstellen, ist es selten der Fall, das
**FastAPI** bietet ein praktisches Werkzeug zur Strukturierung Ihrer Anwendung bei gleichzeitiger Wahrung der Flexibilität. **FastAPI** bietet ein praktisches Werkzeug zur Strukturierung Ihrer Anwendung bei gleichzeitiger Wahrung der Flexibilität.
/// info | Info /// note | Hinweis
Wenn Sie von Flask kommen, wäre dies das Äquivalent zu Flasks Blueprints. Wenn Sie von Flask kommen, wäre dies das Äquivalent zu Flasks Blueprints.
@@ -194,7 +194,7 @@ Das Endergebnis ist, dass die Pfade für diese Artikel jetzt wie folgt lauten:
/// ///
/// check | Testen /// tip | Tipp
Die Parameter `prefix`, `tags`, `responses` und `dependencies` sind (wie in vielen anderen Fällen) nur ein Feature von **FastAPI**, um Ihnen dabei zu helfen, Codeverdoppelung zu vermeiden. Die Parameter `prefix`, `tags`, `responses` und `dependencies` sind (wie in vielen anderen Fällen) nur ein Feature von **FastAPI**, um Ihnen dabei zu helfen, Codeverdoppelung zu vermeiden.
@@ -339,7 +339,7 @@ Wir könnten sie auch wie folgt importieren:
from app.routers import items, users from app.routers import items, users
``` ```
/// info | Info /// note | Hinweis
Die erste Version ist ein „relativer Import“: Die erste Version ist ein „relativer Import“:
@@ -382,7 +382,7 @@ Inkludieren wir nun die `router` aus diesen Submodulen `users` und `items`:
{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[10:11] title["app/main.py"] *} {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[10:11] title["app/main.py"] *}
/// info | Info /// note | Hinweis
`users.router` enthält den `APIRouter` in der Datei `app/routers/users.py`. `users.router` enthält den `APIRouter` in der Datei `app/routers/users.py`.
@@ -396,17 +396,17 @@ Es wird alle Routen von diesem Router als Teil von dieser inkludieren.
/// note | Technische Details /// note | Technische Details
Tatsächlich wird intern eine *Pfadoperation* für jede *Pfadoperation* erstellt, die im `APIRouter` deklariert wurde. FastAPI behält den ursprünglichen `APIRouter` und seine `APIRoute`s aktiv, wenn der Router in die Hauptanwendung eingebunden wird.
Hinter den Kulissen wird es also tatsächlich so funktionieren, als ob alles dieselbe einzige Anwendung wäre. Das bedeutet, dass benutzerdefinierte Subklassen von `APIRouter` und `APIRoute` auch nach dem Einbinden weiterhin beteiligt sein können.
/// ///
/// check | Testen /// tip | Tipp
Bei der Einbindung von Routern müssen Sie sich keine Gedanken über die Leistung machen. Bei der Einbindung von Routern müssen Sie sich keine Gedanken über die Leistung machen.
Dies dauert Mikrosekunden und geschieht nur beim Start. Dies ist so konzipiert, dass es leichtgewichtig ist und keinen Overhead pro Request hinzufügt.
Es hat also keinen Einfluss auf die Leistung. ⚡ Es hat also keinen Einfluss auf die Leistung. ⚡
@@ -451,7 +451,7 @@ Hier machen wir es ... nur um zu zeigen, dass wir es können 🤷:
und es wird korrekt funktionieren, zusammen mit allen anderen *Pfadoperationen*, die mit `app.include_router()` hinzugefügt wurden. und es wird korrekt funktionieren, zusammen mit allen anderen *Pfadoperationen*, die mit `app.include_router()` hinzugefügt wurden.
/// info | Sehr technische Details /// note | Sehr technische Details
**Hinweis**: Dies ist ein sehr technisches Detail, das Sie wahrscheinlich **einfach überspringen** können. **Hinweis**: Dies ist ein sehr technisches Detail, das Sie wahrscheinlich **einfach überspringen** können.
@@ -459,9 +459,9 @@ und es wird korrekt funktionieren, zusammen mit allen anderen *Pfadoperationen*,
Die `APIRouter` sind nicht „gemountet“, sie sind nicht vom Rest der Anwendung isoliert. Die `APIRouter` sind nicht „gemountet“, sie sind nicht vom Rest der Anwendung isoliert.
Das liegt daran, dass wir deren *Pfadoperationen* in das OpenAPI-Schema und die Benutzeroberflächen einbinden möchten. Das liegt daran, dass wir ihre *Pfadoperationen* im OpenAPI-Schema und in den Benutzeroberflächen inkludieren möchten.
Da wir sie nicht einfach isolieren und unabhängig vom Rest „mounten“ können, werden die *Pfadoperationen* „geklont“ (neu erstellt) und nicht direkt einbezogen. FastAPI behält die ursprünglichen Router und Pfadoperationen aktiv und kombiniert Router-Präfixe, Abhängigkeiten, Tags, Responses und weitere Metadaten beim Bearbeiten von Requests und beim Generieren von OpenAPI.
/// ///
@@ -532,4 +532,16 @@ Auf die gleiche Weise, wie Sie einen `APIRouter` in eine `FastAPI`-Anwendung ein
router.include_router(other_router) router.include_router(other_router)
``` ```
Stellen Sie sicher, dass Sie dies tun, bevor Sie `router` in die `FastAPI`-App einbinden, damit auch die *Pfadoperationen* von `other_router` inkludiert werden. Sie können dies vor oder nach dem Einbinden von `router` in die `FastAPI`-App tun. FastAPI inkludiert die *Pfadoperationen* von `other_router` dennoch in Routing und OpenAPI.
Gleiches gilt für später zu den Routern hinzugefügte *Pfadoperationen*. Sie sind auch über die frühere Inklusion sichtbar.
/// warning | Technische Details
Vermeiden Sie es, `router.routes` direkt zu mutieren, nachdem ein Router inkludiert wurde. FastAPI behandelt Router-Inklusion als „live“, sodass der ursprüngliche Router und seine Routen Teil des Routings und der OpenAPI-Generierung bleiben.
Verwenden Sie dokumentierte APIs wie Pfadoperation-Dekoratoren und `.include_router()`, um Routen und Router hinzuzufügen.
Betrachten Sie `router.routes` als eine Low-Level-Routenstruktur, die sowohl Routendefinitionen als auch inkludierte Router enthalten kann, und verlassen Sie sich nicht darauf als flache Liste endgültiger Pfadoperationen.
///

View File

@@ -108,7 +108,7 @@ Zum Beispiel:
{* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *} {* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *}
/// info | Info /// note | Hinweis
`Body` hat die gleichen zusätzlichen Validierungs- und Metadaten-Parameter wie `Query`, `Path` und andere, die Sie später kennenlernen werden. `Body` hat die gleichen zusätzlichen Validierungs- und Metadaten-Parameter wie `Query`, `Path` und andere, die Sie später kennenlernen werden.
@@ -123,7 +123,7 @@ Standardmäßig wird **FastAPI** dann seinen Body direkt erwarten.
Aber wenn Sie möchten, dass es einen JSON-Body mit einem Schlüssel `item` erwartet, und darin den Inhalt des Modells, so wie es das tut, wenn Sie mehrere Body-Parameter deklarieren, dann können Sie den speziellen `Body`-Parameter `embed` setzen: Aber wenn Sie möchten, dass es einen JSON-Body mit einem Schlüssel `item` erwartet, und darin den Inhalt des Modells, so wie es das tut, wenn Sie mehrere Body-Parameter deklarieren, dann können Sie den speziellen `Body`-Parameter `embed` setzen:
```Python ```Python
item: Item = Body(embed=True) item: Annotated[Item, Body(embed=True)]
``` ```
so wie in: so wie in:

View File

@@ -135,7 +135,7 @@ Das wird einen JSON-Body erwarten (konvertieren, validieren, dokumentieren, usw.
} }
``` ```
/// info | Info /// note | Hinweis
Beachten Sie, dass der `images`-Schlüssel jetzt eine Liste von Bild-Objekten hat. Beachten Sie, dass der `images`-Schlüssel jetzt eine Liste von Bild-Objekten hat.
@@ -147,7 +147,7 @@ Sie können beliebig tief verschachtelte Modelle definieren:
{* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *} {* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *}
/// info | Info /// note | Hinweis
Beachten Sie, wie `Offer` eine Liste von `Item`s hat, die ihrerseits eine optionale Liste von `Image`s haben. Beachten Sie, wie `Offer` eine Liste von `Item`s hat, die ihrerseits eine optionale Liste von `Image`s haben.

View File

@@ -8,7 +8,7 @@ Ihre API muss fast immer einen **Response**body senden. Aber Clients müssen nic
Um einen **Request**body zu deklarieren, verwenden Sie [Pydantic](https://docs.pydantic.dev/)-Modelle mit all deren Fähigkeiten und Vorzügen. Um einen **Request**body zu deklarieren, verwenden Sie [Pydantic](https://docs.pydantic.dev/)-Modelle mit all deren Fähigkeiten und Vorzügen.
/// info | Info /// note | Hinweis
Um Daten zu senden, sollten Sie eines von: `POST` (meistverwendet), `PUT`, `DELETE` oder `PATCH` verwenden. Um Daten zu senden, sollten Sie eines von: `POST` (meistverwendet), `PUT`, `DELETE` oder `PATCH` verwenden.

View File

@@ -32,7 +32,7 @@ Sie können die definierten Cookies in der Dokumentationsoberfläche unter `/doc
<img src="/img/tutorial/cookie-param-models/image01.png"> <img src="/img/tutorial/cookie-param-models/image01.png">
</div> </div>
/// info | Info /// note | Hinweis
Bitte beachten Sie, dass Browser Cookies auf spezielle Weise und im Hintergrund bearbeiten, sodass sie **nicht** leicht **JavaScript** erlauben, diese zu berühren. Bitte beachten Sie, dass Browser Cookies auf spezielle Weise und im Hintergrund bearbeiten, sodass sie **nicht** leicht **JavaScript** erlauben, diese zu berühren.

View File

@@ -24,13 +24,13 @@ Aber denken Sie daran, dass, wenn Sie `Query`, `Path`, `Cookie` und andere von `
/// ///
/// info | Info /// note | Hinweis
Um Cookies zu deklarieren, müssen Sie `Cookie` verwenden, da die Parameter sonst als Query-Parameter interpretiert würden. Um Cookies zu deklarieren, müssen Sie `Cookie` verwenden, da die Parameter sonst als Query-Parameter interpretiert würden.
/// ///
/// info | Info /// note | Hinweis
Beachten Sie, dass **Browser Cookies auf besondere Weise und hinter den Kulissen handhaben** und **JavaScript** **nicht** ohne Weiteres erlauben, auf sie zuzugreifen. Beachten Sie, dass **Browser Cookies auf besondere Weise und hinter den Kulissen handhaben** und **JavaScript** **nicht** ohne Weiteres erlauben, auf sie zuzugreifen.

View File

@@ -72,7 +72,7 @@ Daher wird die Zeile:
nicht ausgeführt. nicht ausgeführt.
/// info | Info /// note | Hinweis
Für weitere Informationen besuchen Sie bitte [die offizielle Python-Dokumentation](https://docs.python.org/3/library/__main__.html). Für weitere Informationen besuchen Sie bitte [die offizielle Python-Dokumentation](https://docs.python.org/3/library/__main__.html).

View File

@@ -28,7 +28,7 @@ Damit wird auch vermieden, neue Entwickler möglicherweise zu verwirren, die ein
/// ///
/// info | Info /// note | Hinweis
In diesem Beispiel verwenden wir zwei erfundene benutzerdefinierte Header `X-Key` und `X-Token`. In diesem Beispiel verwenden wir zwei erfundene benutzerdefinierte Header `X-Key` und `X-Token`.

View File

@@ -170,7 +170,7 @@ participant tasks as Hintergrundtasks
end end
``` ```
/// info | Info /// note | Hinweis
Es wird nur **eine Response** an den Client gesendet. Es kann eine Error-Response oder die Response der *Pfadoperation* sein. Es wird nur **eine Response** an den Client gesendet. Es kann eine Error-Response oder die Response der *Pfadoperation* sein.

View File

@@ -50,7 +50,7 @@ In diesem Fall erwartet diese Abhängigkeit:
Und dann wird einfach ein <abbr title="Dictionary Zuordnungstabelle: In anderen Sprachen auch Hash, Map, Objekt, Assoziatives Array genannt">`dict`</abbr> zurückgegeben, welches diese Werte enthält. Und dann wird einfach ein <abbr title="Dictionary Zuordnungstabelle: In anderen Sprachen auch Hash, Map, Objekt, Assoziatives Array genannt">`dict`</abbr> zurückgegeben, welches diese Werte enthält.
/// info | Info /// note | Hinweis
FastAPI unterstützt (und empfiehlt die Verwendung von) `Annotated` seit Version 0.95.0. FastAPI unterstützt (und empfiehlt die Verwendung von) `Annotated` seit Version 0.95.0.
@@ -105,7 +105,7 @@ common_parameters --> read_users
Auf diese Weise schreiben Sie gemeinsam genutzten Code nur einmal, und **FastAPI** kümmert sich darum, ihn für Ihre *Pfadoperationen* aufzurufen. Auf diese Weise schreiben Sie gemeinsam genutzten Code nur einmal, und **FastAPI** kümmert sich darum, ihn für Ihre *Pfadoperationen* aufzurufen.
/// check | Testen /// tip | Tipp
Beachten Sie, dass Sie keine spezielle Klasse erstellen und diese irgendwo an **FastAPI** übergeben müssen, um sie zu „registrieren“ oder so ähnlich. Beachten Sie, dass Sie keine spezielle Klasse erstellen und diese irgendwo an **FastAPI** übergeben müssen, um sie zu „registrieren“ oder so ähnlich.

View File

@@ -35,7 +35,7 @@ Diese Abhängigkeit verwenden wir nun wie folgt:
{* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *} {* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *}
/// info | Info /// note | Hinweis
Beachten Sie, dass wir in der *Pfadoperation-Funktion* nur eine einzige Abhängigkeit deklarieren, den `query_or_cookie_extractor`. Beachten Sie, dass wir in der *Pfadoperation-Funktion* nur eine einzige Abhängigkeit deklarieren, den `query_or_cookie_extractor`.

View File

@@ -180,7 +180,7 @@ was äquivalent wäre zu:
from backend.main import app from backend.main import app
``` ```
### `fastapi dev` mit Pfad { #fastapi-dev-with-path } ### `fastapi dev` mit Pfad oder mit der CLI-Option `--entrypoint` { #fastapi-dev-with-path-or-with-entrypoint-cli-option }
Sie können auch den Dateipfad an den Befehl `fastapi dev` übergeben, und er wird das zu verwendende FastAPI-App-Objekt erraten: Sie können auch den Dateipfad an den Befehl `fastapi dev` übergeben, und er wird das zu verwendende FastAPI-App-Objekt erraten:
@@ -188,29 +188,19 @@ Sie können auch den Dateipfad an den Befehl `fastapi dev` übergeben, und er wi
$ fastapi dev main.py $ fastapi dev main.py
``` ```
Aber Sie müssten sich daran erinnern, bei jedem Aufruf des `fastapi`-Befehls den korrekten Pfad zu übergeben. Oder Sie können die Option `--entrypoint` an den Befehl `fastapi dev` übergeben:
```console
$ fastapi dev --entrypoint main:app
```
Aber Sie müssten sich daran erinnern, bei jedem Aufruf des `fastapi`-Befehls den korrekten Pfad\entrypoint zu übergeben.
Zusätzlich könnten andere Tools es nicht finden, z. B. die [VS Code-Erweiterung](../editor-support.md) oder [FastAPI Cloud](https://fastapicloud.com). Daher wird empfohlen, den `entrypoint` in `pyproject.toml` zu verwenden. Zusätzlich könnten andere Tools es nicht finden, z. B. die [VS Code-Erweiterung](../editor-support.md) oder [FastAPI Cloud](https://fastapicloud.com). Daher wird empfohlen, den `entrypoint` in `pyproject.toml` zu verwenden.
### Ihre App deployen (optional) { #deploy-your-app-optional } ### Ihre App deployen (optional) { #deploy-your-app-optional }
Sie können optional Ihre FastAPI-App in der [FastAPI Cloud](https://fastapicloud.com) deployen, treten Sie der Warteliste bei, falls Sie es noch nicht getan haben. 🚀 Sie können optional Ihre FastAPI-App in der [FastAPI Cloud](https://fastapicloud.com) mit einem einzigen Befehl deployen. 🚀
Wenn Sie bereits ein **FastAPI Cloud**-Konto haben (wir haben Sie von der Warteliste eingeladen 😉), können Sie Ihre Anwendung mit einem Befehl deployen.
Vor dem Deployen, stellen Sie sicher, dass Sie eingeloggt sind:
<div class="termy">
```console
$ fastapi login
You are logged in to FastAPI Cloud 🚀
```
</div>
Dann stellen Sie Ihre App bereit:
<div class="termy"> <div class="termy">
@@ -226,6 +216,8 @@ Deploying to FastAPI Cloud...
</div> </div>
Das CLI erkennt Ihre FastAPI-Anwendung automatisch und deployt sie in die Cloud. Wenn Sie nicht eingeloggt sind, wird Ihr Browser geöffnet, um die Authentifizierung abzuschließen.
Das war's! Jetzt können Sie Ihre App unter dieser URL aufrufen. ✨ Das war's! Jetzt können Sie Ihre App unter dieser URL aufrufen. ✨
## Zusammenfassung, Schritt für Schritt { #recap-step-by-step } ## Zusammenfassung, Schritt für Schritt { #recap-step-by-step }
@@ -270,7 +262,7 @@ https://example.com/items/foo
/items/foo /items/foo
``` ```
/// info | Info /// note | Hinweis
Ein „Pfad“ wird häufig auch als „Endpunkt“ oder „Route“ bezeichnet. Ein „Pfad“ wird häufig auch als „Endpunkt“ oder „Route“ bezeichnet.
@@ -322,7 +314,7 @@ Das `@app.get("/")` sagt **FastAPI**, dass die Funktion direkt darunter für die
* den Pfad `/` * den Pfad `/`
* unter der Verwendung der <dfn title="eine HTTP-GET-Methode"><code>get</code>-Operation</dfn> gehen * unter der Verwendung der <dfn title="eine HTTP-GET-Methode"><code>get</code>-Operation</dfn> gehen
/// info | `@decorator` Info /// note | `@decorator` Info
Diese `@something`-Syntax wird in Python „Dekorator“ genannt. Diese `@something`-Syntax wird in Python „Dekorator“ genannt.

View File

@@ -24,7 +24,7 @@ Aber denken Sie daran, dass bei der Nutzung von `Query`, `Path`, `Header` und an
/// ///
/// info | Info /// note | Hinweis
Um Header zu deklarieren, müssen Sie `Header` verwenden, da die Parameter sonst als Query-Parameter interpretiert werden würden. Um Header zu deklarieren, müssen Sie `Header` verwenden, da die Parameter sonst als Query-Parameter interpretiert werden würden.

View File

@@ -74,7 +74,7 @@ Verwenden Sie den Parameter `tags` mit Ihren *Pfadoperationen* (und `APIRouter`n
{* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *} {* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *}
/// info | Info /// note | Hinweis
Lesen Sie mehr zu Tags unter [Pfadoperation-Konfiguration](path-operation-configuration.md#tags). Lesen Sie mehr zu Tags unter [Pfadoperation-Konfiguration](path-operation-configuration.md#tags).

View File

@@ -72,13 +72,13 @@ Sie können die Response mit dem Parameter `response_description` beschreiben:
{* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *} {* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *}
/// info | Info /// note | Hinweis
Beachten Sie, dass sich `response_description` speziell auf die Response bezieht, während `description` sich generell auf die *Pfadoperation* bezieht. Beachten Sie, dass sich `response_description` speziell auf die Response bezieht, während `description` sich generell auf die *Pfadoperation* bezieht.
/// ///
/// check | Testen /// tip | Tipp
OpenAPI verlangt, dass jede *Pfadoperation* über eine Beschreibung der Response verfügt. OpenAPI verlangt, dass jede *Pfadoperation* über eine Beschreibung der Response verfügt.

View File

@@ -8,7 +8,7 @@ Importieren Sie zuerst `Path` von `fastapi`, und importieren Sie `Annotated`:
{* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *} {* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *}
/// info | Info /// note | Hinweis
FastAPI hat in Version 0.95.0 Unterstützung für `Annotated` hinzugefügt und es zur Verwendung empfohlen. FastAPI hat in Version 0.95.0 Unterstützung für `Annotated` hinzugefügt und es zur Verwendung empfohlen.
@@ -131,7 +131,7 @@ Und Sie können auch Zahlenvalidierungen deklarieren:
* `lt`: `l`ess `t`han (kleiner als) * `lt`: `l`ess `t`han (kleiner als)
* `le`: `l`ess than or `e`qual (kleiner oder gleich) * `le`: `l`ess than or `e`qual (kleiner oder gleich)
/// info | Info /// note | Hinweis
`Query`, `Path`, und andere Klassen, die Sie später sehen werden, sind Unterklassen einer gemeinsamen `Param`-Klasse. `Query`, `Path`, und andere Klassen, die Sie später sehen werden, sind Unterklassen einer gemeinsamen `Param`-Klasse.

View File

@@ -20,7 +20,7 @@ Sie können den Typ eines Pfad-Parameters in der Argumentliste der Funktion dekl
In diesem Fall wird `item_id` als `int` deklariert, also als Ganzzahl. In diesem Fall wird `item_id` als `int` deklariert, also als Ganzzahl.
/// check | Testen /// tip | Tipp
Dadurch erhalten Sie Editor-Unterstützung innerhalb Ihrer Funktion, mit Fehlerprüfungen, Codevervollständigung, usw. Dadurch erhalten Sie Editor-Unterstützung innerhalb Ihrer Funktion, mit Fehlerprüfungen, Codevervollständigung, usw.
@@ -34,7 +34,7 @@ Wenn Sie dieses Beispiel ausführen und Ihren Browser unter [http://127.0.0.1:80
{"item_id":3} {"item_id":3}
``` ```
/// check | Testen /// tip | Tipp
Beachten Sie, dass der Wert, den Ihre Funktion erhält und zurückgibt, die Zahl `3` ist, also ein `int`. Nicht der String „3“, also ein `str`. Beachten Sie, dass der Wert, den Ihre Funktion erhält und zurückgibt, die Zahl `3` ist, also ein `int`. Nicht der String „3“, also ein `str`.
@@ -66,7 +66,7 @@ Der Pfad-Parameter `item_id` hatte den Wert „foo“, was kein `int` ist.
Die gleiche Fehlermeldung würde angezeigt werden, wenn Sie ein `float` (also eine Kommazahl) statt eines `int`s übergeben würden, wie etwa in: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) Die gleiche Fehlermeldung würde angezeigt werden, wenn Sie ein `float` (also eine Kommazahl) statt eines `int`s übergeben würden, wie etwa in: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)
/// check | Testen /// tip | Tipp
Sprich, mit der gleichen Python-Typdeklaration gibt Ihnen **FastAPI** Datenvalidierung. Sprich, mit der gleichen Python-Typdeklaration gibt Ihnen **FastAPI** Datenvalidierung.
@@ -82,7 +82,7 @@ Wenn Sie die Seite [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) in I
<img src="/img/tutorial/path-params/image01.png"> <img src="/img/tutorial/path-params/image01.png">
/// check | Testen /// tip | Tipp
Wiederum, mit dieser gleichen Python-Typdeklaration gibt Ihnen **FastAPI** eine automatische, interaktive Dokumentation (verwendet die Swagger-Benutzeroberfläche). Wiederum, mit dieser gleichen Python-Typdeklaration gibt Ihnen **FastAPI** eine automatische, interaktive Dokumentation (verwendet die Swagger-Benutzeroberfläche).

View File

@@ -29,7 +29,7 @@ Um dies zu erreichen, importieren Sie zuerst:
{* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[1,3] *} {* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[1,3] *}
/// info | Info /// note | Hinweis
FastAPI hat Unterstützung für `Annotated` hinzugefügt (und begonnen, es zu empfehlen) in der Version 0.95.0. FastAPI hat Unterstützung für `Annotated` hinzugefügt (und begonnen, es zu empfehlen) in der Version 0.95.0.
@@ -381,7 +381,7 @@ Zum Beispiel überprüft dieser benutzerdefinierte Validator, ob die Artikel-ID
{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *} {* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *}
/// info | Info /// note | Hinweis
Dies ist verfügbar seit Pydantic Version 2 oder höher. 😎 Dies ist verfügbar seit Pydantic Version 2 oder höher. 😎

View File

@@ -65,7 +65,7 @@ Auf die gleiche Weise können Sie optionale Query-Parameter deklarieren, indem S
In diesem Fall wird der Funktionsparameter `q` optional und standardmäßig `None` sein. In diesem Fall wird der Funktionsparameter `q` optional und standardmäßig `None` sein.
/// check | Testen /// tip | Tipp
Beachten Sie auch, dass **FastAPI** intelligent genug ist, um zu erkennen, dass `item_id` ein Pfad-Parameter ist und `q` keiner, daher muss letzteres ein Query-Parameter sein. Beachten Sie auch, dass **FastAPI** intelligent genug ist, um zu erkennen, dass `item_id` ein Pfad-Parameter ist und `q` keiner, daher muss letzteres ein Query-Parameter sein.

View File

@@ -2,7 +2,7 @@
Sie können Dateien, die vom Client hochgeladen werden, mithilfe von `File` definieren. Sie können Dateien, die vom Client hochgeladen werden, mithilfe von `File` definieren.
/// info | Info /// note | Hinweis
Um hochgeladene Dateien zu empfangen, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart). Um hochgeladene Dateien zu empfangen, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart).
@@ -28,7 +28,7 @@ Erstellen Sie Datei-Parameter, so wie Sie es auch mit `Body` und `Form` machen w
{* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *} {* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *}
/// info | Info /// note | Hinweis
`File` ist eine Klasse, die direkt von `Form` erbt. `File` ist eine Klasse, die direkt von `Form` erbt.

View File

@@ -2,7 +2,7 @@
Sie können **Pydantic-Modelle** verwenden, um **Formularfelder** in FastAPI zu deklarieren. Sie können **Pydantic-Modelle** verwenden, um **Formularfelder** in FastAPI zu deklarieren.
/// info | Info /// note | Hinweis
Um Formulare zu verwenden, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart). Um Formulare zu verwenden, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart).

View File

@@ -2,7 +2,7 @@
Sie können gleichzeitig Dateien und Formulardaten mit `File` und `Form` definieren. Sie können gleichzeitig Dateien und Formulardaten mit `File` und `Form` definieren.
/// info | Info /// note | Hinweis
Um hochgeladene Dateien und/oder Formulardaten zu empfangen, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart). Um hochgeladene Dateien und/oder Formulardaten zu empfangen, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart).

View File

@@ -2,7 +2,7 @@
Wenn Sie Felder aus Formularen statt JSON empfangen müssen, können Sie `Form` verwenden. Wenn Sie Felder aus Formularen statt JSON empfangen müssen, können Sie `Form` verwenden.
/// info | Info /// note | Hinweis
Um Formulare zu verwenden, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart). Um Formulare zu verwenden, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart).
@@ -22,7 +22,7 @@ Importieren Sie `Form` von `fastapi`:
## `Form`-Parameter definieren { #define-form-parameters } ## `Form`-Parameter definieren { #define-form-parameters }
Erstellen Sie Formular-Parameter, so wie Sie es auch mit `Body` und `Query` machen würden: Erstellen Sie Formular-Parameter, so wie Sie es auch mit `Body` oder `Query` machen würden:
{* ../../docs_src/request_forms/tutorial001_an_py310.py hl[9] *} {* ../../docs_src/request_forms/tutorial001_an_py310.py hl[9] *}
@@ -32,7 +32,7 @@ Die <dfn title="Spezifikation">Spezifikation</dfn> erfordert, dass die Felder ex
Mit `Form` haben Sie die gleichen Konfigurationsmöglichkeiten wie mit `Body` (und `Query`, `Path`, `Cookie`), inklusive Validierung, Beispielen, einem Alias (z. B. `user-name` statt `username`), usw. Mit `Form` haben Sie die gleichen Konfigurationsmöglichkeiten wie mit `Body` (und `Query`, `Path`, `Cookie`), inklusive Validierung, Beispielen, einem Alias (z. B. `user-name` statt `username`), usw.
/// info | Info /// note | Hinweis
`Form` ist eine Klasse, die direkt von `Body` erbt. `Form` ist eine Klasse, die direkt von `Body` erbt.
@@ -56,7 +56,7 @@ Daten aus Formularen werden normalerweise mit dem <abbr title="Medientyp">„med
Wenn das Formular stattdessen Dateien enthält, werden diese mit `multipart/form-data` kodiert. Im nächsten Kapitel erfahren Sie mehr über die Handhabung von Dateien. Wenn das Formular stattdessen Dateien enthält, werden diese mit `multipart/form-data` kodiert. Im nächsten Kapitel erfahren Sie mehr über die Handhabung von Dateien.
Wenn Sie mehr über Formularfelder und ihre Kodierungen lesen möchten, besuchen Sie die [<abbr title="Mozilla Developer Network Mozilla-Entwicklernetzwerk">MDN</abbr>-Webdokumentation für `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST). Wenn Sie mehr über Formularfelder und ihre Kodierungen lesen möchten, besuchen Sie die [<abbr title="Mozilla Developer Network - Mozilla-Entwicklernetzwerk">MDN</abbr>-Webdokumentation für `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST).
/// ///

View File

@@ -72,7 +72,7 @@ Im Folgenden deklarieren wir ein `UserIn`-Modell; es enthält ein Klartext-Passw
{* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *} {* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *}
/// info | Info /// note | Hinweis
Um `EmailStr` zu verwenden, installieren Sie zuerst [`email-validator`](https://github.com/JoshData/python-email-validator). Um `EmailStr` zu verwenden, installieren Sie zuerst [`email-validator`](https://github.com/JoshData/python-email-validator).
@@ -251,7 +251,7 @@ Wenn Sie also den Artikel mit der ID `foo` bei der *Pfadoperation* anfragen, wir
} }
``` ```
/// info | Info /// note | Hinweis
Sie können auch: Sie können auch:

View File

@@ -18,7 +18,7 @@ Beachten Sie, dass `status_code` ein Parameter der „Dekorator“-Methode ist (
Dem `status_code`-Parameter wird eine Zahl mit dem HTTP-Statuscode übergeben. Dem `status_code`-Parameter wird eine Zahl mit dem HTTP-Statuscode übergeben.
/// info | Info /// note | Hinweis
Alternativ kann `status_code` auch ein `IntEnum` erhalten, wie etwa Pythons [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus). Alternativ kann `status_code` auch ein `IntEnum` erhalten, wie etwa Pythons [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus).

View File

@@ -24,7 +24,7 @@ Sie könnten das beispielsweise verwenden, um Metadaten für eine Frontend-Benut
/// ///
/// info | Info /// note | Hinweis
OpenAPI 3.1.0 (verwendet seit FastAPI 0.99.0) hat Unterstützung für `examples` hinzugefügt, was Teil des **JSON Schema** Standards ist. OpenAPI 3.1.0 (verwendet seit FastAPI 0.99.0) hat Unterstützung für `examples` hinzugefügt, was Teil des **JSON Schema** Standards ist.
@@ -155,7 +155,7 @@ OpenAPI fügte auch die Felder `example` und `examples` zu anderen Teilen der Sp
* `File()` * `File()`
* `Form()` * `Form()`
/// info | Info /// note | Hinweis
Dieser alte, OpenAPI-spezifische `examples`-Parameter heißt seit FastAPI `0.103.0` jetzt `openapi_examples`. Dieser alte, OpenAPI-spezifische `examples`-Parameter heißt seit FastAPI `0.103.0` jetzt `openapi_examples`.
@@ -171,7 +171,7 @@ Und jetzt hat dieses neue `examples`-Feld Vorrang vor dem alten (und benutzerdef
Dieses neue `examples`-Feld in JSON Schema ist **nur eine `list`** von Beispielen, kein Dict mit zusätzlichen Metadaten wie an den anderen Stellen in OpenAPI (oben beschrieben). Dieses neue `examples`-Feld in JSON Schema ist **nur eine `list`** von Beispielen, kein Dict mit zusätzlichen Metadaten wie an den anderen Stellen in OpenAPI (oben beschrieben).
/// info | Info /// note | Hinweis
Selbst, nachdem OpenAPI 3.1.0 veröffentlicht wurde, mit dieser neuen, einfacheren Integration mit JSON Schema, unterstützte Swagger UI, das Tool, das die automatische Dokumentation bereitstellt, eine Zeit lang OpenAPI 3.1.0 nicht (das tut es seit Version 5.0.0 🎉). Selbst, nachdem OpenAPI 3.1.0 veröffentlicht wurde, mit dieser neuen, einfacheren Integration mit JSON Schema, unterstützte Swagger UI, das Tool, das die automatische Dokumentation bereitstellt, eine Zeit lang OpenAPI 3.1.0 nicht (das tut es seit Version 5.0.0 🎉).

View File

@@ -24,7 +24,7 @@ Kopieren Sie das Beispiel in eine Datei `main.py`:
## Ausführen { #run-it } ## Ausführen { #run-it }
/// info | Info /// note | Hinweis
Das Paket [`python-multipart`](https://github.com/Kludex/python-multipart) wird automatisch mit **FastAPI** installiert, wenn Sie den Befehl `pip install "fastapi[standard]"` ausführen. Das Paket [`python-multipart`](https://github.com/Kludex/python-multipart) wird automatisch mit **FastAPI** installiert, wenn Sie den Befehl `pip install "fastapi[standard]"` ausführen.
@@ -62,7 +62,7 @@ Sie werden etwa Folgendes sehen:
<img src="/img/tutorial/security/image01.png"> <img src="/img/tutorial/security/image01.png">
/// check | Authorize-Button! /// tip | Authorize-Button!
Sie haben bereits einen glänzenden, neuen „Authorize“-Button. Sie haben bereits einen glänzenden, neuen „Authorize“-Button.
@@ -120,7 +120,7 @@ Betrachten wir es also aus dieser vereinfachten Sicht:
In diesem Beispiel verwenden wir **OAuth2** mit dem **Password**-Flow und einem **Bearer**-Token. Wir machen das mit der Klasse `OAuth2PasswordBearer`. In diesem Beispiel verwenden wir **OAuth2** mit dem **Password**-Flow und einem **Bearer**-Token. Wir machen das mit der Klasse `OAuth2PasswordBearer`.
/// info | Info /// note | Hinweis
Ein „Bearer“-Token ist nicht die einzige Option. Ein „Bearer“-Token ist nicht die einzige Option.
@@ -150,7 +150,7 @@ Dieser Parameter erstellt nicht diesen Endpunkt / diese *Pfadoperation*, sondern
Wir werden demnächst auch die eigentliche Pfadoperation erstellen. Wir werden demnächst auch die eigentliche Pfadoperation erstellen.
/// info | Info /// note | Hinweis
Wenn Sie ein sehr strenger „Pythonista“ sind, missfällt Ihnen möglicherweise die Schreibweise des Parameternamens `tokenUrl` anstelle von `token_url`. Wenn Sie ein sehr strenger „Pythonista“ sind, missfällt Ihnen möglicherweise die Schreibweise des Parameternamens `tokenUrl` anstelle von `token_url`.
@@ -178,7 +178,7 @@ Diese Abhängigkeit stellt einen `str` bereit, der dem Parameter `token` der *Pf
**FastAPI** weiß, dass es diese Abhängigkeit verwenden kann, um ein „Sicherheitsschema“ im OpenAPI-Schema (und der automatischen API-Dokumentation) zu definieren. **FastAPI** weiß, dass es diese Abhängigkeit verwenden kann, um ein „Sicherheitsschema“ im OpenAPI-Schema (und der automatischen API-Dokumentation) zu definieren.
/// info | Technische Details /// note | Technische Details
**FastAPI** weiß, dass es die Klasse `OAuth2PasswordBearer` (deklariert in einer Abhängigkeit) verwenden kann, um das Sicherheitsschema in OpenAPI zu definieren, da es von `fastapi.security.oauth2.OAuth2` erbt, das wiederum von `fastapi.security.base.SecurityBase` erbt. **FastAPI** weiß, dass es die Klasse `OAuth2PasswordBearer` (deklariert in einer Abhängigkeit) verwenden kann, um das Sicherheitsschema in OpenAPI zu definieren, da es von `fastapi.security.oauth2.OAuth2` erbt, das wiederum von `fastapi.security.base.SecurityBase` erbt.

View File

@@ -52,7 +52,7 @@ Weil Sie `Depends` verwenden, wird **FastAPI** hier aber nicht verwirrt.
/// ///
/// check | Testen /// tip | Tipp
Die Art und Weise, wie dieses System von Abhängigkeiten konzipiert ist, ermöglicht es uns, verschiedene Abhängigkeiten (verschiedene „Dependables“) zu haben, die alle ein `User`-Modell zurückgeben. Die Art und Weise, wie dieses System von Abhängigkeiten konzipiert ist, ermöglicht es uns, verschiedene Abhängigkeiten (verschiedene „Dependables“) zu haben, die alle ein `User`-Modell zurückgeben.

View File

@@ -4,7 +4,7 @@ Da wir nun über den gesamten Sicherheitsablauf verfügen, machen wir die Anwend
Diesen Code können Sie tatsächlich in Ihrer Anwendung verwenden, die Passwort-Hashes in Ihrer Datenbank speichern, usw. Diesen Code können Sie tatsächlich in Ihrer Anwendung verwenden, die Passwort-Hashes in Ihrer Datenbank speichern, usw.
Wir bauen auf dem vorherigen Kapitel auf. Wir bauen auf dem vorherigen Kapitel auf und erweitern es.
## Über JWT { #about-jwt } ## Über JWT { #about-jwt }
@@ -42,7 +42,7 @@ $ pip install pyjwt
</div> </div>
/// info | Info /// note | Hinweis
Wenn Sie planen, digitale Signaturalgorithmen wie RSA oder ECDSA zu verwenden, sollten Sie die Kryptografie-Abhängigkeit `pyjwt[crypto]` installieren. Wenn Sie planen, digitale Signaturalgorithmen wie RSA oder ECDSA zu verwenden, sollten Sie die Kryptografie-Abhängigkeit `pyjwt[crypto]` installieren.
@@ -213,7 +213,7 @@ Verwenden Sie die Anmeldeinformationen:
Benutzername: `johndoe` Benutzername: `johndoe`
Passwort: `secret` Passwort: `secret`
/// check | Testen /// tip | Tipp
Beachten Sie, dass im Code nirgendwo das Klartext-Passwort „`secret`“ steht, wir haben nur die gehashte Version. Beachten Sie, dass im Code nirgendwo das Klartext-Passwort „`secret`“ steht, wir haben nur die gehashte Version.

View File

@@ -32,7 +32,7 @@ Diese werden normalerweise verwendet, um bestimmte Sicherheitsberechtigungen zu
* `instagram_basic` wird von Facebook / Instagram verwendet. * `instagram_basic` wird von Facebook / Instagram verwendet.
* `https://www.googleapis.com/auth/drive` wird von Google verwendet. * `https://www.googleapis.com/auth/drive` wird von Google verwendet.
/// info | Info /// note | Hinweis
In OAuth2 ist ein „Scope“ nur ein String, der eine bestimmte erforderliche Berechtigung deklariert. In OAuth2 ist ein „Scope“ nur ein String, der eine bestimmte erforderliche Berechtigung deklariert.
@@ -72,7 +72,7 @@ Wenn Sie es erzwingen müssen, verwenden Sie `OAuth2PasswordRequestFormStrict` a
* Eine optionale `client_id` (benötigen wir für unser Beispiel nicht). * Eine optionale `client_id` (benötigen wir für unser Beispiel nicht).
* Ein optionales `client_secret` (benötigen wir für unser Beispiel nicht). * Ein optionales `client_secret` (benötigen wir für unser Beispiel nicht).
/// info | Info /// note | Hinweis
`OAuth2PasswordRequestForm` ist keine spezielle Klasse für **FastAPI**, so wie `OAuth2PasswordBearer`. `OAuth2PasswordRequestForm` ist keine spezielle Klasse für **FastAPI**, so wie `OAuth2PasswordBearer`.
@@ -144,7 +144,7 @@ UserInDB(
) )
``` ```
/// info | Info /// note | Hinweis
Eine ausführlichere Erklärung von `**user_dict` finden Sie in [der Dokumentation für **Extra Modelle**](../extra-models.md#about-user-in-dict). Eine ausführlichere Erklärung von `**user_dict` finden Sie in [der Dokumentation für **Extra Modelle**](../extra-models.md#about-user-in-dict).
@@ -196,7 +196,7 @@ In unserem Endpunkt erhalten wir also nur dann einen Benutzer, wenn der Benutzer
{* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *} {* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *}
/// info | Info /// note | Hinweis
Der zusätzliche Header `WWW-Authenticate` mit dem Wert `Bearer`, den wir hier zurückgeben, ist ebenfalls Teil der Spezifikation. Der zusätzliche Header `WWW-Authenticate` mit dem Wert `Bearer`, den wir hier zurückgeben, ist ebenfalls Teil der Spezifikation.

View File

@@ -2,9 +2,9 @@
Sie können Daten mithilfe von **Server-Sent Events** (SSE) an den Client streamen. Sie können Daten mithilfe von **Server-Sent Events** (SSE) an den Client streamen.
Das ist ähnlich wie [JSON Lines streamen](stream-json-lines.md), verwendet aber das Format `text/event-stream`, das von Browsern nativ mit der [die `EventSource`-API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) unterstützt wird. Das ist ähnlich wie [JSON Lines streamen](stream-json-lines.md), verwendet aber das Format `text/event-stream`, das von Browsern nativ mit der [`EventSource`-API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) unterstützt wird.
/// info | Info /// note | Hinweis
Hinzugefügt in FastAPI 0.135.0. Hinzugefügt in FastAPI 0.135.0.
@@ -29,7 +29,7 @@ SSE wird häufig für KI-Chat-Streaming, Live-Benachrichtigungen, Logs und Obser
/// tip | Tipp /// tip | Tipp
Wenn Sie Binärdaten streamen wollen, z. B. Video oder Audio, sehen Sie im fortgeschrittenen Handbuch nach: [Daten streamen](../advanced/stream-data.md). Wenn Sie Binärdaten streamen wollen, z. B. Video oder Audio, sehen Sie im Handbuch für fortgeschrittene Benutzer nach: [Daten streamen](../advanced/stream-data.md).
/// ///
@@ -103,7 +103,7 @@ Sie können ihn als Header-Parameter einlesen und verwenden, um den Stream dort
## SSE mit POST { #sse-with-post } ## SSE mit POST { #sse-with-post }
SSE funktioniert mit **jedem HTTP-Method**, nicht nur mit `GET`. SSE funktioniert mit **jeder HTTP-Methode**, nicht nur mit `GET`.
Das ist nützlich für Protokolle wie [MCP](https://modelcontextprotocol.io), die SSE über `POST` streamen: Das ist nützlich für Protokolle wie [MCP](https://modelcontextprotocol.io), die SSE über `POST` streamen:
@@ -113,7 +113,7 @@ Das ist nützlich für Protokolle wie [MCP](https://modelcontextprotocol.io), di
FastAPI implementiert einige bewährte SSE-Praktiken direkt out of the box. FastAPI implementiert einige bewährte SSE-Praktiken direkt out of the box.
- Alle 15 Sekunden, wenn keine Nachricht gesendet wurde, einen **„keep alive“-`ping`-Kommentar** senden, um zu verhindern, dass einige Proxys die Verbindung schließen, wie in der [HTML-Spezifikation: Server-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes) vorgeschlagen. - Einen **„keep alive“-`ping`-Kommentar** alle 15 Sekunden senden, wenn keine Nachricht gesendet wurde, um zu verhindern, dass einige Proxys die Verbindung schließen, wie in der [HTML-Spezifikation: Server-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes) vorgeschlagen.
- Den Header `Cache-Control: no-cache` setzen, um **Caching** des Streams zu verhindern. - Den Header `Cache-Control: no-cache` setzen, um **Caching** des Streams zu verhindern.
- Einen speziellen Header `X-Accel-Buffering: no` setzen, um **Buffering** in einigen Proxys wie Nginx zu verhindern. - Einen speziellen Header `X-Accel-Buffering: no` setzen, um **Buffering** in einigen Proxys wie Nginx zu verhindern.

View File

@@ -2,7 +2,7 @@
Sie könnten eine Folge von Daten haben, die Sie in einem „Stream“ senden möchten, das können Sie mit **JSON Lines** tun. Sie könnten eine Folge von Daten haben, die Sie in einem „Stream“ senden möchten, das können Sie mit **JSON Lines** tun.
/// info | Info /// note | Hinweis
Hinzugefügt in FastAPI 0.134.0. Hinzugefügt in FastAPI 0.134.0.
@@ -48,7 +48,7 @@ Eine Response hätte einen Content-Type von `application/jsonl` (anstelle von `a
Es ist einem JSON-Array (entspricht einer Python-Liste) sehr ähnlich, aber anstatt in `[]` eingeschlossen zu sein und `,` zwischen den Elementen zu haben, gibt es hier **ein JSON-Objekt pro Zeile**, sie sind durch ein Zeilenumbruchzeichen getrennt. Es ist einem JSON-Array (entspricht einer Python-Liste) sehr ähnlich, aber anstatt in `[]` eingeschlossen zu sein und `,` zwischen den Elementen zu haben, gibt es hier **ein JSON-Objekt pro Zeile**, sie sind durch ein Zeilenumbruchzeichen getrennt.
/// info | Info /// note | Hinweis
Der wichtige Punkt ist, dass Ihre App in der Lage ist, jede Zeile der Reihe nach zu erzeugen, während der Client die vorherigen Zeilen konsumiert. Der wichtige Punkt ist, dass Ihre App in der Lage ist, jede Zeile der Reihe nach zu erzeugen, während der Client die vorherigen Zeilen konsumiert.

View File

@@ -8,7 +8,7 @@ Damit können Sie [pytest](https://docs.pytest.org/) direkt mit **FastAPI** verw
## `TestClient` verwenden { #using-testclient } ## `TestClient` verwenden { #using-testclient }
/// info | Info /// note | Hinweis
Um `TestClient` zu verwenden, installieren Sie zunächst [`httpx`](https://www.python-httpx.org). Um `TestClient` zu verwenden, installieren Sie zunächst [`httpx`](https://www.python-httpx.org).
@@ -145,7 +145,7 @@ Z. B.:
Weitere Informationen zum Übergeben von Daten an das Backend (mithilfe von `httpx` oder dem `TestClient`) finden Sie in der [HTTPX-Dokumentation](https://www.python-httpx.org). Weitere Informationen zum Übergeben von Daten an das Backend (mithilfe von `httpx` oder dem `TestClient`) finden Sie in der [HTTPX-Dokumentation](https://www.python-httpx.org).
/// info | Info /// note | Hinweis
Beachten Sie, dass der `TestClient` Daten empfängt, die nach JSON konvertiert werden können, keine Pydantic-Modelle. Beachten Sie, dass der `TestClient` Daten empfängt, die nach JSON konvertiert werden können, keine Pydantic-Modelle.

View File

@@ -2,7 +2,7 @@
Wenn Sie an Python-Projekten arbeiten, sollten Sie wahrscheinlich eine **virtuelle Umgebung** (oder einen ähnlichen Mechanismus) verwenden, um die <abbr title="Python Installationspakete">Packages</abbr>, die Sie für jedes Projekt installieren, zu isolieren. Wenn Sie an Python-Projekten arbeiten, sollten Sie wahrscheinlich eine **virtuelle Umgebung** (oder einen ähnlichen Mechanismus) verwenden, um die <abbr title="Python Installationspakete">Packages</abbr>, die Sie für jedes Projekt installieren, zu isolieren.
/// info | Info /// note | Hinweis
Wenn Sie bereits über virtuelle Umgebungen Bescheid wissen, wie man sie erstellt und verwendet, möchten Sie diesen Abschnitt vielleicht überspringen. 🤓 Wenn Sie bereits über virtuelle Umgebungen Bescheid wissen, wie man sie erstellt und verwendet, möchten Sie diesen Abschnitt vielleicht überspringen. 🤓
@@ -18,7 +18,7 @@ Eine **virtuelle Umgebung** ist ein Verzeichnis mit einigen Dateien darin.
/// ///
/// info | Info /// note | Hinweis
Diese Seite wird Ihnen beibringen, wie Sie **virtuelle Umgebungen** verwenden und wie sie funktionieren. Diese Seite wird Ihnen beibringen, wie Sie **virtuelle Umgebungen** verwenden und wie sie funktionieren.
@@ -817,7 +817,7 @@ Traceback (most recent call last):
</div> </div>
Wenn Sie jedoch die virtuelle Umgebung deaktivieren und die neue für `prisoner-of-askaban` aktivieren, wird beim Ausführen von `python` das Python aus der virtuellen Umgebung in `prisoner-of-azkaban` verwendet. Wenn Sie jedoch die virtuelle Umgebung deaktivieren und die neue für `prisoner-of-azkaban` aktivieren, wird beim Ausführen von `python` das Python aus der virtuellen Umgebung in `prisoner-of-azkaban` verwendet.
<div class="termy"> <div class="termy">

View File

@@ -1,21 +1,21 @@
tiangolo: tiangolo:
login: tiangolo login: tiangolo
count: 922 count: 961
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
dependabot: dependabot:
login: dependabot login: dependabot
count: 142 count: 201
avatarUrl: https://avatars.githubusercontent.com/in/29110?v=4 avatarUrl: https://avatars.githubusercontent.com/in/29110?v=4
url: https://github.com/apps/dependabot url: https://github.com/apps/dependabot
YuriiMotov: YuriiMotov:
login: YuriiMotov login: YuriiMotov
count: 57 count: 78
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4 avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov url: https://github.com/YuriiMotov
alejsdev: alejsdev:
login: alejsdev login: alejsdev
count: 53 count: 56
avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=0facffe3abf87f57a1f05fa773d1119cc5c2f6a5&v=4 avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=0facffe3abf87f57a1f05fa773d1119cc5c2f6a5&v=4
url: https://github.com/alejsdev url: https://github.com/alejsdev
pre-commit-ci: pre-commit-ci:
@@ -35,7 +35,7 @@ Kludex:
url: https://github.com/Kludex url: https://github.com/Kludex
svlandeg: svlandeg:
login: svlandeg login: svlandeg
count: 18 count: 24
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg url: https://github.com/svlandeg
dmontagu: dmontagu:
@@ -508,6 +508,11 @@ joakimnordling:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/6637576?u=df5d99db9b899b399effd429f4358baaa6f7199c&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6637576?u=df5d99db9b899b399effd429f4358baaa6f7199c&v=4
url: https://github.com/joakimnordling url: https://github.com/joakimnordling
AhsanSheraz:
login: AhsanSheraz
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/51913596?u=b5aa3c3a004cc0112e56c54f6901941836d8c26b&v=4
url: https://github.com/AhsanSheraz
yogabonito: yogabonito:
login: yogabonito login: yogabonito
count: 2 count: 2
@@ -551,7 +556,7 @@ chailandau:
DanielKusyDev: DanielKusyDev:
login: DanielKusyDev login: DanielKusyDev
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/36250676?u=2ea6114ff751fc48b55f231987a0e2582c6b1bd2&v=4 avatarUrl: https://avatars.githubusercontent.com/u/36250676?u=411f1f5923596480b896d160e23c908318f39003&v=4
url: https://github.com/DanielKusyDev url: https://github.com/DanielKusyDev
Viicos: Viicos:
login: Viicos login: Viicos
@@ -573,6 +578,16 @@ Taoup:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/22348542?v=4 avatarUrl: https://avatars.githubusercontent.com/u/22348542?v=4
url: https://github.com/Taoup url: https://github.com/Taoup
zadevhub:
login: zadevhub
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/138465437?v=4
url: https://github.com/zadevhub
savannahostrowski:
login: savannahostrowski
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/8949415?u=e4bb61b9ebaa406274d2f2629cd33179a432a2a7&v=4
url: https://github.com/savannahostrowski
jonathan-fulton: jonathan-fulton:
login: jonathan-fulton login: jonathan-fulton
count: 2 count: 2

View File

@@ -1,15 +1,15 @@
maintainers: maintainers:
- login: tiangolo - login: tiangolo
answers: 1925 answers: 1929
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
experts: experts:
- login: tiangolo - login: tiangolo
count: 1925 count: 1929
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
- login: YuriiMotov - login: YuriiMotov
count: 1120 count: 1178
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4 avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov url: https://github.com/YuriiMotov
- login: github-actions - login: github-actions
@@ -17,7 +17,7 @@ experts:
avatarUrl: https://avatars.githubusercontent.com/in/15368?v=4 avatarUrl: https://avatars.githubusercontent.com/in/15368?v=4
url: https://github.com/apps/github-actions url: https://github.com/apps/github-actions
- login: Kludex - login: Kludex
count: 656 count: 657
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex url: https://github.com/Kludex
- login: jgould22 - login: jgould22
@@ -53,11 +53,11 @@ experts:
avatarUrl: https://avatars.githubusercontent.com/u/331403?v=4 avatarUrl: https://avatars.githubusercontent.com/u/331403?v=4
url: https://github.com/phy25 url: https://github.com/phy25
- login: JavierSanchezCastro - login: JavierSanchezCastro
count: 107 count: 109
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4 avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro url: https://github.com/JavierSanchezCastro
- login: luzzodev - login: luzzodev
count: 104 count: 107
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev url: https://github.com/luzzodev
- login: raphaelauv - login: raphaelauv
@@ -110,7 +110,7 @@ experts:
url: https://github.com/frankie567 url: https://github.com/frankie567
- login: odiseo0 - login: odiseo0
count: 43 count: 43
avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=241a71f6b7068738b81af3e57f45ffd723538401&v=4 avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=75e754b9bd12ce6dfe90ad68e82e6f5255c7ac09&v=4
url: https://github.com/odiseo0 url: https://github.com/odiseo0
- login: sinisaos - login: sinisaos
count: 41 count: 41
@@ -137,7 +137,7 @@ experts:
avatarUrl: https://avatars.githubusercontent.com/u/41326348?u=ba2fda6b30110411ecbf406d187907e2b420ac19&v=4 avatarUrl: https://avatars.githubusercontent.com/u/41326348?u=ba2fda6b30110411ecbf406d187907e2b420ac19&v=4
url: https://github.com/panla url: https://github.com/panla
- login: valentinDruzhinin - login: valentinDruzhinin
count: 30 count: 31
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/valentinDruzhinin url: https://github.com/valentinDruzhinin
- login: prostomarkeloff - login: prostomarkeloff
@@ -184,6 +184,10 @@ experts:
count: 21 count: 21
avatarUrl: https://avatars.githubusercontent.com/u/51059348?u=5fe59a56e1f2f9ccd8005d71752a8276f133ae1a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/51059348?u=5fe59a56e1f2f9ccd8005d71752a8276f133ae1a&v=4
url: https://github.com/rafsaf url: https://github.com/rafsaf
- login: ebottos94
count: 20
avatarUrl: https://avatars.githubusercontent.com/u/100039558?u=8b91053b3abe4a9209375e3651e1c1ef192d884b&v=4
url: https://github.com/ebottos94
- login: nsidnev - login: nsidnev
count: 20 count: 20
avatarUrl: https://avatars.githubusercontent.com/u/22559461?u=a9cc3238217e21dc8796a1a500f01b722adb082c&v=4 avatarUrl: https://avatars.githubusercontent.com/u/22559461?u=a9cc3238217e21dc8796a1a500f01b722adb082c&v=4
@@ -192,10 +196,6 @@ experts:
count: 20 count: 20
avatarUrl: https://avatars.githubusercontent.com/u/565544?v=4 avatarUrl: https://avatars.githubusercontent.com/u/565544?v=4
url: https://github.com/chris-allnutt url: https://github.com/chris-allnutt
- login: ebottos94
count: 20
avatarUrl: https://avatars.githubusercontent.com/u/100039558?u=8b91053b3abe4a9209375e3651e1c1ef192d884b&v=4
url: https://github.com/ebottos94
- login: estebanx64 - login: estebanx64
count: 19 count: 19
avatarUrl: https://avatars.githubusercontent.com/u/10840422?u=2ca073ee47a625e495a9573bd374ddcd7be5ec91&v=4 avatarUrl: https://avatars.githubusercontent.com/u/10840422?u=2ca073ee47a625e495a9573bd374ddcd7be5ec91&v=4
@@ -240,274 +240,282 @@ experts:
count: 16 count: 16
avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=f601c3f111f2148bd9244c2cb3ebbd57b592e674&v=4 avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=f601c3f111f2148bd9244c2cb3ebbd57b592e674&v=4
url: https://github.com/jonatasoli url: https://github.com/jonatasoli
- login: mattmess1221 - login: abhint
count: 15 count: 15
avatarUrl: https://avatars.githubusercontent.com/u/3409962?u=d22ea18aa8ea688af25a45df306134d593621a44&v=4 avatarUrl: https://avatars.githubusercontent.com/u/25699289?u=b5d219277b4d001ac26fb8be357fddd88c29d51b&v=4
url: https://github.com/mattmess1221 url: https://github.com/abhint
last_month_experts: last_month_experts:
- login: YuriiMotov - login: YuriiMotov
count: 31 count: 14
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4 avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov url: https://github.com/YuriiMotov
- login: Toygarmetu - login: yudin-s
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/92878791?u=538530cb6d5554e71f9c28709d794db9a74d23d9&v=4
url: https://github.com/Toygarmetu
- login: JavierSanchezCastro
count: 5 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4 avatarUrl: https://avatars.githubusercontent.com/u/781481?u=8c1ab221edbe051eb55310747ebe39574e808118&v=4
url: https://github.com/JavierSanchezCastro url: https://github.com/yudin-s
- login: tiangolo - login: BitWeaverDev
count: 3 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
- login: tiangolo
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
- login: valentinDruzhinin - login: mg1986jp
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/20254686?u=6da9cdad3ecf8a4f3cbc33a518c3998ed0ac685a&v=4
url: https://github.com/valentinDruzhinin url: https://github.com/mg1986jp
- login: Bogdusik
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/166155258?u=11440b02966a3f5e5eeebc21d67b7bbb7d370487&v=4
url: https://github.com/Bogdusik
three_months_experts: three_months_experts:
- login: YuriiMotov - login: YuriiMotov
count: 91 count: 57
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4 avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov 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: yudin-s
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/781481?u=8c1ab221edbe051eb55310747ebe39574e808118&v=4
url: https://github.com/yudin-s
- login: tiangolo - login: tiangolo
count: 13 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
- login: Toygarmetu - login: BitWeaverDev
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/92878791?u=538530cb6d5554e71f9c28709d794db9a74d23d9&v=4
url: https://github.com/Toygarmetu
- login: JavierSanchezCastro
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro
- login: ceb10n
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
url: https://github.com/ceb10n
- login: valentinDruzhinin
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/valentinDruzhinin
- login: sachinh35
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4 avatarUrl: https://avatars.githubusercontent.com/u/288751066?v=4
url: https://github.com/sachinh35 url: https://github.com/BitWeaverDev
- login: RichieB2B - login: ericgitangu
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/1461970?u=edaa57d1077705244ea5c9244f4783d94ff11f12&v=4 avatarUrl: https://avatars.githubusercontent.com/u/11472845?u=9d916cf0f5c80e63cb1d753b8b50dcb8ced3b883&v=4
url: https://github.com/RichieB2B url: https://github.com/ericgitangu
- login: EmmanuelNiyonshuti - login: Zawwarsami16
count: 2 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/142030687?u=ab131d5ad4670280a978f489babe71c9bf9c1097&v=4 avatarUrl: https://avatars.githubusercontent.com/u/105767627?u=5bb2b7a639a9207a5ded536f963a4c7bd6d04d21&v=4
url: https://github.com/EmmanuelNiyonshuti url: https://github.com/Zawwarsami16
- login: luzzodev - login: luzzodev
count: 2 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev url: https://github.com/luzzodev
- login: davidbrochart - login: mg1986jp
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/4711805?u=d39696d995a9e02ec3613ffb2f62b20b14f92f26&v=4 avatarUrl: https://avatars.githubusercontent.com/u/20254686?u=6da9cdad3ecf8a4f3cbc33a518c3998ed0ac685a&v=4
url: https://github.com/davidbrochart url: https://github.com/mg1986jp
- login: CharlieReitzel - login: sueun-dev
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/20848272?v=4 avatarUrl: https://avatars.githubusercontent.com/u/57546981?u=0b0483bdcc7d521e85c06f28d2fc64e258bd466f&v=4
url: https://github.com/CharlieReitzel url: https://github.com/sueun-dev
- login: dotmitsu - login: Bogdusik
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/42657211?u=3bccc9a2f386a3f24230ec393080f8904fe2a5b2&v=4 avatarUrl: https://avatars.githubusercontent.com/u/166155258?u=11440b02966a3f5e5eeebc21d67b7bbb7d370487&v=4
url: https://github.com/dotmitsu url: https://github.com/Bogdusik
- login: dolfinus - login: cookesan
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/4661021?u=ed5ddadcf36d9b943ebe61febe0b96ee34e5425d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6601329?u=7bfc9b017198a9fa50929ae8ae0a787632424ffd&v=4
url: https://github.com/dolfinus url: https://github.com/cookesan
- login: garg-khushi - login: coleifer
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/139839680?u=7faffa70275f8ab16f163e0c742a11d2662f9c66&v=4 avatarUrl: https://avatars.githubusercontent.com/u/119974?u=b3a546c94ee1105e792e0acad2c4743d800e7975&v=4
url: https://github.com/garg-khushi url: https://github.com/coleifer
- login: florentx - login: Bahtya
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/142113?u=bf10f10080026346b092633c380977b61cee0d9c&v=4 avatarUrl: https://avatars.githubusercontent.com/u/34988899?u=b8e3c0cf26f4bd1faea265d2f5f66f564af63463&v=4
url: https://github.com/florentx 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: six_months_experts:
- login: YuriiMotov - login: YuriiMotov
count: 163 count: 145
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4 avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov url: https://github.com/YuriiMotov
- login: tiangolo - login: tiangolo
count: 24 count: 13
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
- login: luzzodev
count: 15
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: engripaye
count: 14
avatarUrl: https://avatars.githubusercontent.com/u/155247530?u=645169bc81856b7f1bd20090ecb0171a56dcbeb4&v=4
url: https://github.com/engripaye
- login: JavierSanchezCastro - login: JavierSanchezCastro
count: 13 count: 9
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4 avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro url: https://github.com/JavierSanchezCastro
- login: Toygarmetu - login: Firatasi
count: 8 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/92878791?u=538530cb6d5554e71f9c28709d794db9a74d23d9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/112112161?u=3219914a49a4a604b3626007823db7de049b6d66&v=4
url: https://github.com/Toygarmetu url: https://github.com/Firatasi
- login: yudin-s
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/781481?u=8c1ab221edbe051eb55310747ebe39574e808118&v=4
url: https://github.com/yudin-s
- login: valentinDruzhinin - login: valentinDruzhinin
count: 6 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/valentinDruzhinin url: https://github.com/valentinDruzhinin
- 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 - login: ceb10n
count: 5 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
url: https://github.com/ceb10n url: https://github.com/ceb10n
- login: RichieB2B - login: RichieB2B
count: 5 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/1461970?u=edaa57d1077705244ea5c9244f4783d94ff11f12&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1461970?u=edaa57d1077705244ea5c9244f4783d94ff11f12&v=4
url: https://github.com/RichieB2B url: https://github.com/RichieB2B
- login: JunjieAraoXiong
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/167785867?u=b69afe090c8bf5fd73f2d23fc3a887b28f68f192&v=4
url: https://github.com/JunjieAraoXiong
- login: CodeKraken-cmd
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/48470371?u=e7c0e7ec8e35ca5fb3ae40a586ed5e788fd0fe6d&v=4
url: https://github.com/CodeKraken-cmd
- login: svlandeg
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg
- login: ArmanShirzad
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/68951175?u=1f1efae2fa5d0d17c38a1a8413bedca5e538cedb&v=4
url: https://github.com/ArmanShirzad
- login: krylosov-aa
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/242901957?u=4c9c7b468203b09bca64936fb464620e32cdd252&v=4
url: https://github.com/krylosov-aa
- login: sachinh35 - login: sachinh35
count: 3 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4 avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4
url: https://github.com/sachinh35 url: https://github.com/sachinh35
- login: simone-trubian - login: BitWeaverDev
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/5606840?u=65703af3c605feca61ce49e4009bb4e26495b425&v=4 avatarUrl: https://avatars.githubusercontent.com/u/288751066?v=4
url: https://github.com/simone-trubian url: https://github.com/BitWeaverDev
- login: mahimairaja - login: ericgitangu
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/81288263?u=4eef6b4a36b96e84bd666fc1937aa589036ccb9a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/11472845?u=9d916cf0f5c80e63cb1d753b8b50dcb8ced3b883&v=4
url: https://github.com/mahimairaja url: https://github.com/ericgitangu
- login: pankeshpatel - login: Zawwarsami16
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/1482917?u=666f39197a88cfa38b8bd78d39ef04d95c948b6b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/105767627?u=5bb2b7a639a9207a5ded536f963a4c7bd6d04d21&v=4
url: https://github.com/pankeshpatel url: https://github.com/Zawwarsami16
- login: EmmanuelNiyonshuti - login: EmmanuelNiyonshuti
count: 2 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/142030687?u=ab131d5ad4670280a978f489babe71c9bf9c1097&v=4 avatarUrl: https://avatars.githubusercontent.com/u/142030687?u=ab131d5ad4670280a978f489babe71c9bf9c1097&v=4
url: https://github.com/EmmanuelNiyonshuti url: https://github.com/EmmanuelNiyonshuti
- login: huynguyengl99
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/49433085?u=7b626115686c5d97a2a32a03119f5300e425cc9f&v=4
url: https://github.com/huynguyengl99
- 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: Kludex - login: Kludex
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex url: https://github.com/Kludex
- login: garg-khushi - login: mg1986jp
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/139839680?u=7faffa70275f8ab16f163e0c742a11d2662f9c66&v=4 avatarUrl: https://avatars.githubusercontent.com/u/20254686?u=6da9cdad3ecf8a4f3cbc33a518c3998ed0ac685a&v=4
url: https://github.com/garg-khushi url: https://github.com/mg1986jp
- login: skion - login: sueun-dev
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/532192?v=4 avatarUrl: https://avatars.githubusercontent.com/u/57546981?u=0b0483bdcc7d521e85c06f28d2fc64e258bd466f&v=4
url: https://github.com/skion 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: Bahtya
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: 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
- login: gaardhus
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 - login: florentx
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/142113?u=bf10f10080026346b092633c380977b61cee0d9c&v=4 avatarUrl: https://avatars.githubusercontent.com/u/142113?u=bf10f10080026346b092633c380977b61cee0d9c&v=4
url: https://github.com/florentx url: https://github.com/florentx
- login: jc-louis
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/51329768?v=4
url: https://github.com/jc-louis
- login: WilliamDEdwards
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/12184311?u=9b29d5d1d71f5f1a7ef9e439963ad3529e3b33a4&v=4
url: https://github.com/WilliamDEdwards
- login: bughuntr7
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/236391583?u=7f51ff690e3a5711f845a115903c39e21c8af938&v=4
url: https://github.com/bughuntr7
- login: jymchng
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/27895426?u=fb88c47775147d62a395fdb895d1af4148c7b566&v=4
url: https://github.com/jymchng
- login: XieJiSS
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/24671280?u=7ea0d9bfe46cf762594d62fd2f3c6d3813c3584c&v=4
url: https://github.com/XieJiSS
- login: profatsky
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/92920843?u=81e54bb0b613c171f7cd0ab3cbb58873782c9c9c&v=4
url: https://github.com/profatsky
one_year_experts: one_year_experts:
- login: YuriiMotov - login: YuriiMotov
count: 918 count: 647
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4 avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov url: https://github.com/YuriiMotov
- login: luzzodev - login: luzzodev
count: 60 count: 35
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev url: https://github.com/luzzodev
- login: tiangolo - login: tiangolo
count: 31 count: 32
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
- login: valentinDruzhinin - login: valentinDruzhinin
count: 30 count: 31
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/valentinDruzhinin url: https://github.com/valentinDruzhinin
- login: JavierSanchezCastro - login: JavierSanchezCastro
count: 19 count: 17
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4 avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro url: https://github.com/JavierSanchezCastro
- login: alv2017
count: 17
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/alv2017
- login: engripaye
count: 14
avatarUrl: https://avatars.githubusercontent.com/u/155247530?u=645169bc81856b7f1bd20090ecb0171a56dcbeb4&v=4
url: https://github.com/engripaye
- login: sachinh35 - login: sachinh35
count: 12 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4 avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4
url: https://github.com/sachinh35 url: https://github.com/sachinh35
- login: yauhen-sobaleu - login: Firatasi
count: 9 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/51629535?u=fc1817060daf2df438bfca86c44f33da5cd667db&v=4 avatarUrl: https://avatars.githubusercontent.com/u/112112161?u=3219914a49a4a604b3626007823db7de049b6d66&v=4
url: https://github.com/yauhen-sobaleu url: https://github.com/Firatasi
- login: Toygarmetu - login: DoctorJohn
count: 8 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/92878791?u=538530cb6d5554e71f9c28709d794db9a74d23d9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/14076775?u=ec43fe79a98dbc864b428afc7220753e25ca3af2&v=4
url: https://github.com/Toygarmetu url: https://github.com/DoctorJohn
- login: svlandeg
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 - login: raceychan
count: 6 count: 6
avatarUrl: https://avatars.githubusercontent.com/u/75417963?u=060c62870ec5a791765e63ac20d8885d11143786&v=4 avatarUrl: https://avatars.githubusercontent.com/u/75417963?u=060c62870ec5a791765e63ac20d8885d11143786&v=4
@@ -516,34 +524,22 @@ one_year_experts:
count: 6 count: 6
avatarUrl: https://avatars.githubusercontent.com/u/37829370?u=da44ca53aefd5c23f346fab8e9fd2e108294c179&v=4 avatarUrl: https://avatars.githubusercontent.com/u/37829370?u=da44ca53aefd5c23f346fab8e9fd2e108294c179&v=4
url: https://github.com/yinziyan1206 url: https://github.com/yinziyan1206
- login: Kludex - login: yudin-s
count: 6 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 avatarUrl: https://avatars.githubusercontent.com/u/781481?u=8c1ab221edbe051eb55310747ebe39574e808118&v=4
url: https://github.com/Kludex url: https://github.com/yudin-s
- login: Toygarmetu
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/92878791?u=538530cb6d5554e71f9c28709d794db9a74d23d9&v=4
url: https://github.com/Toygarmetu
- login: ceb10n - login: ceb10n
count: 5 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
url: https://github.com/ceb10n url: https://github.com/ceb10n
- login: RichieB2B
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/1461970?u=edaa57d1077705244ea5c9244f4783d94ff11f12&v=4
url: https://github.com/RichieB2B
- login: JunjieAraoXiong - login: JunjieAraoXiong
count: 5 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/167785867?u=b69afe090c8bf5fd73f2d23fc3a887b28f68f192&v=4 avatarUrl: https://avatars.githubusercontent.com/u/167785867?u=b69afe090c8bf5fd73f2d23fc3a887b28f68f192&v=4
url: https://github.com/JunjieAraoXiong url: https://github.com/JunjieAraoXiong
- login: CodeKraken-cmd
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/48470371?u=e7c0e7ec8e35ca5fb3ae40a586ed5e788fd0fe6d&v=4
url: https://github.com/CodeKraken-cmd
- login: svlandeg
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg
- login: DoctorJohn
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/14076775?u=ec43fe79a98dbc864b428afc7220753e25ca3af2&v=4
url: https://github.com/DoctorJohn
- login: WilliamDEdwards - login: WilliamDEdwards
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/12184311?u=9b29d5d1d71f5f1a7ef9e439963ad3529e3b33a4&v=4 avatarUrl: https://avatars.githubusercontent.com/u/12184311?u=9b29d5d1d71f5f1a7ef9e439963ad3529e3b33a4&v=4
@@ -552,6 +548,10 @@ one_year_experts:
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/68951175?u=1f1efae2fa5d0d17c38a1a8413bedca5e538cedb&v=4 avatarUrl: https://avatars.githubusercontent.com/u/68951175?u=1f1efae2fa5d0d17c38a1a8413bedca5e538cedb&v=4
url: https://github.com/ArmanShirzad url: https://github.com/ArmanShirzad
- login: CodeKraken-cmd
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/48470371?u=e7c0e7ec8e35ca5fb3ae40a586ed5e788fd0fe6d&v=4
url: https://github.com/CodeKraken-cmd
- login: krylosov-aa - login: krylosov-aa
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/242901957?u=4c9c7b468203b09bca64936fb464620e32cdd252&v=4 avatarUrl: https://avatars.githubusercontent.com/u/242901957?u=4c9c7b468203b09bca64936fb464620e32cdd252&v=4
@@ -560,10 +560,26 @@ one_year_experts:
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/157279130?u=16d6466476cf7dbc55a4cd575b6ea920ebdd81e1&v=4 avatarUrl: https://avatars.githubusercontent.com/u/157279130?u=16d6466476cf7dbc55a4cd575b6ea920ebdd81e1&v=4
url: https://github.com/isgin01 url: https://github.com/isgin01
- login: sinisaos - login: BitWeaverDev
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4 avatarUrl: https://avatars.githubusercontent.com/u/288751066?v=4
url: https://github.com/sinisaos 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
- login: ericgitangu
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/11472845?u=9d916cf0f5c80e63cb1d753b8b50dcb8ced3b883&v=4
url: https://github.com/ericgitangu
- login: Zawwarsami16
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/105767627?u=5bb2b7a639a9207a5ded536f963a4c7bd6d04d21&v=4
url: https://github.com/Zawwarsami16
- login: EmmanuelNiyonshuti
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/142030687?u=ab131d5ad4670280a978f489babe71c9bf9c1097&v=4
url: https://github.com/EmmanuelNiyonshuti
- login: dolfinus - login: dolfinus
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/4661021?u=ed5ddadcf36d9b943ebe61febe0b96ee34e5425d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4661021?u=ed5ddadcf36d9b943ebe61febe0b96ee34e5425d&v=4
@@ -588,6 +604,54 @@ one_year_experts:
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/210023470?u=c25d66addf36a747bd9fab773c4a6e7b238f45d4&v=4 avatarUrl: https://avatars.githubusercontent.com/u/210023470?u=c25d66addf36a747bd9fab773c4a6e7b238f45d4&v=4
url: https://github.com/Jelle-tenB url: https://github.com/Jelle-tenB
- 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
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: cepedus
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/26345924?u=38495abbdbb8695dd76478cae5963bf994c498bc&v=4
url: https://github.com/cepedus
- login: christiansousadev
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/103544118?u=690f3f76d1dc4d0929de5020679d5604f860acbc&v=4
url: https://github.com/christiansousadev
- login: gaardhus
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: Garrett-R - login: Garrett-R
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/6614695?u=c128fd775002882f6e391bda5a89d1bdc5bdf45f&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6614695?u=c128fd775002882f6e391bda5a89d1bdc5bdf45f&v=4
@@ -596,10 +660,6 @@ one_year_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/17792131?u=372b27056ec82f1ae03d8b3f37ef55b04a7cfdd1&v=4 avatarUrl: https://avatars.githubusercontent.com/u/17792131?u=372b27056ec82f1ae03d8b3f37ef55b04a7cfdd1&v=4
url: https://github.com/TaigoFr url: https://github.com/TaigoFr
- login: EmmanuelNiyonshuti
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/142030687?u=ab131d5ad4670280a978f489babe71c9bf9c1097&v=4
url: https://github.com/EmmanuelNiyonshuti
- login: stan-dot - login: stan-dot
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/56644812?u=a7dd773084f1c17c5f05019cc25a984e24873691&v=4 avatarUrl: https://avatars.githubusercontent.com/u/56644812?u=a7dd773084f1c17c5f05019cc25a984e24873691&v=4
@@ -612,14 +672,6 @@ one_year_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/49433085?u=7b626115686c5d97a2a32a03119f5300e425cc9f&v=4 avatarUrl: https://avatars.githubusercontent.com/u/49433085?u=7b626115686c5d97a2a32a03119f5300e425cc9f&v=4
url: https://github.com/huynguyengl99 url: https://github.com/huynguyengl99
- login: Ale-Cas
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/64859146?u=d52a6ecf8d83d2927e2ae270bdfcc83495dba8c9&v=4
url: https://github.com/Ale-Cas
- login: tiborrr
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/16014746?u=0ce47015e53009e90393582fe86b7b90e809bc28&v=4
url: https://github.com/tiborrr
- login: davidbrochart - login: davidbrochart
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/4711805?u=d39696d995a9e02ec3613ffb2f62b20b14f92f26&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4711805?u=d39696d995a9e02ec3613ffb2f62b20b14f92f26&v=4
@@ -640,30 +692,14 @@ one_year_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/80290187?u=2b72e497ca4444ecec1f9dc2d1b8d5437a27b83f&v=4 avatarUrl: https://avatars.githubusercontent.com/u/80290187?u=2b72e497ca4444ecec1f9dc2d1b8d5437a27b83f&v=4
url: https://github.com/Brikas url: https://github.com/Brikas
- login: BloodyRain2k
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1014362?v=4
url: https://github.com/BloodyRain2k
- login: usiqwerty - login: usiqwerty
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/37992525?u=0c6e91d7b3887aa558755f4225ce74a003cbe852&v=4 avatarUrl: https://avatars.githubusercontent.com/u/37992525?u=0c6e91d7b3887aa558755f4225ce74a003cbe852&v=4
url: https://github.com/usiqwerty url: https://github.com/usiqwerty
- login: garg-khushi
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/139839680?u=7faffa70275f8ab16f163e0c742a11d2662f9c66&v=4
url: https://github.com/garg-khushi
- login: sk-
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/911768?u=3bfaf87089eb03ef0fa378f316b9c783f431aa9b&v=4
url: https://github.com/sk-
- login: skion - login: skion
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/532192?v=4 avatarUrl: https://avatars.githubusercontent.com/u/532192?v=4
url: https://github.com/skion url: https://github.com/skion
- login: Danstiv
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/50794055?v=4
url: https://github.com/Danstiv
- login: florentx - login: florentx
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/142113?u=bf10f10080026346b092633c380977b61cee0d9c&v=4 avatarUrl: https://avatars.githubusercontent.com/u/142113?u=bf10f10080026346b092633c380977b61cee0d9c&v=4
@@ -680,31 +716,3 @@ one_year_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/7587353?v=4 avatarUrl: https://avatars.githubusercontent.com/u/7587353?v=4
url: https://github.com/purepani url: https://github.com/purepani
- login: asmaier
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/3169297?v=4
url: https://github.com/asmaier
- login: henrymcl
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/26480299?v=4
url: https://github.com/henrymcl
- login: potiuk
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/595491?v=4
url: https://github.com/potiuk
- login: EverStarck
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/51029456?u=343409b7cb6b3ea6a59359f4e8370d9c3f140ecd&v=4
url: https://github.com/EverStarck
- login: sanderbollen-clockworks
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/183479560?v=4
url: https://github.com/sanderbollen-clockworks
- login: davidhuser
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/4357648?u=6ed702f8f6d49a8b2a0ed33cbd8ab59c2d7db7f7&v=4
url: https://github.com/davidhuser
- login: XieJiSS
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/24671280?u=7ea0d9bfe46cf762594d62fd2f3c6d3813c3584c&v=4
url: https://github.com/XieJiSS

View File

@@ -1,70 +1,55 @@
keystone: keystone:
- url: https://fastapicloud.com - url: https://fastapicloud.com
title: FastAPI Cloud. By the same team behind FastAPI. You code. We Cloud. 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: gold:
- url: https://blockbee.io?ref=fastapi - url: https://blockbee.io?ref=fastapi
title: BlockBee Cryptocurrency Payment Gateway title: BlockBee Cryptocurrency Payment Gateway
img: https://fastapi.tiangolo.com/img/sponsors/blockbee.png img: /img/sponsors/blockbee.png
- url: https://github.com/scalar/scalar/?utm_source=fastapi&utm_medium=website&utm_campaign=main-badge
title: "Scalar: Beautiful Open-Source API References from Swagger/OpenAPI files"
img: https://fastapi.tiangolo.com/img/sponsors/scalar.svg
- url: https://www.propelauth.com/?utm_source=fastapi&utm_campaign=1223&utm_medium=mainbadge - url: https://www.propelauth.com/?utm_source=fastapi&utm_campaign=1223&utm_medium=mainbadge
title: Auth, user management and more for your B2B product title: Auth, user management and more for your B2B product
img: https://fastapi.tiangolo.com/img/sponsors/propelauth.png img: /img/sponsors/propelauth.png
- url: https://zuplo.link/fastapi-gh
title: 'Zuplo: Deploy, Secure, Document, and Monetize your FastAPI'
img: https://fastapi.tiangolo.com/img/sponsors/zuplo.png
- url: https://liblab.com?utm_source=fastapi
title: liblab - Generate SDKs from FastAPI
img: https://fastapi.tiangolo.com/img/sponsors/liblab.png
- url: https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi - 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. 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
- url: https://www.coderabbit.ai/?utm_source=fastapi&utm_medium=badge&utm_campaign=fastapi - url: https://www.coderabbit.ai/?utm_source=fastapi&utm_medium=badge&utm_campaign=fastapi
title: Cut Code Review Time & Bugs in Half with CodeRabbit title: Cut Code Review Time & Bugs in Half with CodeRabbit
img: https://fastapi.tiangolo.com/img/sponsors/coderabbit.png img: /img/sponsors/coderabbit.png
- url: https://subtotal.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=open-source - url: https://subtotal.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=open-source
title: The Gold Standard in Retail Account Linking title: The Gold Standard in Retail Account Linking
img: https://fastapi.tiangolo.com/img/sponsors/subtotal.svg img: /img/sponsors/subtotal.svg
- url: https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi - url: https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi
title: Deploy enterprise applications at startup speed title: Deploy enterprise applications at startup speed
img: https://fastapi.tiangolo.com/img/sponsors/railway.png img: /img/sponsors/railway.png
- url: https://serpapi.com/?utm_source=fastapi_website - url: https://serpapi.com/?utm_source=fastapi_website
title: "SerpApi: Web Search API" title: "SerpApi: Web Search API"
img: https://fastapi.tiangolo.com/img/sponsors/serpapi.png img: /img/sponsors/serpapi.png
- url: https://www.greptile.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=fastapi_sponsor_page - url: https://www.greptile.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=fastapi_sponsor_page
title: "Greptile: The AI Code Reviewer" title: "Greptile: The AI Code Reviewer"
img: https://fastapi.tiangolo.com/img/sponsors/greptile.png img: /img/sponsors/greptile.png
silver: silver:
- url: https://databento.com/?utm_source=fastapi&utm_medium=sponsor&utm_content=display - url: https://databento.com/?utm_source=fastapi&utm_medium=sponsor&utm_content=display
title: Pay as you go for market data title: Pay as you go for market data
img: https://fastapi.tiangolo.com/img/sponsors/databento.svg img: /img/sponsors/databento.svg
- url: https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship
title: SDKs for your API | Speakeasy
img: https://fastapi.tiangolo.com/img/sponsors/speakeasy.png
- url: https://www.svix.com/ - url: https://www.svix.com/
title: Svix - Webhooks as a service title: Svix - Webhooks as a service
img: https://fastapi.tiangolo.com/img/sponsors/svix.svg img: /img/sponsors/svix.svg
- url: https://www.stainlessapi.com/?utm_source=fastapi&utm_medium=referral - url: https://www.stainlessapi.com/?utm_source=fastapi&utm_medium=referral
title: Stainless | Generate best-in-class SDKs title: Stainless | Generate best-in-class SDKs
img: https://fastapi.tiangolo.com/img/sponsors/stainless.png img: /img/sponsors/stainless.png
- url: https://www.permit.io/blog/implement-authorization-in-fastapi?utm_source=github&utm_medium=referral&utm_campaign=fastapi - 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 title: Fine-Grained Authorization for FastAPI
img: https://fastapi.tiangolo.com/img/sponsors/permit.png img: /img/sponsors/permit.png
- url: https://www.interviewpal.com/?utm_source=fastapi&utm_medium=open-source&utm_campaign=dev-hiring
title: InterviewPal - AI Interview Coach for Engineers and Devs
img: https://fastapi.tiangolo.com/img/sponsors/interviewpal.png
- url: https://dribia.com/en/ - url: https://dribia.com/en/
title: Dribia - Data Science within your reach title: Dribia - Data Science within your reach
img: https://fastapi.tiangolo.com/img/sponsors/dribia.png img: /img/sponsors/dribia.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: /img/sponsors/rapidproxy.png
- url: https://www.bairesdev.com/
title: "BairesDev | Nearshore Software Development & Staff Augmentation Company"
img: /img/sponsors/bairesdev.svg
bronze: bronze:
- url: https://www.exoflare.com/open-source/?utm_source=FastAPI&utm_campaign=open_source
title: Biosecurity risk assessments made easy.
img: https://fastapi.tiangolo.com/img/sponsors/exoflare.png
# - url: https://testdriven.io/courses/tdd-fastapi/ # - url: https://testdriven.io/courses/tdd-fastapi/
# title: Learn to build high-quality web apps with best practices # 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: https://fastapi.tiangolo.com/img/sponsors/testmu.png

View File

@@ -48,3 +48,4 @@ logins:
- subtotal - subtotal
- requestly - requestly
- greptileai - greptileai
- talorelowen

View File

@@ -1,495 +1,495 @@
- name: full-stack-fastapi-template - name: full-stack-fastapi-template
html_url: https://github.com/fastapi/full-stack-fastapi-template html_url: https://github.com/fastapi/full-stack-fastapi-template
stars: 41789 stars: 43447
owner_login: fastapi owner_login: fastapi
owner_html_url: https://github.com/fastapi owner_html_url: https://github.com/fastapi
- name: Hello-Python - name: Hello-Python
html_url: https://github.com/mouredev/Hello-Python html_url: https://github.com/mouredev/Hello-Python
stars: 34587 stars: 35831
owner_login: mouredev owner_login: mouredev
owner_html_url: https://github.com/mouredev owner_html_url: https://github.com/mouredev
- name: serve - name: serve
html_url: https://github.com/jina-ai/serve html_url: https://github.com/jina-ai/serve
stars: 21835 stars: 21864
owner_login: jina-ai owner_login: jina-ai
owner_html_url: https://github.com/jina-ai owner_html_url: https://github.com/jina-ai
- name: HivisionIDPhotos - name: HivisionIDPhotos
html_url: https://github.com/Zeyi-Lin/HivisionIDPhotos html_url: https://github.com/Zeyi-Lin/HivisionIDPhotos
stars: 20755 stars: 21144
owner_login: Zeyi-Lin owner_login: Zeyi-Lin
owner_html_url: https://github.com/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
owner_login: Evil0ctal
owner_html_url: https://github.com/Evil0ctal
- name: sqlmodel - name: sqlmodel
html_url: https://github.com/fastapi/sqlmodel html_url: https://github.com/fastapi/sqlmodel
stars: 17687 stars: 17987
owner_login: fastapi owner_login: fastapi
owner_html_url: https://github.com/fastapi owner_html_url: https://github.com/fastapi
- name: fastapi-best-practices - name: fastapi-best-practices
html_url: https://github.com/zhanymkanov/fastapi-best-practices html_url: https://github.com/zhanymkanov/fastapi-best-practices
stars: 16611 stars: 17401
owner_login: zhanymkanov owner_login: zhanymkanov
owner_html_url: https://github.com/zhanymkanov owner_html_url: https://github.com/zhanymkanov
- name: Douyin_TikTok_Download_API
html_url: https://github.com/Evil0ctal/Douyin_TikTok_Download_API
stars: 16474
owner_login: Evil0ctal
owner_html_url: https://github.com/Evil0ctal
- name: SurfSense - name: SurfSense
html_url: https://github.com/MODSetter/SurfSense html_url: https://github.com/MODSetter/SurfSense
stars: 13069 stars: 14374
owner_login: MODSetter owner_login: MODSetter
owner_html_url: https://github.com/MODSetter owner_html_url: https://github.com/MODSetter
- name: machine-learning-zoomcamp - name: machine-learning-zoomcamp
html_url: https://github.com/DataTalksClub/machine-learning-zoomcamp html_url: https://github.com/DataTalksClub/machine-learning-zoomcamp
stars: 12674 stars: 13169
owner_login: DataTalksClub owner_login: DataTalksClub
owner_html_url: https://github.com/DataTalksClub owner_html_url: https://github.com/DataTalksClub
- name: fastapi_mcp - name: fastapi_mcp
html_url: https://github.com/tadata-org/fastapi_mcp html_url: https://github.com/tadata-org/fastapi_mcp
stars: 11604 stars: 11885
owner_login: tadata-org owner_login: tadata-org
owner_html_url: https://github.com/tadata-org owner_html_url: https://github.com/tadata-org
- name: awesome-fastapi - name: awesome-fastapi
html_url: https://github.com/mjhea0/awesome-fastapi html_url: https://github.com/mjhea0/awesome-fastapi
stars: 11119 stars: 11406
owner_login: mjhea0 owner_login: mjhea0
owner_html_url: https://github.com/mjhea0 owner_html_url: https://github.com/mjhea0
- name: XHS-Downloader - name: XHS-Downloader
html_url: https://github.com/JoeanAmier/XHS-Downloader html_url: https://github.com/JoeanAmier/XHS-Downloader
stars: 10206 stars: 11375
owner_login: JoeanAmier owner_login: JoeanAmier
owner_html_url: https://github.com/JoeanAmier owner_html_url: https://github.com/JoeanAmier
- name: polar - name: polar
html_url: https://github.com/polarsource/polar html_url: https://github.com/polarsource/polar
stars: 9500 stars: 9894
owner_login: polarsource owner_login: polarsource
owner_html_url: https://github.com/polarsource owner_html_url: https://github.com/polarsource
- name: pycaret
html_url: https://github.com/pycaret/pycaret
stars: 9801
owner_login: pycaret
owner_html_url: https://github.com/pycaret
- name: FastUI - name: FastUI
html_url: https://github.com/pydantic/FastUI html_url: https://github.com/pydantic/FastUI
stars: 8956 stars: 8966
owner_login: pydantic owner_login: pydantic
owner_html_url: https://github.com/pydantic owner_html_url: https://github.com/pydantic
- name: FileCodeBox - name: FileCodeBox
html_url: https://github.com/vastsa/FileCodeBox html_url: https://github.com/vastsa/FileCodeBox
stars: 8128 stars: 8305
owner_login: vastsa owner_login: vastsa
owner_html_url: https://github.com/vastsa owner_html_url: https://github.com/vastsa
- name: nonebot2 - name: nonebot2
html_url: https://github.com/nonebot/nonebot2 html_url: https://github.com/nonebot/nonebot2
stars: 7384 stars: 7544
owner_login: nonebot owner_login: nonebot
owner_html_url: https://github.com/nonebot owner_html_url: https://github.com/nonebot
- name: hatchet - name: hatchet
html_url: https://github.com/hatchet-dev/hatchet html_url: https://github.com/hatchet-dev/hatchet
stars: 6659 stars: 7258
owner_login: hatchet-dev owner_login: hatchet-dev
owner_html_url: https://github.com/hatchet-dev owner_html_url: https://github.com/hatchet-dev
- name: fastapi-users - name: fastapi-users
html_url: https://github.com/fastapi-users/fastapi-users html_url: https://github.com/fastapi-users/fastapi-users
stars: 6024 stars: 6152
owner_login: fastapi-users owner_login: fastapi-users
owner_html_url: https://github.com/fastapi-users owner_html_url: https://github.com/fastapi-users
- name: serge - name: serge
html_url: https://github.com/serge-chat/serge html_url: https://github.com/serge-chat/serge
stars: 5746 stars: 5726
owner_login: serge-chat owner_login: serge-chat
owner_html_url: https://github.com/serge-chat owner_html_url: https://github.com/serge-chat
- name: strawberry - name: Yuxi
html_url: https://github.com/strawberry-graphql/strawberry html_url: https://github.com/xerrors/Yuxi
stars: 4616 stars: 5323
owner_login: strawberry-graphql
owner_html_url: https://github.com/strawberry-graphql
- name: devpush
html_url: https://github.com/hunvreus/devpush
stars: 4515
owner_login: hunvreus
owner_html_url: https://github.com/hunvreus
- name: Kokoro-FastAPI
html_url: https://github.com/remsky/Kokoro-FastAPI
stars: 4494
owner_login: remsky
owner_html_url: https://github.com/remsky
- name: Yuxi-Know
html_url: https://github.com/xerrors/Yuxi-Know
stars: 4404
owner_login: xerrors owner_login: xerrors
owner_html_url: https://github.com/xerrors owner_html_url: https://github.com/xerrors
- name: Kokoro-FastAPI
html_url: https://github.com/remsky/Kokoro-FastAPI
stars: 4936
owner_login: remsky
owner_html_url: https://github.com/remsky
- name: devpush
html_url: https://github.com/hunvreus/devpush
stars: 4664
owner_login: hunvreus
owner_html_url: https://github.com/hunvreus
- name: strawberry
html_url: https://github.com/strawberry-graphql/strawberry
stars: 4663
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 - name: poem
html_url: https://github.com/poem-web/poem html_url: https://github.com/poem-web/poem
stars: 4359 stars: 4398
owner_login: poem-web owner_login: poem-web
owner_html_url: https://github.com/poem-web owner_html_url: https://github.com/poem-web
- name: chatgpt-web-share
html_url: https://github.com/chatpire/chatgpt-web-share
stars: 4274
owner_login: chatpire
owner_html_url: https://github.com/chatpire
- name: dynaconf - name: dynaconf
html_url: https://github.com/dynaconf/dynaconf html_url: https://github.com/dynaconf/dynaconf
stars: 4266 stars: 4302
owner_login: dynaconf owner_login: dynaconf
owner_html_url: https://github.com/dynaconf owner_html_url: https://github.com/dynaconf
- name: atrilabs-engine
html_url: https://github.com/Atri-Labs/atrilabs-engine
stars: 4085
owner_login: Atri-Labs
owner_html_url: https://github.com/Atri-Labs
- name: logfire - name: logfire
html_url: https://github.com/pydantic/logfire html_url: https://github.com/pydantic/logfire
stars: 4050 stars: 4276
owner_login: pydantic owner_login: pydantic
owner_html_url: https://github.com/pydantic owner_html_url: https://github.com/pydantic
- name: chatgpt-web-share
html_url: https://github.com/chatpire/chatgpt-web-share
stars: 4273
owner_login: chatpire
owner_html_url: https://github.com/chatpire
- name: huma - name: huma
html_url: https://github.com/danielgtaylor/huma html_url: https://github.com/danielgtaylor/huma
stars: 3848 stars: 4133
owner_login: danielgtaylor owner_login: danielgtaylor
owner_html_url: https://github.com/danielgtaylor owner_html_url: https://github.com/danielgtaylor
- name: LitServe - name: atrilabs-engine
html_url: https://github.com/Lightning-AI/LitServe html_url: https://github.com/Atri-Labs/atrilabs-engine
stars: 3803 stars: 4073
owner_login: Lightning-AI owner_login: Atri-Labs
owner_html_url: https://github.com/Lightning-AI owner_html_url: https://github.com/Atri-Labs
- name: datamodel-code-generator - name: datamodel-code-generator
html_url: https://github.com/koxudaxi/datamodel-code-generator html_url: https://github.com/koxudaxi/datamodel-code-generator
stars: 3785 stars: 3918
owner_login: koxudaxi owner_login: koxudaxi
owner_html_url: https://github.com/koxudaxi owner_html_url: https://github.com/koxudaxi
- name: fastapi-admin - name: LitServe
html_url: https://github.com/fastapi-admin/fastapi-admin html_url: https://github.com/Lightning-AI/LitServe
stars: 3717 stars: 3886
owner_login: fastapi-admin owner_login: Lightning-AI
owner_html_url: https://github.com/fastapi-admin owner_html_url: https://github.com/Lightning-AI
- name: farfalle
html_url: https://github.com/rashadphz/farfalle
stars: 3515
owner_login: rashadphz
owner_html_url: https://github.com/rashadphz
- name: tracecat
html_url: https://github.com/TracecatHQ/tracecat
stars: 3498
owner_login: TracecatHQ
owner_html_url: https://github.com/TracecatHQ
- name: mcp-context-forge - name: mcp-context-forge
html_url: https://github.com/IBM/mcp-context-forge html_url: https://github.com/IBM/mcp-context-forge
stars: 3347 stars: 3797
owner_login: IBM owner_login: IBM
owner_html_url: https://github.com/IBM owner_html_url: https://github.com/IBM
- name: fastapi-admin
html_url: https://github.com/fastapi-admin/fastapi-admin
stars: 3784
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
owner_login: TracecatHQ
owner_html_url: https://github.com/TracecatHQ
- name: farfalle
html_url: https://github.com/rashadphz/farfalle
stars: 3535
owner_login: rashadphz
owner_html_url: https://github.com/rashadphz
- name: opyrator - name: opyrator
html_url: https://github.com/ml-tooling/opyrator html_url: https://github.com/ml-tooling/opyrator
stars: 3139 stars: 3136
owner_login: ml-tooling owner_login: ml-tooling
owner_html_url: https://github.com/ml-tooling owner_html_url: https://github.com/ml-tooling
- name: docarray - name: docarray
html_url: https://github.com/docarray/docarray html_url: https://github.com/docarray/docarray
stars: 3116 stars: 3119
owner_login: docarray owner_login: docarray
owner_html_url: https://github.com/docarray owner_html_url: https://github.com/docarray
- name: fastapi-realworld-example-app - name: fastapi-realworld-example-app
html_url: https://github.com/nsidnev/fastapi-realworld-example-app html_url: https://github.com/nsidnev/fastapi-realworld-example-app
stars: 3079 stars: 3110
owner_login: nsidnev owner_login: nsidnev
owner_html_url: https://github.com/nsidnev owner_html_url: https://github.com/nsidnev
- name: uvicorn-gunicorn-fastapi-docker - name: uvicorn-gunicorn-fastapi-docker
html_url: https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker html_url: https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker
stars: 2908 stars: 2910
owner_login: tiangolo owner_login: tiangolo
owner_html_url: https://github.com/tiangolo owner_html_url: https://github.com/tiangolo
- name: FastAPI-template - name: FastAPI-template
html_url: https://github.com/s3rius/FastAPI-template html_url: https://github.com/s3rius/FastAPI-template
stars: 2749 stars: 2800
owner_login: s3rius owner_login: s3rius
owner_html_url: https://github.com/s3rius owner_html_url: https://github.com/s3rius
- name: best-of-web-python
html_url: https://github.com/ml-tooling/best-of-web-python
stars: 2695
owner_login: ml-tooling
owner_html_url: https://github.com/ml-tooling
- name: sqladmin
html_url: https://github.com/aminalaee/sqladmin
stars: 2674
owner_login: aminalaee
owner_html_url: https://github.com/aminalaee
- name: YC-Killer - name: YC-Killer
html_url: https://github.com/sahibzada-allahyar/YC-Killer html_url: https://github.com/sahibzada-allahyar/YC-Killer
stars: 2665 stars: 2770
owner_login: sahibzada-allahyar owner_login: sahibzada-allahyar
owner_html_url: https://github.com/sahibzada-allahyar owner_html_url: https://github.com/sahibzada-allahyar
- name: sqladmin
html_url: https://github.com/smithyhq/sqladmin
stars: 2739
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
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: fastapi-react - name: fastapi-react
html_url: https://github.com/Buuntu/fastapi-react html_url: https://github.com/Buuntu/fastapi-react
stars: 2585 stars: 2588
owner_login: Buuntu owner_login: Buuntu
owner_html_url: https://github.com/Buuntu owner_html_url: https://github.com/Buuntu
- name: RasaGPT - name: any-auto-register
html_url: https://github.com/paulpierre/RasaGPT html_url: https://github.com/lxf746/any-auto-register
stars: 2462 stars: 2542
owner_login: paulpierre owner_login: lxf746
owner_html_url: https://github.com/paulpierre 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 - name: supabase-py
html_url: https://github.com/supabase/supabase-py html_url: https://github.com/supabase/supabase-py
stars: 2452 stars: 2518
owner_login: supabase owner_login: supabase
owner_html_url: https://github.com/supabase owner_html_url: https://github.com/supabase
- name: 30-Days-of-Python - name: 30-Days-of-Python
html_url: https://github.com/codingforentrepreneurs/30-Days-of-Python html_url: https://github.com/codingforentrepreneurs/30-Days-of-Python
stars: 2435 stars: 2470
owner_login: codingforentrepreneurs owner_login: codingforentrepreneurs
owner_html_url: https://github.com/codingforentrepreneurs owner_html_url: https://github.com/codingforentrepreneurs
- name: NoteDiscovery - name: RasaGPT
html_url: https://github.com/gamosoft/NoteDiscovery html_url: https://github.com/paulpierre/RasaGPT
stars: 2354 stars: 2466
owner_login: gamosoft owner_login: paulpierre
owner_html_url: https://github.com/gamosoft owner_html_url: https://github.com/paulpierre
- name: nextpy - name: AIstudioProxyAPI
html_url: https://github.com/dot-agent/nextpy html_url: https://github.com/CJackHwang/AIstudioProxyAPI
stars: 2335 stars: 2396
owner_login: dot-agent owner_login: CJackHwang
owner_html_url: https://github.com/dot-agent owner_html_url: https://github.com/CJackHwang
- name: fastapi-utils
html_url: https://github.com/fastapiutils/fastapi-utils
stars: 2306
owner_login: fastapiutils
owner_html_url: https://github.com/fastapiutils
- name: langserve
html_url: https://github.com/langchain-ai/langserve
stars: 2276
owner_login: langchain-ai
owner_html_url: https://github.com/langchain-ai
- name: solara
html_url: https://github.com/widgetti/solara
stars: 2154
owner_login: widgetti
owner_html_url: https://github.com/widgetti
- name: mangum
html_url: https://github.com/Kludex/mangum
stars: 2084
owner_login: Kludex
owner_html_url: https://github.com/Kludex
- name: fastapi_best_architecture
html_url: https://github.com/fastapi-practices/fastapi_best_architecture
stars: 2083
owner_login: fastapi-practices
owner_html_url: https://github.com/fastapi-practices
- name: vue-fastapi-admin
html_url: https://github.com/mizhexiaoxiao/vue-fastapi-admin
stars: 2012
owner_login: mizhexiaoxiao
owner_html_url: https://github.com/mizhexiaoxiao
- name: fastapi-langgraph-agent-production-ready-template - name: fastapi-langgraph-agent-production-ready-template
html_url: https://github.com/wassim249/fastapi-langgraph-agent-production-ready-template html_url: https://github.com/wassim249/fastapi-langgraph-agent-production-ready-template
stars: 2006 stars: 2338
owner_login: wassim249 owner_login: wassim249
owner_html_url: https://github.com/wassim249 owner_html_url: https://github.com/wassim249
- name: agentkit - name: nextpy
html_url: https://github.com/BCG-X-Official/agentkit html_url: https://github.com/dot-agent/nextpy
stars: 1946 stars: 2336
owner_login: BCG-X-Official owner_login: dot-agent
owner_html_url: https://github.com/BCG-X-Official owner_html_url: https://github.com/dot-agent
- name: langserve
html_url: https://github.com/langchain-ai/langserve
stars: 2330
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
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: vue-fastapi-admin
html_url: https://github.com/mizhexiaoxiao/vue-fastapi-admin
stars: 2148
owner_login: mizhexiaoxiao
owner_html_url: https://github.com/mizhexiaoxiao
- name: mangum
html_url: https://github.com/Kludex/mangum
stars: 2119
owner_login: Kludex
owner_html_url: https://github.com/Kludex
- name: slowapi - name: slowapi
html_url: https://github.com/laurentS/slowapi html_url: https://github.com/laurentS/slowapi
stars: 1924 stars: 2000
owner_login: laurentS owner_login: laurentS
owner_html_url: https://github.com/laurentS owner_html_url: https://github.com/laurentS
- name: xhs_ai_publisher
html_url: https://github.com/BetaStreetOmnis/xhs_ai_publisher
stars: 1980
owner_login: BetaStreetOmnis
owner_html_url: https://github.com/BetaStreetOmnis
- name: openapi-python-client - name: openapi-python-client
html_url: https://github.com/openapi-generators/openapi-python-client html_url: https://github.com/openapi-generators/openapi-python-client
stars: 1915 stars: 1960
owner_login: openapi-generators owner_login: openapi-generators
owner_html_url: https://github.com/openapi-generators owner_html_url: https://github.com/openapi-generators
- name: manage-fastapi - name: agentkit
html_url: https://github.com/ycd/manage-fastapi html_url: https://github.com/BCG-X-Official/agentkit
stars: 1898 stars: 1944
owner_login: ycd owner_login: BCG-X-Official
owner_html_url: https://github.com/ycd owner_html_url: https://github.com/BCG-X-Official
- name: piccolo
html_url: https://github.com/piccolo-orm/piccolo
stars: 1864
owner_login: piccolo-orm
owner_html_url: https://github.com/piccolo-orm
- name: fastapi-cache
html_url: https://github.com/long2ice/fastapi-cache
stars: 1837
owner_login: long2ice
owner_html_url: https://github.com/long2ice
- name: FastAPI-boilerplate - name: FastAPI-boilerplate
html_url: https://github.com/benavlabs/FastAPI-boilerplate html_url: https://github.com/benavlabs/FastAPI-boilerplate
stars: 1820 stars: 1931
owner_login: benavlabs owner_login: benavlabs
owner_html_url: https://github.com/benavlabs owner_html_url: https://github.com/benavlabs
- name: python-week-2022 - name: piccolo
html_url: https://github.com/rochacbruno/python-week-2022 html_url: https://github.com/piccolo-orm/piccolo
stars: 1811 stars: 1904
owner_login: rochacbruno owner_login: piccolo-orm
owner_html_url: https://github.com/rochacbruno owner_html_url: https://github.com/piccolo-orm
- name: manage-fastapi
html_url: https://github.com/ycd/manage-fastapi
stars: 1903
owner_login: ycd
owner_html_url: https://github.com/ycd
- name: fastapi-cache
html_url: https://github.com/long2ice/fastapi-cache
stars: 1865
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 - name: ormar
html_url: https://github.com/ormar-orm/ormar html_url: https://github.com/ormar-orm/ormar
stars: 1801 stars: 1809
owner_login: ormar-orm owner_login: ormar-orm
owner_html_url: https://github.com/ormar-orm owner_html_url: https://github.com/ormar-orm
- name: python-week-2022
html_url: https://github.com/rochacbruno/python-week-2022
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: termpair - name: termpair
html_url: https://github.com/cs01/termpair html_url: https://github.com/cs01/termpair
stars: 1728 stars: 1735
owner_login: cs01 owner_login: cs01
owner_html_url: https://github.com/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 - name: fastapi-crudrouter
html_url: https://github.com/awtkns/fastapi-crudrouter html_url: https://github.com/awtkns/fastapi-crudrouter
stars: 1682 stars: 1692
owner_login: awtkns owner_login: awtkns
owner_html_url: https://github.com/awtkns owner_html_url: https://github.com/awtkns
- name: langchain-serve
html_url: https://github.com/jina-ai/langchain-serve
stars: 1633
owner_login: jina-ai
owner_html_url: https://github.com/jina-ai
- name: fastapi-pagination
html_url: https://github.com/uriyyo/fastapi-pagination
stars: 1631
owner_login: uriyyo
owner_html_url: https://github.com/uriyyo
- name: bracket - name: bracket
html_url: https://github.com/evroon/bracket html_url: https://github.com/evroon/bracket
stars: 1619 stars: 1682
owner_login: evroon owner_login: evroon
owner_html_url: https://github.com/evroon owner_html_url: https://github.com/evroon
- name: fastapi-pagination
html_url: https://github.com/uriyyo/fastapi-pagination
stars: 1658
owner_login: uriyyo
owner_html_url: https://github.com/uriyyo
- name: langchain-serve
html_url: https://github.com/jina-ai/langchain-serve
stars: 1640
owner_login: jina-ai
owner_html_url: https://github.com/jina-ai
- name: awesome-fastapi-projects - name: awesome-fastapi-projects
html_url: https://github.com/Kludex/awesome-fastapi-projects html_url: https://github.com/Kludex/awesome-fastapi-projects
stars: 1596 stars: 1603
owner_login: Kludex owner_login: Kludex
owner_html_url: https://github.com/Kludex owner_html_url: https://github.com/Kludex
- name: coronavirus-tracker-api - name: coronavirus-tracker-api
html_url: https://github.com/ExpDev07/coronavirus-tracker-api html_url: https://github.com/ExpDev07/coronavirus-tracker-api
stars: 1568 stars: 1567
owner_login: ExpDev07 owner_login: ExpDev07
owner_html_url: https://github.com/ExpDev07 owner_html_url: https://github.com/ExpDev07
- name: fastapi-amis-admin - name: fastapi-amis-admin
html_url: https://github.com/amisadmin/fastapi-amis-admin html_url: https://github.com/amisadmin/fastapi-amis-admin
stars: 1520 stars: 1554
owner_login: amisadmin owner_login: amisadmin
owner_html_url: https://github.com/amisadmin owner_html_url: https://github.com/amisadmin
- name: fastcrud - name: fastcrud
html_url: https://github.com/benavlabs/fastcrud html_url: https://github.com/benavlabs/fastcrud
stars: 1487 stars: 1519
owner_login: benavlabs owner_login: benavlabs
owner_html_url: https://github.com/benavlabs owner_html_url: https://github.com/benavlabs
- name: tavily-key-generator
html_url: https://github.com/skernelx/tavily-key-generator
stars: 1507
owner_login: skernelx
owner_html_url: https://github.com/skernelx
- name: fastapi-boilerplate - name: fastapi-boilerplate
html_url: https://github.com/teamhide/fastapi-boilerplate html_url: https://github.com/teamhide/fastapi-boilerplate
stars: 1465 stars: 1490
owner_login: teamhide owner_login: teamhide
owner_html_url: https://github.com/teamhide owner_html_url: https://github.com/teamhide
- name: awesome-python-resources
html_url: https://github.com/DjangoEx/awesome-python-resources
stars: 1441
owner_login: DjangoEx
owner_html_url: https://github.com/DjangoEx
- name: prometheus-fastapi-instrumentator - name: prometheus-fastapi-instrumentator
html_url: https://github.com/trallnag/prometheus-fastapi-instrumentator html_url: https://github.com/trallnag/prometheus-fastapi-instrumentator
stars: 1433 stars: 1458
owner_login: trallnag owner_login: trallnag
owner_html_url: https://github.com/trallnag owner_html_url: https://github.com/trallnag
- name: fastapi-code-generator - name: awesome-python-resources
html_url: https://github.com/koxudaxi/fastapi-code-generator html_url: https://github.com/DjangoEx/awesome-python-resources
stars: 1384 stars: 1448
owner_login: koxudaxi owner_login: DjangoEx
owner_html_url: https://github.com/koxudaxi owner_html_url: https://github.com/DjangoEx
- name: fastapi-tutorial - name: fastapi-tutorial
html_url: https://github.com/liaogx/fastapi-tutorial html_url: https://github.com/liaogx/fastapi-tutorial
stars: 1365 stars: 1404
owner_login: liaogx owner_login: liaogx
owner_html_url: https://github.com/liaogx owner_html_url: https://github.com/liaogx
- name: WebRPA - name: fastapi-code-generator
html_url: https://github.com/pmh1314520/WebRPA html_url: https://github.com/koxudaxi/fastapi-code-generator
stars: 1354 stars: 1397
owner_login: pmh1314520 owner_login: koxudaxi
owner_html_url: https://github.com/pmh1314520 owner_html_url: https://github.com/koxudaxi
- name: budgetml
html_url: https://github.com/ebhy/budgetml
stars: 1344
owner_login: ebhy
owner_html_url: https://github.com/ebhy
- name: fastapi-scaff
html_url: https://github.com/atpuxiner/fastapi-scaff
stars: 1305
owner_login: atpuxiner
owner_html_url: https://github.com/atpuxiner
- name: bolt-python
html_url: https://github.com/slackapi/bolt-python
stars: 1278
owner_login: slackapi
owner_html_url: https://github.com/slackapi
- name: bedrock-chat
html_url: https://github.com/aws-samples/bedrock-chat
stars: 1271
owner_login: aws-samples
owner_html_url: https://github.com/aws-samples
- name: fastapi-alembic-sqlmodel-async
html_url: https://github.com/vargasjona/fastapi-alembic-sqlmodel-async
stars: 1269
owner_login: vargasjona
owner_html_url: https://github.com/vargasjona
- name: fastapi_production_template
html_url: https://github.com/zhanymkanov/fastapi_production_template
stars: 1231
owner_login: zhanymkanov
owner_html_url: https://github.com/zhanymkanov
- name: restish
html_url: https://github.com/rest-sh/restish
stars: 1225
owner_login: rest-sh
owner_html_url: https://github.com/rest-sh
- name: aktools - name: aktools
html_url: https://github.com/akfamily/aktools html_url: https://github.com/akfamily/aktools
stars: 1223 stars: 1394
owner_login: akfamily owner_login: akfamily
owner_html_url: https://github.com/akfamily owner_html_url: https://github.com/akfamily
- name: RuoYi-Vue3-FastAPI - name: RuoYi-Vue3-FastAPI
html_url: https://github.com/insistence/RuoYi-Vue3-FastAPI html_url: https://github.com/insistence/RuoYi-Vue3-FastAPI
stars: 1202 stars: 1364
owner_login: insistence owner_login: insistence
owner_html_url: https://github.com/insistence owner_html_url: https://github.com/insistence
- name: langchain-extract - name: budgetml
html_url: https://github.com/langchain-ai/langchain-extract html_url: https://github.com/ebhy/budgetml
stars: 1189 stars: 1345
owner_login: langchain-ai owner_login: ebhy
owner_html_url: https://github.com/langchain-ai owner_html_url: https://github.com/ebhy
- name: odmantic - name: full-stack-ai-agent-template
html_url: https://github.com/art049/odmantic html_url: https://github.com/vstorm-co/full-stack-ai-agent-template
stars: 1167 stars: 1316
owner_login: art049 owner_login: vstorm-co
owner_html_url: https://github.com/art049 owner_html_url: https://github.com/vstorm-co
- name: authx - name: bolt-python
html_url: https://github.com/yezz123/authx html_url: https://github.com/slackapi/bolt-python
stars: 1144 stars: 1308
owner_login: yezz123 owner_login: slackapi
owner_html_url: https://github.com/yezz123 owner_html_url: https://github.com/slackapi
- name: enterprise-deep-research - name: bedrock-chat
html_url: https://github.com/SalesforceAIResearch/enterprise-deep-research html_url: https://github.com/aws-samples/bedrock-chat
stars: 1123 stars: 1304
owner_login: SalesforceAIResearch owner_login: aws-samples
owner_html_url: https://github.com/SalesforceAIResearch owner_html_url: https://github.com/aws-samples
- name: SAG - name: restish
html_url: https://github.com/Zleap-AI/SAG html_url: https://github.com/rest-sh/restish
stars: 1115 stars: 1303
owner_login: Zleap-AI owner_login: rest-sh
owner_html_url: https://github.com/Zleap-AI owner_html_url: https://github.com/rest-sh
- name: FileSync - name: yubal
html_url: https://github.com/polius/FileSync html_url: https://github.com/guillevc/yubal
stars: 1111 stars: 1302
owner_login: polius owner_login: guillevc
owner_html_url: https://github.com/polius owner_html_url: https://github.com/guillevc
- name: every-pdf
html_url: https://github.com/DDULDDUCK/every-pdf
stars: 1093
owner_login: DDULDDUCK
owner_html_url: https://github.com/DDULDDUCK
- name: fastapi-observability
html_url: https://github.com/blueswen/fastapi-observability
stars: 1079
owner_login: blueswen
owner_html_url: https://github.com/blueswen
- name: flock
html_url: https://github.com/Onelevenvy/flock
stars: 1073
owner_login: Onelevenvy
owner_html_url: https://github.com/Onelevenvy
- name: titiler
html_url: https://github.com/developmentseed/titiler
stars: 1060
owner_login: developmentseed
owner_html_url: https://github.com/developmentseed

View File

@@ -38,6 +38,11 @@ alv2017:
count: 88 count: 88
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4 avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/alv2017 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: nazarepiedady:
login: nazarepiedady login: nazarepiedady
count: 87 count: 87
@@ -45,7 +50,7 @@ nazarepiedady:
url: https://github.com/nazarepiedady url: https://github.com/nazarepiedady
tiangolo: tiangolo:
login: tiangolo login: tiangolo
count: 82 count: 83
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
AlertRED: AlertRED:
@@ -63,14 +68,9 @@ nilslindemann:
count: 67 count: 67
avatarUrl: https://avatars.githubusercontent.com/u/6892179?u=1dca6a22195d6cd1ab20737c0e19a4c55d639472&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6892179?u=1dca6a22195d6cd1ab20737c0e19a4c55d639472&v=4
url: https://github.com/nilslindemann url: https://github.com/nilslindemann
YuriiMotov:
login: YuriiMotov
count: 65
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=bc48be95c429989224786106b027f3c5e40cc354&v=4
url: https://github.com/YuriiMotov
cassiobotaro: cassiobotaro:
login: cassiobotaro login: cassiobotaro
count: 64 count: 65
avatarUrl: https://avatars.githubusercontent.com/u/3127847?u=a08022b191ddbd0a6159b2981d9d878b6d5bb71f&v=4 avatarUrl: https://avatars.githubusercontent.com/u/3127847?u=a08022b191ddbd0a6159b2981d9d878b6d5bb71f&v=4
url: https://github.com/cassiobotaro url: https://github.com/cassiobotaro
waynerv: waynerv:
@@ -131,7 +131,7 @@ solomein-sv:
mezgoodle: mezgoodle:
login: mezgoodle login: mezgoodle
count: 38 count: 38
avatarUrl: https://avatars.githubusercontent.com/u/41520940?u=4a9c765af688389d54296845d18b8f6cd6ddf09a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/41520940?u=b9f71909a70223d623afa9c2b848a14649daa07d&v=4
url: https://github.com/mezgoodle url: https://github.com/mezgoodle
JavierSanchezCastro: JavierSanchezCastro:
login: JavierSanchezCastro login: JavierSanchezCastro
@@ -301,7 +301,7 @@ delhi09:
rogerbrinkmann: rogerbrinkmann:
login: rogerbrinkmann login: rogerbrinkmann
count: 20 count: 20
avatarUrl: https://avatars.githubusercontent.com/u/5690226?v=4 avatarUrl: https://avatars.githubusercontent.com/u/5690226?u=a1fe0aee927d33ce9db8c455eabc40c1cdf2bb65&v=4
url: https://github.com/rogerbrinkmann url: https://github.com/rogerbrinkmann
DevDae: DevDae:
login: DevDae login: DevDae
@@ -471,7 +471,7 @@ NastasiaSaby:
oandersonmagalhaes: oandersonmagalhaes:
login: oandersonmagalhaes login: oandersonmagalhaes
count: 12 count: 12
avatarUrl: https://avatars.githubusercontent.com/u/83456692?v=4 avatarUrl: https://avatars.githubusercontent.com/u/83456692?u=daf5f302a59b950efc6d21129314af207e35441f&v=4
url: https://github.com/oandersonmagalhaes url: https://github.com/oandersonmagalhaes
mkdir700: mkdir700:
login: mkdir700 login: mkdir700
@@ -616,7 +616,7 @@ socket-socket:
nick-cjyx9: nick-cjyx9:
login: nick-cjyx9 login: nick-cjyx9
count: 10 count: 10
avatarUrl: https://avatars.githubusercontent.com/u/119087246?u=3d51dcbd79222ecb6538642f31dc7c8bb708d191&v=4 avatarUrl: https://avatars.githubusercontent.com/u/119087246?u=5fc07fc3db727b3c00393d0a3739fb2b6e896a1b&v=4
url: https://github.com/nick-cjyx9 url: https://github.com/nick-cjyx9
marcelomarkus: marcelomarkus:
login: marcelomarkus login: marcelomarkus
@@ -671,7 +671,7 @@ riroan:
MinLee0210: MinLee0210:
login: MinLee0210 login: MinLee0210
count: 9 count: 9
avatarUrl: https://avatars.githubusercontent.com/u/57653278?u=8ca05a7efbc76048183da00da87d148b755a3ba8&v=4 avatarUrl: https://avatars.githubusercontent.com/u/57653278?u=e7c4d8d7eeb7bceed1680ef0e5dafec0695f57e0&v=4
url: https://github.com/MinLee0210 url: https://github.com/MinLee0210
yodai-yodai: yodai-yodai:
login: yodai-yodai login: yodai-yodai
@@ -693,6 +693,11 @@ Yarous:
count: 9 count: 9
avatarUrl: https://avatars.githubusercontent.com/u/61277193?u=5b462347458a373b2d599c6f416d2b75eddbffad&v=4 avatarUrl: https://avatars.githubusercontent.com/u/61277193?u=5b462347458a373b2d599c6f416d2b75eddbffad&v=4
url: https://github.com/Yarous 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: dimaqq:
login: dimaqq login: dimaqq
count: 8 count: 8
@@ -743,6 +748,11 @@ sungchan1:
count: 8 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/28076127?u=fadbf24840186aca639d344bb3e0ecf7ff3441cf&v=4 avatarUrl: https://avatars.githubusercontent.com/u/28076127?u=fadbf24840186aca639d344bb3e0ecf7ff3441cf&v=4
url: https://github.com/sungchan1 url: https://github.com/sungchan1
EdmilsonRodrigues:
login: EdmilsonRodrigues
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/62777025?u=217d6f3cd6cc750bb8818a3af7726c8d74eb7c2d&v=4
url: https://github.com/EdmilsonRodrigues
roli2py: roli2py:
login: roli2py login: roli2py
count: 8 count: 8
@@ -798,11 +808,6 @@ Zerohertz:
count: 7 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/42334717?u=5ebf4d33e73b1ad373154f6cdee44f7cab4d05ba&v=4 avatarUrl: https://avatars.githubusercontent.com/u/42334717?u=5ebf4d33e73b1ad373154f6cdee44f7cab4d05ba&v=4
url: https://github.com/Zerohertz url: https://github.com/Zerohertz
EdmilsonRodrigues:
login: EdmilsonRodrigues
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/62777025?u=217d6f3cd6cc750bb8818a3af7726c8d74eb7c2d&v=4
url: https://github.com/EdmilsonRodrigues
deniscapeto: deniscapeto:
login: deniscapeto login: deniscapeto
count: 6 count: 6
@@ -906,7 +911,7 @@ bankofsardine:
Rekl0w: Rekl0w:
login: Rekl0w login: Rekl0w
count: 6 count: 6
avatarUrl: https://avatars.githubusercontent.com/u/91488737?u=3b62b04a3e6699eab9b1eea4e88c09a39b753a17&v=4 avatarUrl: https://avatars.githubusercontent.com/u/91488737?u=7d2b7791665e04a12695150776a1d516a6ea7d21&v=4
url: https://github.com/Rekl0w url: https://github.com/Rekl0w
rsip22: rsip22:
login: rsip22 login: rsip22
@@ -1081,7 +1086,7 @@ bas-baskara:
odiseo0: odiseo0:
login: odiseo0 login: odiseo0
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=241a71f6b7068738b81af3e57f45ffd723538401&v=4 avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=75e754b9bd12ce6dfe90ad68e82e6f5255c7ac09&v=4
url: https://github.com/odiseo0 url: https://github.com/odiseo0
eryknn: eryknn:
login: eryknn login: eryknn
@@ -1276,7 +1281,7 @@ rafsaf:
frnsimoes: frnsimoes:
login: frnsimoes login: frnsimoes
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/66239468?u=98fb2a38bcac765ea9651af8a0ab8f37df86570d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/66239468?u=be491199e4695bb0ac43d17d59cf7d41f9df629f&v=4
url: https://github.com/frnsimoes url: https://github.com/frnsimoes
lieryan: lieryan:
login: lieryan login: lieryan
@@ -1438,6 +1443,11 @@ Mohammad222PR:
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/116789737?u=25810a5fe049d2f1618e2e7417cea011cc353ce4&v=4 avatarUrl: https://avatars.githubusercontent.com/u/116789737?u=25810a5fe049d2f1618e2e7417cea011cc353ce4&v=4
url: https://github.com/Mohammad222PR url: https://github.com/Mohammad222PR
crr004:
login: crr004
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/110995013?u=b1a0cd6b11043dafa7caa1ab6e151c8e063476bc&v=4
url: https://github.com/crr004
blaisep: blaisep:
login: blaisep login: blaisep
count: 2 count: 2
@@ -1606,7 +1616,7 @@ ayr-ton:
Kadermiyanyedi: Kadermiyanyedi:
login: Kadermiyanyedi login: Kadermiyanyedi
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/48386782?u=e34f31bf50a8ed8d37fbfa4f301b0c190b1b4b86&v=4 avatarUrl: https://avatars.githubusercontent.com/u/48386782?u=08c0f1594c5baf28b6fab7520a848cb9c3806c8e&v=4
url: https://github.com/Kadermiyanyedi url: https://github.com/Kadermiyanyedi
raphaelauv: raphaelauv:
login: raphaelauv login: raphaelauv
@@ -1681,7 +1691,7 @@ theRealNonso:
AhsanSheraz: AhsanSheraz:
login: AhsanSheraz login: AhsanSheraz
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/51913596?u=08e31cacb3048be30722c94010ddd028f3fdbec4&v=4 avatarUrl: https://avatars.githubusercontent.com/u/51913596?u=b5aa3c3a004cc0112e56c54f6901941836d8c26b&v=4
url: https://github.com/AhsanSheraz url: https://github.com/AhsanSheraz
HealerNguyen: HealerNguyen:
login: HealerNguyen login: HealerNguyen
@@ -1706,7 +1716,7 @@ Ramin-RX7:
DevSpace88: DevSpace88:
login: DevSpace88 login: DevSpace88
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/102557040?u=6b356e3e1b9b6bc6a208b363988d4089ef94193f&v=4 avatarUrl: https://avatars.githubusercontent.com/u/102557040?u=103e454f0d4d2d357bd66e9931e57f0bf267526a&v=4
url: https://github.com/DevSpace88 url: https://github.com/DevSpace88
Yum-git: Yum-git:
login: Yum-git login: Yum-git
@@ -1811,7 +1821,7 @@ tiaggo16:
kiharito: kiharito:
login: kiharito login: kiharito
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/38311245?v=4 avatarUrl: https://avatars.githubusercontent.com/u/38311245?u=531bd2230b752826edc01dc9d950f2f36017a6f0&v=4
url: https://github.com/kiharito url: https://github.com/kiharito
t4f1d: t4f1d:
login: t4f1d login: t4f1d
@@ -1856,7 +1866,7 @@ Azazul123:
ykertytsky: ykertytsky:
login: ykertytsky login: ykertytsky
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/83857001?u=1172902656ee604cf37f5e36abe938cd34a97a32&v=4 avatarUrl: https://avatars.githubusercontent.com/u/83857001?u=1f303eb73189f78cff376c13bd46db65f90ee314&v=4
url: https://github.com/ykertytsky url: https://github.com/ykertytsky
NavesSapnis: NavesSapnis:
login: NavesSapnis login: NavesSapnis

View File

@@ -3,16 +3,16 @@ nilslindemann:
count: 130 count: 130
avatarUrl: https://avatars.githubusercontent.com/u/6892179?u=1dca6a22195d6cd1ab20737c0e19a4c55d639472&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6892179?u=1dca6a22195d6cd1ab20737c0e19a4c55d639472&v=4
url: https://github.com/nilslindemann url: https://github.com/nilslindemann
tiangolo:
login: tiangolo
count: 78
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
jaystone776: jaystone776:
login: jaystone776 login: jaystone776
count: 46 count: 46
avatarUrl: https://avatars.githubusercontent.com/u/11191137?u=299205a95e9b6817a43144a48b643346a5aac5cc&v=4 avatarUrl: https://avatars.githubusercontent.com/u/11191137?u=299205a95e9b6817a43144a48b643346a5aac5cc&v=4
url: https://github.com/jaystone776 url: https://github.com/jaystone776
tiangolo:
login: tiangolo
count: 46
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
ceb10n: ceb10n:
login: ceb10n login: ceb10n
count: 30 count: 30
@@ -303,11 +303,11 @@ nayeonkinn:
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/98254573?u=64a75ac99b320d4935eff8d1fceea9680fa07473&v=4 avatarUrl: https://avatars.githubusercontent.com/u/98254573?u=64a75ac99b320d4935eff8d1fceea9680fa07473&v=4
url: https://github.com/nayeonkinn url: https://github.com/nayeonkinn
pe-brian: p3bri4n:
login: pe-brian login: p3bri4n
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/1783138?u=7e6242eb9e85bcf673fa88bbac9dd6dc3f03b1b5&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1783138?u=7e6242eb9e85bcf673fa88bbac9dd6dc3f03b1b5&v=4
url: https://github.com/pe-brian url: https://github.com/p3bri4n
maxscheijen: maxscheijen:
login: maxscheijen login: maxscheijen
count: 3 count: 3
@@ -386,7 +386,7 @@ dukkee:
oandersonmagalhaes: oandersonmagalhaes:
login: oandersonmagalhaes login: oandersonmagalhaes
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/83456692?v=4 avatarUrl: https://avatars.githubusercontent.com/u/83456692?u=daf5f302a59b950efc6d21129314af207e35441f&v=4
url: https://github.com/oandersonmagalhaes url: https://github.com/oandersonmagalhaes
leandrodesouzadev: leandrodesouzadev:
login: leandrodesouzadev login: leandrodesouzadev
@@ -416,7 +416,7 @@ ayr-ton:
Kadermiyanyedi: Kadermiyanyedi:
login: Kadermiyanyedi login: Kadermiyanyedi
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/48386782?u=e34f31bf50a8ed8d37fbfa4f301b0c190b1b4b86&v=4 avatarUrl: https://avatars.githubusercontent.com/u/48386782?u=08c0f1594c5baf28b6fab7520a848cb9c3806c8e&v=4
url: https://github.com/Kadermiyanyedi url: https://github.com/Kadermiyanyedi
KdHyeon0661: KdHyeon0661:
login: KdHyeon0661 login: KdHyeon0661
@@ -456,7 +456,7 @@ TabarakoAkula:
AhsanSheraz: AhsanSheraz:
login: AhsanSheraz login: AhsanSheraz
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/51913596?u=08e31cacb3048be30722c94010ddd028f3fdbec4&v=4 avatarUrl: https://avatars.githubusercontent.com/u/51913596?u=b5aa3c3a004cc0112e56c54f6901941836d8c26b&v=4
url: https://github.com/AhsanSheraz url: https://github.com/AhsanSheraz
ArtemKhymenko: ArtemKhymenko:
login: ArtemKhymenko login: ArtemKhymenko

Some files were not shown because too many files have changed in this diff Show More