Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
716d8686
Commit
716d8686
authored
Mar 12, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #695 from kuhnza/master
Support for X-HTTP-Method-Override Header
parents
043d748b
2bcb8ff1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
31 additions
and
2 deletions
+31
-2
docs/topics/browser-enhancements.md
+18
-0
rest_framework/request.py
+5
-2
rest_framework/tests/request.py
+8
-0
No files found.
docs/topics/browser-enhancements.md
View file @
716d8686
...
@@ -19,6 +19,23 @@ For example, given the following form:
...
@@ -19,6 +19,23 @@ For example, given the following form:
`request.method`
would return
`"DELETE"`
.
`request.method`
would return
`"DELETE"`
.
## HTTP header based method overriding
REST framework also supports method overriding via the
`X-HTTP-Method-Override`
header. This is useful if you are working with non-form content such as
JSON and are working with an older web server and/or hosting provider
(e.g.
[
Amazon Web Services ELB
][
aws_elb
]
) that doesn't recognise particular
HTTP methods such as
`PATCH`
.
For example, making a
`PATCH`
request via
`POST`
in jQuery:
$.ajax({
url: '/myresource/',
method: 'POST',
headers: {'X-HTTP-Method-Override': 'PATCH'},
...
});
## Browser based submission of non-form content
## Browser based submission of non-form content
Browser-based submission of content types other than form are supported by
Browser-based submission of content types other than form are supported by
...
@@ -62,3 +79,4 @@ as well as how to support content types other than form-encoded data.
...
@@ -62,3 +79,4 @@ as well as how to support content types other than form-encoded data.
[
rails
]:
http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-put-or-delete-methods-work
[
rails
]:
http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-put-or-delete-methods-work
[
html5
]:
http://www.w3.org/TR/html5-diff/#changes-2010-06-24
[
html5
]:
http://www.w3.org/TR/html5-diff/#changes-2010-06-24
[
put_delete
]:
http://amundsen.com/examples/put-delete-forms/
[
put_delete
]:
http://amundsen.com/examples/put-delete-forms/
[
aws_elb
]:
https://forums.aws.amazon.com/thread.jspa?messageID=400724
rest_framework/request.py
View file @
716d8686
...
@@ -231,10 +231,13 @@ class Request(object):
...
@@ -231,10 +231,13 @@ class Request(object):
"""
"""
self
.
_content_type
=
self
.
META
.
get
(
'HTTP_CONTENT_TYPE'
,
self
.
_content_type
=
self
.
META
.
get
(
'HTTP_CONTENT_TYPE'
,
self
.
META
.
get
(
'CONTENT_TYPE'
,
''
))
self
.
META
.
get
(
'CONTENT_TYPE'
,
''
))
self
.
_perform_form_overloading
()
self
.
_perform_form_overloading
()
# if the HTTP method was not overloaded, we take the raw HTTP method
if
not
_hasattr
(
self
,
'_method'
):
if
not
_hasattr
(
self
,
'_method'
):
self
.
_method
=
self
.
_request
.
method
# Method wasn't overloaded by hidden form element, so look for
# method override in header. If not present default to raw HTTP method
self
.
_method
=
self
.
META
.
get
(
'HTTP_X_HTTP_METHOD_OVERRIDE'
,
self
.
_request
.
method
)
def
_load_stream
(
self
):
def
_load_stream
(
self
):
"""
"""
...
...
rest_framework/tests/request.py
View file @
716d8686
...
@@ -58,6 +58,14 @@ class TestMethodOverloading(TestCase):
...
@@ -58,6 +58,14 @@ class TestMethodOverloading(TestCase):
request
=
Request
(
factory
.
post
(
'/'
,
{
api_settings
.
FORM_METHOD_OVERRIDE
:
'DELETE'
}))
request
=
Request
(
factory
.
post
(
'/'
,
{
api_settings
.
FORM_METHOD_OVERRIDE
:
'DELETE'
}))
self
.
assertEqual
(
request
.
method
,
'DELETE'
)
self
.
assertEqual
(
request
.
method
,
'DELETE'
)
def
test_x_http_method_override_header
(
self
):
"""
POST requests can also be overloaded to another method by setting
the X-HTTP-Method-Override header.
"""
request
=
Request
(
factory
.
post
(
'/'
,
{
'foo'
:
'bar'
},
HTTP_X_HTTP_METHOD_OVERRIDE
=
'DELETE'
))
self
.
assertEqual
(
request
.
method
,
'DELETE'
)
class
TestContentParsing
(
TestCase
):
class
TestContentParsing
(
TestCase
):
def
test_standard_behaviour_determines_no_content_GET
(
self
):
def
test_standard_behaviour_determines_no_content_GET
(
self
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment