mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-01-23 15:54:16 +03:00
Minor cleaning up on View
This commit is contained in:
parent
027792c981
commit
c73d0e1e39
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user