python - 确认浏览器预取导致删除

标签 python mysql django python-3.x google-chrome

我正在尝试测试一种理论,即浏览器中的预取会导致我的 Django 应用程序中出现无法解释的删除。

这是我的 views.py 中的删除方法:

def delete(request, part_id=None):
    obj = epe.objects.get(id=part_id)
    obj.delete()
    logger.error('Someone deleted record: '+str(part_id))
    return HttpResponseRedirect(reverse('epe_home'))

以及我如何在我的模板中使用 url:

<td><a href="{% url 'epedelete' epe.id %}"><input class="btn btn-danger" type="button" value="Delete" /></a></td>

当这个方法被激活时,你可以看到我正在记录,但我仍然有不明原因的删除,没有来自记录器的任何日志。这让我想知道无法解释的删除是否完全是由我的方法引起的。

我仅有的删除日志来自 MySQL 日志,如下所示:

6798 Connect
user@hostname on dbname
6798 Query
SET NAMES utf8
6798 Query
set autocommit=0
6798 Query
set autocommit=1
6798 Query
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
6798 Query
SELECT `Epe_epe`.`id`, `Epe_epe`.`epe_type`, `Epe_epe`.`epe_type2_id`, `Epe_epe`.`epe_date`, `Epe_epe`.`epe_ani`, `Epe_epe`.`epe_ani2_id`, `Epe_epe`.`epe_apn`, `Epe_epe`.`epe_apn2_id`, `Epe_epe`.`epe_weight`, `Epe_epe`.`epe_drug_type1`, `Epe_epe`.`epe_drug1`, `Epe_epe`.`epe_dose1`, `Epe_epe`.`epe_amount1`, `Epe_epe`.`epe_route1`, `Epe_epe`.`epe_time1`, `Epe_epe`.`epe_drug_type2`, `Epe_epe`.`epe_drug2`, `Epe_epe`.`epe_dose2`, `Epe_epe`.`epe_amount2`, `Epe_epe`.`epe_route2`, `Epe_epe`.`epe_time2`, `Epe_epe`.`epe_drug_type3`, `Epe_epe`.`epe_drug3`, `Epe_epe`.`epe_dose3`, `Epe_epe`.`epe_amount3`, `Epe_epe`.`epe_route3`, `Epe_epe`.`epe_time3`, `Epe_epe`.`epe_drug_type4`, `Epe_epe`.`epe_drug4`, `Epe_epe`.`epe_dose4`, `Epe_epe`.`epe_amount4`, `Epe_epe`.`epe_route4`, `Epe_epe`.`epe_time4`, `Epe_epe`.`epe_drug_type5`, `Epe_epe`.`epe_drug5`, `Epe_epe`.`epe_dose5`, `Epe_epe`.`epe_amount5`, `Epe_epe`.`epe_route5`, `Epe_epe`.`epe_time5`, `Epe_epe`.`epe_drug_type6`, `Epe_epe`.`epe_drug6`, `Epe_epe`.`epe_dose6`, `Epe_epe`.`epe_amount6`, `Epe_epe`.`epe_route6`, `Epe_epe`.`epe_time6`, `Epe_epe`.`epe_iso_start`, `Epe_epe`.`epe_iso_end`, `Epe_epe`.`epe_o2_end`, `Epe_epe`.`epe_start1`, `Epe_epe`.`epe_start2`, `Epe_epe`.`epe_start3`, `Epe_epe`.`epe_start4`, `Epe_epe`.`epe_start5`, `Epe_epe`.`epe_start6`, `Epe_epe`.`epe_start7`, `Epe_epe`.`epe_start8`, `Epe_epe`.`epe_hr1`, `Epe_epe`.`epe_hr2`, `Epe_epe`.`epe_hr3`, `Epe_epe`.`epe_hr4`, `Epe_epe`.`epe_hr5`, `Epe_epe`.`epe_hr6`, `Epe_epe`.`epe_hr7`, `Epe_epe`.`epe_hr8`, `Epe_epe`.`epe_spo2_1`, `Epe_epe`.`epe_spo2_2`, `Epe_epe`.`epe_spo2_3`, `Epe_epe`.`epe_spo2_4`, `Epe_epe`.`epe_spo2_5`, `Epe_epe`.`epe_spo2_6`, `Epe_epe`.`epe_spo2_7`, `Epe_epe`.`epe_spo2_8`, `Epe_epe`.`epe_temp1`, `Epe_epe`.`epe_temp2`, `Epe_epe`.`epe_temp3`, `Epe_epe`.`epe_temp4`, `Epe_epe`.`epe_temp5`, `Epe_epe`.`epe_temp6`, `Epe_epe`.`epe_temp7`, `Epe_epe`.`epe_temp8`, `Epe_epe`.`epe_etco2_1`, `Epe_epe`.`epe_etco2_2`, `Epe_epe`.`epe_etco2_3`, `Epe_epe`.`epe_etco2_4`, `Epe_epe`.`epe_etco2_5`, `Epe_epe`.`epe_etco2_6`, `Epe_epe`.`epe_etco2_7`, `Epe_epe`.`epe_etco2_8`, `Epe_epe`.`epe_rr1`, `Epe_epe`.`epe_rr2`, `Epe_epe`.`epe_rr3`, `Epe_epe`.`epe_rr4`, `Epe_epe`.`epe_rr5`, `Epe_epe`.`epe_rr6`, `Epe_epe`.`epe_rr7`, `Epe_epe`.`epe_rr8`, `Epe_epe`.`epe_comment` FROM `Epe_epe` WHERE `Epe_epe`.`id` = 1508
6798 Query
set autocommit=0
6798 Query
DELETE FROM `Epe_epe` WHERE `Epe_epe`.`id` IN (1508)
6798 Query
commit
6798 Query
set autocommit=1
6798 Quit

上面的delete 方法是我允许在我的应用程序中删除的唯一情况。我知道在 GET 请求中进行破坏性操作可能会导致我看到无法解释的删除,所以我想弄清楚这里是否是这种情况。它可能来自其他地方吗?

我不确定这是否相关,但我仍在使用与 Django 捆绑在一起的开发服务器。我允许多台机器上的多个用户访问我的应用程序以帮助调试过程。无法在这种情况下使用生产级服务器以某种方式导致无法解释的删除?

最佳答案

基于 Django 类的通用 View 允许对象删除 see the docs因此,如果您正在使用它们,即使您没有定义(重载)它,您也会在每个 View 中获得 delete 方法。

关于python - 确认浏览器预取导致删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53026807/

相关文章:

django - 模型自依赖(一对多字段)实现

python - Django 安装问题 No module named django.core

python - 从电子邮件正文中提取域名

python - Pandas - 创建行以在列中输入

php - MySQLi 不更新我的查询

mysql - SQL 外键和引用其他表

python - builtwith: import SyntaxError 即使在添加了 Python 3 支持之后?

python - 属性错误: 'module' object has no attribute 'DMatrix

mysql - MySql 数据库中的序列化数据可在商业智能工具中使用

django - 在 Django 应用程序的数据库列中保存标签(逗号分隔)会使大数据库变慢