Skip to content

发布版本

0.38.2

2024 年 7 月 27 日

固定的

  • 并非假定所有例程在 routing.get_name() #2648 上都有 __name__

0.38.1

2024 年 7 月 23 日

已移除

  • 还原“添加对 ASGI pathsend 扩展的支持” #2649。

0.38.0

2024 年 7 月 20 日

添加的

  • 允许在 StreamingResponseResponse #2576 及 #2577 中使用 memoryview
  • 当在 StaticFiles #2583 中请求的文件名过长时,发送 404 而不是 500。

更改(或:改变)

  • 在无效的 Jinja2Template 实例化参数 #2568 上快速失败。
  • 检查端点处理程序仅异步一次 #2536 。

固定的

  • WebSocketTestSession #2597 添加适当的同步。

0.37.2

2024 年 3 月 5 日

添加的

  • Add bytes to _RequestData type #2510.

固定的

  • Revert "Turn scope["client"] to None on TestClient (#2377)" #2525.
  • Remove deprecated app argument passed to httpx.Client on the TestClient #2526.

0.37.1

February 9, 2024

Fixed

  • Warn instead of raise for missing env file on Config #2485.

0.37.0

February 5, 2024

Added

  • Support the WebSocket Denial Response ASGI extension #2041.

0.36.3

February 4, 2024

Fixed

  • Create anyio.Event on async context #2459.

0.36.2

February 3, 2024

Fixed

  • Upgrade python-multipart to 0.0.7 13e5c26.
  • Avoid duplicate charset on Content-Type #2443.

0.36.1

January 23, 2024

Fixed

  • Check if "extensions" in scope before checking the extension #2438.

0.36.0

January 22, 2024

添加的

  • Add support for ASGI pathsend extension #2435.
  • Cancel WebSocketTestSession on close #2427.
  • Raise WebSocketDisconnect when WebSocket.send() excepts IOError #2425.
  • Raise FileNotFoundError when the env_file parameter on Config is not valid #2422.

0.35.1

January 11, 2024

固定的

  • Stop using the deprecated "method" parameter in FileResponse inside of StaticFiles #2406.
  • Make typing-extensions optional again #2409.

0.35.0

January 11, 2024

添加的

  • *args 添加到 Middleware 并改进其类型提示 #2381 。

固定的

  • iterate_in_threadpool #2362 上使用 Iterable 而非 Iterator

变化

  • 处理 root_path 以保持与已安装的 ASGI 应用程序和 WSGI #2400 的兼容性。
  • TestClient #2377 上将 scope["client"] 变为 None

0.34.0

2023 年 12 月 16 日

添加的

  • 使用 ParamSpec 用于 run_in_threadpool #2375 。
  • 添加 UploadFile.__repr__ #2360。

固定的

  • TestClient #2376 上正确合并 URL。
  • 考虑在 StaticFiles #2334 上的弱 ETags。

已过时

  • 弃用 FileResponse(method=...) 参数 #2366 。

0.33.0

2023 年 12 月 1 日

添加的

  • Route / WebSocketRoute 添加 middleware #2349 。
  • Router 添加 middleware #2351 。

固定的

  • 请勿覆盖 "path""root_path" 范围键 #2352。
  • ensure_ascii=False 设置在 json.dumps() 上,用于 WebSocket.send_json() #2341 。

0.32.0.post1

2023 年 11 月 5 日

固定的

  • 将 mkdocs-material 从 9.1.17 回退到 9.4.7 #2326 。

0.32.0

2023 年 11 月 4 日

添加的

  • WebSocketDisconnect 上发送 reason #2309。
  • domain 参数添加到 SessionMiddleware #2280 中。

改变;变化;更改

  • _TemplateResponse #2274 上从 HTMLResponse 而不是 Response 继承。
  • Response.render 类型注释恢复到其 0.31.0 之前的状态 #2264 。

0.31.1

2023 年 8 月 26 日

