Подтверждение предварительной загрузки браузера вызывает удаление - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь проверить теорию, согласно которой предварительная выборка в браузерах вызывает необъяснимые удаления в моем приложении 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 может вызвать необъяснимые удаления, которые я вижу, поэтому я пытаюсь выяснить, так ли это здесь.Есть ли какое-то другое место, откуда оно могло бы прийти?

Я не уверен, что это актуально, но я все еще использую dev-сервер, который поставляется вместе с django.Я разрешаю нескольким пользователям на нескольких машинах получать доступ к моему приложению, чтобы помочь с процессом отладки.Не может ли использование сервера производственного уровня в этом случае как-то вызвать необъяснимые удаления?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Подход, который вы выбрали, кажется правильным. Однако у меня есть другой подход, чтобы выяснить, удаляет. Вы можете написать собственный менеджер для модели django, а затем переопределить delete(). Поместите регистратор туда, дополнительным преимуществом этого подхода является то, что если любое другое приложение django или кто-либо еще попытается удалить строку из этой модели, то будет использоваться ваш пользовательский delete().

Вы можете следить за этой статьей о том, как реализовать удаление с помощью менеджера или перезаписать функцию удаления из набора запросов.

0 голосов
/ 05 ноября 2018

Общие представления на основе классов Django позволяют удалять объекты , см. Документы , поэтому, если вы используете их, вы получаете метод удаления как должное в каждом представлении, даже если вы его не определяете (перегружаете).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...