Python 如何在Django视图中的ListView中检查POST方法?I';我得到一个405错误
这对我来说是失败的。它给了我一个“405方法不允许的错误”。它是指POST方法是吗?如何检查一个职位?还是我应该做一些完全不同的事情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
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用作查询值我已编辑我的答案。抱歉,如果不执行以下代码,就很难防止错误:)