固定的

  • 修复当 exceptiongroup 不可用时的导入错误 #2231。
  • 为自定义 Jinja 环境设置 url_for 全局变量 #2230 。

0.31.0

2023 年 7 月 24 日

添加的

  • Officially support Python 3.12 #2214.
  • Support AnyIO 4.0 #2211.
  • Strictly type annotate Starlette (strict mode on mypy) #2180.

Fixed

  • Don't group duplicated headers on a single string when using the TestClient #2219.

0.30.0

July 13, 2023

Removed

  • Drop Python 3.7 support #2178.

0.29.0

July 13, 2023

Added

  • Add follow_redirects parameter to TestClient #2207.
  • Add __str__ to HTTPException and WebSocketException #2181.
  • Warn users when using lifespan together with on_startup/on_shutdown #2193.
  • Collect routes from Host to generate the OpenAPI schema #2183.
  • Add request argument to TemplateResponse #2191.

固定的

  • Stop body_stream in case more_body=False on BaseHTTPMiddleware #2194.

0.28.0

June 7, 2023

Changed

  • Reuse Request's body buffer for call_next in BaseHTTPMiddleware #1692.
  • Move exception handling logic to Route #2026.

添加的

  • env 参数添加到 Jinja2Templates 中,并弃用 **env_options #2159 。
  • httpx 未安装时添加明确的错误消息 #2177。

固定的

  • 允许在 templates url_for() #2127 上使用“name”参数。

0.27.0

2023 年 5 月 16 日

此版本修复了 StaticFiles 中的路径遍历漏洞。您可以查看完整的安全公告:https://github.com/encode/starlette/security/advisories/GHSA-v5gw-mw7f-84px

添加的

  • 通过 send_json 缩小 JSON WebSocket 数据,详情见 https://github.com/encode/starlette/pull/2128

固定的

  • StaticFiles 1797de4 上,将 commonprefix 替换为 commonpath
  • 将 ImportErrors 转换为 ModuleNotFoundError #2135 。
  • 在 websockets #2141 中纠正 RuntimeError 消息内容。

0.26.1

2023 年 3 月 13 日

固定的

  • 修复 Starlette #2077 中 Lifespan 的类型,以允许其子类。

0.26.0.post1

March 9, 2023

Fixed

  • Replace reference from Events to Lifespan on the mkdocs.yml #2072.

0.26.0

March 9, 2023

Added

Changed

  • Change url_for signature to return a URL instance #1385.

Fixed

  • Allow "name" argument on url_for() and url_path_for() #2050.

Deprecated

  • Deprecate on_startup and on_shutdown events #2070.

0.25.0

February 14, 2023

Fix

  • Limit the number of fields and files when parsing multipart/form-data on the MultipartParser 8c74c2c and #2036.

0.24.0

February 6, 2023

添加的

  • Allow StaticFiles to follow symlinks #1683.
  • Allow Request.form() as a context manager #1903.
  • Add size attribute to UploadFile #1405.
  • Add env_prefix argument to Config #1990.
  • Add template context processors #1904.
  • Support str and datetime on expires parameter on the Response.set_cookie method #1908.

Changed

  • Lazily build the middleware stack #2017.
  • Make the file argument required on UploadFile #1413.
  • Use debug extension instead of custom response template extension #1991.

固定的

  • Fix url parsing of ipv6 urls on URL.replace #1965.

0.23.1

December 9, 2022

固定的

  • Only stop receiving stream on body_stream if body is empty on the BaseHTTPMiddleware #1940.

0.23.0

December 5, 2022

添加的

  • Add headers parameter to the TestClient #1966.

已过时

  • 弃用 StarletteRouter 装饰器 #1897。

固定的

  • 修复 FloatConvertor 正则表达式上的错误 #1973。

0.22.0

2022 年 11 月 17 日

改变了

  • 当响应包含 Content-Encoding #1901 时,绕过 GZipMiddleware

