ФорумПрограммированиеPythonDjango → Objects state assertion

Objects state assertion

  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 14 марта 2014 г. 22:54

    Эдво? Порассуждаем? ну или вообще и в похапе это относится.

    Есть модель, например Article (статья).

    У нее например есть is_published поле.

    Допустим есть модуль комментирования, который должен позволять комментировать только опубликованные статьи.

    Article имеет функцию submit_comment(from, commentbody)

    Внимание, вопрос)

    Как это делается true way на ваш взгляд?

    Допустим в view мы все делаем для того, чтобы интерфейс не позволял закоментить неопубликованную статью, но всем очевидно что это не спасет от, например, curl'а :)

    То есть техническая возможность послать запрос на комментирование есть какбы по дефолту.

    Как по простому ограничить возможность оставлять такие комментарии и как обрабатывать ошибки такие?

    Мне если честно лень писать дохуя кода для этого, поэтому в голову приходят только assertion's, как заглушка для такого. В url обработчиках просто приложение будет валиться с 500ой ошибкой, ну и да похуй, ведь этого не увидит обычный юзер?

    Как вы к такому относитесь?

    Хочется прийти к балансу User & Developer Friendly way.

    Сапожник без сапог
  • Ivan.

    Сообщения: 494 Репутация: N Группа: Адекваты

    Spritz 15 марта 2014 г. 2:51, спустя 3 часа 56 минут 41 секунду

    Почему нельзя просто проверить статью на публикованность при постинге комментария?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 15 марта 2014 г. 2:55, спустя 3 минуты 39 секунд

    @Ivan., можно. я разве сказал что нельзя?)

    Сапожник без сапог
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 15 марта 2014 г. 3:14, спустя 19 минут 33 секунды

    в контроллере проверять есть ли вообще запрошенная статья и опубликована ли она?
  • Sinkler

    Сообщения: 8083 Репутация: N Группа: в ухо

    Spritz 15 марта 2014 г. 3:17, спустя 2 минуты 23 секунды

    ну как бы геморно в каждом контроллере для таких случаев проверять(

  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 15 марта 2014 г. 3:17, спустя 42 секунды

    ну как бы геморно в каждом контроллере для таких случаев проверять(

    @Sinkler, единственный человек из ответивших понимает о чем я говорю)

    Спустя 43 сек.

    в контроллере проверять есть ли вообще запрошенная статья и опубликована ли
    она?

    @vasa_c, так и делается обычно, я ищу альтернативы. такой путь - гемор)

    Сапожник без сапог
  • Sinkler

    Сообщения: 8083 Репутация: N Группа: в ухо

    Spritz 15 марта 2014 г. 3:30, спустя 12 минут 15 секунд

    вообще всегда думал, что можно что-нибудь через прокси-модели накостылять. или через Meta.permissions. но решения влоб глядя в доки не вижу

  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 15 марта 2014 г. 3:31, спустя 1 минуту 3 секунды

    @Sinkler, влоб решение только что в голову пришло - custom исключение + middleware который их обрабатывает. с текстом аля "Ой простите, тут пиздец все не так, вернитесь назад".

    Примерно так)

    Спустя 61 сек.

    аля

    raise StateError("Expection published article, but fucking draft was found")
    

    Спустя 55 сек.

    джанго тут собственно не причем, просто речь не о ней, а вообще. проблема есть в любом языке и решение должно быть применимо к любому языку.

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 15 марта 2014 г. 6:38, спустя 3 часа 7 минут 42 секунды

    Да, эксепшены самое то для этого.

    Я там, где нормальный пользователь не может дойти до определенных мест ставлю assert, т.е. всякие боты, скрипткидисы и т.п. смотрят 500-ую

    Спустя 57 сек.

    Обрабатывать исключения в middleware.process_exception самое то, когда хочется сделать полностью красиво

    Спустя 58 сек.

    Делать кастомные исключения это тру вей

    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 15 марта 2014 г. 7:45, спустя 1 час 6 минут 15 секунд

    @adw0rd, то есть ты тоже ассершн банально) я о них в первую очередь подумал.

    я о них и думал, но с ними нельзя текстик указать "для слишком умных"))

    кастом эсшн будет чуток более человекоприятный, уже "прогиб" под пользователя

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 15 марта 2014 г. 9:12, спустя 1 час 27 минут 4 секунды

    я о них и думал, но с ними нельзя текстик указать "для слишком умных"))

    Текстик можно:

    assert a == b, _('Fuck off!')
    
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 15 марта 2014 г. 9:14, спустя 1 минуту 54 секунды

    @adw0rd, 😲

    вот это охуенски) на этом и остановимся значит

    Спустя 36 сек.

    + миддлварь суну и будет так жить, достаточно будет

    Сапожник без сапог
  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 27 марта 2014 г. 17:05, спустя 12 дней 7 часов 51 минуту

    Эксепшен кидается, только чтобы не писать return чтоли?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 27 марта 2014 г. 17:08, спустя 3 минуты 11 секунд

    Эксепшен кидается, только чтобы не писать return чтоли?

    @mathete, почему? нет.

    есть штуки которые не могут в нормальных условиях возникнуть.

    их можно только руками "создать". аля был инвойск оплаченый и ктото еще раз оплату кидает (как прример любая realtime payment system, аля paypal)

    ктото пытается подделать например его.

    нет желания ради таких "умников" делать красивые странички "бобобо".

    А вот кинуть custom exception(ну или assertionexception) и словить его в middleware куда более интересно кажется и вывести болванку))

    суть именно в нештатных ситуациях.

    Сапожник без сапог
  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 27 марта 2014 г. 17:26, спустя 17 минут 47 секунд

    Чего-то не врубаюсь без куска кода. @adw0rd вроде понял о чём речь, потом у него спрошу :)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!