Как обрабатывать PATCH-запрос от HTMX в Django?
Я хочу отправить запрос PATCH в мое приложение, но я не уверен, как использовать этот запрос в Django. В настоящее время я получаю следующую ошибку.
AttributeError: 'WSGIRequest' object has no attribute 'PATCH'
Поле ввода в HTMX-файле выглядит следующим образом (я также убедился, что отправил CSRF-токен):
<input
hx-patch="{% url 'my_update' myobj.id %}"
hx-swap="none" />
Это представление Django View
class MyHtmxView(View):
def patch(self, request, *args, **kwargs):
form = MyForm(request.PATCH)
if form.is_valid():
form.save()
# return an okay status? 200?
else:
return HttpResponse(self.form_invalid(form))
Django получает запрос, но не уверен, что делать с request.PATCH. Я вижу в документации Django, что есть HttpRequest.GET и HttpRequest.POST, но нет HttpRequest.PATCH https://docs.djangoproject.com/en/3.2/ref/request-response/#httprequest-objects. Как лучше всего обрабатывать PATCH?
Если вы хотите использовать запрос патча. Для этого вы можете добавить drf APIView. Например:
class MyClass(APIView):
def patch(self, request):
pass
Исходя из документов , информация о вашей форме будет находиться в атрибуте request.POST
. Вы можете проверить наличие PATCH
с помощью if request.method == "PATCH"
.
На этот вопрос ответили здесь
Вам необходимо вручную разобрать тело запроса, доступ к которому можно получить через request.body
и разобрать с помощью QueryDict(request.body)
from django.http.request import QueryDict
class MyHtmxView(View):
def patch(self, request, *args, **kwargs):
# parse request body mannualy
data = QueryDict(request.body)
form = MyForm(data)
if form.is_valid():
form.save()
# return an okay status? 200?
else:
return HttpResponse(self.form_invalid(form))