固定的

  • TestClient #1953 上的查询参数中删除不需要的 unquote()
  • 确保 MutableHeaders._list 实际上是一个 list #1917 。
  • 与下一版本的 AnyIO #1936 的导入兼容性。

0.21.0

2022 年 9 月 26 日

此版本替换了在 TestClient 上使用的基础 HTTP 客户端( requests :arrow_right: httpx ),由于这些客户端的 API 略有不同,您的测试套件可能会中断。为了使迁移更顺利,您可以使用 bump-testclient 工具。

更改(或:改变)

  • TestClient #1376 中,将 requests 替换为 httpx

添加的

  • Add WebSocketException and support for WebSocket exception handlers #1263.
  • Add middleware parameter to Mount class #1649.
  • Officially support Python 3.11 #1863.
  • Implement __repr__ for route classes #1864.

Fixed

  • Fix bug on which BackgroundTasks were cancelled when using BaseHTTPMiddleware and client disconnected #1715.

0.20.4

June 28, 2022

Fixed

  • Remove converter from path when generating OpenAPI schema #1648.

0.20.3

June 10, 2022

Fixed

  • Revert "Allow StaticFiles to follow symlinks" #1681.

0.20.2

June 7, 2022

固定的

  • Fix regression on route paths with colons #1675.
  • Allow StaticFiles to follow symlinks #1337.

0.20.1

May 28, 2022

固定的

  • Improve detection of async callables #1444.
  • Send 400 (Bad Request) when boundary is missing #1617.
  • Send 400 (Bad Request) when missing "name" field on Content-Disposition header #1643.
  • Do not send empty data to StreamingResponse on BaseHTTPMiddleware #1609.
  • Add __bool__ dunder for Secret #1625.

0.20.0

May 3, 2022

Removed

0.19.1

April 22, 2022

固定的

  • Fix inference of Route.name when created from methods #1553.
  • Avoid TypeError on websocket.disconnect when code is None #1574.

已过时

  • Deprecate WS_1004_NO_STATUS_RCVD and WS_1005_ABNORMAL_CLOSURE in favor of WS_1005_NO_STATUS_RCVD and WS_1006_ABNORMAL_CLOSURE, as the previous constants didn't match the WebSockets specs #1580.

0.19.0

March 9, 2022

添加的

  • Error handler will always run, even if the error happens on a background task #761.
  • Add headers parameter to HTTPException #1435.
  • Internal responses with 405 status code insert an Allow header, as described by RFC 7231 #1436.
  • JSONResponse 中的 content 参数现在是必需的 #1431 。
  • 添加自定义 URL 转换器注册 #1437 。
  • FileResponse #1266 添加内容处置类型参数。
  • 在需要装饰器 #920 中,将下一个查询参数与原始请求 URL 一起添加。
  • raw_path 添加到 TestClient 范围 #1445 中。
  • 将联合运算符添加到 MutableHeaders #1240 中。
  • 在调试页面 #1363 上显示缺失的路线详细信息。
  • anyio 所需的版本范围更改为 >=3.4.0,<5.0 #1421 和 #1460。
  • 添加 typing-extensions>=3.10 要求 - 仅在低于 Python 3.10 的版本中使用 #1475。

固定的

  • 防止 BaseHTTPMiddleware 隐藏 StreamingResponse 以及已安装应用程序 #1459 的错误。
  • SessionMiddleware 使用显式的 path=... ,而不是默认使用 ASGI 的“root_path”#1512。
  • Request.client 现在符合 ASGI 规范 #1462。
  • 在早期针对缺失边界 #1349 提升 KeyError

已过时

  • Deprecate WSGIMiddleware in favor of a2wsgi #1504.
  • Deprecate run_until_first_complete #1443.

0.18.0

January 23, 2022

