Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django视图中的ListView中检查POST方法?I';我得到一个405错误_Python_Django_Django Forms_Django Views - Fatal编程技术网

Python 如何在Django视图中的ListView中检查POST方法?I';我得到一个405错误

Python 如何在Django视图中的ListView中检查POST方法?I';我得到一个405错误,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,这对我来说是失败的。它给了我一个“405方法不允许的错误”。它是指POST方法是吗?如何检查一个职位?还是我应该做一些完全不同的事情 class StuffList(ListView): template_name = "list.html" queryset = Stuff.objects.all().order_by('-whatever') context_object_name = 'stuff' def get(self, request, *args

这对我来说是失败的。它给了我一个“405方法不允许的错误”。它是指POST方法是吗?如何检查一个职位?还是我应该做一些完全不同的事情

class StuffList(ListView):
    template_name = "list.html"
    queryset = Stuff.objects.all().order_by('-whatever')
    context_object_name = 'stuff'

    def get(self, request, *args, **kwargs):
        if request.POST:
            q = request.POST.get('q')
            stuff = Stuff.objects.filter(user__icontains=stuff)
            return render(request, self.template_name, {'stuff': stuff, 'q': q }) 
在我的表单中,我将令牌放置在表单操作的正内部,如下所示:

  <form action="/stuff/" method="post" name="q">
     {% csrf_token %}

{%csrf_令牌%}

这是因为您正在发出POST请求,但只定义了GET方法。如果添加一个POST方法,它应该完成以下操作:

def post(self, request, *args, **kwargs):
    stuff = request.POST.get('q')
    stuff = self.get_queryset().filter(user__icontains=stuff)
    return render(request, self.template_name, {'stuff': stuff, 'q': q })
但是,如果您只是在筛选列表,使用get是正确的解决方案,在这种情况下,您必须将表单标记
method=“post”
更改为
method=“get”
,并使您的get方法如下所示:

def get(self, request, *args, **kwargs):
    stuff = self.get_queryset()
    if request.GET.get('q'):
        q = request.GET.get('q')
        stuff = stuff.filter(user__icontains=q)
    return render(request, self.template_name, {'stuff': stuff, 'q': q }) 
也许您应该看看Django表单,它可以进行数据验证、表单生成等工作。

这是因为您正在发出POST请求,但只定义了GET方法。如果添加一个POST方法,它应该完成以下操作:

def post(self, request, *args, **kwargs):
    stuff = request.POST.get('q')
    stuff = self.get_queryset().filter(user__icontains=stuff)
    return render(request, self.template_name, {'stuff': stuff, 'q': q })
但是,如果您只是在筛选列表,使用get是正确的解决方案,在这种情况下,您必须将表单标记
method=“post”
更改为
method=“get”
,并使您的get方法如下所示:

def get(self, request, *args, **kwargs):
    stuff = self.get_queryset()
    if request.GET.get('q'):
        q = request.GET.get('q')
        stuff = stuff.filter(user__icontains=q)
    return render(request, self.template_name, {'stuff': stuff, 'q': q }) 
也许您应该看看Django表单,它可以进行数据验证、表单生成等工作。

ListView可以发布请求吗?我一直得到一个405禁止错误?405方法不允许或403禁止?如果是403禁烟,我想是因为你错过了CSRF饼干。在这种情况下,您必须在模板的表单中包含
{%csrf\u token%}
标记。如果你只是过滤列表,也许你可以覆盖
get\u queryset
方法我更新了上面的帖子。我得到了一个405方法,这是不允许的。我的模板中的表单中也有CSRF cookie。如果我在您的答案中使用def get方法,则会出现以下错误:无法将None用作查询值我已编辑我的答案。抱歉,如果不执行以下代码,就很难防止错误:)ListView可以执行Post请求吗?我一直得到一个405禁止错误?405方法不允许或403禁止?如果是403禁烟,我想是因为你错过了CSRF饼干。在这种情况下,您必须在模板的表单中包含
{%csrf\u token%}
标记。如果你只是过滤列表,也许你可以覆盖
get\u queryset
方法我更新了上面的帖子。我得到了一个405方法,这是不允许的。我的模板中的表单中也有CSRF cookie。如果我在您的答案中使用def get方法,则会出现以下错误:无法将None用作查询值我已编辑我的答案。抱歉,如果不执行以下代码,就很难防止错误:)