mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-01-24 00:04: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.")
|
raise ImportError("User model is not to be found.")
|
||||||
|
|
||||||
|
|
||||||
# First implementation of Django class-based views did not include head method
|
if django.VERSION >= (1, 5):
|
||||||
# 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
|
||||||
else:
|
else:
|
||||||
from django.views.generic import View as _View
|
from django.views.generic import View as _View
|
||||||
|
@ -97,6 +95,8 @@ else:
|
||||||
from django.utils.functional import update_wrapper
|
from django.utils.functional import update_wrapper
|
||||||
|
|
||||||
class View(_View):
|
class View(_View):
|
||||||
|
# 1.3 does not include head method in base View class
|
||||||
|
# See: https://code.djangoproject.com/ticket/15668
|
||||||
@classonlymethod
|
@classonlymethod
|
||||||
def as_view(cls, **initkwargs):
|
def as_view(cls, **initkwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -126,11 +126,15 @@ else:
|
||||||
update_wrapper(view, cls.dispatch, assigned=())
|
update_wrapper(view, cls.dispatch, assigned=())
|
||||||
return view
|
return view
|
||||||
|
|
||||||
# Taken from @markotibold's attempt at supporting PATCH.
|
# _allowed_methods only present from 1.5 onwards
|
||||||
# https://github.com/markotibold/django-rest-framework/tree/patch
|
def _allowed_methods(self):
|
||||||
http_method_names = set(View.http_method_names)
|
return [m.upper() for m in self.http_method_names if hasattr(self, m)]
|
||||||
http_method_names.add('patch')
|
|
||||||
View.http_method_names = list(http_method_names) # PATCH method is not implemented by Django
|
|
||||||
|
# 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.
|
# PUT, DELETE do not require CSRF until 1.4. They should. Make it better.
|
||||||
if django.VERSION >= (1, 4):
|
if django.VERSION >= (1, 4):
|
||||||
|
|
|
@ -38,10 +38,9 @@ class APIView(View):
|
||||||
@property
|
@property
|
||||||
def allowed_methods(self):
|
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
|
return self._allowed_methods()
|
||||||
if hasattr(self, method)]
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def default_response_headers(self):
|
def default_response_headers(self):
|
||||||
|
@ -69,7 +68,8 @@ class APIView(View):
|
||||||
|
|
||||||
def http_method_not_allowed(self, request, *args, **kwargs):
|
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)
|
raise exceptions.MethodNotAllowed(request.method)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user