Added

  • Change default chunk size from 4Kb to 64Kb on FileResponse #1345.
  • Add support for functools.partial in WebSocketRoute #1356.
  • Add StaticFiles packages with directory #1350.
  • Allow environment options in Jinja2Templates #1401.
  • Allow HEAD method on HttpEndpoint #1346.
  • Accept additional headers on websocket.accept message #1361 and #1422.
  • Add reason to WebSocket close ASGI event #1417.
  • Add headers attribute to UploadFile #1382.
  • Don't omit Content-Length header for Content-Length: 0 cases #1395.
  • Don't set headers for responses with 1xx, 204 and 304 status code #1397.
  • SessionMiddleware.max_age now accepts None, so cookie can last as long as the browser session #1387.

固定的

  • Tweak hashlib.md5() function on FileResponses ETag generation. The parameter usedforsecurity flag is set to False, if the flag is available on the system. This fixes an error raised on systems with FIPS enabled #1366 and #1410.
  • Fix path_params type on url_path_for() method i.e. turn str into Any #1341.
  • Host now ignores port on routing #1322.

0.17.1

November 17, 2021

固定的

  • Fix IndexError in authentication requires when wrapped function arguments are distributed between *args and **kwargs #1335.

0.17.0

November 4, 2021

添加的

  • Response.delete_cookie now accepts the same parameters as Response.set_cookie #1228.
  • Update the Jinja2Templates constructor to allow PathLike #1292.

固定的

  • Fix BadSignature exception handling in SessionMiddleware #1264.
  • Change HTTPConnection.__getitem__ return type from str to typing.Any #1118.
  • Change ImmutableMultiDict.getlist return type from typing.List[str] to typing.List[typing.Any] #1235.
  • Handle OSError exceptions on StaticFiles #1220.
  • Fix StaticFiles 404.html in HTML mode #1314.
  • Prevent anyio.ExceptionGroup in error views under a BaseHTTPMiddleware #1262.

Removed

  • Remove GraphQL support #1198.

0.16.0

July 19, 2021

添加的

固定的

  • starlette.websockets.WebSocket instances are now hashable and compare by identity #1039
  • A number of fixes related to running task groups in lifespan #1213, #1227

Deprecated/removed

  • The method starlette.templates.Jinja2Templates.get_env was removed #1218
  • The ClassVar starlette.testclient.TestClient.async_backend was removed, the backend is now configured using constructor kwargs #1211
  • Passing an Async Generator Function or a Generator Function to starlette.routing.Router(lifespan=) is deprecated. You should wrap your lifespan in @contextlib.asynccontextmanager. #1227 #1110

0.15.0

June 23, 2021

此版本对 Starlette 的底层异步部分进行了重大更改。因此,Starlette 现在依赖于 AnyIO,并且发生了一些小的 API 更改。此版本的另一个重大变化是弃用了内置的 GraphQL 支持。

添加的

  • Starlette 现在通过 AnyIO 支持 Trio 作为异步运行时 - #1157 。
  • TestClient.websocket_connect() 现在必须用作上下文管理器。
  • 对 Python 3.10 的初步支持 - #1201 。
  • GZipMiddleware 中使用的压缩级别现在是可调节的 - #1128 。

固定的

  • CORSMiddleware 的若干修复。见 #1111、#1112、#1113、#1199。
  • 在出现重复路径参数名称的情况下改进异常消息 - #1177 。
  • RedirectResponse 现在在 Location 头部使用 quote 编码而非 quote_plus 编码,以更好地与其他框架(如 Django)中的行为相匹配 - #1164。
  • 在更多情况下,异常原因现在得以保留 - #1158 。
  • 在挂载应用程序的情况下,会话 Cookie 现在使用 ASGI 根路径 - #1147 。
  • 在特定情况下删除静态文件时修复了一个缓存失效错误 - #1023 。
  • 在处理大型响应时改进了 BaseHTTPMiddleware 的内存使用情况 - 通过 #1157 修复了 #1012

