34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
class PUTParsingMiddleware:
|
|
""" Fuerza a django a parsear el body de una request con método PUT
|
|
|
|
Django no parsea este tipo de request, dejando todo en el body, esto es por varias razones
|
|
aparentemente validas explicadas aquí
|
|
"https://groups.google.com/forum/#!msg/django-developers/dxI4qVzrBY4/m_9IiNk_p7UJ"
|
|
asi que no hay nada que hacerle, sin embargo, para el caso de uso de esta
|
|
aplicación, se puede asumir que sera seguro y funcionara correctamente.
|
|
|
|
Este código lo saque el blog post "https://thihara.github.io/Django-Req-Parsing/"
|
|
"""
|
|
|
|
def __init__(self, func):
|
|
self.func = func
|
|
|
|
def __call__(self, request, *args, **kwargs):
|
|
if request.method == 'PUT' and request.content_type == 'application/x-www-form-urlencoded':
|
|
if hasattr(request, '_post'):
|
|
del request._post
|
|
del request._files
|
|
|
|
try:
|
|
request.method = "POST"
|
|
request._load_post_and_files()
|
|
request.method = "PUT"
|
|
except AttributeError:
|
|
request.META['REQUEST_METHOD'] = 'POST'
|
|
request._load_post_and_files()
|
|
request.META['REQUEST_METHOD'] = 'PUT'
|
|
|
|
request.PUT = request.POST
|
|
|
|
return self.func(request, *args, **kwargs)
|