django视图中POST请求中的多个值不起作用

时间:2015-10-02 08:59:58

标签: python django forms post request

我有三个不同的按钮用于不同的目的(从表中插入和删除),每个按钮应该在POST中处理不同的值。我设法用

做了一次

if request.method =='POST'和request.POST.get(“name_of_button”,“”)=='value_of_button'

但是当我再次使用相同的想法换一个不同的按钮时,它就不起作用了。每个条件中的代码都可以正常工作,当我添加第二个条件时,它就不会进入if。

views.py

def listpolls(request):

    #mysql connection here#

    form = AddPollForm()
    form_del = DelPollForm()

    if request.method == 'POST' and request.POST.get("btn_add_name", "") == 'btn_add_val':

        form = AddPollForm(request.POST)
        form_del = DelPollForm(request.POST)

        if form.is_valid():

            ip = form.cleaned_data['poll_ip']
            #poll_time = form.... etc

            #whatever you want to do here#

            return HttpResponseRedirect('listpolls.html')

        else:

            return render_to_response("listpolls.html",{"buffer_data": b, 'form': form, 'form_del': form_del} )        

    elif request.method == 'POST':

         #whatever you want to do here#

        return HttpResponseRedirect('listpolls.html')

    elif request.method == 'POST' and request.POST.get("btn_delbyip_name", "") == 'btn_delbyip_val':

         #whatever you want to do here#

            return HttpResponseRedirect('listpolls.html')

        else:

            return HttpResponseRedirect('listpolls.html')   

    else:
        return render_to_response("listpolls.html",{"buffer_data": b, 'form': form, 'form_del': form_del} )

模板

<form action="/services/listpolls/" method="post">{% csrf_token %}

    {{ form }}

    <button type="submit" value="btn_add_val" name="btn_add_name">Añadir</button>

</form> 

<form action="/services/listpolls/" method="post">{% csrf_token %}

    {{ form_del }}

   <button type="submit" value="btn_delbyip_val" name="btn_delbyip_name">Borrar por IP</button>

   </form>

    <form action="/services/listpolls/" method="post">{% csrf_token %}
           <button type="submit" value="{{b.id}}" name="btn_borrar" class="delete_poll">Borrar</button>
         </form>

2 个答案:

答案 0 :(得分:2)

这是一个简单的逻辑错误。操作是POST但按钮不是“btn_add_val”的每个案例都被第一个elif捕获。如果你想抓住“btn_delbyip_name”,你应该把它移到那个elif之前。

答案 1 :(得分:0)

删除所有不相关的代码后,您就可以获得&#39; if&#39;像这样的逻辑结构:

def listpolls(request):

    if request.method == 'POST' and request.POST.get("btn_add_name", "") == 'btn_add_val':
        pass
    elif request.method == 'POST':
        pass
    elif request.method == 'POST' and request.POST.get("btn_delbyip_name", "") == 'btn_delbyip_val':
        pass
    else:
        pass

解释那个结构: 首先,如果将检查请求是否是POST以及某些POST参数是否具有所需值。如果是,它将计算一些东西并保留整个结构。如果没有,它将继续下一个elif。

其次将检查请求是否为POST。如果是,它将计算一些东西并保留整个结构。如果没有,它将继续下一个elif。

第三个将检查请求是否为POST以及某个POST参数是否具有所需值。如果是,它将计算一些东西并保留整个结构。如果没有,它将继续其他。

否则会计算一些东西并留下if的结构。

现在我们可以清楚地看到这里发生了什么,如果第一个条件不是真的,这是后请求,第二个条件总是真的!因此,第三个条件甚至不会被检查。您应该简单地交换第二个和第三个条件(附加整个代码),它将起作用。