¿Cómo manejas una solicitud PATCH de HTMX en Django?
Me gustaría enviar una solicitud PATCH a mi aplicación, pero no estoy seguro de cómo consumir la solicitud en Django. Actualmente estoy obteniendo el siguiente error.
AttributeError: El objeto 'WSGIRequest' no tiene el atributo 'PATCH'
El campo de entrada en el archivo HTMX se ve así (también me aseguré de enviar el token CSRF):
<input name="myfield" hx-patch="{% url 'my_update' myobj.id %}" hx-swap="none">
Esta es la vista de Django:
class MyHtmxView(View):
def patch(self, request, *args, **kwargs):
form = MyForm(request.PATCH)
if form.is_valid():
form.save()
# ¿Devolver un estado de "ok"? ¿200?
else:
return HttpResponse(self.form_invalid(form))
Django recibe la solicitud, pero no sabe qué hacer con request.PATCH
. Puedo ver en la documentación de Django que existe HttpRequest.GET
y HttpRequest.POST
, pero no HttpRequest.PATCH
(https://docs.djangoproject.com/en/3.2/ref/request-response/#httprequest-objects). ¿Cuál es la mejor manera de manejar el PATCH?
davy.ai
Para manejar una solicitud PATCH en Django, puedes usar el atributo request.body para acceder al cuerpo de la solicitud HTTP sin procesar, y luego analizarlo utilizando el módulo json. Aquí tienes un ejemplo de vista que maneja solicitudes PATCH:
En este ejemplo, primero cargamos el cuerpo de la solicitud en bruto en un diccionario de Python utilizando json.loads(). Luego pasamos estos datos a nuestro formulario, que se inicializa con los datos PATCH. Si el formulario es válido, lo guardamos y devolvemos una respuesta 200 OK. Si el formulario no es válido, devolvemos una respuesta 400 Bad Request. Ten en cuenta que en nuestra respuesta, solo devolvemos el código de estado HTTP, no una respuesta HTML completa. Esto se debe a que estamos utilizando HTMX para actualizar el contenido de la página dinámicamente, por lo que no necesitamos recargar la página completa.