{"id":110,"date":"2026-06-14T09:53:28","date_gmt":"2026-06-14T01:53:28","guid":{"rendered":"https:\/\/www.52runoob.com\/?p=110"},"modified":"2026-06-14T09:53:28","modified_gmt":"2026-06-14T01:53:28","slug":"vs-code-%e5%bc%80%e5%8f%91-fastapi","status":"publish","type":"post","link":"https:\/\/www.52runoob.com\/index.php\/2026\/06\/14\/vs-code-%e5%bc%80%e5%8f%91-fastapi\/","title":{"rendered":"VS Code \u5f00\u53d1 FastAPI"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u5728 VS Code \u4e2d\u5f00\u53d1 FastAPI \u662f\u4e00\u79cd\u6781\u5176\u9ad8\u6548\u7684\u4f53\u9a8c\u3002VS Code \u63d0\u4f9b\u4e86\u9876\u7ea7\u7684 Python \u652f\u6301\u3001\u65e0\u7f1d\u7684\u8c03\u8bd5\u529f\u80fd\u4ee5\u53ca\u4e30\u5bcc\u7684\u751f\u6001\u63d2\u4ef6\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u9762\u6211\u5c06\u4e3a\u4f60\u63d0\u4f9b\u4e00\u4efd<strong>\u4ece\u96f6\u5f00\u59cb\u7684 VS Code + FastAPI \u7ec8\u6781\u914d\u7f6e\u6307\u5357<\/strong>\uff0c\u6db5\u76d6\u73af\u5883\u642d\u5efa\u3001\u8c03\u8bd5\u914d\u7f6e\u3001\u4ee3\u7801\u89c4\u8303\u548c API \u6d4b\u8bd5\uff0c\u5e2e\u4f60\u6253\u9020\u6700\u8212\u9002\u7684\u5f00\u53d1\u5de5\u4f5c\u6d41\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udee0\ufe0f \u7b2c\u4e00\u6b65\uff1a\u9879\u76ee\u521d\u59cb\u5316\u4e0e\u865a\u62df\u73af\u5883<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6c38\u8fdc\u4e0d\u8981\u5728\u5168\u5c40\u73af\u5883\u4e2d\u5f00\u53d1\u3002\u6253\u5f00\u7ec8\u7aef\uff0c\u5728\u4f60\u7684\u9879\u76ee\u76ee\u5f55\u4e0b\u6267\u884c\uff1a<\/p>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><span>11<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\"># 1. \u521b\u5efa\u865a\u62df\u73af\u5883 (\u547d\u540d\u4e3a .venv)\npython -m venv .venv\n\n# 2. \u6fc0\u6d3b\u865a\u62df\u73af\u5883\n# Windows:\n.venv\\Scripts\\activate\n# macOS \/ Linux:\nsource .venv\/bin\/activate\n\n# 3. \u5b89\u88c5\u6838\u5fc3\u4f9d\u8d56\npip install fastapi uvicorn[standard] pydantic<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde9 \u7b2c\u4e8c\u6b65\uff1a\u5b89\u88c5\u5fc5\u5907\u7684 VS Code \u6269\u5c55<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6253\u5f00 VS Code \u7684\u6269\u5c55\u9762\u677f (<code>Ctrl+Shift+X<\/code> \u6216 <code>Cmd+Shift+X<\/code>)\uff0c\u641c\u7d22\u5e76\u5b89\u88c5\u4ee5\u4e0b\u6269\u5c55\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Python<\/strong> (by Microsoft)\uff1a\u6838\u5fc3\u6269\u5c55\uff0c\u63d0\u4f9b\u89e3\u91ca\u5668\u7ba1\u7406\u3001\u8c03\u8bd5\u652f\u6301\u3002<\/li>\n\n\n\n<li><strong>Pylance<\/strong> (by Microsoft)\uff1a\u63d0\u4f9b\u6781\u901f\u7684\u7c7b\u578b\u68c0\u67e5\u3001\u667a\u80fd\u63d0\u793a\u548c\u4ee3\u7801\u8865\u5168\uff08\u901a\u5e38\u5b89\u88c5 Python \u6269\u5c55\u65f6\u4f1a\u81ea\u52a8\u5e26\u4e0a\uff09\u3002<\/li>\n\n\n\n<li><strong>Ruff<\/strong> (by Astral Software)\uff1a\u76ee\u524d\u6700\u5feb\u3001\u6700\u73b0\u4ee3\u7684 Python Linter \u548c\u683c\u5f0f\u5316\u5de5\u5177\uff08\u66ff\u4ee3 Flake8 + Black\uff09\u3002<\/li>\n\n\n\n<li><strong>Thunder Client<\/strong> \u6216 <strong>REST Client<\/strong>\uff1a\u76f4\u63a5\u5728 VS Code \u5185\u6d4b\u8bd5 API\uff0c\u65e0\u9700\u5207\u6362\u5230\u6d4f\u89c8\u5668\u6216 Postman\u3002<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u2699\ufe0f \u7b2c\u4e09\u6b65\uff1a\u5173\u952e\u914d\u7f6e\uff08\u65b0\u624b\u6700\u5bb9\u6613\u5361\u4f4f\u7684\u5730\u65b9\uff09<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. \u9009\u62e9\u6b63\u786e\u7684 Python \u89e3\u91ca\u5668<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u662f\u786e\u4fdd VS Code \u80fd\u8bc6\u522b <code>fastapi<\/code> \u6a21\u5757\u7684\u5173\u952e\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6309\u4e0b <code>Ctrl+Shift+P<\/code> (Windows) \u6216 <code>Cmd+Shift+P<\/code> (macOS) \u6253\u5f00\u547d\u4ee4\u9762\u677f\u3002<\/li>\n\n\n\n<li>\u8f93\u5165\u5e76\u9009\u62e9 <strong><code>Python: Select Interpreter<\/code><\/strong>\u3002<\/li>\n\n\n\n<li>\u5728\u5217\u8868\u4e2d\u9009\u62e9\u4f60\u521a\u624d\u521b\u5efa\u7684\u865a\u62df\u73af\u5883\uff08\u901a\u5e38\u8def\u5f84\u672b\u5c3e\u4f1a\u663e\u793a <code>.venv<\/code> \u6216 <code>venv<\/code>\uff09\u3002<br><em>(\u53f3\u4e0b\u89d2\u7684\u72b6\u6001\u680f\u4e5f\u4f1a\u663e\u793a\u5f53\u524d\u9009\u62e9\u7684 Python \u7248\u672c\uff0c\u70b9\u51fb\u5b83\u4e5f\u53ef\u4ee5\u5feb\u901f\u5207\u6362)<\/em>\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">2. \u914d\u7f6e\u81ea\u52a8\u683c\u5f0f\u5316 (Ruff)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u9879\u76ee\u6839\u76ee\u5f55\u521b\u5efa\u6216\u4fee\u6539 <code>.vscode\/settings.json<\/code> \u6587\u4ef6\uff0c\u8ba9\u4ee3\u7801\u5728\u4fdd\u5b58\u65f6\u81ea\u52a8\u683c\u5f0f\u5316\uff1a<\/p>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">{\n  &quot;[python]&quot;: {\n    &quot;editor.defaultFormatter&quot;: &quot;charliermarsh.ruff&quot;,\n    &quot;editor.formatOnSave&quot;: true,\n    &quot;editor.codeActionsOnSave&quot;: {\n      &quot;source.organizeImports&quot;: &quot;explicit&quot;\n    }\n  },\n  &quot;python.analysis.typeCheckingMode&quot;: &quot;basic&quot;\n}<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udc1b \u7b2c\u56db\u6b65\uff1a\u914d\u7f6e\u4e00\u952e\u8c03\u8bd5 (Debugging)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0d\u8981\u53ea\u7528 <code>print<\/code> \u8c03\u8bd5\uff01VS Code \u7684\u53ef\u89c6\u5316\u8c03\u8bd5\u5668\u662f\u6392\u67e5 FastAPI \u95ee\u9898\u7684\u795e\u5668\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5728\u9879\u76ee\u6839\u76ee\u5f55\u521b\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939 <code>.vscode<\/code>\uff0c\u5e76\u5728\u5176\u4e2d\u65b0\u5efa\u6587\u4ef6 <code>launch.json<\/code>\u3002<\/li>\n\n\n\n<li>\u7c98\u8d34\u4ee5\u4e0b\u914d\u7f6e\uff08\u4e13\u4e3a Uvicorn + FastAPI \u4f18\u5316\uff09\uff1a<\/li>\n<\/ol>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><span>11<\/span><span>12<\/span><span>13<\/span><span>14<\/span><span>15<\/span><span>16<\/span><span>17<\/span><span>18<\/span><span>19<\/span><span>20<\/span><span>21<\/span><span>22<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">{\n  &quot;version&quot;: &quot;0.2.0&quot;,\n  &quot;configurations&quot;: [\n    {\n      &quot;name&quot;: &quot;FastAPI: Debug&quot;,\n      &quot;type&quot;: &quot;debugpy&quot;,\n      &quot;request&quot;: &quot;launch&quot;,\n      &quot;module&quot;: &quot;uvicorn&quot;,\n      &quot;args&quot;: [\n        &quot;main:app&quot;,\n        &quot;--host&quot;, &quot;0.0.0.0&quot;,\n        &quot;--port&quot;, &quot;8000&quot;,\n        &quot;--reload&quot;\n      ],\n      &quot;jinja&quot;: true,\n      &quot;justMyCode&quot;: true,\n      &quot;env&quot;: {\n        &quot;PYTHONPATH&quot;: &quot;${workspaceFolder}&quot;\n      }\n    }\n  ]\n}<\/code><\/pre><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5982\u4f55\u4f7f\u7528<\/strong>\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5728 <code>main.py<\/code> \u7684\u67d0\u884c\u4ee3\u7801\u5de6\u4fa7\u70b9\u51fb\uff0c\u6253\u4e0a\u4e00\u4e2a<strong>\u7ea2\u70b9<\/strong>\uff08\u65ad\u70b9\uff09\u3002<\/li>\n\n\n\n<li>\u6309\u4e0b <code>F5<\/code> \u6216\u70b9\u51fb\u5de6\u4fa7\u6d3b\u52a8\u680f\u7684\u201c\u8fd0\u884c\u548c\u8c03\u8bd5\u201d\u56fe\u6807\uff0c\u9009\u62e9 <code>FastAPI: Debug<\/code>\u3002<\/li>\n\n\n\n<li>\u5f53\u4f60\u5728\u6d4f\u89c8\u5668\u6216\u6d4b\u8bd5\u5de5\u5177\u4e2d\u8bf7\u6c42\u8be5\u63a5\u53e3\u65f6\uff0c\u4ee3\u7801\u4f1a\u5728\u7ea2\u70b9\u5904<strong>\u6682\u505c<\/strong>\uff0c\u4f60\u53ef\u4ee5\u67e5\u770b\u53d8\u91cf\u503c\u3001\u8c03\u7528\u5806\u6808\uff0c\u751a\u81f3\u5b9e\u65f6\u4fee\u6539\u53d8\u91cf\u3002<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddea \u7b2c\u4e94\u6b65\uff1a\u5728 VS Code \u5185\u76f4\u63a5\u6d4b\u8bd5 API<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u65e0\u9700\u79bb\u5f00\u7f16\u8f91\u5668\uff0c\u63a8\u8350\u4f7f\u7528 <strong>REST Client<\/strong> \u6269\u5c55\u6765\u6d4b\u8bd5\u63a5\u53e3\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5728\u9879\u76ee\u6839\u76ee\u5f55\u521b\u5efa\u4e00\u4e2a\u6587\u4ef6 <code>test.http<\/code> (\u540e\u7f00\u5fc5\u987b\u662f <code>.http<\/code>)\u3002<\/li>\n\n\n\n<li>\u5199\u5165\u4ee5\u4e0b\u6d4b\u8bd5\u7528\u4f8b\uff1a<\/li>\n<\/ol>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><span>11<\/span><span>12<\/span><span>13<\/span><span>14<\/span><span>15<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">### 1. \u6d4b\u8bd5\u6839\u8def\u5f84\nGET http:\/\/127.0.0.1:8000\/\n\n### 2. \u6d4b\u8bd5\u5e26\u53c2\u6570\u7684\u8def\u5f84\nGET http:\/\/127.0.0.1:8000\/items\/42?q=hello\n\n### 3. \u6d4b\u8bd5 POST \u8bf7\u6c42 (\u53d1\u9001 JSON)\nPOST http:\/\/127.0.0.1:8000\/users\/\nContent-Type: application\/json\n\n{\n    &quot;username&quot;: &quot;alice&quot;,\n    &quot;email&quot;: &quot;alice@example.com&quot;,\n    &quot;age&quot;: 25\n}<\/code><\/pre><\/div><\/div>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u70b9\u51fb\u6bcf\u6bb5\u8bf7\u6c42\u4e0a\u65b9\u7684 <strong><code>Send Request<\/code><\/strong> \u7eff\u8272\u5c0f\u4e09\u89d2\uff0c\u54cd\u5e94\u7ed3\u679c\u4f1a\u76f4\u63a5\u5728\u53f3\u4fa7\u5206\u5c4f\u663e\u793a\uff0c\u6781\u5176\u9ad8\u6548\uff01<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udca1 \u7b2c\u516d\u6b65\uff1a\u63d0\u5347\u6548\u7387\u7684\u8fdb\u9636\u6280\u5de7<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. \u4f7f\u7528\u4ee3\u7801\u7247\u6bb5 (Snippets)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4f60\u7ecf\u5e38\u5199 FastAPI \u8def\u7531\uff0c\u53ef\u4ee5\u81ea\u5b9a\u4e49\u4ee3\u7801\u7247\u6bb5\u3002<br>\u6253\u5f00\u547d\u4ee4\u9762\u677f -&gt; <code>Preferences: Configure User Snippets<\/code> -&gt; \u9009\u62e9 <code>python.json<\/code>\uff0c\u6dfb\u52a0\uff1a<\/p>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">&quot;FastAPI Router&quot;: {\n  &quot;prefix&quot;: &quot;fapi&quot;,\n  &quot;body&quot;: [\n    &quot;@app.${1|get,post,put,delete|}(\\&quot;\/${2:path}\\&quot;)&quot;,\n    &quot;def ${3:handler_name}():&quot;,\n    &quot;    ${4:return {\\&quot;message\\&quot;: \\&quot;ok\\&quot;}}&quot;,\n    &quot;&quot;\n  ],\n  &quot;description&quot;: &quot;FastAPI route template&quot;\n}<\/code><\/pre><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u73b0\u5728\u5728 Python \u6587\u4ef6\u4e2d\u8f93\u5165 <code>fapi<\/code> \u5e76\u6309 <code>Tab<\/code>\uff0c\u5c31\u80fd\u5feb\u901f\u751f\u6210\u8def\u7531\u6a21\u677f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. \u5229\u7528 Pylance \u7684\u7c7b\u578b\u63d0\u793a<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">FastAPI \u7684\u5f3a\u5927\u4e4b\u5904\u5728\u4e8e\u7c7b\u578b\u63d0\u793a\u3002\u786e\u4fdd\u4f60\u7684 Pydantic \u6a21\u578b\u548c\u51fd\u6570\u53c2\u6570\u90fd\u6709\u660e\u786e\u7684\u7c7b\u578b\u6807\u6ce8\uff0cPylance \u4f1a\u5728\u4f60\u5199\u9519\u7c7b\u578b\u65f6\u7acb\u523b\u753b\u51fa<strong>\u7ea2\u8272\u6ce2\u6d6a\u7ebf<\/strong>\uff0c\u5e76\u5728\u9f20\u6807\u60ac\u505c\u65f6\u663e\u793a\u8be6\u7ec6\u7684\u7c7b\u578b\u4fe1\u606f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. \u6392\u9664\u865a\u62df\u73af\u5883\u6587\u4ef6\u5939<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3a\u4e86\u907f\u514d VS Code \u641c\u7d22\u6216\u7d22\u5f15\u865a\u62df\u73af\u5883\u4e2d\u7684\u6d77\u91cf\u6587\u4ef6\u5bfc\u81f4\u5361\u987f\uff0c\u5728\u9879\u76ee\u6839\u76ee\u5f55\u521b\u5efa <code>.vscode\/settings.json<\/code> \u5e76\u6dfb\u52a0\uff1a<\/p>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">{\n  &quot;files.watcherExclude&quot;: {\n    &quot;**\/.venv\/**&quot;: true\n  },\n  &quot;search.exclude&quot;: {\n    &quot;**\/.venv&quot;: true\n  }\n}<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udea8 \u5e38\u89c1\u907f\u5751\u6307\u5357<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u62a5\u9519 <code>ModuleNotFoundError: No module named 'fastapi'<\/code><\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u539f\u56e0<\/strong>\uff1aVS Code \u7ec8\u7aef\u6216\u8c03\u8bd5\u5668\u4f7f\u7528\u7684\u662f\u7cfb\u7edf\u5168\u5c40 Python\uff0c\u800c\u4e0d\u662f\u4f60\u7684 <code>.venv<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u89e3\u51b3<\/strong>\uff1a\u68c0\u67e5\u53f3\u4e0b\u89d2\u7684 Python \u89e3\u91ca\u5668\u662f\u5426\u9009\u5bf9\u4e86 <code>.venv<\/code>\uff1b\u5982\u679c\u662f\u7ec8\u7aef\u62a5\u9519\uff0c\u8bf7\u786e\u4fdd\u7ec8\u7aef\u63d0\u793a\u7b26\u524d\u6709 <code>(.venv)<\/code>\uff0c\u5982\u679c\u6ca1\u6709\uff0c\u8bf7\u91cd\u65b0\u8fd0\u884c\u6fc0\u6d3b\u547d\u4ee4\u3002<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8c03\u8bd5\u65f6\u65ad\u70b9\u4e0d\u751f\u6548\uff08\u53d8\u6210\u7a7a\u5fc3\u5706\uff09<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u539f\u56e0<\/strong>\uff1a\u4f7f\u7528\u4e86 <code>--reload<\/code> \u53c2\u6570\u65f6\uff0cUvicorn \u4f1a\u542f\u52a8\u591a\u4e2a\u8fdb\u7a0b\uff0c\u8c03\u8bd5\u5668\u53ef\u80fd\u9644\u52a0\u5230\u4e86\u9519\u8bef\u7684\u5b50\u8fdb\u7a0b\u4e0a\u3002<\/li>\n\n\n\n<li><strong>\u89e3\u51b3<\/strong>\uff1a\u5728 <code>launch.json<\/code> \u4e2d\uff0c\u786e\u4fdd\u914d\u7f6e\u6b63\u786e\u3002\u5982\u679c\u4ecd\u6709\u95ee\u9898\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u5728\u5f00\u53d1\u8c03\u8bd5\u65f6\u6682\u65f6\u53bb\u6389 <code>--reload<\/code>\uff0c\u6216\u8005\u4f7f\u7528 <code>justMyCode: false<\/code>\uff08\u4e0d\u63a8\u8350\uff0c\u4f1a\u8fdb\u5165\u7b2c\u4e09\u65b9\u5e93\u6e90\u7801\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7aef\u53e3 8000 \u88ab\u5360\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u89e3\u51b3<\/strong>\uff1a\u5728 <code>launch.json<\/code> \u7684 <code>args<\/code> \u4e2d\u5c06 <code>\"--port\", \"8000\"<\/code> \u6539\u4e3a <code>\"8001\"<\/code>\uff0c\u6216\u8005\u5728\u7ec8\u7aef\u8fd0\u884c <code>lsof -i :8000<\/code> (macOS\/Linux) \/ <code>netstat -ano | findstr :8000<\/code> (Windows) \u6740\u6389\u5360\u7528\u8fdb\u7a0b\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\u6309\u7167\u8fd9\u5957\u914d\u7f6e\uff0c\u4f60\u7684 VS Code \u5c06\u53d8\u6210\u4e00\u4e2a\u4e13\u4e3a FastAPI \u6253\u9020\u7684\u201c\u91cd\u578b\u6b66\u5668\u201d\uff1a\u5199\u4ee3\u7801\u6709\u6781\u901f\u63d0\u793a\uff0c\u4fdd\u5b58\u65f6\u81ea\u52a8\u6392\u7248\uff0c\u6309 F5 \u5373\u53ef\u65ad\u70b9\u8c03\u8bd5\uff0c\u6309\u4e00\u4e2a\u6309\u94ae\u5c31\u80fd\u6d4b\u8bd5 API\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4f60\u5728\u914d\u7f6e\u8fc7\u7a0b\u4e2d\u9047\u5230\u4efb\u4f55\u62a5\u9519\uff08\u6bd4\u5982 <code>launch.json<\/code> \u4e0d\u751f\u6548\uff0c\u6216\u8005\u6269\u5c55\u51b2\u7a81\uff09\uff0c\u968f\u65f6\u628a\u9519\u8bef\u4fe1\u606f\u53d1\u7ed9\u6211\uff0c\u6211\u5e2e\u4f60\u6392\u67e5\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728 VS Code \u4e2d\u5f00\u53d1 FastAPI \u662f\u4e00\u79cd\u6781\u5176\u9ad8\u6548\u7684&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-110","post","type-post","status-publish","format-standard","hentry","category-fastapi-"],"_links":{"self":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/comments?post=110"}],"version-history":[{"count":1,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/110\/revisions"}],"predecessor-version":[{"id":111,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/110\/revisions\/111"}],"wp:attachment":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/media?parent=110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/categories?post=110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/tags?post=110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}