Extend example of modifying the request in middleware document

This commit is contained in:
jacob 2019-01-02 17:29:01 +08:00
parent 613b23748d
commit ec5b790b51
2 changed files with 14 additions and 3 deletions

View File

@ -41,7 +41,7 @@ A list of Sanic extensions created by the community.
## Project Creation Template ## Project Creation Template
- [cookiecutter-sanic](https://github.com/harshanarayana/cookiecutter-sanic) Get your sanic application up and running in a matter of second in a well defined project structure. - [cookiecutter-sanic](https://github.com/harshanarayana/cookiecutter-sanic): Get your sanic application up and running in a matter of second in a well defined project structure.
Batteries included for deployment, unit testing, automated release management and changelog generation. Batteries included for deployment, unit testing, automated release management and changelog generation.
## Templating ## Templating

View File

@ -36,20 +36,31 @@ this.
``` ```
app = Sanic(__name__) app = Sanic(__name__)
@app.middleware('request')
async def add_key(request):
# Add a key to request object like dict object
request['foo'] = 'bar'
@app.middleware('response') @app.middleware('response')
async def custom_banner(request, response): async def custom_banner(request, response):
response.headers["Server"] = "Fake-Server" response.headers["Server"] = "Fake-Server"
@app.middleware('response') @app.middleware('response')
async def prevent_xss(request, response): async def prevent_xss(request, response):
response.headers["x-xss-protection"] = "1; mode=block" response.headers["x-xss-protection"] = "1; mode=block"
app.run(host="0.0.0.0", port=8000) app.run(host="0.0.0.0", port=8000)
``` ```
The above code will apply the two middleware in order. First, the middleware The above code will apply the three middleware in order. The first middleware
**add_key** will add a new key `foo` into `request` object. This worked due to
`request` object can be manipulated like `dict` object. Then, the second middleware
**custom_banner** will change the HTTP response header *Server* to **custom_banner** will change the HTTP response header *Server* to
*Fake-Server*, and the second middleware **prevent_xss** will add the HTTP *Fake-Server*, and the last middleware **prevent_xss** will add the HTTP
header for preventing Cross-Site-Scripting (XSS) attacks. These two functions header for preventing Cross-Site-Scripting (XSS) attacks. These two functions
are invoked *after* a user function returns a response. are invoked *after* a user function returns a response.