mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-11 12:17:24 +03:00
35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
"""Mixin classes that provide a determine_method(request) function to determine the HTTP
|
|
method that a given request should be treated as. We use this more generic behaviour to
|
|
allow for overloaded methods in POST forms.
|
|
|
|
See Richardson & Ruby's RESTful Web Services for justification.
|
|
"""
|
|
|
|
class MethodMixin(object):
|
|
"""Base class for all MethodMixin classes, which simply defines the interface they provide."""
|
|
def determine_method(self, request):
|
|
"""Simply return GET, POST etc... as appropriate."""
|
|
raise NotImplementedError()
|
|
|
|
|
|
class StandardMethodMixin(MethodMixin):
|
|
"""Provide for standard HTTP behaviour, with no overloaded POST."""
|
|
|
|
def determine_method(self, request):
|
|
"""Simply return GET, POST etc... as appropriate."""
|
|
return request.method.upper()
|
|
|
|
|
|
class OverloadedPOSTMethodMixin(MethodMixin):
|
|
"""Provide for overloaded POST behaviour."""
|
|
|
|
"""The name to use for the method override field in the POST form."""
|
|
METHOD_PARAM = '_method'
|
|
|
|
def determine_method(self, request):
|
|
"""Simply return GET, POST etc... as appropriate, allowing for POST overloading
|
|
by setting a form field with the requested method name."""
|
|
method = request.method.upper()
|
|
if method == 'POST' and self.METHOD_PARAM and request.POST.has_key(self.METHOD_PARAM):
|
|
method = request.POST[self.METHOD_PARAM].upper()
|
|
return method |