发布版本
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 日
添加的
- 允许在
StreamingResponse
和Response
#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"]
toNone
onTestClient
(#2377)" #2525. - Remove deprecated
app
argument passed tohttpx.Client
on theTestClient
#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
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
whenWebSocket.send()
exceptsIOError
#2425. - Raise
FileNotFoundError
when theenv_file
parameter onConfig
is not valid #2422.
0.35.1
January 11, 2024
固定的
- Stop using the deprecated "method" parameter in
FileResponse
inside ofStaticFiles
#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 toTestClient
#2207. - Add
__str__
toHTTPException
andWebSocketException
#2181. - Warn users when using
lifespan
together withon_startup
/on_shutdown
#2193. - Collect routes from
Host
to generate the OpenAPI schema #2183. - Add
request
argument toTemplateResponse
#2191.
固定的
- Stop
body_stream
in casemore_body=False
onBaseHTTPMiddleware
#2194.
0.28.0
June 7, 2023
Changed
- Reuse
Request
's body buffer for call_next inBaseHTTPMiddleware
#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
- Support lifespan state #2060, #2065 and #2064.
Changed
- Change
url_for
signature to return aURL
instance #1385.
Fixed
- Allow "name" argument on
url_for()
andurl_path_for()
#2050.
Deprecated
- Deprecate
on_startup
andon_shutdown
events #2070.
0.25.0
February 14, 2023
Fix
- Limit the number of fields and files when parsing
multipart/form-data
on theMultipartParser
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 toUploadFile
#1405. - Add
env_prefix
argument toConfig
#1990. - Add template context processors #1904.
- Support
str
anddatetime
onexpires
parameter on theResponse.set_cookie
method #1908.
Changed
- Lazily build the middleware stack #2017.
- Make the
file
argument required onUploadFile
#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 theBaseHTTPMiddleware
#1940.
0.23.0
December 5, 2022
添加的
- Add
headers
parameter to theTestClient
#1966.
已过时
- 弃用
Starlette
和Router
装饰器 #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 toMount
class #1649. - Officially support Python 3.11 #1863.
- Implement
__repr__
for route classes #1864.
Fixed
- Fix bug on which
BackgroundTasks
were cancelled when usingBaseHTTPMiddleware
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
固定的
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
onBaseHTTPMiddleware
#1609. - Add
__bool__
dunder forSecret
#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
onwebsocket.disconnect
when code isNone
#1574.
已过时
- Deprecate
WS_1004_NO_STATUS_RCVD
andWS_1005_ABNORMAL_CLOSURE
in favor ofWS_1005_NO_STATUS_RCVD
andWS_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 toHTTPException
#1435. - Internal responses with
405
status code insert anAllow
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
。
已过时
0.18.0
January 23, 2022
Added
- Change default chunk size from 4Kb to 64Kb on
FileResponse
#1345. - Add support for
functools.partial
inWebSocketRoute
#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
toWebSocket
close ASGI event #1417. - Add headers attribute to
UploadFile
#1382. - Don't omit
Content-Length
header forContent-Length: 0
cases #1395. - Don't set headers for responses with 1xx, 204 and 304 status code #1397.
SessionMiddleware.max_age
now acceptsNone
, so cookie can last as long as the browser session #1387.
固定的
- Tweak
hashlib.md5()
function onFileResponse
s ETag generation. The parameterusedforsecurity
flag is set toFalse
, 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 onurl_path_for()
method i.e. turnstr
intoAny
#1341. Host
now ignoresport
on routing #1322.
0.17.1
November 17, 2021
固定的
- Fix
IndexError
in authenticationrequires
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 asResponse.set_cookie
#1228.- Update the
Jinja2Templates
constructor to allowPathLike
#1292.
固定的
- Fix BadSignature exception handling in SessionMiddleware #1264.
- Change
HTTPConnection.__getitem__
return type fromstr
totyping.Any
#1118. - Change
ImmutableMultiDict.getlist
return type fromtyping.List[str]
totyping.List[typing.Any]
#1235. - Handle
OSError
exceptions onStaticFiles
#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 toGraphQLApp
was removed. Useexecutor_class
instead. - The
workers
parameter toWSGIMiddleware
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
ResourceWarning
s when using theTestClient
with WebSocket endpoints - #1132. - Improved detection of
async
endpoints wrapped infunctools.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 offormat_tb
inServerErrorMiddleware
'sdebug
responses. - Be more lenient with handler arguments when using the
requires
decorator.
0.13.8
-
Revert
Queue(maxsize=1)
fix forBaseHTTPMiddleware
middleware classes and streaming responses. -
The
StaticFiles
constructor now allowspathlib.Path
in addition to strings for itsdirectory
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 ofdatabases
- Templates are no longer configured on the application instance. Use
templates = Jinja2Templates(directory=...)
andreturn templates.TemplateResponse('index.html', {"request": request})
- Schema generation is no longer attached to the application instance. Use
schemas = SchemaGenerator(...)
andreturn 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 requirejinja2
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 ofDatabaseMiddleware
. 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 端点。 MultiDict
和ImmutableMultiDict
类在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
andWebSocket
, to eg. sharesession
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
orSecret
forSessionMiddleware(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 ofLifespanContext
.- 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 handlescontextvar
support.
0.7.3
Routing
- Add
name=
support toapp.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
andStreamingResponse
.
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 consistentapp.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()
签名匹配。