我有一个显示数据的表格,我有一个带有提交按钮的表单,该表单在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的行,但它不起作用,所以我想我做错了什么这篇文章没有通过。
谢谢!
答案 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中使用它。