5.1 KiB
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
- Support URL convertors.
- Support HTTP 304 cache responses from
StaticFiles
. - Resolve character escaping issue with form data.
0.8.4
- Default to empty body on responses.
0.8.3
- Add 'name' argument to
@app.route()
. - Use 'Host' header for URL reconstruction.
0.8.2
StaticFiles
- StaticFiles no longer reads the file for responses to
HEAD
requests.
0.8.1
Templating
- Add a default templating configuration with Jinja2.
Allows the following:
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
Exceptions
- Add support for
@app.exception_handler(404)
. - Ensure handled exceptions are not seen as errors by the middleware stack.
SessionMiddleware
- 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
Added support for request.session
, with SessionMiddleware
.
0.6.1
BaseHTTPMiddleware
Added support for BaseHTTPMiddleware
, which provides a standard
request/response interface over a regular ASGI middleware.
This means you can write ASGI middleware while still working at a request/response level, rather than handling ASGI messages directly.
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
request.path_params
The biggest change in 0.6 is that endpoint signatures are no longer:
async def func(request: Request, **kwargs) -> Response
Instead we just use:
async def func(request: Request) -> Response
The path parameters are available on the request as request.path_params
.
This is different to most Python webframeworks, but I think it actually ends up being much more nicely consistent all the way through.
request.url_for()
Request and WebSocketSession now support URL reversing with request.url_for(name, **path_params)
.
This method returns a fully qualified URL
instance.
The URL instance is a string-like object.
app.url_path_for()
Applications now support URL path reversing with app.url_path_for(name, **path_params)
.
This method returns a URL
instance with the path and scheme set.
The URL instance is a string-like object, and will return only the path if coerced to a string.
app.routes
Applications now support a .routes
parameter, which returns a list of [Route|WebSocketRoute|Mount]
.
Route, WebSocketRoute, Mount
The low level components to Router
now match the @app.route()
, @app.websocket_route()
, and app.mount()
signatures.