add-listeners-docs
This commit is contained in:
parent
5b3f92b70f
commit
6188891a53
@ -1,9 +1,13 @@
|
|||||||
# Middleware
|
# Middleware And Listeners
|
||||||
|
|
||||||
Middleware are functions which are executed before or after requests to the
|
Middleware are functions which are executed before or after requests to the
|
||||||
server. They can be used to modify the *request to* or *response from*
|
server. They can be used to modify the *request to* or *response from*
|
||||||
user-defined handler functions.
|
user-defined handler functions.
|
||||||
|
|
||||||
|
Additionally, Sanic providers listeners which allow you to run code at various points of your application's lifecycle.
|
||||||
|
|
||||||
|
## Middleware
|
||||||
|
|
||||||
There are two types of middleware: request and response. Both are declared
|
There are two types of middleware: request and response. Both are declared
|
||||||
using the `@app.middleware` decorator, with the decorator's parameter being a
|
using the `@app.middleware` decorator, with the decorator's parameter being a
|
||||||
string representing its type: `'request'` or `'response'`. Response middleware
|
string representing its type: `'request'` or `'response'`. Response middleware
|
||||||
@ -64,3 +68,45 @@ async def halt_request(request):
|
|||||||
async def halt_response(request, response):
|
async def halt_response(request, response):
|
||||||
return text('I halted the response')
|
return text('I halted the response')
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Listeners
|
||||||
|
|
||||||
|
If you want to execute startup/teardown code as your server starts or closes, you can use the following listeners:
|
||||||
|
|
||||||
|
- `before_server_start`
|
||||||
|
- `after_server_start`
|
||||||
|
- `before_server_stop`
|
||||||
|
- `after_server_stop`
|
||||||
|
|
||||||
|
These listeners are implemented as decorators on functions which accept the app object as well as the asyncio loop.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```python
|
||||||
|
@app.listener('before_server_start')
|
||||||
|
async def setup_db(app, loop):
|
||||||
|
app.db = await db_setup()
|
||||||
|
|
||||||
|
@app.listener('after_server_start')
|
||||||
|
async def notify_server_started(app, loop):
|
||||||
|
print('Server successfully started!')
|
||||||
|
|
||||||
|
@app.listener('before_server_stop')
|
||||||
|
async def notify_server_stopping(app, loop):
|
||||||
|
print('Server shutting down!')
|
||||||
|
|
||||||
|
@app.listener('after_server_stop')
|
||||||
|
async def close_db(app, loop):
|
||||||
|
await app.db.close()
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to schedule a background task to run after the loop has started,
|
||||||
|
Sanic provides the `add_task` method to easily do so.
|
||||||
|
|
||||||
|
```python
|
||||||
|
async def notify_server_started_after_five_seconds():
|
||||||
|
await asyncio.sleep(5)
|
||||||
|
print('Server successfully started!')
|
||||||
|
|
||||||
|
app.add_task(notify_server_started_after_five_seconds())
|
||||||
|
```
|
||||||
|
Loading…
x
Reference in New Issue
Block a user