{
    "componentChunkName": "component---node-modules-shenhh-smooth-doc-src-templates-blog-js",
    "path": "/docs/python-fastapi/",
    "result": {"data":{"mdx":{"fields":{"pageType":"blog","title":"如何使用FastAPI [详细Python指南]","description":"探索如何使用FastAPI构建健壮且高性能的Web应用程序。本文档涵盖从基础概念到高级功能、实际应用和最佳实践的方方面面。","editLink":"https://gitlab.corp.youdao.com/DevOPS/apm/docs/edit/master/pages/blogs/docs/python-fastapi.mdx"},"frontmatter":{"date":"2025-11-28T00:00:00.000Z","readTime":"14 min read"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"如何使用FastAPI [详细Python指南]\",\n  \"description\": \"探索如何使用FastAPI构建健壮且高性能的Web应用程序。本文档涵盖从基础概念到高级功能、实际应用和最佳实践的方方面面。\",\n  \"date\": \"2025-11-28T00:00:00.000Z\",\n  \"readTime\": \"14 min read\",\n  \"slug\": \"/docs/python-fastapi/\",\n  \"order\": 2,\n  \"url\": \"https://uptrace.dev/blog/python-fastapi\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"FastAPI Python\\u7ED3\\u5408\\u4E86\\u73B0\\u4EE3Python\\u7279\\u6027\\u4E0E\\u9AD8\\u6027\\u80FDWeb\\u5F00\\u53D1\\u80FD\\u529B\\u3002\\u8FD9\\u4E2A\\u6846\\u67B6\\u56E0\\u5176\\u901F\\u5EA6\\u3001\\u6613\\u7528\\u6027\\u548C\\u5185\\u7F6E\\u7684\\u5F02\\u6B65\\u7F16\\u7A0B\\u652F\\u6301\\u800C\\u8131\\u9896\\u800C\\u51FA\\u3002\\u65E0\\u8BBA\\u60A8\\u662F\\u6784\\u5EFAAPI\\u3001\\u5FAE\\u670D\\u52A1\\u8FD8\\u662F\\u5168\\u6808\\u5E94\\u7528\\u7A0B\\u5E8F,FastAPI\\u90FD\\u63D0\\u4F9B\\u4E86\\u7B80\\u5316\\u5F00\\u53D1\\u6D41\\u7A0B\\u7684\\u5DE5\\u5177\\u3002\\u672C\\u6307\\u5357\\u5C06\\u5F15\\u5BFC\\u60A8\\u4F7F\\u7528FastAPI\\u521B\\u5EFA\\u9AD8\\u6548\\u3001\\u53EF\\u6269\\u5C55\\u4E14\\u6587\\u6863\\u5B8C\\u5584\\u7684Web\\u5E94\\u7528\\u7A0B\\u5E8F,\\u7A81\\u51FA\\u5176\\u4E0E\\u5176\\u4ED6Python Web\\u6846\\u67B6\\u7684\\u533A\\u522B\\u3002\"), mdx(\"h2\", {\n    \"id\": \"什么是fastapi\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E4%BB%80%E4%B9%88%E6%98%AFfastapi\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4EC0\\u4E48\\u662FFastAPI?\"), mdx(\"p\", null, \"FastAPI Python\\u5229\\u7528\\u6807\\u51C6\\u7C7B\\u578B\\u63D0\\u793A\\u6765\\u521B\\u5EFA\\u9AD8\\u6027\\u80FDAPI\\u3002\\u8FD9\\u4E2A\\u4E3APython 3.6\\u53CA\\u4EE5\\u4E0A\\u7248\\u672C\\u6784\\u5EFA\\u7684\\u6846\\u67B6\\u901A\\u8FC7\\u5176\\u76F4\\u89C2\\u7684\\u8BBE\\u8BA1\\u548C\\u5F3A\\u5927\\u7684\\u529F\\u80FD\\u52A0\\u901F\\u5F00\\u53D1\\u3002FastAPI\\u5728\\u751F\\u4EA7\\u73AF\\u5883\\u4E2D\\u8868\\u73B0\\u5353\\u8D8A,\\u80FD\\u591F\\u6709\\u6548\\u5904\\u7406\\u9AD8\\u8D1F\\u8F7D,\\u540C\\u65F6\\u4FDD\\u6301\\u4EE3\\u7801\\u53EF\\u8BFB\\u6027\\u5E76\\u51CF\\u5C11\\u9519\\u8BEF\\u3002\\u5176\\u81EA\\u52A8API\\u6587\\u6863\\u548C\\u9A8C\\u8BC1\\u529F\\u80FD\\u4F7F\\u5176\\u6210\\u4E3A\\u65E2\\u6CE8\\u91CD\\u901F\\u5EA6\\u53C8\\u6CE8\\u91CD\\u8D28\\u91CF\\u7684\\u5F00\\u53D1\\u8005\\u7684\\u7406\\u60F3\\u9009\\u62E9\\u3002\"), mdx(\"h3\", {\n    \"id\": \"为什么选择fastapi\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9fastapi\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4E3A\\u4EC0\\u4E48\\u9009\\u62E9FastAPI?\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u901F\\u5EA6\\u5FEB\"), \":FastAPI\\u662F\\u6700\\u5FEB\\u7684Python\\u6846\\u67B6\\u4E4B\\u4E00,\\u53EF\\u4E0ENodeJS\\u548CGo\\u5AB2\\u7F8E\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u6613\\u4E8E\\u5B66\\u4E60\"), \":\\u5982\\u679C\\u60A8\\u61C2Python,\\u60A8\\u5DF2\\u7ECF\\u6210\\u529F\\u4E86\\u4E00\\u534A\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u5F00\\u53D1\\u5FEB\\u901F\"), \":\\u5C06\\u529F\\u80FD\\u5F00\\u53D1\\u901F\\u5EA6\\u63D0\\u9AD8\\u7EA6200%\\u5230300%\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u51CF\\u5C11\\u9519\\u8BEF\"), \":\\u51CF\\u5C11\\u7EA640%\\u7684\\u4EBA\\u4E3A(\\u5F00\\u53D1\\u8005)\\u5F15\\u8D77\\u7684\\u9519\\u8BEF\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u76F4\\u89C2\"), \":\\u51FA\\u8272\\u7684\\u7F16\\u8F91\\u5668\\u652F\\u6301,\\u5904\\u5904\\u81EA\\u52A8\\u5B8C\\u6210,\\u51CF\\u5C11\\u8C03\\u8BD5\\u65F6\\u95F4\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u7B80\\u5355\"), \":\\u8BBE\\u8BA1\\u6613\\u4E8E\\u4F7F\\u7528\\u548C\\u5B66\\u4E60,\\u51CF\\u5C11\\u9605\\u8BFB\\u6587\\u6863\\u7684\\u65F6\\u95F4\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u4EE3\\u7801\\u7B80\\u6D01\"), \":\\u6700\\u5C0F\\u5316\\u4EE3\\u7801\\u91CD\\u590D,\\u6BCF\\u4E2A\\u53C2\\u6570\\u58F0\\u660E\\u652F\\u6301\\u591A\\u79CD\\u529F\\u80FD\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u7A33\\u5065\"), \":\\u83B7\\u5F97\\u751F\\u4EA7\\u5C31\\u7EEA\\u7684\\u4EE3\\u7801,\\u5E26\\u6709\\u81EA\\u52A8\\u4EA4\\u4E92\\u5F0F\\u6587\\u6863\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u57FA\\u4E8E\\u6807\\u51C6\"), \":\\u57FA\\u4E8E(\\u5E76\\u5B8C\\u5168\\u517C\\u5BB9)API\\u7684\\u5F00\\u653E\\u6807\\u51C6:OpenAPI\\u548CJSON Schema\")), mdx(\"h2\", {\n    \"id\": \"fastapi入门\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#fastapi%E5%85%A5%E9%97%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u5165\\u95E8\"), mdx(\"h3\", {\n    \"id\": \"安装fastapi及其依赖项\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%AE%89%E8%A3%85fastapi%E5%8F%8A%E5%85%B6%E4%BE%9D%E8%B5%96%E9%A1%B9\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5B89\\u88C5FastAPI\\u53CA\\u5176\\u4F9D\\u8D56\\u9879\"), mdx(\"p\", null, \"\\u8981\\u5F00\\u59CB\\u4F7F\\u7528FastAPI,\\u60A8\\u9996\\u5148\\u9700\\u8981\\u5B89\\u88C5\\u5B83\\u53CA\\u5176\\u4F9D\\u8D56\\u9879\\u3002\\u4EE5\\u4E0B\\u662F\\u4F7F\\u7528pip\\u5B89\\u88C5\\u7684\\u65B9\\u6CD5:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"pip install fastapi\\npip install \\\"uvicorn[standard]\\\"\\n\")), mdx(\"p\", null, \"\\u8FD9\\u5C06\\u5B89\\u88C5FastAPI\\u4EE5\\u53CAUvicorn,\\u4E00\\u4E2A\\u6211\\u4EEC\\u5C06\\u7528\\u4E8E\\u8FD0\\u884CFastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\\u7684ASGI\\u670D\\u52A1\\u5668\\u3002\"), mdx(\"h3\", {\n    \"id\": \"设置开发环境\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E8%AE%BE%E7%BD%AE%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u8BBE\\u7F6E\\u5F00\\u53D1\\u73AF\\u5883\"), mdx(\"p\", null, \"\\u4E3A\\u4E86\\u83B7\\u5F97\\u6700\\u4F73\\u5F00\\u53D1\\u4F53\\u9A8C,\\u5EFA\\u8BAE\\u4F7F\\u7528\\u865A\\u62DF\\u73AF\\u5883\\u3002\\u4EE5\\u4E0B\\u662F\\u8BBE\\u7F6E\\u65B9\\u6CD5:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"python -m venv fastapi-env\\nsource fastapi-env/bin/activate  # Windows\\u4E0A\\u4F7F\\u7528 `fastapi-env\\\\Scripts\\\\activate`\\n\")), mdx(\"h3\", {\n    \"id\": \"创建您的第一个fastapi应用程序\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%88%9B%E5%BB%BA%E6%82%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AAfastapi%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u521B\\u5EFA\\u60A8\\u7684\\u7B2C\\u4E00\\u4E2AFastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\"), mdx(\"p\", null, \"\\u8BA9\\u6211\\u4EEC\\u521B\\u5EFA\\u4E00\\u4E2A\\u7B80\\u5355\\u7684\\\"Hello World\\\"\\u793A\\u4F8B\\u6765\\u5F00\\u59CB\\u4F7F\\u7528FastAPI:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u521B\\u5EFA\\u540D\\u4E3A\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"main.py\"), \"\\u7684\\u65B0\\u6587\\u4EF6:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import FastAPI\\n\\napp = FastAPI()\\n\\n@app.get(\\\"/\\\")\\nasync def root():\\n    return {\\\"message\\\": \\\"Hello World\\\"}\\n\")), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u8FD0\\u884C\\u670D\\u52A1\\u5668:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"uvicorn main:app --reload\\n\")), mdx(\"ol\", {\n    \"start\": 3\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6253\\u5F00\\u6D4F\\u89C8\\u5668\\u5E76\\u5BFC\\u822A\\u5230\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"http://127.0.0.1:8000\"), \"\\u3002\\u60A8\\u5E94\\u8BE5\\u770B\\u5230JSON\\u54CD\\u5E94:\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"{\\\"message\\\": \\\"Hello World\\\"}\"), \"\\u3002\")), mdx(\"h2\", {\n    \"id\": \"fastapi基础\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#fastapi%E5%9F%BA%E7%A1%80\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u57FA\\u7840\"), mdx(\"h3\", {\n    \"id\": \"理解python类型提示及fastapi如何使用它们\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E7%90%86%E8%A7%A3python%E7%B1%BB%E5%9E%8B%E6%8F%90%E7%A4%BA%E5%8F%8Afastapi%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%AE%83%E4%BB%AC\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u7406\\u89E3Python\\u7C7B\\u578B\\u63D0\\u793A\\u53CAFastAPI\\u5982\\u4F55\\u4F7F\\u7528\\u5B83\\u4EEC\"), mdx(\"p\", null, \"FastAPI\\u5229\\u7528Python\\u7684\\u7C7B\\u578B\\u63D0\\u793A\\u63D0\\u4F9B\\u81EA\\u52A8\\u6570\\u636E\\u9A8C\\u8BC1\\u3001\\u5E8F\\u5217\\u5316\\u548C\\u6587\\u6863\\u3002\\u4EE5\\u4E0B\\u662F\\u793A\\u4F8B:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import FastAPI\\nfrom pydantic import BaseModel\\n\\napp = FastAPI()\\n\\nclass Item(BaseModel):\\n    name: str\\n    price: float\\n    is_offer: bool = None\\n\\n@app.post(\\\"/items/\\\")\\nasync def create_item(item: Item):\\n    return {\\\"item_name\\\": item.name, \\\"item_price\\\": item.price}\\n\")), mdx(\"h3\", {\n    \"id\": \"fastapi中的请求处理和路由\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#fastapi%E4%B8%AD%E7%9A%84%E8%AF%B7%E6%B1%82%E5%A4%84%E7%90%86%E5%92%8C%E8%B7%AF%E7%94%B1\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u4E2D\\u7684\\u8BF7\\u6C42\\u5904\\u7406\\u548C\\u8DEF\\u7531\"), mdx(\"p\", null, \"FastAPI\\u4F7F\\u5B9A\\u4E49\\u8DEF\\u7531\\u548C\\u5904\\u7406\\u4E0D\\u540CHTTP\\u65B9\\u6CD5\\u53D8\\u5F97\\u7B80\\u5355:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"@app.get(\\\"/items/{item_id}\\\")\\nasync def read_item(item_id: int, q: str = None):\\n    return {\\\"item_id\\\": item_id, \\\"q\\\": q}\\n\")), mdx(\"p\", null, \"\\u8FD9\\u4E2A\\u8DEF\\u7531\\u5904\\u7406\\u5BF9\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"/items/{item_id}\"), \"\\u7684GET\\u8BF7\\u6C42,\\u5176\\u4E2D\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"item_id\"), \"\\u662F\\u8DEF\\u5F84\\u53C2\\u6570,\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"q\"), \"\\u662F\\u53EF\\u9009\\u7684\\u67E5\\u8BE2\\u53C2\\u6570\\u3002\"), mdx(\"h3\", {\n    \"id\": \"路径参数和查询参数\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E8%B7%AF%E5%BE%84%E5%8F%82%E6%95%B0%E5%92%8C%E6%9F%A5%E8%AF%A2%E5%8F%82%E6%95%B0\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u8DEF\\u5F84\\u53C2\\u6570\\u548C\\u67E5\\u8BE2\\u53C2\\u6570\"), mdx(\"p\", null, \"FastAPI\\u5141\\u8BB8\\u60A8\\u8F7B\\u677E\\u4F7F\\u7528\\u8DEF\\u5F84\\u548C\\u67E5\\u8BE2\\u53C2\\u6570:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u8DEF\\u5F84\\u53C2\\u6570\"), \":\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"@app.get(\\\"/users/{user_id}\\\")\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u67E5\\u8BE2\\u53C2\\u6570\"), \":\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"@app.get(\\\"/items/\\\")\"))), mdx(\"p\", null, \"\\u793A\\u4F8B:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"@app.get(\\\"/users/{user_id}/items/\\\")\\nasync def read_user_item(\\n    user_id: int, item_id: str, q: str = None, short: bool = False\\n):\\n    item = {\\\"item_id\\\": item_id, \\\"owner_id\\\": user_id}\\n    if q:\\n        item.update({\\\"q\\\": q})\\n    if not short:\\n        item.update(\\n            {\\\"description\\\": \\\"\\u8FD9\\u662F\\u4E00\\u4E2A\\u6709\\u957F\\u63CF\\u8FF0\\u7684\\u8D85\\u8D5E\\u7269\\u54C1\\\"}\\n        )\\n    return item\\n\")), mdx(\"h3\", {\n    \"id\": \"请求体和数据验证\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E8%AF%B7%E6%B1%82%E4%BD%93%E5%92%8C%E6%95%B0%E6%8D%AE%E9%AA%8C%E8%AF%81\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u8BF7\\u6C42\\u4F53\\u548C\\u6570\\u636E\\u9A8C\\u8BC1\"), mdx(\"p\", null, \"FastAPI\\u4F7F\\u7528Pydantic\\u6A21\\u578B\\u5B9A\\u4E49\\u8BF7\\u6C42\\u548C\\u54CD\\u5E94\\u4F53\\u7684\\u7ED3\\u6784:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import FastAPI\\nfrom pydantic import BaseModel\\n\\napp = FastAPI()\\n\\nclass Item(BaseModel):\\n    name: str\\n    description: str = None\\n    price: float\\n    tax: float = None\\n\\n@app.post(\\\"/items/\\\")\\nasync def create_item(item: Item):\\n    return item\\n\")), mdx(\"h3\", {\n    \"id\": \"响应模型和状态码\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%93%8D%E5%BA%94%E6%A8%A1%E5%9E%8B%E5%92%8C%E7%8A%B6%E6%80%81%E7%A0%81\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u54CD\\u5E94\\u6A21\\u578B\\u548C\\u72B6\\u6001\\u7801\"), mdx(\"p\", null, \"\\u60A8\\u53EF\\u4EE5\\u5728FastAPI\\u4E2D\\u6307\\u5B9A\\u54CD\\u5E94\\u6A21\\u578B\\u548C\\u72B6\\u6001\\u7801:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import FastAPI, status\\nfrom pydantic import BaseModel\\n\\napp = FastAPI()\\n\\nclass Item(BaseModel):\\n    name: str\\n    price: float\\n\\n@app.post(\\\"/items/\\\", response_model=Item, status_code=status.HTTP_201_CREATED)\\nasync def create_item(item: Item):\\n    return item\\n\")), mdx(\"h2\", {\n    \"id\": \"fastapi高级功能\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#fastapi%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u9AD8\\u7EA7\\u529F\\u80FD\"), mdx(\"h3\", {\n    \"id\": \"fastapi中的依赖注入\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#fastapi%E4%B8%AD%E7%9A%84%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u4E2D\\u7684\\u4F9D\\u8D56\\u6CE8\\u5165\"), mdx(\"p\", null, \"FastAPI\\u7684\\u4F9D\\u8D56\\u6CE8\\u5165\\u7CFB\\u7EDF\\u5141\\u8BB8\\u60A8\\u8F7B\\u677E\\u7BA1\\u7406\\u591A\\u4E2A\\u8DEF\\u7531\\u5904\\u7406\\u7A0B\\u5E8F\\u4E4B\\u95F4\\u7684\\u5171\\u4EAB\\u903B\\u8F91:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import Depends, FastAPI\\n\\napp = FastAPI()\\n\\nasync def common_parameters(q: str = None, skip: int = 0, limit: int = 100):\\n    return {\\\"q\\\": q, \\\"skip\\\": skip, \\\"limit\\\": limit}\\n\\n@app.get(\\\"/items/\\\")\\nasync def read_items(commons: dict = Depends(common_parameters)):\\n    return {\\\"message\\\": \\\"\\u8BFB\\u53D6\\u7269\\u54C1\\\", \\\"params\\\": commons}\\n\\n@app.get(\\\"/users/\\\")\\nasync def read_users(commons: dict = Depends(common_parameters)):\\n    return {\\\"message\\\": \\\"\\u8BFB\\u53D6\\u7528\\u6237\\\", \\\"params\\\": commons}\\n\")), mdx(\"h3\", {\n    \"id\": \"安全性和身份验证\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%AE%89%E5%85%A8%E6%80%A7%E5%92%8C%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5B89\\u5168\\u6027\\u548C\\u8EAB\\u4EFD\\u9A8C\\u8BC1\"), mdx(\"p\", null, \"FastAPI\\u4E3A\\u5404\\u79CD\\u5B89\\u5168\\u548C\\u8EAB\\u4EFD\\u9A8C\\u8BC1\\u65B9\\u6CD5\\u63D0\\u4F9B\\u5185\\u7F6E\\u652F\\u6301\\u3002\\u4EE5\\u4E0B\\u662F\\u4F7F\\u7528OAuth2\\u548CJWT\\u4EE4\\u724C\\u7684\\u793A\\u4F8B:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import Depends, FastAPI, HTTPException, status\\nfrom fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm\\nfrom jose import JWTError, jwt\\nfrom passlib.context import CryptContext\\nfrom pydantic import BaseModel\\n\\noauth2_scheme = OAuth2PasswordBearer(tokenUrl=\\\"token\\\")\\n\\napp = FastAPI()\\n\\n@app.post(\\\"/token\\\")\\nasync def login(form_data: OAuth2PasswordRequestForm = Depends()):\\n    user = authenticate_user(form_data.username, form_data.password)\\n    if not user:\\n        raise HTTPException(status_code=400, detail=\\\"\\u7528\\u6237\\u540D\\u6216\\u5BC6\\u7801\\u9519\\u8BEF\\\")\\n    access_token = create_access_token(data={\\\"sub\\\": user.username})\\n    return {\\\"access_token\\\": access_token, \\\"token_type\\\": \\\"bearer\\\"}\\n\\n@app.get(\\\"/users/me\\\")\\nasync def read_users_me(current_user: User = Depends(get_current_user)):\\n    return current_user\\n\")), mdx(\"h3\", {\n    \"id\": \"后台任务和异步操作\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%90%8E%E5%8F%B0%E4%BB%BB%E5%8A%A1%E5%92%8C%E5%BC%82%E6%AD%A5%E6%93%8D%E4%BD%9C\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u540E\\u53F0\\u4EFB\\u52A1\\u548C\\u5F02\\u6B65\\u64CD\\u4F5C\"), mdx(\"p\", null, \"FastAPI\\u5F00\\u7BB1\\u5373\\u7528\\u5730\\u652F\\u6301\\u540E\\u53F0\\u4EFB\\u52A1\\u548C\\u5F02\\u6B65\\u64CD\\u4F5C:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import BackgroundTasks, FastAPI\\n\\napp = FastAPI()\\n\\ndef write_notification(email: str, message=\\\"\\\"):\\n    with open(\\\"log.txt\\\", mode=\\\"w\\\") as email_file:\\n        content = f\\\"\\u53D1\\u9001\\u7ED9 {email} \\u7684\\u901A\\u77E5: {message}\\\"\\n        email_file.write(content)\\n\\n@app.post(\\\"/send-notification/{email}\\\")\\nasync def send_notification(email: str, background_tasks: BackgroundTasks):\\n    background_tasks.add_task(write_notification, email, message=\\\"\\u67D0\\u4E9B\\u901A\\u77E5\\\")\\n    return {\\\"message\\\": \\\"\\u901A\\u77E5\\u5728\\u540E\\u53F0\\u53D1\\u9001\\\"}\\n\")), mdx(\"h3\", {\n    \"id\": \"fastapi中的websocket支持\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#fastapi%E4%B8%AD%E7%9A%84websocket%E6%94%AF%E6%8C%81\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u4E2D\\u7684WebSocket\\u652F\\u6301\"), mdx(\"p\", null, \"FastAPI\\u8FD8\\u63D0\\u4F9BWebSocket\\u652F\\u6301:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import FastAPI, WebSocket\\nfrom fastapi.responses import HTMLResponse\\n\\napp = FastAPI()\\n\\nhtml = \\\"\\\"\\\"\\n<!DOCTYPE html>\\n<html>\\n    <head>\\n        <title>\\u804A\\u5929</title>\\n    </head>\\n    <body>\\n        <h1>WebSocket\\u804A\\u5929</h1>\\n        <form action=\\\"\\\" onsubmit=\\\"sendMessage(event)\\\">\\n            <input type=\\\"text\\\" id=\\\"messageText\\\" autocomplete=\\\"off\\\"/>\\n            <button>\\u53D1\\u9001</button>\\n        </form>\\n        <ul id='messages'>\\n        </ul>\\n        <script>\\n            var ws = new WebSocket(\\\"ws://localhost:8000/ws\\\");\\n            ws.onmessage = function(event) {\\n                var messages = document.getElementById('messages')\\n                var message = document.createElement('li')\\n                var content = document.createTextNode(event.data)\\n                message.appendChild(content)\\n                messages.appendChild(message)\\n            };\\n            function sendMessage(event) {\\n                var input = document.getElementById(\\\"messageText\\\")\\n                ws.send(input.value)\\n                input.value = ''\\n                event.preventDefault()\\n            }\\n        </script>\\n    </body>\\n</html>\\n\\\"\\\"\\\"\\n\\n@app.get(\\\"/\\\")\\nasync def get():\\n    return HTMLResponse(html)\\n\\n@app.websocket(\\\"/ws\\\")\\nasync def websocket_endpoint(websocket: WebSocket):\\n    await websocket.accept()\\n    while True:\\n        data = await websocket.receive_text()\\n        await websocket.send_text(f\\\"\\u6D88\\u606F\\u6587\\u672C\\u662F: {data}\\\")\\n\")), mdx(\"h3\", {\n    \"id\": \"使用opentelemetry进行监控和跟踪\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8opentelemetry%E8%BF%9B%E8%A1%8C%E7%9B%91%E6%8E%A7%E5%92%8C%E8%B7%9F%E8%B8%AA\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4F7F\\u7528OpenTelemetry\\u8FDB\\u884C\\u76D1\\u63A7\\u548C\\u8DDF\\u8E2A\"), mdx(\"p\", null, \"FastAPI\\u53EF\\u4EE5\\u8F7B\\u677E\\u4E0EOpenTelemetry\\u96C6\\u6210\\u4EE5\\u8FDB\\u884C\\u5168\\u9762\\u7684\\u76D1\\u63A7\\u548C\\u8DDF\\u8E2A\\u3002\\u8FD9\\u53EF\\u4EE5\\u663E\\u8457\\u589E\\u5F3A\\u60A8\\u7406\\u89E3\\u548C\\u4F18\\u5316\\u5E94\\u7528\\u7A0B\\u5E8F\\u6027\\u80FD\\u7684\\u80FD\\u529B\\u3002\"), mdx(\"p\", null, \"\\u8981\\u5728FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\\u4E2D\\u5F00\\u59CB\\u4F7F\\u7528OpenTelemetry:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5B89\\u88C5\\u5FC5\\u8981\\u7684\\u5305:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"pip install opentelemetry-api opentelemetry-sdk opentelemetry-instrumentation-fastapi\\n\")), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u63D2\\u6869\\u60A8\\u7684FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import FastAPI\\nfrom opentelemetry.instrumentation.fastapi import FastAPIInstrumentor\\n\\napp = FastAPI()\\n\\nFastAPIInstrumentor.instrument_app(app)\\n\\n@app.get(\\\"/\\\")\\nasync def root():\\n    return {\\\"message\\\": \\\"Hello World\\\"}\\n\")), mdx(\"h2\", {\n    \"id\": \"fastapi与数据库集成\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#fastapi%E4%B8%8E%E6%95%B0%E6%8D%AE%E5%BA%93%E9%9B%86%E6%88%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u4E0E\\u6570\\u636E\\u5E93\\u96C6\\u6210\"), mdx(\"h3\", {\n    \"id\": \"在fastapi中使用sqlalchemy\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%9C%A8fastapi%E4%B8%AD%E4%BD%BF%E7%94%A8sqlalchemy\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5728FastAPI\\u4E2D\\u4F7F\\u7528SQLAlchemy\"), mdx(\"p\", null, \"FastAPI\\u4E0ESQLAlchemy\\u914D\\u5408\\u826F\\u597D\\u8FDB\\u884C\\u6570\\u636E\\u5E93\\u64CD\\u4F5C\\u3002\\u4EE5\\u4E0B\\u662F\\u57FA\\u672C\\u793A\\u4F8B:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import Depends, FastAPI, HTTPException\\nfrom sqlalchemy import create_engine, Column, Integer, String\\nfrom sqlalchemy.ext.declarative import declarative_base\\nfrom sqlalchemy.orm import sessionmaker, Session\\n\\nSQLALCHEMY_DATABASE_URL = \\\"sqlite:///./test.db\\\"\\n\\nengine = create_engine(SQLALCHEMY_DATABASE_URL)\\nSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)\\n\\nBase = declarative_base()\\n\\nclass User(Base):\\n    __tablename__ = \\\"users\\\"\\n    \\n    id = Column(Integer, primary_key=True, index=True)\\n    email = Column(String, unique=True, index=True)\\n    hashed_password = Column(String)\\n    is_active = Column(Boolean, default=True)\\n\\nBase.metadata.create_all(bind=engine)\\n\\napp = FastAPI()\\n\\ndef get_db():\\n    db = SessionLocal()\\n    try:\\n        yield db\\n    finally:\\n        db.close()\\n\\n@app.post(\\\"/users/\\\", response_model=schemas.User)\\ndef create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):\\n    db_user = crud.get_user_by_email(db, email=user.email)\\n    if db_user:\\n        raise HTTPException(status_code=400, detail=\\\"\\u90AE\\u7BB1\\u5DF2\\u6CE8\\u518C\\\")\\n    return crud.create_user(db=db, user=user)\\n\")), mdx(\"h2\", {\n    \"id\": \"测试fastapi应用程序\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E6%B5%8B%E8%AF%95fastapi%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6D4B\\u8BD5FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\"), mdx(\"h3\", {\n    \"id\": \"使用pytest进行单元测试\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8pytest%E8%BF%9B%E8%A1%8C%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4F7F\\u7528pytest\\u8FDB\\u884C\\u5355\\u5143\\u6D4B\\u8BD5\"), mdx(\"p\", null, \"FastAPI\\u4E0Epytest\\u65E0\\u7F1D\\u914D\\u5408\\u8FDB\\u884C\\u6D4B\\u8BD5\\u3002\\u4EE5\\u4E0B\\u662F\\u6D4B\\u8BD5\\u7528\\u4F8B\\u793A\\u4F8B:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi.testclient import TestClient\\nfrom main import app\\n\\nclient = TestClient(app)\\n\\ndef test_read_main():\\n    response = client.get(\\\"/\\\")\\n    assert response.status_code == 200\\n    assert response.json() == {\\\"message\\\": \\\"Hello World\\\"}\\n\\ndef test_create_item():\\n    response = client.post(\\n        \\\"/items/\\\",\\n        json={\\\"name\\\": \\\"Foo\\\", \\\"price\\\": 42.0},\\n    )\\n    assert response.status_code == 200\\n    assert response.json() == {\\n        \\\"name\\\": \\\"Foo\\\",\\n        \\\"price\\\": 42.0,\\n        \\\"is_offer\\\": None,\\n    }\\n\")), mdx(\"p\", null, \"\\u8981\\u8FD0\\u884C\\u8FD9\\u4E9B\\u6D4B\\u8BD5,\\u53EA\\u9700\\u5728\\u7EC8\\u7AEF\\u4E2D\\u4F7F\\u7528\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"pytest\"), \"\\u547D\\u4EE4\\u3002\"), mdx(\"h2\", {\n    \"id\": \"fastapi性能优化\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#fastapi%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u6027\\u80FD\\u4F18\\u5316\"), mdx(\"h3\", {\n    \"id\": \"使用async和await提高并发性\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8async%E5%92%8Cawait%E6%8F%90%E9%AB%98%E5%B9%B6%E5%8F%91%E6%80%A7\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4F7F\\u7528async\\u548Cawait\\u63D0\\u9AD8\\u5E76\\u53D1\\u6027\"), mdx(\"p\", null, \"FastAPI\\u6784\\u5EFA\\u5728Starlette\\u4E4B\\u4E0A,\\u5141\\u8BB8\\u5F02\\u6B65\\u8BF7\\u6C42\\u5904\\u7406:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"@app.get(\\\"/items/{item_id}\\\")\\nasync def read_item(item_id: str):\\n    result = await some_async_operation(item_id)\\n    return result\\n\")), mdx(\"p\", null, \"\\u8FD9\\u4F7F\\u60A8\\u7684\\u5E94\\u7528\\u7A0B\\u5E8F\\u80FD\\u591F\\u6709\\u6548\\u5904\\u7406\\u8BB8\\u591A\\u5E76\\u53D1\\u8BF7\\u6C42\\u3002\"), mdx(\"h2\", {\n    \"id\": \"记录fastapi应用程序\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E8%AE%B0%E5%BD%95fastapi%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u8BB0\\u5F55FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\"), mdx(\"h3\", {\n    \"id\": \"使用swagger-ui自动生成api文档\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8swagger-ui%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4F7F\\u7528Swagger UI\\u81EA\\u52A8\\u751F\\u6210API\\u6587\\u6863\"), mdx(\"p\", null, \"FastAPI Python\\u901A\\u8FC7\\u5176\\u5185\\u7F6E\\u7684Swagger UI\\u9769\\u65B0\\u4E86API\\u6587\\u6863\\u3002\\u53EF\\u5728'/docs'\\u7AEF\\u70B9\\u8BBF\\u95EE,\\u8FD9\\u4E2A\\u4EA4\\u4E92\\u5F0F\\u754C\\u9762\\u81EA\\u52A8\\u4E3A\\u60A8\\u7684API\\u751F\\u6210\\u5168\\u9762\\u7684\\u6587\\u6863\\u3002\\u5F00\\u53D1\\u4EBA\\u5458\\u53EF\\u4EE5\\u63A2\\u7D22\\u7AEF\\u70B9\\u3001\\u4F7F\\u7528\\u4E0D\\u540C\\u53C2\\u6570\\u6D4B\\u8BD5\\u8BF7\\u6C42,\\u5E76\\u5B9E\\u65F6\\u67E5\\u770B\\u54CD\\u5E94\\u6A21\\u578B\\u3002\\u6B64\\u529F\\u80FD\\u4E0D\\u4EC5\\u52A0\\u901F\\u5F00\\u53D1\\u548C\\u6D4B\\u8BD5,\\u800C\\u4E14\\u4F5C\\u4E3A\\u6D3B\\u6587\\u6863,\\u59CB\\u7EC8\\u4E0E\\u60A8\\u7684\\u4EE3\\u7801\\u540C\\u6B65\\u3002FastAPI\\u4E2D\\u7684Swagger UI\\u7B80\\u5316\\u4E86\\u5185\\u90E8\\u56E2\\u961F\\u548C\\u5916\\u90E8\\u5F00\\u53D1\\u4EBA\\u5458\\u7684API\\u4F7F\\u7528,\\u589E\\u5F3A\\u4E86\\u534F\\u4F5C\\u5E76\\u51CF\\u5C11\\u4E86\\u96C6\\u6210\\u65F6\\u95F4\\u3002\"), mdx(\"h2\", {\n    \"id\": \"部署fastapi应用程序\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E9%83%A8%E7%BD%B2fastapi%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u90E8\\u7F72FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\"), mdx(\"h3\", {\n    \"id\": \"使用docker容器化fastapi应用\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8docker%E5%AE%B9%E5%99%A8%E5%8C%96fastapi%E5%BA%94%E7%94%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4F7F\\u7528Docker\\u5BB9\\u5668\\u5316FastAPI\\u5E94\\u7528\"), mdx(\"p\", null, \"\\u4EE5\\u4E0B\\u662FFastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\\u7684\\u7B80\\u5355Dockerfile:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-dockerfile\"\n  }, \"FROM python:3.9\\nWORKDIR /code\\n\\nCOPY ./requirements.txt /code/requirements.txt\\n\\nRUN pip install --no-cache-dir --upgrade -r /code/requirements.txt\\n\\nCOPY ./app /code/app\\n\\nCMD [\\\"uvicorn\\\", \\\"app.main:app\\\", \\\"--host\\\", \\\"0.0.0.0\\\", \\\"--port\\\", \\\"80\\\"]\\n\")), mdx(\"p\", null, \"\\u6784\\u5EFA\\u548C\\u8FD0\\u884CDocker\\u5BB9\\u5668:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"docker build -t myapp .\\ndocker run -d --name mycontainer -p 80:80 myapp\\n\")), mdx(\"h2\", {\n    \"id\": \"fastapi最佳实践和设计模式\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#fastapi%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%E5%92%8C%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u6700\\u4F73\\u5B9E\\u8DF5\\u548C\\u8BBE\\u8BA1\\u6A21\\u5F0F\"), mdx(\"h3\", {\n    \"id\": \"可扩展fastapi应用程序的项目结构\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%8F%AF%E6%89%A9%E5%B1%95fastapi%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u53EF\\u6269\\u5C55FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\\u7684\\u9879\\u76EE\\u7ED3\\u6784\"), mdx(\"p\", null, \"FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\\u7684\\u63A8\\u8350\\u9879\\u76EE\\u7ED3\\u6784:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"\\u251C\\u2500\\u2500 app\\n\\u2502   \\u251C\\u2500\\u2500 __init__.py\\n\\u2502   \\u251C\\u2500\\u2500 main.py\\n\\u2502   \\u251C\\u2500\\u2500 dependencies.py\\n\\u2502   \\u251C\\u2500\\u2500 routers\\n\\u2502   \\u2502   \\u251C\\u2500\\u2500 __init__.py\\n\\u2502   \\u2502   \\u251C\\u2500\\u2500 items.py\\n\\u2502   \\u2502   \\u2514\\u2500\\u2500 users.py\\n\\u2502   \\u251C\\u2500\\u2500 internal\\n\\u2502   \\u2502   \\u251C\\u2500\\u2500 __init__.py\\n\\u2502   \\u2502   \\u2514\\u2500\\u2500 admin.py\\n\\u2502   \\u251C\\u2500\\u2500 schemas\\n\\u2502   \\u2502   \\u251C\\u2500\\u2500 __init__.py\\n\\u2502   \\u2502   \\u251C\\u2500\\u2500 item.py\\n\\u2502   \\u2502   \\u2514\\u2500\\u2500 user.py\\n\\u2502   \\u2514\\u2500\\u2500 crud\\n\\u2502       \\u251C\\u2500\\u2500 __init__.py\\n\\u2502       \\u251C\\u2500\\u2500 base.py\\n\\u2502       \\u251C\\u2500\\u2500 item.py\\n\\u2502       \\u2514\\u2500\\u2500 user.py\\n\\u251C\\u2500\\u2500 tests\\n\\u2502   \\u251C\\u2500\\u2500 __init__.py\\n\\u2502   \\u251C\\u2500\\u2500 test_main.py\\n\\u2502   \\u251C\\u2500\\u2500 test_items.py\\n\\u2502   \\u2514\\u2500\\u2500 test_users.py\\n\")), mdx(\"h3\", {\n    \"id\": \"错误处理和自定义异常类\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86%E5%92%8C%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BC%82%E5%B8%B8%E7%B1%BB\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u9519\\u8BEF\\u5904\\u7406\\u548C\\u81EA\\u5B9A\\u4E49\\u5F02\\u5E38\\u7C7B\"), mdx(\"p\", null, \"FastAPI\\u5141\\u8BB8\\u60A8\\u521B\\u5EFA\\u81EA\\u5B9A\\u4E49\\u5F02\\u5E38\\u5904\\u7406\\u7A0B\\u5E8F,\\u4EE5\\u66F4\\u7CBE\\u7EC6\\u5730\\u63A7\\u5236\\u9519\\u8BEF\\u54CD\\u5E94:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import FastAPI, Request, status\\nfrom fastapi.responses import JSONResponse\\n\\napp = FastAPI()\\n\\nclass UnicornException(Exception):\\n    def __init__(self, name: str):\\n        self.name = name\\n\\n@app.exception_handler(UnicornException)\\nasync def unicorn_exception_handler(request: Request, exc: UnicornException):\\n    return JSONResponse(\\n        status_code=418,\\n        content={\\\"message\\\": f\\\"\\u54CE\\u5440! {exc.name} \\u505A\\u4E86\\u4E9B\\u4EC0\\u4E48\\u3002\\u5F69\\u8679\\u6765\\u4E86...\\\"},\\n    )\\n\\n@app.get(\\\"/unicorns/{name}\\\")\\nasync def read_unicorn(name: str):\\n    if name == \\\"yolo\\\":\\n        raise UnicornException(name=name)\\n    return {\\\"unicorn_name\\\": name}\\n\")), mdx(\"h3\", {\n    \"id\": \"fastapi中的中间件实现\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#fastapi%E4%B8%AD%E7%9A%84%E4%B8%AD%E9%97%B4%E4%BB%B6%E5%AE%9E%E7%8E%B0\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u4E2D\\u7684\\u4E2D\\u95F4\\u4EF6\\u5B9E\\u73B0\"), mdx(\"p\", null, \"\\u4E2D\\u95F4\\u4EF6\\u5141\\u8BB8\\u60A8\\u5411FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\\u6DFB\\u52A0\\u81EA\\u5B9A\\u4E49\\u529F\\u80FD\\u3002\\u4EE5\\u4E0B\\u662F\\u4E3A\\u6BCF\\u4E2A\\u54CD\\u5E94\\u6DFB\\u52A0\\u81EA\\u5B9A\\u4E49\\u6807\\u5934\\u7684\\u7B80\\u5355\\u4E2D\\u95F4\\u4EF6\\u793A\\u4F8B:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import FastAPI\\nfrom starlette.middleware.base import BaseHTTPMiddleware\\nfrom starlette.responses import Response\\n\\napp = FastAPI()\\n\\nclass AddCustomHeaderMiddleware(BaseHTTPMiddleware):\\n    async def dispatch(self, request, call_next):\\n        response = await call_next(request)\\n        response.headers[\\\"X-Custom-Header\\\"] = \\\"\\u67D0\\u4E2A\\u503C\\\"\\n        return response\\n\\napp.add_middleware(AddCustomHeaderMiddleware)\\n\\n@app.get(\\\"/\\\")\\nasync def root():\\n    return {\\\"message\\\": \\\"Hello World\\\"}\\n\")), mdx(\"h2\", {\n    \"id\": \"fastapi生态系统和扩展\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#fastapi%E7%94%9F%E6%80%81%E7%B3%BB%E7%BB%9F%E5%92%8C%E6%89%A9%E5%B1%95\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u751F\\u6001\\u7CFB\\u7EDF\\u548C\\u6269\\u5C55\"), mdx(\"h3\", {\n    \"id\": \"流行的fastapi扩展和库\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%B5%81%E8%A1%8C%E7%9A%84fastapi%E6%89%A9%E5%B1%95%E5%92%8C%E5%BA%93\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6D41\\u884C\\u7684FastAPI\\u6269\\u5C55\\u548C\\u5E93\"), mdx(\"p\", null, \"FastAPI\\u62E5\\u6709\\u4E0D\\u65AD\\u589E\\u957F\\u7684\\u6269\\u5C55\\u548C\\u5E93\\u751F\\u6001\\u7CFB\\u7EDF\\u3002\\u4EE5\\u4E0B\\u662F\\u4E00\\u4E9B\\u6D41\\u884C\\u7684:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"FastAPI Users\"), \":\\u4E3AFastAPI\\u63D0\\u4F9B\\u5373\\u7528\\u4E14\\u53EF\\u81EA\\u5B9A\\u4E49\\u7684\\u7528\\u6237\\u7BA1\\u7406\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"FastAPI SQL Database\"), \":\\u4F7F\\u7528SQLAlchemy\\u7B80\\u5316\\u6570\\u636E\\u5E93\\u64CD\\u4F5C\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"FastAPI Cache\"), \":\\u4E3AFastAPI\\u7AEF\\u70B9\\u6DFB\\u52A0\\u7F13\\u5B58\\u652F\\u6301\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"FastAPI CORS\"), \":\\u5904\\u7406FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\\u7684\\u8DE8\\u57DF\\u8D44\\u6E90\\u5171\\u4EAB(CORS)\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"FastAPI Limiter\"), \":\\u4E3AFastAPI\\u8DEF\\u7531\\u6DFB\\u52A0\\u901F\\u7387\\u9650\\u5236\")), mdx(\"h3\", {\n    \"id\": \"将fastapi与其他python框架集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%B0%86fastapi%E4%B8%8E%E5%85%B6%E4%BB%96python%E6%A1%86%E6%9E%B6%E9%9B%86%E6%88%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5C06FastAPI\\u4E0E\\u5176\\u4ED6Python\\u6846\\u67B6\\u96C6\\u6210\"), mdx(\"p\", null, \"FastAPI\\u53EF\\u4EE5\\u4E0E\\u5176\\u4ED6Python\\u6846\\u67B6\\u548C\\u5E93\\u96C6\\u6210\\u3002\\u4F8B\\u5982,\\u60A8\\u53EF\\u4EE5\\u5C06FastAPI\\u4E0ECelery\\u7528\\u4E8E\\u4EFB\\u52A1\\u961F\\u5217:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import FastAPI\\nfrom celery import Celery\\n\\napp = FastAPI()\\ncelery = Celery(\\\"tasks\\\", broker=\\\"redis://localhost:6379\\\")\\n\\n@celery.task\\ndef add_numbers(x, y):\\n    return x + y\\n\\n@app.get(\\\"/add/{x}/{y}\\\")\\nasync def add(x: int, y: int):\\n    result = add_numbers.delay(x, y)\\n    return {\\\"task_id\\\": result.id}\\n\")), mdx(\"h2\", {\n    \"id\": \"真实世界的fastapi用例\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E7%9C%9F%E5%AE%9E%E4%B8%96%E7%95%8C%E7%9A%84fastapi%E7%94%A8%E4%BE%8B\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u771F\\u5B9E\\u4E16\\u754C\\u7684FastAPI\\u7528\\u4F8B\"), mdx(\"h3\", {\n    \"id\": \"使用fastapi构建restful-api\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8fastapi%E6%9E%84%E5%BB%BArestful-api\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4F7F\\u7528FastAPI\\u6784\\u5EFARESTful API\"), mdx(\"p\", null, \"FastAPI\\u975E\\u5E38\\u9002\\u5408\\u6784\\u5EFARESTful API\\u3002\\u4EE5\\u4E0B\\u662F\\u5F85\\u529E\\u4E8B\\u9879\\u5217\\u8868\\u7684\\u7B80\\u5355CRUD(\\u521B\\u5EFA\\u3001\\u8BFB\\u53D6\\u3001\\u66F4\\u65B0\\u3001\\u5220\\u9664)API\\u793A\\u4F8B:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from fastapi import FastAPI, HTTPException\\nfrom pydantic import BaseModel\\nfrom typing import List, Optional\\n\\napp = FastAPI()\\n\\nclass Todo(BaseModel):\\n    id: Optional[int] = None\\n    item: str\\n    completed: bool = False\\n\\ntodos = []\\n\\n@app.post(\\\"/todos/\\\", response_model=Todo)\\nasync def create_todo(todo: Todo):\\n    todo.id = len(todos) + 1\\n    todos.append(todo)\\n    return todo\\n\\n@app.get(\\\"/todos/\\\", response_model=List[Todo])\\nasync def read_todos():\\n    return todos\\n\\n@app.get(\\\"/todos/{todo_id}\\\", response_model=Todo)\\nasync def read_todo(todo_id: int):\\n    try:\\n        return next(todo for todo in todos if todo.id == todo_id)\\n    except StopIteration:\\n        raise HTTPException(status_code=404, detail=\\\"\\u672A\\u627E\\u5230\\u5F85\\u529E\\u4E8B\\u9879\\\")\\n\\n@app.put(\\\"/todos/{todo_id}\\\", response_model=Todo)\\nasync def update_todo(todo_id: int, todo: Todo):\\n    for i, t in enumerate(todos):\\n        if t.id == todo_id:\\n            todo.id = todo_id\\n            todos[i] = todo\\n            return todo\\n    raise HTTPException(status_code=404, detail=\\\"\\u672A\\u627E\\u5230\\u5F85\\u529E\\u4E8B\\u9879\\\")\\n\\n@app.delete(\\\"/todos/{todo_id}\\\")\\nasync def delete_todo(todo_id: int):\\n    for i, todo in enumerate(todos):\\n        if todo.id == todo_id:\\n            del todos[i]\\n            return {\\\"message\\\": \\\"\\u5F85\\u529E\\u4E8B\\u9879\\u5220\\u9664\\u6210\\u529F\\\"}\\n    raise HTTPException(status_code=404, detail=\\\"\\u672A\\u627E\\u5230\\u5F85\\u529E\\u4E8B\\u9879\\\")\\n\")), mdx(\"h2\", {\n    \"id\": \"比较fastapi与其他web框架\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E6%AF%94%E8%BE%83fastapi%E4%B8%8E%E5%85%B6%E4%BB%96web%E6%A1%86%E6%9E%B6\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6BD4\\u8F83FastAPI\\u4E0E\\u5176\\u4ED6Web\\u6846\\u67B6\"), mdx(\"h3\", {\n    \"id\": \"fastapi-vs-flask\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#fastapi-vs-flask\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI vs Flask\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u529F\\u80FD\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"FastAPI\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Flask\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u6027\\u80FD\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u7531\\u4E8EStarlette\\u975E\\u5E38\\u5FEB\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u5FEB\\u901F,\\u4F46\\u7565\\u6162\\u4E8EFastAPI\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u7C7B\\u578B\\u68C0\\u67E5\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u4F7F\\u7528Pydantic\\u5185\\u7F6E\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u9700\\u8981\\u989D\\u5916\\u7684\\u5E93\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u5F02\\u6B65\\u652F\\u6301\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u539F\\u751F\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u9700\\u8981\\u6269\\u5C55\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u6587\\u6863\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u81EA\\u52A8Swagger UI\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u624B\\u52A8\\u6216\\u4F7F\\u7528\\u6269\\u5C55\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u5B66\\u4E60\\u66F2\\u7EBF\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u8F83\\u9661,\\u4F46\\u56DE\\u62A5\\u4E30\\u539A\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u6E29\\u548C,\\u5BF9\\u521D\\u5B66\\u8005\\u975E\\u5E38\\u53CB\\u597D\")))), mdx(\"h3\", {\n    \"id\": \"fastapi-vs-django\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#fastapi-vs-django\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI vs Django\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u529F\\u80FD\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"FastAPI\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Django\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u5173\\u6CE8\\u70B9\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"API\\u5F00\\u53D1\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u5168\\u6808Web\\u5F00\\u53D1\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u6027\\u80FD\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u975E\\u5E38\\u5FEB\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u4E0EFastAPI\\u76F8\\u6BD4\\u8F83\\u6162\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u6570\\u636E\\u5E93ORM\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u9700\\u8981SQLAlchemy\\u6216\\u5176\\u4ED6ORM\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u5185\\u7F6EORM\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u7BA1\\u7406\\u754C\\u9762\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u4E0D\\u5305\\u542B\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u5185\\u7F6E\\u7BA1\\u7406\\u754C\\u9762\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u5F02\\u6B65\\u652F\\u6301\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u539F\\u751F\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u6709\\u9650,\\u5728\\u6700\\u65B0\\u7248\\u672C\\u4E2D\\u6539\\u8FDB\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"API\\u6587\\u6863\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u81EA\\u52A8Swagger UI\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u9700\\u8981\\u989D\\u5916\\u7684\\u5305\")))), mdx(\"h3\", {\n    \"id\": \"何时为项目选择fastapi\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E4%BD%95%E6%97%B6%E4%B8%BA%E9%A1%B9%E7%9B%AE%E9%80%89%E6%8B%A9fastapi\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4F55\\u65F6\\u4E3A\\u9879\\u76EE\\u9009\\u62E9FastAPI\"), mdx(\"p\", null, \"\\u5728\\u4EE5\\u4E0B\\u60C5\\u51B5\\u9009\\u62E9FastAPI:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u60A8\\u6B63\\u5728\\u6784\\u5EFA\\u9AD8\\u6027\\u80FDAPI\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u60A8\\u9700\\u8981\\u81EA\\u52A8API\\u6587\\u6863\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u60A8\\u9700\\u8981\\u5F3A\\u7C7B\\u578B\\u68C0\\u67E5\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u60A8\\u6B63\\u5728\\u5F00\\u53D1\\u5FAE\\u670D\\u52A1\\u67B6\\u6784\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u60A8\\u60F3\\u5728Python\\u4E2D\\u5229\\u7528\\u5F02\\u6B65\\u7F16\\u7A0B\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u60A8\\u9700\\u8981WebSocket\\u652F\\u6301\")), mdx(\"h2\", {\n    \"id\": \"结论\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E7%BB%93%E8%AE%BA\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u7ED3\\u8BBA\"), mdx(\"h3\", {\n    \"id\": \"关于如何使用fastapi的要点回顾\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%85%B3%E4%BA%8E%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8fastapi%E7%9A%84%E8%A6%81%E7%82%B9%E5%9B%9E%E9%A1%BE\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5173\\u4E8E\\u5982\\u4F55\\u4F7F\\u7528FastAPI\\u7684\\u8981\\u70B9\\u56DE\\u987E\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"FastAPI\\u4E3A\\u6784\\u5EFAAPI\\u63D0\\u4F9B\\u4E86\\u73B0\\u4EE3\\u3001\\u5FEB\\u901F\\u4E14\\u6613\\u4E8E\\u4F7F\\u7528\\u7684\\u6846\\u67B6\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5B83\\u5229\\u7528Python\\u7C7B\\u578B\\u63D0\\u793A\\u8FDB\\u884C\\u81EA\\u52A8\\u9A8C\\u8BC1\\u548C\\u6587\\u6863\\u751F\\u6210\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"FastAPI\\u540C\\u65F6\\u652F\\u6301\\u540C\\u6B65\\u548C\\u5F02\\u6B65\\u7F16\\u7A0B\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5B83\\u4E3AOAuth2\\u3001JWT\\u4EE4\\u724C\\u548C\\u5176\\u4ED6\\u5B89\\u5168\\u529F\\u80FD\\u63D0\\u4F9B\\u5185\\u7F6E\\u652F\\u6301\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"FastAPI\\u4E0E\\u5404\\u79CD\\u6570\\u636E\\u5E93\\u548CORM\\u826F\\u597D\\u96C6\\u6210\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5B83\\u4F7F\\u7528Swagger UI\\u63D0\\u4F9B\\u81EA\\u52A8\\u4EA4\\u4E92\\u5F0FAPI\\u6587\\u6863\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"FastAPI\\u9AD8\\u5EA6\\u53EF\\u6269\\u5C55,\\u62E5\\u6709\\u4E0D\\u65AD\\u589E\\u957F\\u7684\\u5E93\\u548C\\u5DE5\\u5177\\u751F\\u6001\\u7CFB\\u7EDF\")), mdx(\"h3\", {\n    \"id\": \"fastapi和web开发的未来\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#fastapi%E5%92%8Cweb%E5%BC%80%E5%8F%91%E7%9A%84%E6%9C%AA%E6%9D%A5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"FastAPI\\u548CWeb\\u5F00\\u53D1\\u7684\\u672A\\u6765\"), mdx(\"p\", null, \"FastAPI\\u5728Web\\u5F00\\u53D1\\u7684\\u672A\\u6765\\u4E2D\\u5360\\u636E\\u91CD\\u8981\\u5730\\u4F4D,\\u7279\\u522B\\u662F\\u5728\\u9AD8\\u6027\\u80FD\\u3001\\u7C7B\\u578B\\u5B89\\u5168\\u7684API\\u5F00\\u53D1\\u9886\\u57DF\\u3002\\u968F\\u7740Python\\u7EE7\\u7EED\\u53D1\\u5C55,\\u66F4\\u597D\\u5730\\u652F\\u6301\\u5F02\\u6B65\\u7F16\\u7A0B\\u548C\\u7C7B\\u578B\\u63D0\\u793A,FastAPI\\u5C06\\u5145\\u5206\\u5229\\u7528\\u8FD9\\u4E9B\\u8FDB\\u6B65\\u3002\"), mdx(\"h3\", {\n    \"id\": \"掌握fastapi的后续步骤\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%8E%8C%E6%8F%A1fastapi%E7%9A%84%E5%90%8E%E7%BB%AD%E6%AD%A5%E9%AA%A4\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u638C\\u63E1FastAPI\\u7684\\u540E\\u7EED\\u6B65\\u9AA4\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6DF1\\u5165\\u7814\\u7A76FastAPI\\u7684\\u9AD8\\u7EA7\\u529F\\u80FD,\\u5982\\u4F9D\\u8D56\\u6CE8\\u5165\\u548C\\u540E\\u53F0\\u4EFB\\u52A1\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u63A2\\u7D22FastAPI\\u7684\\u751F\\u6001\\u7CFB\\u7EDF\\u5E76\\u5C1D\\u8BD5\\u6D41\\u884C\\u7684\\u6269\\u5C55\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u7EC3\\u4E60\\u6784\\u5EFA\\u771F\\u5B9E\\u4E16\\u754C\\u7684\\u5E94\\u7528\\u7A0B\\u5E8F,\\u4ECE\\u7B80\\u5355\\u7684CRUD API\\u5230\\u590D\\u6742\\u7684\\u5FAE\\u670D\\u52A1\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u901A\\u8FC7\\u521B\\u5EFA\\u6269\\u5C55\\u6216\\u5411\\u4E3B\\u9879\\u76EE\\u63D0\\u4EA4\\u62C9\\u53D6\\u8BF7\\u6C42\\u6765\\u4E3AFastAPI\\u793E\\u533A\\u505A\\u51FA\\u8D21\\u732E\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5173\\u6CE8\\u6700\\u65B0\\u7684FastAPI\\u7248\\u672C\\u548C\\u6700\\u4F73\\u5B9E\\u8DF5\")), mdx(\"h2\", {\n    \"id\": \"常见问题\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5E38\\u89C1\\u95EE\\u9898\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"FastAPI\\u9002\\u5408\\u521D\\u5B66\\u8005\\u5417?\"), \"\\n\\u867D\\u7136\\u4E0E\\u67D0\\u4E9B\\u6846\\u67B6\\u76F8\\u6BD4,FastAPI\\u7684\\u5B66\\u4E60\\u66F2\\u7EBF\\u8F83\\u9661,\\u4F46\\u5BF9\\u4E8E\\u638C\\u63E1Python\\u7684\\u521D\\u5B66\\u8005\\u6765\\u8BF4\\u4ECD\\u7136\\u6613\\u4E8E\\u4E0A\\u624B\\u3002\\u5E7F\\u6CDB\\u7684\\u6587\\u6863\\u548C\\u76F4\\u89C2\\u7684\\u8BBE\\u8BA1\\u4F7F\\u5176\\u6210\\u4E3A\\u5E0C\\u671B\\u6784\\u5EFA\\u73B0\\u4EE3API\\u7684\\u4EBA\\u7684\\u7EDD\\u4F73\\u9009\\u62E9\\u3002\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"FastAPI\\u5982\\u4F55\\u5904\\u7406\\u6570\\u636E\\u5E93\\u64CD\\u4F5C?\"), \"\\nFastAPI\\u4E0D\\u5305\\u542B\\u5185\\u7F6EORM,\\u4F46\\u5B83\\u4E0ESQLAlchemy\\u548C\\u5176\\u4ED6\\u6570\\u636E\\u5E93\\u5E93\\u914D\\u5408\\u826F\\u597D\\u3002\\u60A8\\u53EF\\u4EE5\\u8F7B\\u677E\\u96C6\\u6210\\u8FD9\\u4E9B\\u5DE5\\u5177\\u6765\\u5904\\u7406FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\\u4E2D\\u7684\\u6570\\u636E\\u5E93\\u64CD\\u4F5C\\u3002\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"FastAPI\\u53EF\\u4EE5\\u7528\\u4E8E\\u5168\\u6808Web\\u5F00\\u53D1\\u5417?\"), \"\\n\\u867D\\u7136FastAPI\\u64C5\\u957F\\u6784\\u5EFAAPI,\\u4F46\\u4E0EReact\\u6216Vue.js\\u7B49\\u524D\\u7AEF\\u6846\\u67B6\\u7ED3\\u5408\\u4F7F\\u7528\\u65F6,\\u5B83\\u53EF\\u4EE5\\u7528\\u4E8E\\u5168\\u6808\\u5F00\\u53D1\\u3002\\u4F46\\u662F,\\u5BF9\\u4E8E\\u590D\\u6742\\u7684\\u5168\\u6808\\u5E94\\u7528\\u7A0B\\u5E8F,\\u60A8\\u53EF\\u80FD\\u60F3\\u8003\\u8651\\u50CFDjango\\u8FD9\\u6837\\u7684\\u6846\\u67B6\\u3002\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"FastAPI\\u5728\\u751F\\u4EA7\\u73AF\\u5883\\u4E2D\\u8868\\u73B0\\u5982\\u4F55?\"), \"\\nFastAPI\\u8BBE\\u8BA1\\u4E3A\\u5F00\\u7BB1\\u5373\\u7528\\u7684\\u751F\\u4EA7\\u5C31\\u7EEA\\u6846\\u67B6\\u3002\\u5176\\u9AD8\\u6027\\u80FD,\\u7ED3\\u5408\\u81EA\\u52A8API\\u6587\\u6863\\u548C\\u5F3A\\u5927\\u7684\\u9519\\u8BEF\\u5904\\u7406\\u7B49\\u529F\\u80FD,\\u4F7F\\u5176\\u6210\\u4E3A\\u751F\\u4EA7\\u73AF\\u5883\\u7684\\u7EDD\\u4F73\\u9009\\u62E9\\u3002\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u90E8\\u7F72FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\\u5BB9\\u6613\\u5417?\"), \"\\n\\u662F\\u7684,FastAPI\\u5E94\\u7528\\u7A0B\\u5E8F\\u76F8\\u5BF9\\u5BB9\\u6613\\u90E8\\u7F72\\u3002\\u5B83\\u4EEC\\u53EF\\u4EE5\\u4F7F\\u7528Docker\\u5BB9\\u5668\\u5316\\u5E76\\u90E8\\u7F72\\u5230\\u5404\\u79CD\\u4E91\\u5E73\\u53F0\\u6216\\u672C\\u5730\\u670D\\u52A1\\u5668\\u3002\\u8BE5\\u6846\\u67B6\\u4E0EUvicorn\\u7B49ASGI\\u670D\\u52A1\\u5668\\u7684\\u517C\\u5BB9\\u6027\\u4F7F\\u90E8\\u7F72\\u53D8\\u5F97\\u7B80\\u5355\\u3002\"))), mdx(\"h2\", {\n    \"id\": \"参考资料\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u53C2\\u8003\\u8D44\\u6599\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://fastapi.tiangolo.com/\"\n  }, \"FastAPI Documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/tiangolo/fastapi\"\n  }, \"FastAPI GitHub\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://twitter.com/tiangolo\"\n  }, \"FastAPI Twitter\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.reddit.com/r/fastapi/\"\n  }, \"FastAPI Reddit\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://stackoverflow.com/questions/tagged/fastapi\"\n  }, \"FastAPI Stack Overflow\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/tiangolo/fastapi/discussions\"\n  }, \"FastAPI GitHub Discussions\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/tiangolo/fastapi/issues\"\n  }, \"FastAPI GitHub Issues\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/tiangolo/fastapi/pulls\"\n  }, \"FastAPI GitHub Pull Requests\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#什么是fastapi","title":"什么是FastAPI?","items":[{"url":"#为什么选择fastapi","title":"为什么选择FastAPI?"}]},{"url":"#fastapi入门","title":"FastAPI入门","items":[{"url":"#安装fastapi及其依赖项","title":"安装FastAPI及其依赖项"},{"url":"#设置开发环境","title":"设置开发环境"},{"url":"#创建您的第一个fastapi应用程序","title":"创建您的第一个FastAPI应用程序"}]},{"url":"#fastapi基础","title":"FastAPI基础","items":[{"url":"#理解python类型提示及fastapi如何使用它们","title":"理解Python类型提示及FastAPI如何使用它们"},{"url":"#fastapi中的请求处理和路由","title":"FastAPI中的请求处理和路由"},{"url":"#路径参数和查询参数","title":"路径参数和查询参数"},{"url":"#请求体和数据验证","title":"请求体和数据验证"},{"url":"#响应模型和状态码","title":"响应模型和状态码"}]},{"url":"#fastapi高级功能","title":"FastAPI高级功能","items":[{"url":"#fastapi中的依赖注入","title":"FastAPI中的依赖注入"},{"url":"#安全性和身份验证","title":"安全性和身份验证"},{"url":"#后台任务和异步操作","title":"后台任务和异步操作"},{"url":"#fastapi中的websocket支持","title":"FastAPI中的WebSocket支持"},{"url":"#使用opentelemetry进行监控和跟踪","title":"使用OpenTelemetry进行监控和跟踪"}]},{"url":"#fastapi与数据库集成","title":"FastAPI与数据库集成","items":[{"url":"#在fastapi中使用sqlalchemy","title":"在FastAPI中使用SQLAlchemy"}]},{"url":"#测试fastapi应用程序","title":"测试FastAPI应用程序","items":[{"url":"#使用pytest进行单元测试","title":"使用pytest进行单元测试"}]},{"url":"#fastapi性能优化","title":"FastAPI性能优化","items":[{"url":"#使用async和await提高并发性","title":"使用async和await提高并发性"}]},{"url":"#记录fastapi应用程序","title":"记录FastAPI应用程序","items":[{"url":"#使用swagger-ui自动生成api文档","title":"使用Swagger UI自动生成API文档"}]},{"url":"#部署fastapi应用程序","title":"部署FastAPI应用程序","items":[{"url":"#使用docker容器化fastapi应用","title":"使用Docker容器化FastAPI应用"}]},{"url":"#fastapi最佳实践和设计模式","title":"FastAPI最佳实践和设计模式","items":[{"url":"#可扩展fastapi应用程序的项目结构","title":"可扩展FastAPI应用程序的项目结构"},{"url":"#错误处理和自定义异常类","title":"错误处理和自定义异常类"},{"url":"#fastapi中的中间件实现","title":"FastAPI中的中间件实现"}]},{"url":"#fastapi生态系统和扩展","title":"FastAPI生态系统和扩展","items":[{"url":"#流行的fastapi扩展和库","title":"流行的FastAPI扩展和库"},{"url":"#将fastapi与其他python框架集成","title":"将FastAPI与其他Python框架集成"}]},{"url":"#真实世界的fastapi用例","title":"真实世界的FastAPI用例","items":[{"url":"#使用fastapi构建restful-api","title":"使用FastAPI构建RESTful API"}]},{"url":"#比较fastapi与其他web框架","title":"比较FastAPI与其他Web框架","items":[{"url":"#fastapi-vs-flask","title":"FastAPI vs Flask"},{"url":"#fastapi-vs-django","title":"FastAPI vs Django"},{"url":"#何时为项目选择fastapi","title":"何时为项目选择FastAPI"}]},{"url":"#结论","title":"结论","items":[{"url":"#关于如何使用fastapi的要点回顾","title":"关于如何使用FastAPI的要点回顾"},{"url":"#fastapi和web开发的未来","title":"FastAPI和Web开发的未来"},{"url":"#掌握fastapi的后续步骤","title":"掌握FastAPI的后续步骤"}]},{"url":"#常见问题","title":"常见问题"},{"url":"#参考资料","title":"参考资料"}]}}},"pageContext":{"id":"7876f99d-6c90-5ce3-b2d6-7f2a6f9e0a55"}},
    "staticQueryHashes": ["1122327541","1339625561","148928582","2007862104","2140385554","3442269102","4275725850"]}