在同一模板django中插入/删除帖子请求

时间:2015-09-30 14:36:17

标签: jquery python mysql django

我有一个显示数据的表格,我有一个带有提交按钮的表单,该表单在mysql数据库中插入数据,我在每行旁边添加了说“删除”的按钮,所以我可以删除网站中的每一行太

当我点击按钮时我得到了id,但我还不知道如何将它传递给视图,但我现在的主要问题是第二篇文章无效。

template.py

<tr>
     <td>{{b.ip}}</td>
     <td>{{b.polling_time}}</td>
     <td>{{b.communitydata}}</td>
     <td>{{b.snmp_oid}}</td>
     <td>{{b.lastcheck|date:"Y.m.d H:m:s"}}</td>
     <form action="/services/listpoll/" method="post">{% csrf_token %}
       <td><input type="button" id="{{b.id}}" class="delete_poll" value="Borrar"></td>
     </form>
 </tr>

jquery的

$(".delete_poll").click(function(){

          id_poll = $(this).attr('id');

  });

views.py

def listpolls(request):
    connect_mysql = mdb.connect('***', '***', '***', '***')
    cursorMYSQL = connect_mysql.cursor(mdb.cursors.DictCursor)
    query = "select id,ip,polling_time,communitydata,snmp_oid,lastcheck from snmptt_listpolls order by ip desc limit 100"
    cursorMYSQL.execute(query)
    b = cursorMYSQL.fetchall()
    connect_mysql.close()

    if request.method == 'POST':

        form = AddPollForm(request.POST)

        if form.is_valid():

            ip = form.cleaned_data['poll_ip']
            poll_time = form.cleaned_data['poll_time']
            communitydata = form.cleaned_data['communitydata']
            snmp_oid = form.cleaned_data['snmp_oid']
            lastcheck = form.cleaned_data['lastcheck']

            cursorMYSQL = connect_mysql.cursor(mdb.cursors.DictCursor)
            cursorMYSQL.execute("""insert into snmptt_listpolls (ip, polling_time, communitydata, snmp_oid) values ('%s','%s','%s','%s')"""%(ip, poll_time, communitydata, snmp_oid))

            connect_mysql.commit()
            connect_mysql.close()

            return HttpResponseRedirect('listpolls.html')

        elif request.method == 'POST' and not form.is_valid(): 

            id_poll = '53';

            cursorMYSQL = connect_mysql.cursor(mdb.cursors.DictCursor)
            cursorMYSQL.execute(""" delete from snmptt_listpolls where id='%s' """%(id_poll))

            connect_mysql.commit()
            connect_mysql.close()

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

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

所以,这次我只是想检查帖子请求是否正常工作,所以当我点击它会删除53 id的行,但它不起作用,所以我想我做错了什么这篇文章没有通过。

谢谢!

2 个答案:

答案 0 :(得分:0)

我无法发表评论。所以请将其视为评论。

我认为执行不会到达第二篇文件

elif request.method=="POST":

另外,为什么不使用Django模型而不是使用MySQL明确地使用它。

要删除项目,您可以使用带有项目ID的jquery ajax post请求并在视图中处理它。

答案 1 :(得分:0)

在一个视图中处理两个(或更多)不同的表单并不是火箭科学:你只需要确定发布了哪个表单,这可以通过每个表单中的隐藏输入轻松完成。

 <td>
   <!-- HTML doesn't allow <form> around the <td> -->
   <form action="/services/listpoll/" method="post">
     {% csrf_token %}
     <input type="hidden" name="action" value="delete">
     <input type="hidden" name="poll_id" value="{{b.id}}">
     <input type="button" class="delete_poll" value="Borrar">
   </form>
 </td>

现在你可以摆脱你无用的jquery东西并在视图中处理删除:

def listpolls(请求):     #snip这里无关的MySQLdb代码,     #请使用orm或至少使用db后端连接

if request.method == 'POST':
    if request.post.get("action", "") == "delete":            
        # don't assume - check
        poll_id = request.post.get("poll_id", None)
        if poll_id is not None:
            delete_poll_here()
    else: 
        form = AddPollForm(request.POST)
        # etc

现在请自己(以及任何必须维护代码的人)服务:学会正确使用Django的ORM,学会正确使用Python的dbapi ......这:

cursorMYSQL.execute(
   """insert into snmptt_listpolls 
       (ip, polling_time, communitydata, snmp_oid) 
      values ('%s','%s','%s','%s')
   """ % (ip, poll_time, communitydata, snmp_oid))

对SQL注入非常开放。正确的方法是

cursorMYSQL.execute(
   """insert into snmptt_listpolls 
       (ip, polling_time, communitydata, snmp_oid) 
      values (%s,%s,%s,%s)
   """, (ip, poll_time, communitydata, snmp_oid))

但是当你有Models和ModelForms时,你真的不需要在Django中使用它。