2016-10-14 12:51:08 +01:00
|
|
|
# Request Data
|
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
When an endpoint receives a HTTP request, the route function is passed a
|
|
|
|
`Request` object.
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
The following variables are accessible as properties on `Request` objects:
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
- `json` (any) - JSON body
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
```python
|
|
|
|
from sanic.response import json
|
|
|
|
|
|
|
|
@app.route("/json")
|
|
|
|
def post_json(request):
|
|
|
|
return json({ "received": True, "message": request.json })
|
|
|
|
```
|
|
|
|
|
|
|
|
- `args` (dict) - Query string variables. A query string is the section of a
|
|
|
|
URL that resembles `?key1=value1&key2=value2`. If that URL were to be parsed,
|
|
|
|
the `args` dictionary would look like `{'key1': 'value1', 'key2': 'value2'}`.
|
|
|
|
The request's `query_string` variable holds the unparsed string value.
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
```python
|
|
|
|
from sanic.response import json
|
|
|
|
|
|
|
|
@app.route("/query_string")
|
|
|
|
def query_string(request):
|
|
|
|
return json({ "parsed": True, "args": request.args, "url": request.url, "query_string": request.query_string })
|
|
|
|
```
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
- `files` (dictionary of `File` objects) - List of files that have a name, body, and type
|
|
|
|
|
|
|
|
```python
|
|
|
|
from sanic.response import json
|
|
|
|
|
|
|
|
@app.route("/files")
|
|
|
|
def post_json(request):
|
|
|
|
test_file = request.files.get('test')
|
|
|
|
|
|
|
|
file_parameters = {
|
|
|
|
'body': test_file.body,
|
|
|
|
'name': test_file.name,
|
|
|
|
'type': test_file.type,
|
|
|
|
}
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
return json({ "received": True, "file_names": request.files.keys(), "test_file_parameters": file_parameters })
|
|
|
|
```
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
- `form` (dict) - Posted form variables.
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
```python
|
|
|
|
from sanic.response import json
|
|
|
|
|
|
|
|
@app.route("/form")
|
|
|
|
def post_json(request):
|
|
|
|
return json({ "received": True, "form_data": request.form, "test": request.form.get('test') })
|
|
|
|
```
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
- `body` (bytes) - Posted raw body. This property allows retrieval of the
|
|
|
|
request's raw data, regardless of content type.
|
|
|
|
|
|
|
|
```python
|
|
|
|
from sanic.response import text
|
|
|
|
|
|
|
|
@app.route("/users", methods=["POST",])
|
|
|
|
def create_user(request):
|
|
|
|
return text("You are trying to create a user with the following POST: %s" % request.body)
|
|
|
|
```
|
|
|
|
|
|
|
|
- `ip` (str) - IP address of the requester.
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
## Accessing values using `get` and `getlist`
|
2016-10-14 12:51:08 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
The request properties which return a dictionary actually return a subclass of
|
|
|
|
`dict` called `RequestParameters`. The key difference when using this object is
|
|
|
|
the distinction between the `get` and `getlist` methods.
|
2016-10-21 11:55:30 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
- `get(key, default=None)` operates as normal, except that when the value of
|
|
|
|
the given key is a list, *only the first item is returned*.
|
|
|
|
- `getlist(key, default=None)` operates as normal, *returning the entire list*.
|
|
|
|
|
|
|
|
```python
|
|
|
|
from sanic.request import RequestParameters
|
2016-10-21 11:55:30 +01:00
|
|
|
|
2017-01-20 03:18:52 +00:00
|
|
|
args = RequestParameters()
|
|
|
|
args['titles'] = ['Post 1', 'Post 2']
|
|
|
|
|
|
|
|
args.get('titles') # => 'Post 1'
|
|
|
|
|
|
|
|
args.getlist('titles') # => ['Post 1', 'Post 2']
|
2016-10-15 19:09:16 +01:00
|
|
|
```
|
2017-01-20 03:18:52 +00:00
|
|
|
|
|
|
|
**Previous:** [Routing](routing.html)
|
|
|
|
|
|
|
|
**Next:** [Deploying](deploying.html)
|