8

我想向我的应用程序发送一个 PATCH 请求,但我不确定如何在 Django 中使用该请求。我目前收到以下错误。

AttributeError: 'WSGIRequest' object has no attribute 'PATCH'

HTMX 文件中的输入字段如下所示(我还确保发送 CSRF 令牌):

<input 
        name="myfield"
        hx-patch="{% url 'my_update' myobj.id %}"
        hx-swap="none" />

这是 Django 视图

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 的最佳方法是什么?

4

2 回答 2

5

您需要手动解析请求正文,可以通过访问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))
于 2021-12-10T11:15:11.837 回答
3

文档中,您的表单信息将在request.POST属性中。您可以检查PATCHs 与if request.method == "PATCH"

于 2021-12-07T14:38:26.303 回答