Merge pull request #606 from monobot/master

Fix URL Parse Error #599
This commit is contained in:
Raphael Deem 2017-04-02 12:16:24 -07:00 committed by GitHub
commit 875790e862
2 changed files with 17 additions and 9 deletions

View File

@ -9,30 +9,34 @@ The following variables are accessible as properties on `Request` objects:
```python ```python
from sanic.response import json from sanic.response import json
@app.route("/json") @app.route("/json")
def post_json(request): def post_json(request):
return json({ "received": True, "message": request.json }) return json({ "received": True, "message": request.json })
``` ```
- `args` (dict) - Query string variables. A query string is the section of a - `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, 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 `args` dictionary would look like `{'key1': ['value1'], 'key2': ['value2']}`.
The request's `query_string` variable holds the unparsed string value. The request's `query_string` variable holds the unparsed string value.
```python ```python
from sanic.response import json from sanic.response import json
@app.route("/query_string") @app.route("/query_string")
def query_string(request): def query_string(request):
return json({ "parsed": True, "args": request.args, "url": request.url, "query_string": request.query_string }) return json({ "parsed": True, "args": request.args, "url": request.url, "query_string": request.query_string })
``` ```
- `raw_args` (dict) - On many cases you would need to access the url arguments in
a less packed dictionary. For same previous URL `?key1=value1&key2=value2`, the
`raw_args` dictionary would look like `{'key1': 'value1', 'key2': 'value2'}`.
- `files` (dictionary of `File` objects) - List of files that have a name, body, and type - `files` (dictionary of `File` objects) - List of files that have a name, body, and type
```python ```python
from sanic.response import json from sanic.response import json
@app.route("/files") @app.route("/files")
def post_json(request): def post_json(request):
test_file = request.files.get('test') test_file = request.files.get('test')
@ -50,7 +54,7 @@ The following variables are accessible as properties on `Request` objects:
```python ```python
from sanic.response import json from sanic.response import json
@app.route("/form") @app.route("/form")
def post_json(request): def post_json(request):
return json({ "received": True, "form_data": request.form, "test": request.form.get('test') }) return json({ "received": True, "form_data": request.form, "test": request.form.get('test') })
@ -58,15 +62,15 @@ The following variables are accessible as properties on `Request` objects:
- `body` (bytes) - Posted raw body. This property allows retrieval of the - `body` (bytes) - Posted raw body. This property allows retrieval of the
request's raw data, regardless of content type. request's raw data, regardless of content type.
```python ```python
from sanic.response import text from sanic.response import text
@app.route("/users", methods=["POST",]) @app.route("/users", methods=["POST",])
def create_user(request): def create_user(request):
return text("You are trying to create a user with the following POST: %s" % request.body) return text("You are trying to create a user with the following POST: %s" % request.body)
``` ```
- `ip` (str) - IP address of the requester. - `ip` (str) - IP address of the requester.
- `app` - a reference to the Sanic application object that is handling this request. This is useful when inside blueprints or other handlers in modules that do not have access to the global `app` object. - `app` - a reference to the Sanic application object that is handling this request. This is useful when inside blueprints or other handlers in modules that do not have access to the global `app` object.

View File

@ -121,6 +121,10 @@ class Request(dict):
self.parsed_args = RequestParameters() self.parsed_args = RequestParameters()
return self.parsed_args return self.parsed_args
@property
def raw_args(self):
return {k: v[0] for k, v in self.args.items()}
@property @property
def cookies(self): def cookies(self):
if self._cookies is None: if self._cookies is None: