Minor cleaning up on View

This commit is contained in:
Tom Christie 2013-04-09 18:22:39 +01:00
parent 027792c981
commit c73d0e1e39
2 changed files with 16 additions and 12 deletions

View File

@ -87,9 +87,7 @@ else:
raise ImportError("User model is not to be found.")
# First implementation of Django class-based views did not include head method
# in base View class - https://code.djangoproject.com/ticket/15668
if django.VERSION >= (1, 4):
if django.VERSION >= (1, 5):
from django.views.generic import View
else:
from django.views.generic import View as _View
@ -97,6 +95,8 @@ else:
from django.utils.functional import update_wrapper
class View(_View):
# 1.3 does not include head method in base View class
# See: https://code.djangoproject.com/ticket/15668
@classonlymethod
def as_view(cls, **initkwargs):
"""
@ -126,11 +126,15 @@ else:
update_wrapper(view, cls.dispatch, assigned=())
return view
# Taken from @markotibold's attempt at supporting PATCH.
# https://github.com/markotibold/django-rest-framework/tree/patch
http_method_names = set(View.http_method_names)
http_method_names.add('patch')
View.http_method_names = list(http_method_names) # PATCH method is not implemented by Django
# _allowed_methods only present from 1.5 onwards
def _allowed_methods(self):
return [m.upper() for m in self.http_method_names if hasattr(self, m)]
# PATCH method is not implemented by Django
if 'patch' not in View.http_method_names:
View.http_method_names = View.http_method_names + ['patch']
# PUT, DELETE do not require CSRF until 1.4. They should. Make it better.
if django.VERSION >= (1, 4):

View File

@ -38,10 +38,9 @@ class APIView(View):
@property
def allowed_methods(self):
"""
Return the list of allowed HTTP methods, uppercased.
Wrap Django's private `_allowed_methods` interface in a public property.
"""
return [method.upper() for method in self.http_method_names
if hasattr(self, method)]
return self._allowed_methods()
@property
def default_response_headers(self):
@ -69,7 +68,8 @@ class APIView(View):
def http_method_not_allowed(self, request, *args, **kwargs):
"""
Called if `request.method` does not correspond to a handler method.
If `request.method` does not correspond to a handler method,
determine what kind of exception to raise.
"""
raise exceptions.MethodNotAllowed(request.method)