已弃用/已移除

  • Built-in GraphQL support via the GraphQLApp class has been deprecated and will be removed in a future release. Please see #619. GraphQL is not supported on Python 3.10.
  • The executor parameter to GraphQLApp was removed. Use executor_class instead.
  • The workers parameter to WSGIMiddleware was removed. This hasn't had any effect since Starlette v0.6.3.

0.14.2

February 2, 2021

Fixed

  • Fixed ServerErrorMiddleware compatibility with Python 3.9.1/3.8.7 when debug mode is enabled - #1132.
  • Fixed unclosed socket ResourceWarnings when using the TestClient with WebSocket endpoints - #1132.
  • Improved detection of async endpoints wrapped in functools.partial on Python 3.8+ - #1106.

0.14.1

November 9th, 2020

Removed

  • UJSONResponse was removed (this change was intended to be included in 0.14.0). Please see the documentation for how to implement responses using custom JSON serialization - #1074.

0.14.0

November 8th, 2020

添加的

  • Starlette now officially supports Python3.9.
  • In StreamingResponse, allow custom async iterator such as objects from classes implementing __aiter__.
  • Allow usage of functools.partial async handlers in Python versions 3.6 and 3.7.
  • Add 418 I'm A Teapot status code.

Changed

  • Create tasks from handler coroutines before sending them to asyncio.wait.
  • Use format_exception instead of format_tb in ServerErrorMiddleware's debug responses.
  • Be more lenient with handler arguments when using the requires decorator.

0.13.8

  • Revert Queue(maxsize=1) fix for BaseHTTPMiddleware middleware classes and streaming responses.

  • The StaticFiles constructor now allows pathlib.Path in addition to strings for its directory argument.

0.13.7

  • Fix high memory usage when using BaseHTTPMiddleware middleware classes and streaming responses.

0.13.6

  • Fix 404 errors with StaticFiles.

0.13.5

  • 添加对 Starlette(lifespan=...) 功能的支持。
  • 在 StaticFiles 应用程序中进行更强大的路径遍历检查。
  • 修复 WSGI PATH_INFO 编码。
  • RedirectResponse 现在接受可选的 background 参数
  • 允许路径路由包含正则表达式元字符
  • 将 ASGI HTTP 的“body”视为一个可选键。
  • 不要将线程池用于写入内存中的上传文件。

0.13.0

  • 在各处切换为在初始化风格上促进应用配置。这意味着放弃装饰器风格,转而支持声明式路由表和中间件定义。

0.12.12

  • 修复针对“嵌套安装”情况的 request.url_for() 问题。

0.12.11

  • 当使用 ASGI root_path 时,修复 request.url_for()

0.12.1

  • 添加 URL.include_query_params(**kwargs)
  • 添加 URL.replace_query_params(**kwargs)
  • 添加 URL.remove_query_params(param_names)
  • request.state 在中间件中正确地持续存在。
  • 添加了 request.scope 接口。

0.12.0

  • 切换到 ASGI 3.0。
  • 对 CORS 中间件的修复。
  • Add StaticFiles(html=True) support.
  • Fix path quoting in redirect responses.

0.11.1

  • Add request.state interface, for storing arbitrary additional information.
  • Support disabling GraphiQL with GraphQLApp(..., graphiql=False).

0.11.0

  • DatabaseMiddleware is now dropped in favour of databases
  • Templates are no longer configured on the application instance. Use templates = Jinja2Templates(directory=...) and return templates.TemplateResponse('index.html', {"request": request})
  • Schema generation is no longer attached to the application instance. Use schemas = SchemaGenerator(...) and return schemas.OpenAPIResponse(request=request)
  • LifespanMiddleware is dropped in favor of router-based lifespan handling.
  • Application instances now accept a routes argument, Starlette(routes=[...])
  • Schema generation now includes mounted routes.

0.10.6

  • Add Lifespan routing component.

0.10.5

  • Ensure templating does not strictly require jinja2 to be installed.

