-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfastapi.html
More file actions
170 lines (126 loc) · 38.1 KB
/
fastapi.html
File metadata and controls
170 lines (126 loc) · 38.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Python后端服务FastApi | 潘鑫博客</title>
<meta name="generator" content="VuePress 1.9.7">
<script data-ad-client="ca-pub-3196441204212737" async="true" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<link rel="icon" href="/favicon.ico">
<link rel="manifest" href="/manifest.json">
<link rel="apple-touch-icon" href="/logo.png">
<link rel="mask-icon" href="/logo.png" color="#3178c6">
<meta name="description" content="分享、学习、coding、新技能get√">
<meta name="theme-color" content="#3178c6">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="msapplication-TileImage" content="/logo.png">
<meta name="msapplication-TileColor" content="#000000">
<link rel="preload" href="/assets/css/0.styles.fe80f2e9.css" as="style"><link rel="preload" href="/assets/js/app.d96da9c0.js" as="script"><link rel="preload" href="/assets/js/3.a612be35.js" as="script"><link rel="preload" href="/assets/js/1.1f6fb7b3.js" as="script"><link rel="preload" href="/assets/js/58.d31d5ed4.js" as="script"><link rel="preload" href="/assets/js/12.cc454a87.js" as="script"><link rel="preload" href="/assets/js/9.0c525a95.js" as="script"><link rel="prefetch" href="/assets/js/10.c958f69b.js"><link rel="prefetch" href="/assets/js/100.b5ed3bfe.js"><link rel="prefetch" href="/assets/js/101.52c51b4b.js"><link rel="prefetch" href="/assets/js/102.d22424ce.js"><link rel="prefetch" href="/assets/js/103.b226b9d6.js"><link rel="prefetch" href="/assets/js/104.a6bd249e.js"><link rel="prefetch" href="/assets/js/105.ea498ed6.js"><link rel="prefetch" href="/assets/js/106.f8af64bc.js"><link rel="prefetch" href="/assets/js/107.19f199b3.js"><link rel="prefetch" href="/assets/js/108.31640d5f.js"><link rel="prefetch" href="/assets/js/109.c101c6f0.js"><link rel="prefetch" href="/assets/js/11.3da8a156.js"><link rel="prefetch" href="/assets/js/110.2e4648cd.js"><link rel="prefetch" href="/assets/js/111.44cd58c9.js"><link rel="prefetch" href="/assets/js/112.dbadc6ef.js"><link rel="prefetch" href="/assets/js/113.1c20f438.js"><link rel="prefetch" href="/assets/js/114.5959ed08.js"><link rel="prefetch" href="/assets/js/115.ff7dd286.js"><link rel="prefetch" href="/assets/js/116.21aac920.js"><link rel="prefetch" href="/assets/js/117.10db1641.js"><link rel="prefetch" href="/assets/js/118.c7acda67.js"><link rel="prefetch" href="/assets/js/119.0b864477.js"><link rel="prefetch" href="/assets/js/120.db45a311.js"><link rel="prefetch" href="/assets/js/121.26d1a503.js"><link rel="prefetch" href="/assets/js/122.becf320f.js"><link rel="prefetch" href="/assets/js/123.f91db6f9.js"><link rel="prefetch" href="/assets/js/124.bac2004d.js"><link rel="prefetch" href="/assets/js/125.58768fc4.js"><link rel="prefetch" href="/assets/js/126.bfe3818d.js"><link rel="prefetch" href="/assets/js/127.2c325e42.js"><link rel="prefetch" href="/assets/js/128.8e55b28d.js"><link rel="prefetch" href="/assets/js/129.8024b018.js"><link rel="prefetch" href="/assets/js/13.7e9c1e9f.js"><link rel="prefetch" href="/assets/js/130.8149077d.js"><link rel="prefetch" href="/assets/js/131.e5ae1b3c.js"><link rel="prefetch" href="/assets/js/132.01b158a4.js"><link rel="prefetch" href="/assets/js/133.e777b4fc.js"><link rel="prefetch" href="/assets/js/134.5a835ed1.js"><link rel="prefetch" href="/assets/js/135.503df77c.js"><link rel="prefetch" href="/assets/js/136.4adb2be9.js"><link rel="prefetch" href="/assets/js/137.02c38c68.js"><link rel="prefetch" href="/assets/js/138.1b9499aa.js"><link rel="prefetch" href="/assets/js/139.4630c335.js"><link rel="prefetch" href="/assets/js/14.e364c6ab.js"><link rel="prefetch" href="/assets/js/140.a243f39b.js"><link rel="prefetch" href="/assets/js/141.ee6987ef.js"><link rel="prefetch" href="/assets/js/142.69d4b446.js"><link rel="prefetch" href="/assets/js/143.941205be.js"><link rel="prefetch" href="/assets/js/144.dc02a8ce.js"><link rel="prefetch" href="/assets/js/145.698b5ae6.js"><link rel="prefetch" href="/assets/js/146.4178c2f5.js"><link rel="prefetch" href="/assets/js/147.8dadb591.js"><link rel="prefetch" href="/assets/js/148.10301f46.js"><link rel="prefetch" href="/assets/js/149.1bf4acb4.js"><link rel="prefetch" href="/assets/js/15.ef3cabe0.js"><link rel="prefetch" href="/assets/js/150.91c5c3af.js"><link rel="prefetch" href="/assets/js/151.f7ce9f12.js"><link rel="prefetch" href="/assets/js/152.c6437e15.js"><link rel="prefetch" href="/assets/js/153.47958e9f.js"><link rel="prefetch" href="/assets/js/154.b2287786.js"><link rel="prefetch" href="/assets/js/155.c7d3932e.js"><link rel="prefetch" href="/assets/js/156.9f1070fa.js"><link rel="prefetch" href="/assets/js/157.b0c12273.js"><link rel="prefetch" href="/assets/js/158.0e6bbe1f.js"><link rel="prefetch" href="/assets/js/159.9e359687.js"><link rel="prefetch" href="/assets/js/16.37f790c6.js"><link rel="prefetch" href="/assets/js/160.2902b74f.js"><link rel="prefetch" href="/assets/js/161.21e64635.js"><link rel="prefetch" href="/assets/js/162.6e59cfd2.js"><link rel="prefetch" href="/assets/js/163.a8bf68d3.js"><link rel="prefetch" href="/assets/js/164.4fb3cd9d.js"><link rel="prefetch" href="/assets/js/165.ee555303.js"><link rel="prefetch" href="/assets/js/166.b195e802.js"><link rel="prefetch" href="/assets/js/167.00f6b2d7.js"><link rel="prefetch" href="/assets/js/168.ab7d1eca.js"><link rel="prefetch" href="/assets/js/169.8fa6a1a5.js"><link rel="prefetch" href="/assets/js/17.3d26b29a.js"><link rel="prefetch" href="/assets/js/170.925cd001.js"><link rel="prefetch" href="/assets/js/18.e73d7140.js"><link rel="prefetch" href="/assets/js/19.8b944084.js"><link rel="prefetch" href="/assets/js/20.240aa886.js"><link rel="prefetch" href="/assets/js/21.aae8d919.js"><link rel="prefetch" href="/assets/js/22.8df3426a.js"><link rel="prefetch" href="/assets/js/23.9c26f381.js"><link rel="prefetch" href="/assets/js/24.60de9b6f.js"><link rel="prefetch" href="/assets/js/25.7cecadc7.js"><link rel="prefetch" href="/assets/js/26.917faf25.js"><link rel="prefetch" href="/assets/js/27.5b5ffdad.js"><link rel="prefetch" href="/assets/js/28.a9bdb70f.js"><link rel="prefetch" href="/assets/js/29.681f1822.js"><link rel="prefetch" href="/assets/js/30.595dd813.js"><link rel="prefetch" href="/assets/js/31.9f01f4c8.js"><link rel="prefetch" href="/assets/js/32.071d1d9e.js"><link rel="prefetch" href="/assets/js/33.4ed71779.js"><link rel="prefetch" href="/assets/js/34.a025ff41.js"><link rel="prefetch" href="/assets/js/35.d52171f1.js"><link rel="prefetch" href="/assets/js/36.ed29311f.js"><link rel="prefetch" href="/assets/js/37.e47a9d8c.js"><link rel="prefetch" href="/assets/js/38.13517280.js"><link rel="prefetch" href="/assets/js/39.4fb88582.js"><link rel="prefetch" href="/assets/js/4.fc8b0464.js"><link rel="prefetch" href="/assets/js/40.31c7d55d.js"><link rel="prefetch" href="/assets/js/41.37e4286e.js"><link rel="prefetch" href="/assets/js/42.aaa51290.js"><link rel="prefetch" href="/assets/js/43.a3aa262b.js"><link rel="prefetch" href="/assets/js/44.7d3a33e9.js"><link rel="prefetch" href="/assets/js/45.dbb244b9.js"><link rel="prefetch" href="/assets/js/46.69d01bd2.js"><link rel="prefetch" href="/assets/js/47.055c22ce.js"><link rel="prefetch" href="/assets/js/48.6942069b.js"><link rel="prefetch" href="/assets/js/49.a8b35243.js"><link rel="prefetch" href="/assets/js/5.1eb8c286.js"><link rel="prefetch" href="/assets/js/50.3eccb9bc.js"><link rel="prefetch" href="/assets/js/51.ea2a388a.js"><link rel="prefetch" href="/assets/js/52.5d3a9077.js"><link rel="prefetch" href="/assets/js/53.774c6e74.js"><link rel="prefetch" href="/assets/js/54.f8d909b1.js"><link rel="prefetch" href="/assets/js/55.93ccf864.js"><link rel="prefetch" href="/assets/js/56.4d1c0f81.js"><link rel="prefetch" href="/assets/js/57.cdd97692.js"><link rel="prefetch" href="/assets/js/59.4bbcca22.js"><link rel="prefetch" href="/assets/js/6.7fdbc0f3.js"><link rel="prefetch" href="/assets/js/60.e156017e.js"><link rel="prefetch" href="/assets/js/61.cfb0e0a1.js"><link rel="prefetch" href="/assets/js/62.21f5bb78.js"><link rel="prefetch" href="/assets/js/63.4a1779f7.js"><link rel="prefetch" href="/assets/js/64.dc2b22a0.js"><link rel="prefetch" href="/assets/js/65.5ab2b2aa.js"><link rel="prefetch" href="/assets/js/66.a8f1ae3c.js"><link rel="prefetch" href="/assets/js/67.2878f9bc.js"><link rel="prefetch" href="/assets/js/68.f4920217.js"><link rel="prefetch" href="/assets/js/69.bfbc7b22.js"><link rel="prefetch" href="/assets/js/7.2b4f1a1e.js"><link rel="prefetch" href="/assets/js/70.b2dfa6d3.js"><link rel="prefetch" href="/assets/js/71.712c3a8c.js"><link rel="prefetch" href="/assets/js/72.14ec689b.js"><link rel="prefetch" href="/assets/js/73.2e813dec.js"><link rel="prefetch" href="/assets/js/74.0750374d.js"><link rel="prefetch" href="/assets/js/75.cc31b6c6.js"><link rel="prefetch" href="/assets/js/76.2a83a3bc.js"><link rel="prefetch" href="/assets/js/77.642dfae4.js"><link rel="prefetch" href="/assets/js/78.46a4978f.js"><link rel="prefetch" href="/assets/js/79.c1c09197.js"><link rel="prefetch" href="/assets/js/8.d62e65f4.js"><link rel="prefetch" href="/assets/js/80.09043640.js"><link rel="prefetch" href="/assets/js/81.7f7f4cf9.js"><link rel="prefetch" href="/assets/js/82.e8d62db7.js"><link rel="prefetch" href="/assets/js/83.97036b3b.js"><link rel="prefetch" href="/assets/js/84.a2b2440c.js"><link rel="prefetch" href="/assets/js/85.b66dac9c.js"><link rel="prefetch" href="/assets/js/86.33a22381.js"><link rel="prefetch" href="/assets/js/87.2ee55a67.js"><link rel="prefetch" href="/assets/js/88.deda0c2e.js"><link rel="prefetch" href="/assets/js/89.e9f53605.js"><link rel="prefetch" href="/assets/js/90.44f510c9.js"><link rel="prefetch" href="/assets/js/91.7b4852e9.js"><link rel="prefetch" href="/assets/js/92.701b60ce.js"><link rel="prefetch" href="/assets/js/93.8e57da61.js"><link rel="prefetch" href="/assets/js/94.ec27be9d.js"><link rel="prefetch" href="/assets/js/95.478ca63a.js"><link rel="prefetch" href="/assets/js/96.cce24d9f.js"><link rel="prefetch" href="/assets/js/97.d6f559b6.js"><link rel="prefetch" href="/assets/js/98.1f12e82a.js"><link rel="prefetch" href="/assets/js/99.2162a296.js">
<link rel="stylesheet" href="/assets/css/0.styles.fe80f2e9.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container no-sidebar" data-v-7dd95ae2><div data-v-7dd95ae2><div class="password-shadow password-wrapper-out" style="display:none;" data-v-59e6cb88 data-v-7dd95ae2 data-v-7dd95ae2><h3 class="title" data-v-59e6cb88>潘鑫博客</h3> <p class="description" data-v-59e6cb88>分享、学习、coding、新技能get√</p> <label id="box" class="inputBox" data-v-59e6cb88><input type="password" value="" data-v-59e6cb88> <span data-v-59e6cb88>Konck! Knock!</span> <button data-v-59e6cb88>OK</button></label> <div class="footer" data-v-59e6cb88><span data-v-59e6cb88><i class="iconfont reco-theme" data-v-59e6cb88></i> <a target="blank" href="https://vuepress-theme-reco.recoluan.com" data-v-59e6cb88>vuePress-theme-reco</a></span> <span data-v-59e6cb88><i class="iconfont reco-copyright" data-v-59e6cb88></i> <a data-v-59e6cb88><span data-v-59e6cb88>apan</span>
<span data-v-59e6cb88>2015 - </span>
2025
</a></span></div></div> <div class="hide" data-v-7dd95ae2><header class="navbar" data-v-7dd95ae2><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">潘鑫博客</span></a> <div class="links"><div class="color-picker"><a class="color-button"><i class="iconfont reco-color"></i></a> <div class="color-picker-menu" style="display:none;"><div class="mode-options"><h4 class="title">Choose mode</h4> <ul class="color-mode-options"><li class="dark">dark</li><li class="auto active">auto</li><li class="light">light</li></ul></div></div></div> <div class="search-box"><i class="iconfont reco-search"></i> <input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link"><i class="iconfont reco-home"></i>
首页
</a></div><div class="nav-item"><a href="/tag/code/" class="nav-link"><i class="iconfont reco-api"></i>
编程
</a></div><div class="nav-item"><a href="/about/" class="nav-link"><i class="iconfont reco-account"></i>
关于
</a></div><div class="nav-item"><a href="/timeline/" class="nav-link"><i class="iconfont reco-date"></i>
TimeLine
</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="iconfont reco-github"></i>
github
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="https://gitee.com/pxpy/homeRepair" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
爱居网
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li><li class="dropdown-item"><!----> <a href="https://gitee.com/pxpy/IEMS" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
智慧设备维修系统
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li><li class="dropdown-item"><!----> <a href="https://github.com/pxpy/pxpy.github.io" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
个人博客
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li></ul></div></div> <!----></nav></div></header> <div class="sidebar-mask" data-v-7dd95ae2></div> <aside class="sidebar" data-v-7dd95ae2><div class="personal-info-wrapper" data-v-1fad0c41 data-v-7dd95ae2><img src="/logo.png" alt="author-avatar" class="personal-img" data-v-1fad0c41> <h3 class="name" data-v-1fad0c41>
apan
</h3> <div class="num" data-v-1fad0c41><div data-v-1fad0c41><h3 data-v-1fad0c41>156</h3> <h6 data-v-1fad0c41>Articles</h6></div> <div data-v-1fad0c41><h3 data-v-1fad0c41>89</h3> <h6 data-v-1fad0c41>Tags</h6></div></div> <ul class="social-links" data-v-1fad0c41></ul> <hr data-v-1fad0c41></div> <nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link"><i class="iconfont reco-home"></i>
首页
</a></div><div class="nav-item"><a href="/tag/code/" class="nav-link"><i class="iconfont reco-api"></i>
编程
</a></div><div class="nav-item"><a href="/about/" class="nav-link"><i class="iconfont reco-account"></i>
关于
</a></div><div class="nav-item"><a href="/timeline/" class="nav-link"><i class="iconfont reco-date"></i>
TimeLine
</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title"><i class="iconfont reco-github"></i>
github
</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="https://gitee.com/pxpy/homeRepair" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
爱居网
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li><li class="dropdown-item"><!----> <a href="https://gitee.com/pxpy/IEMS" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
智慧设备维修系统
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li><li class="dropdown-item"><!----> <a href="https://github.com/pxpy/pxpy.github.io" target="_blank" rel="noopener noreferrer" class="nav-link external"><i class="undefined"></i>
个人博客
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li></ul></div></div> <!----></nav> <!----> </aside> <div class="password-shadow password-wrapper-in" style="display:none;" data-v-59e6cb88 data-v-7dd95ae2><h3 class="title" data-v-59e6cb88>Python后端服务FastApi</h3> <!----> <label id="box" class="inputBox" data-v-59e6cb88><input type="password" value="" data-v-59e6cb88> <span data-v-59e6cb88>Konck! Knock!</span> <button data-v-59e6cb88>OK</button></label> <div class="footer" data-v-59e6cb88><span data-v-59e6cb88><i class="iconfont reco-theme" data-v-59e6cb88></i> <a target="blank" href="https://vuepress-theme-reco.recoluan.com" data-v-59e6cb88>vuePress-theme-reco</a></span> <span data-v-59e6cb88><i class="iconfont reco-copyright" data-v-59e6cb88></i> <a data-v-59e6cb88><span data-v-59e6cb88>apan</span>
<span data-v-59e6cb88>2015 - </span>
2025
</a></span></div></div> <div data-v-7dd95ae2><div data-v-7dd95ae2><main class="page"><section style="display:;"><div class="page-title"><h1 class="title">Python后端服务FastApi</h1> <div data-v-8a445198><i class="iconfont reco-account" data-v-8a445198><span data-v-8a445198>apan</span></i> <i class="iconfont reco-date" data-v-8a445198><span data-v-8a445198>2/22/2024</span></i> <i class="iconfont reco-eye" data-v-8a445198><span id="/fastapi.html" data-flag-title="Your Article Title" class="leancloud-visitors" data-v-8a445198><a class="leancloud-visitors-count" style="font-size:.9rem;font-weight:normal;color:#999;"></a></span></i> <i class="tags iconfont reco-tag" data-v-8a445198><span class="tag-item" data-v-8a445198>python</span><span class="tag-item" data-v-8a445198>后端</span></i></div></div> <div class="theme-reco-content content__default"><div class="adswrapper"><!----> <div style="display:none;"></div> <ins data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-3196441204212737" data-ad-slot="7162284157" data-ad-test="" data-ad-region="" class="adsbygoogle" style="display:block;"></ins> <!----> <div style="display:none;"> (adsbygoogle = window.adsbygoogle || []).push({}); </div></div> <h2 id="简介"><a href="#简介" class="header-anchor">#</a> 简介</h2> <p>是python的一个后端服务框架,类似于java的springBoot</p> <p>github星星对比
FastApi
81.2k</p> <p>django
75.8k
flask
65.8k</p> <h2 id="简单示例"><a href="#简单示例" class="header-anchor">#</a> 简单示例</h2> <p>适用于简单项目,复杂项目需要拆分文件,文件夹</p> <div class="language-py line-numbers-mode"><pre class="language-py"><code><span class="token keyword">from</span> typing <span class="token keyword">import</span> Union
<span class="token keyword">from</span> fastapi <span class="token keyword">import</span> FastAPI
app <span class="token operator">=</span> FastAPI<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token decorator annotation punctuation">@app<span class="token punctuation">.</span>get</span><span class="token punctuation">(</span><span class="token string">"/"</span><span class="token punctuation">)</span>
<span class="token keyword">def</span> <span class="token function">read_root</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">return</span> <span class="token punctuation">{</span><span class="token string">"Hello"</span><span class="token punctuation">:</span> <span class="token string">"World"</span><span class="token punctuation">}</span>
<span class="token decorator annotation punctuation">@app<span class="token punctuation">.</span>get</span><span class="token punctuation">(</span><span class="token string">"/items/{item_id}"</span><span class="token punctuation">)</span>
<span class="token keyword">def</span> <span class="token function">read_item</span><span class="token punctuation">(</span>item_id<span class="token punctuation">:</span> <span class="token builtin">int</span><span class="token punctuation">,</span> q<span class="token punctuation">:</span> Union<span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> <span class="token boolean">None</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token boolean">None</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">return</span> <span class="token punctuation">{</span><span class="token string">"item_id"</span><span class="token punctuation">:</span> item_id<span class="token punctuation">,</span> <span class="token string">"q"</span><span class="token punctuation">:</span> q<span class="token punctuation">}</span>
<span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">'__main__'</span><span class="token punctuation">:</span>
<span class="token comment"># 在调试的时候开源加入一个reload=True的参数,正式启动的时候可以去掉</span>
uvicorn<span class="token punctuation">.</span>run<span class="token punctuation">(</span>app<span class="token punctuation">,</span> host<span class="token operator">=</span><span class="token string">"0.0.0.0"</span><span class="token punctuation">,</span> port<span class="token operator">=</span><span class="token number">8080</span><span class="token punctuation">,</span> log_level<span class="token operator">=</span><span class="token string">"info"</span><span class="token punctuation">)</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br></div></div><h2 id="后端服务"><a href="#后端服务" class="header-anchor">#</a> 后端服务</h2> <h2 id="orm"><a href="#orm" class="header-anchor">#</a> ORM</h2> <h2 id="日志"><a href="#日志" class="header-anchor">#</a> 日志</h2> <h2 id="配置"><a href="#配置" class="header-anchor">#</a> 配置</h2> <p>.env文件,密码等安全要求高的使用环境变量</p> <h2 id="依赖"><a href="#依赖" class="header-anchor">#</a> 依赖</h2> <p>在requirements.txt里面配置</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>pip <span class="token function">install</span> <span class="token parameter variable">-r</span> requirements.txt <span class="token parameter variable">-i</span> https://pypi.tuna.tsinghua.edu.cn/simple/
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h2 id="dockerfile"><a href="#dockerfile" class="header-anchor">#</a> dockerfile</h2> <h2 id="并发性能"><a href="#并发性能" class="header-anchor">#</a> 并发性能</h2> <p>如果不配置,超过服务器资源就会报503</p> <p>尤其是慢接口会直线降低接口性能
例如:大模型相关的服务,即使是透传云端API,默认配置吞吐量也就40/min</p> <p>线程数默认40
启动参数说明,如果有类似于springboot的配置文件就好了</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>app:指定应用app,<span class="token string">'脚本名:FastAPI实例对象'</span>、FastAPI实例对象
host: 字符串,允许被访问的形式 locahost、127.0.0.1、当前IP、0.0.0.0,默认为127.0.0.1,
port:数字,应用的端口,默认为8000,
uds:字符串,socket服务绑定到UNIX的域名
fd:数字,从此文件描述符绑定到socket
loop:<span class="token punctuation">[</span>auto<span class="token operator">|</span>asyncio<span class="token operator">|</span>uvloop<span class="token punctuation">]</span>,事件循环模式,默认为auto
http:<span class="token punctuation">[</span>auto<span class="token operator">|</span>h11<span class="token operator">|</span>httptools<span class="token punctuation">]</span>,HTTP协议实现,默认为auto
ws:<span class="token punctuation">[</span>auto<span class="token operator">|</span>none<span class="token operator">|</span>websockets<span class="token operator">|</span>wsproto<span class="token punctuation">]</span>,WebSocket协议实现,默认为auto
ws-max-size:数字,WebSocket最大消息大小(字节),默认值为16777216
lifespan:<span class="token punctuation">[</span>auto<span class="token operator">|</span>on<span class="token operator">|</span>off<span class="token punctuation">]</span>,生命周期实施,默认为auto
env-file:<span class="token environment constant">PATH</span>,环境配置文件
log-config:<span class="token environment constant">PATH</span>,日志配置文件。支持的格式:.ini、.json、.yaml,默认为fastapi默认的log配置
log-level:<span class="token punctuation">[</span>critical<span class="token operator">|</span>error<span class="token operator">|</span>warning<span class="token operator">|</span>info<span class="token operator">|</span>debug<span class="token operator">|</span>trace<span class="token punctuation">]</span>,日志级别,默认info
access-log:boolean,access log日志的开关,默认为True
use-colors:boolean,彩色日志的开关,(前提需指定log-config),默认为None
interface:<span class="token punctuation">[</span>auto<span class="token operator">|</span>asgi3<span class="token operator">|</span>asgi2<span class="token operator">|</span>wsgi<span class="token punctuation">]</span>,选择ASGI3、ASGI2或WSGI作为应用程序接口,默认为auto
debug:是否使用debug模式,默认False,
reload:boolean,当代码发生更时,是否自动重启,默认False,
reload_dirs:字符串,设置重新加载目录,由源码可见,当没有传这个参数的实时,将取当前工作目录
reload-delay:float,每隔多久检测代码是否有变动,默认0.25秒
workers:数字,工作进程数。默认为<span class="token variable">$WEB</span><span class="token punctuation">\</span>U CONCURRENCY环境变量(如果可用),或1。对于--reload无效。
proxy-headers:boolean,启用/禁用X-Forwarded-Proto、X-Forwarded-For、X-Forwarded-Port以填充远程地址信息,默认为True
forwarded-allow-ips:字符串,用逗号分隔的IP列表以信任代理标头。默认为<span class="token variable">$FORWARDED</span><span class="token punctuation">\</span>u ALLOW<span class="token punctuation">\</span>u IPS环境变量(如果可用),或 None,为None时,代码里面则取127.0.0.1
root-path:字符串,为安装在给定URL路径下的应用程序设置ASGI“根路径”。
limit-concurrency:数字,在发出HTTP503响应之前,允许的最大并发连接数或任务数。默认为None
limit-max-requests:数字,达到多少请求数则终止进程,默认为None
backlog:数字,等待处理的最大连接数,默认为2048
timeout-keep-alive:数字,如果在此超时时间内未收到新数据,则关闭保持活动状态的连接,默认为5
ssl-keyfile:字符串,SSL密钥文件,默认为None
ssl-certfile:字符串,SSL证书文件,默认为None
ssl-keyfile-password:字符串,SSL密钥文件密码,默认为None
ssl-version:数字,要使用的SSL版本(详见stdlib SSL模块),默认为2
ssl-cert-reqs:数字,是否需要客户端证书(详见stdlib SSL模块),默认为0
ssl-ca-certs:字符串,CA证书文件
ssl-ciphers:字符串,要使用的CA证书文件密码(详见stdlib SSL模块),默认为TLSv1
header:字典,自定义响应头信息,键值对的形式,默认为None
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">53</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br><span class="line-number">66</span><br><span class="line-number">67</span><br><span class="line-number">68</span><br><span class="line-number">69</span><br><span class="line-number">70</span><br><span class="line-number">71</span><br><span class="line-number">72</span><br></div></div><p>workers 建议配置为CPU核心数*2+1
limit-concurrency,根据服务器性能,超过配置后报503 Service Unavailable</p> <p>启动命令参考</p> <div class="language-sh line-numbers-mode"><pre class="language-sh"><code>uvicorn main:app <span class="token parameter variable">--workers</span> <span class="token number">3</span> --limit-concurrency <span class="token number">200</span> <span class="token parameter variable">--host</span> <span class="token number">0.0</span>.0.0 <span class="token parameter variable">--port</span> <span class="token number">8080</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div></div></section> <footer class="page-edit"><!----> <!----></footer> <!----> <div class="comments-wrapper"><!----></div></main></div> <!----></div> <ul class="sub-sidebar sub-sidebar-wrapper" style="width:12rem;" data-v-b57cc07c data-v-7dd95ae2><li class="level-2" data-v-b57cc07c><a href="/fastapi.html#简介" class="sidebar-link reco-side-简介" data-v-b57cc07c>简介</a></li><li class="level-2" data-v-b57cc07c><a href="/fastapi.html#简单示例" class="sidebar-link reco-side-简单示例" data-v-b57cc07c>简单示例</a></li><li class="level-2" data-v-b57cc07c><a href="/fastapi.html#后端服务" class="sidebar-link reco-side-后端服务" data-v-b57cc07c>后端服务</a></li><li class="level-2" data-v-b57cc07c><a href="/fastapi.html#orm" class="sidebar-link reco-side-orm" data-v-b57cc07c>ORM</a></li><li class="level-2" data-v-b57cc07c><a href="/fastapi.html#日志" class="sidebar-link reco-side-日志" data-v-b57cc07c>日志</a></li><li class="level-2" data-v-b57cc07c><a href="/fastapi.html#配置" class="sidebar-link reco-side-配置" data-v-b57cc07c>配置</a></li><li class="level-2" data-v-b57cc07c><a href="/fastapi.html#依赖" class="sidebar-link reco-side-依赖" data-v-b57cc07c>依赖</a></li><li class="level-2" data-v-b57cc07c><a href="/fastapi.html#dockerfile" class="sidebar-link reco-side-dockerfile" data-v-b57cc07c>dockerfile</a></li><li class="level-2" data-v-b57cc07c><a href="/fastapi.html#并发性能" class="sidebar-link reco-side-并发性能" data-v-b57cc07c>并发性能</a></li></ul></div></div></div><div class="global-ui"><div class="back-to-ceiling" style="right:1rem;bottom:6rem;width:2.5rem;height:2.5rem;border-radius:.25rem;line-height:2.5rem;display:none;" data-v-c6073ba8 data-v-c6073ba8><svg t="1574745035067" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5404" class="icon" data-v-c6073ba8><path d="M526.60727968 10.90185116a27.675 27.675 0 0 0-29.21455937 0c-131.36607665 82.28402758-218.69155461 228.01873535-218.69155402 394.07834331a462.20625001 462.20625001 0 0 0 5.36959153 69.94390903c1.00431239 6.55289093-0.34802892 13.13561351-3.76865779 18.80351572-32.63518765 54.11355614-51.75690182 118.55860487-51.7569018 187.94566865a371.06718723 371.06718723 0 0 0 11.50484808 91.98906777c6.53300375 25.50556257 41.68394495 28.14064038 52.69160883 4.22606766 17.37162448-37.73630017 42.14135425-72.50938081 72.80769204-103.21549295 2.18761121 3.04276886 4.15646224 6.24463696 6.40373557 9.22774369a1871.4375 1871.4375 0 0 0 140.04691725 5.34970492 1866.36093723 1866.36093723 0 0 0 140.04691723-5.34970492c2.24727335-2.98310674 4.21612437-6.18497483 6.3937923-9.2178004 30.66633723 30.70611158 55.4360664 65.4791928 72.80769147 103.21549355 11.00766384 23.91457269 46.15860503 21.27949489 52.69160879-4.22606768a371.15156223 371.15156223 0 0 0 11.514792-91.99901164c0-69.36717486-19.13165746-133.82216804-51.75690182-187.92578088-3.42062944-5.66790279-4.76302748-12.26056868-3.76865837-18.80351632a462.20625001 462.20625001 0 0 0 5.36959269-69.943909c-0.00994388-166.08943902-87.32547796-311.81420293-218.6915546-394.09823051zM605.93803103 357.87693858a93.93749974 93.93749974 0 1 1-187.89594924 6.1e-7 93.93749974 93.93749974 0 0 1 187.89594924-6.1e-7z" p-id="5405" data-v-c6073ba8></path><path d="M429.50777625 765.63860547C429.50777625 803.39355007 466.44236686 1000.39046097 512.00932183 1000.39046097c45.56695499 0 82.4922232-197.00623328 82.5015456-234.7518555 0-37.75494459-36.9345906-68.35043303-82.4922232-68.34111062-45.57627738-0.00932239-82.52019037 30.59548842-82.51086798 68.34111062z" p-id="5406" data-v-c6073ba8></path></svg></div><!----></div></div>
<script src="/assets/js/app.d96da9c0.js" defer></script><script src="/assets/js/3.a612be35.js" defer></script><script src="/assets/js/1.1f6fb7b3.js" defer></script><script src="/assets/js/58.d31d5ed4.js" defer></script><script src="/assets/js/12.cc454a87.js" defer></script><script src="/assets/js/9.0c525a95.js" defer></script>
</body>
</html>