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
284a700e
Commit
284a700e
authored
Sep 27, 2012
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
head method on views for Django 1.3. Fixes #228
parent
d2583b80
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
10 additions
and
63 deletions
+10
-63
rest_framework/compat.py
+10
-63
No files found.
rest_framework/compat.py
View file @
284a700e
...
@@ -10,46 +10,17 @@ except ImportError:
...
@@ -10,46 +10,17 @@ except ImportError:
import
StringIO
import
StringIO
# django.views.generic.View (Django >= 1.3)
# First implementation of Django class-based views did not include head method
try
:
# in base View class - https://code.djangoproject.com/ticket/15668
if
django
.
VERSION
>=
(
1
,
4
):
from
django.views.generic
import
View
from
django.views.generic
import
View
if
not
hasattr
(
View
,
'head'
):
else
:
# First implementation of Django class-based views did not include head method
from
django.views.generic
import
View
as
_View
# in base View class - https://code.djangoproject.com/ticket/15668
from
django.utils.decorators
import
classonlymethod
class
ViewPlusHead
(
View
):
def
head
(
self
,
request
,
*
args
,
**
kwargs
):
return
self
.
get
(
request
,
*
args
,
**
kwargs
)
View
=
ViewPlusHead
except
ImportError
:
from
django
import
http
from
django.utils.functional
import
update_wrapper
from
django.utils.functional
import
update_wrapper
# from django.utils.log import getLogger
# from django.utils.decorators import classonlymethod
# logger = getLogger('django.request') - We'll just drop support for logger if running Django <= 1.2
# Might be nice to fix this up sometime to allow rest_framework.compat.View to match 1.3's View more closely
class
View
(
object
):
class
View
(
_View
):
"""
@classonlymethod
Intentionally simple parent class for all views. Only implements
dispatch-by-method and simple sanity checking.
"""
http_method_names
=
[
'get'
,
'post'
,
'put'
,
'delete'
,
'head'
,
'options'
,
'trace'
]
def
__init__
(
self
,
**
kwargs
):
"""
Constructor. Called in the URLconf; can contain helpful extra
keyword arguments, and other things.
"""
# Go through keyword arguments, and either save their values to our
# instance, or raise an error.
for
key
,
value
in
kwargs
.
iteritems
():
setattr
(
self
,
key
,
value
)
# @classonlymethod - We'll just us classmethod instead if running Django <= 1.2
@classmethod
def
as_view
(
cls
,
**
initkwargs
):
def
as_view
(
cls
,
**
initkwargs
):
"""
"""
Main entry point for a request-response process.
Main entry point for a request-response process.
...
@@ -66,6 +37,8 @@ except ImportError:
...
@@ -66,6 +37,8 @@ except ImportError:
def
view
(
request
,
*
args
,
**
kwargs
):
def
view
(
request
,
*
args
,
**
kwargs
):
self
=
cls
(
**
initkwargs
)
self
=
cls
(
**
initkwargs
)
if
hasattr
(
self
,
'get'
)
and
not
hasattr
(
self
,
'head'
):
self
.
head
=
self
.
get
return
self
.
dispatch
(
request
,
*
args
,
**
kwargs
)
return
self
.
dispatch
(
request
,
*
args
,
**
kwargs
)
# take name and docstring from class
# take name and docstring from class
...
@@ -76,32 +49,6 @@ except ImportError:
...
@@ -76,32 +49,6 @@ except ImportError:
update_wrapper
(
view
,
cls
.
dispatch
,
assigned
=
())
update_wrapper
(
view
,
cls
.
dispatch
,
assigned
=
())
return
view
return
view
def
dispatch
(
self
,
request
,
*
args
,
**
kwargs
):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
if
request
.
method
.
lower
()
in
self
.
http_method_names
:
handler
=
getattr
(
self
,
request
.
method
.
lower
(),
self
.
http_method_not_allowed
)
else
:
handler
=
self
.
http_method_not_allowed
self
.
request
=
request
self
.
args
=
args
self
.
kwargs
=
kwargs
return
handler
(
request
,
*
args
,
**
kwargs
)
def
http_method_not_allowed
(
self
,
request
,
*
args
,
**
kwargs
):
allowed_methods
=
[
m
for
m
in
self
.
http_method_names
if
hasattr
(
self
,
m
)]
#logger.warning('Method Not Allowed (%s): %s' % (request.method, request.path),
# extra={
# 'status_code': 405,
# 'request': self.request
# }
#)
return
http
.
HttpResponseNotAllowed
(
allowed_methods
)
def
head
(
self
,
request
,
*
args
,
**
kwargs
):
return
self
.
get
(
request
,
*
args
,
**
kwargs
)
# PUT, DELETE do not require CSRF until 1.4. They should. Make it better.
# PUT, DELETE do not require CSRF until 1.4. They should. Make it better.
if
django
.
VERSION
>=
(
1
,
4
):
if
django
.
VERSION
>=
(
1
,
4
):
from
django.middleware.csrf
import
CsrfViewMiddleware
from
django.middleware.csrf
import
CsrfViewMiddleware
...
...
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