0.10.4

  • Templates are now configured independently from the application instance. templates = Jinja2Templates(directory=...). Existing API remains in place, but is no longer documented, and will be deprecated in due course. See the template documentation for more details.

0.10.3

  • Move to independent databases package instead of DatabaseMiddleware. Existing API remains in place, but is no longer documented, and will be deprecated in due course.

0.10.2

  • Don't drop explicit port numbers on redirects from HTTPSRedirectMiddleware.

0.10.1

  • 添加 MySQL 数据库支持。
  • 添加基于主机的路由。

0.10.0

  • WebSockets 现在默认通过文本数据帧发送/接收 JSON。使用 .send_json(data, mode="binary").receive_json(mode="binary") 进行二进制分帧。
  • GraphQLApp 现在接受一个 executor_class 参数,应优先使用该参数而不是现有的 executor 参数。解决了在事件循环设置之前实例化异步执行器的问题。预计 executor 参数将在下一个中版本或大版本中弃用。
  • 身份验证和 @requires 装饰器现在支持 WebSocket 端点。
  • MultiDictImmutableMultiDict 类在 uvicorn.datastructures 中可用。
  • QueryParams 现在使用标准的字典样式的 *args, **kwargs 参数进行实例化。

0.9.11

  • 会话 Cookie 现在除了现有的已签名过期时间外,还包括浏览器的“expires”。
  • request.form() 现在返回一个多字典接口。
  • 当出现多个相同键项时,查询参数多字典实现现在对于 .keys().values().items() 的行为,能更准确地反映 dict
  • 在整个过程中使用 urlsplit 而不是 urlparse

0.9.10

  • 支持在类方法上的 @requires(...)
  • 对表单数据应用 URL 转义。
  • 自动支持 HEAD 请求。
  • 添加 await request.is_disconnected()
  • 将 operationName 传递给 GraphQL 执行器。

0.9.9

  • 添加 TemplateResponse
  • Add CommaSeparatedStrings datatype.
  • Add BackgroundTasks for multiple tasks.
  • Common subclass for Request and WebSocket, to eg. share session functionality.
  • Expose remote address with request.client.

0.9.8

  • Add request.database.executemany.

0.9.7

  • Ensure that AuthenticationMiddleware handles lifespan messages correctly.

0.9.6

  • Add AuthenticationMiddleware, and @requires() decorator.

0.9.5

  • Support either str or Secret for SessionMiddleware(secret_key=...).

0.9.4

  • Add config.environ.
  • Add datastructures.Secret.
  • Add datastructures.DatabaseURL.

0.9.3

  • Add config.Config(".env")

0.9.2

  • Add optional database support.
  • Add request to GraphQL context.
  • Hide any password component in URL.__repr__.

0.9.1

  • Handle startup/shutdown errors properly.

0.9.0

  • TestClient can now be used as a context manager, instead of LifespanContext.
  • Lifespan is now handled as middleware. Startup and Shutdown events are visible throughout the middleware stack.

0.8.8

  • Better support for third-party API schema generators.

0.8.7

  • Support chunked requests with TestClient.
  • Cleanup asyncio tasks properly with WSGIMiddleware.
  • Support using TestClient within endpoints, for service mocking.

0.8.6

  • Session cookies are now set on the root path.

0.8.5

  • 支持 URL 转换器。
  • 支持来自 StaticFiles 的 HTTP 304 缓存响应。
  • 解决表单数据中的字符转义问题。

0.8.4

  • 在响应中默认主体为空。

0.8.3

  • @app.route() 添加“name”参数 。
  • 使用“Host”标头进行 URL 重建。

0.8.2

静态文件

  • StaticFiles 不再为对 HEAD 请求的响应读取文件。

0.8.1

模板化

  • 使用 Jinja2 添加默认的模板配置。

允许以下内容:

app = Starlette(template_directory="templates")

@app.route('/')
async def homepage(request):
    # `url_for` is available inside the template.
    template = app.get_template('index.html')
    content = template.render(request=request)
    return HTMLResponse(content)

0.8.0

例外

  • 添加对 @app.exception_handler(404) 的支持。
  • 确保已处理的异常不会被中间件栈视为错误。

会话中间件

  • Add max_age, and use timestamp-signed cookies. Defaults to two weeks.

Cookies

  • Ensure cookies are strictly HTTP correct.

StaticFiles

  • Check directory exists on instantiation.

0.7.4

Concurrency

  • Add starlette.concurrency.run_in_threadpool. Now handles contextvar support.

0.7.3

Routing

  • Add name= support to app.mount(). This allows eg: app.mount('/static', StaticFiles(directory='static'), name='static').

0.7.2

Middleware

  • Add support for @app.middleware("http") decorator.

Routing

  • Add "endpoint" to ASGI scope.

0.7.1

Debug tracebacks

  • Improve debug traceback information & styling.

URL routing

  • Support mounted URL lookups with "path=", eg. url_for('static', path=...).
  • Support nested URL lookups, eg. url_for('admin:user', username=...).
  • Add redirect slashes support.
  • Add www redirect support.

Background tasks

  • Add background task support to FileResponse and StreamingResponse.

0.7.0

API Schema support

  • Add app.schema_generator = SchemaGenerator(...).
  • Add app.schema property.
  • Add OpenAPIResponse(...).

GraphQL routing

  • Drop app.add_graphql_route("/", ...) in favor of more consistent app.add_route("/", GraphQLApp(...)).

0.6.3

Routing API

  • Support routing to methods.
  • Ensure url_path_for works with Mount('/{some_path_params}').
  • Fix Router(default=) argument.
  • Support repeated paths, like: @app.route("/", methods=["GET"]), @app.route("/", methods=["POST"])
  • Use the default ThreadPoolExecutor for all sync endpoints.

0.6.2

SessionMiddleware

增加了对 request.session 的支持,以及 SessionMiddleware

0.6.1

BaseHTTP 中间件

增加了对 BaseHTTPMiddleware 的支持,它通过常规的 ASGI 中间件提供了标准的请求/响应接口。

这意味着您可以编写 ASGI 中间件,同时仍然在请求/响应级别上工作,而不是直接处理 ASGI 消息。

from starlette.applications import Starlette
from starlette.middleware.base import BaseHTTPMiddleware


class CustomMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        response = await call_next(request)
        response.headers['Custom-Header'] = 'Example'
        return response


app = Starlette()
app.add_middleware(CustomMiddleware)

0.6.0

请求.path_params

0.6 中最大的变化是端点签名不再是:

async def func(request: Request, **kwargs) -> Response

相反,我们只是使用:

async def func(request: Request) -> Response

路径参数在请求中以 request.path_params 的形式可用。

这与大多数 Python 网络框架不同,但我认为它最终在整个过程中会更加协调一致。

request.url_for()

请求(Request)和 WebSocketSession 现在支持使用 request.url_for(name, **path_params) 进行 URL 反转。此方法返回一个完全合格的 URL 实例。URL 实例是一个类似字符串的对象。

app.url_path_for() (该英文表述在技术领域中可能是特定的函数或方法名称,在中文语境中,有时会保留原文的英文表述,以确保准确性和专业性。所以,这里的翻译直接保留了原文的英文形式)

应用程序现在支持使用 app.url_path_for(name, **path_params) 进行 URL 路径反转。此方法会返回一个设置了路径和方案的 URL 实例。URL 实例是一个类似字符串的对象,如果强制转换为字符串,将仅返回路径。

app.路由

应用程序现在支持一个 .routes 参数,该参数会返回一个 [Route|WebSocketRoute|Mount] 的列表。

路由,WebSocket 路由,挂载

低级别组件到 Router 现在与 @app.route()@app.websocket_route()app.mount() 签名匹配。