Files
musiclist-server/utils/middleware.py
2020-06-28 08:02:11 -04:00

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)