2012-03-03 3 views
4

Я перехожу к классам. Я также использую JavaScript для подтверждения удаления на стороне клиента. Для Django DeleteView требуется шаблон подтверждения удаления, который мне не нужен.Django class-based view - DeleteView - Как отключить требование подтверждения

Есть ли какой-либо простой способ отключения подтверждения на любые удаления в Django?

class EntryDeleteView(DeleteView): 
    model = Entry 
    success_url = reverse_lazy('entry_list') # go back to the list on successful del 
    template_name = 'profiles/entry_list.html' # go back to the list on successful del 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(EntryDeleteView, self).dispatch(*args, **kwargs) 
+0

добавление этого в вид удаления позволяет удалить с помощью get, но вместо этого я пойду с пост-решением. [def get (self, * args, ** kwargs): return self.delete (* args, ** kwargs)] – un33k

ответ

7

Вы должны сделать запрос POST от клиента (с помощью AJAX или POSTing формы). Это потому, что если вы разрешите что-то удалить GET, ваш сервис будет уязвим для CSRF. Кто-то отправит вашего администратора по электронной почте или как-нибудь еще, и у вас будут проблемы.

+0

У меня есть логин для всех удалений, не так ли? – un33k

+7

Нет. Посмотрите: я злой хакер, и я знаю адрес электронной почты администратора вашего сайта. Я посылаю ему ссылку на какую-то страницу с симпатичными изображениями котенка и добавляю к этой странице что-то вроде . Админ смотрит на котенка и удаляет весь его профиль. Браузеры не разрешают POST на других сайтах, а Django имеет некоторую защиту CSRF, поэтому это не будет работать с POST, поэтому для удаления требуется POST. – ilvar

+2

Что ilvar забыл упомянуть, так это то, что администратор, скорее всего, будет иметь активный сеанс входа в систему на свой сайт, минуя шаг входа. – anttikoo

1

DeleteView отображает страницу подтверждения на GET и удаляет объект, если вы используете POST или DELETE. Если ваш JS делает POST на URL-адрес после подтверждения, он должен работать так, как вы хотите.

+0

yep, я могу получить js, просто отправьте сообщение после подтверждения. – un33k

Смежные вопросы