Тьфу. Вы правы. «Deleted successfully» и наличествующий root ввели меня в заблуждение.
Тогда мне вдвойне не понятно, чего еще ждать от метода модели, если речь идет о кверисете. Ну, как я и говорил, нет там магии: джанга не делает различий для одного или нескольких инстансов, экшены, ясное дело, работают через менеджер модели.
Джанго админ — это приложение. Самое настоящее, такое. Оно там CRUD и прочее. Не магия! Вы скажете, она должна быть умнее, я скажу чем проще тем лучше. Мне кажется это очевидным: вы зарубили delete (полностью переопределили, даже не взглянув в оригинальный), метод не вызвал ошибки (вы ее не дали вызвать), вы видите, что метод ничего не возвращает — каким образом джанга должна понять, что что-то пошло не так? Через валидаторы — вы же принт не отправили в продакшен? Приложение совершенно точно сообщает вам, что метод отработал без экспешенов и показывает предписанное сообщение, заметим: сама джанга читать не умеет, она еще совсем маленькая.
3. Два админа
Блокировку надо где-то хранить, такие штуки нельзя предусмотреть для всех случаев, вы это делаете сами.
Второй пункт вполне справедливо, даже тупо, прям: валидация описывается в модели, но работает в админке.
Вы зря ждете от джанги магии, это приложение, смотрите сорцы — они ничуть не сложнее доков, зато в 10 раз нагляднее.
Сам себе отвечу: gdk-pixbuf-psd.
Вот тут мил человек собрал для amd64, есть и для i386 у него же. Дальше gnome eye открывает как любую картинку, все окей.
{{ form.hidden_tag() }}
{% for field in form if field.widget.input_type != 'hidden' %}
{{ field.label }}
{{ field }}
{% endfor %}
form.hidden_tag() — метода фласка, отдает все хидден филды в невидимом диве. Чтобы было красиво, без этого input_type != 'hidden', можно добавить метод в саму форму (и наследовать ее), что-то вроде:
from flask.ext.wtf.form import _is_hidden
class BaseForm(Form):
def visible_fields(self):
return [f for f in self if not _is_hidden(f)]
Ну и дальше в шаблоне. А для крутых случаев есть макросы.
Некоторые поля могут принимать аргументы. В нашем случае, мы просим форму создать наше поле openid с шириной в 80 символов
Если можно, попросите, пожалуйста, Стаса не спешить в докладах, местами он срывается до Busta Rhymes и мысль просто не успевает усвоиться. Про асинхронное программирование можно было бы продолжить в контексте работы с различными бд/сервисами и библиотеками при большом количестве подключений (из практики: проблемы, случаи, удачные решения), а если еще и зазором на py3 — вообще красота. Ну, это так, мне, по крайней, мере это интересно.
Еще стоит вспомнить как долго эпл поддерживает свои железяки. Скажем, через пару лет новый 64-битный андроид можно будет поставить только на новое железо, а владельцы 5S тупо нажмут «Start update».
По первому докладу, там вопрос был что-то вроде «зачем использовать неймдтаплы, если есть словари» и ему ответили, что это просто разное. У меня случай был такой: я как-то оптимизировал страничку одну «пышную», где Мако темплейты ожидали получить список инстансов модели и, соответственно, в цикле были обращения к атрибутам. Я недолго думая, написал сырой селект, перегнал данные в неймдтаплы и вуаля — темплейты менять не надо, а производительность в разы увеличилась. Если завтра я задумаюсь снова передать в контексте экземпляры класса модели мне снова не придется менять шаблоны. Неймдтаплы просто ультра производительные по сравнению с толстобокими инстансами ормов, поэтому такой фокус получается крайне дешевым и абсолютно безвредным.
Хорошо, что поправили. Да это рекавери. Выдержка из фака:
CyanDelta supports TWRP recovery and CWM-based open-source recoveries (they are the open-source version of ClockworkMod recovery)
CyanDelta failed to install a zip in recovery on my device!
You probably have the official closed-source ClockworkMod recovery. It’s not supported by CyanDelta because his author has locked it to only work with his proprietary app “ROM Manager”, so we are unable to support it.
Т.е. только опенсорс версии CWM или TWRP, оригинальный CWM закрыт.
Есть специальное приложение CyanDelta. Хорошая штука, если вы на ночнушке. Ему надо скормить дистрибутив цьяна и он сможет скачивать только дельты весом от 5 до 15 мегабайт, из-за чего апдейт происходит за несколько минут. Присутствует также дельта-лог, например, если ченджлоге нет ничего интересного апдейт можно просто пропустить. Замечу, что ему нужен открытый бутлоадер, например TWRP.
Это я понял. Речь как раз о геймплее: скриншоты доты2 не отличить от варкрафта — карты такие же, анимация такая же; многие персонажи очень и очень похожи; магические эффекты начиная от всякого рода ball'ов, заканчивая кружками с рунами под ногами персонажа во время примененного заклинания.
Сто лет назад играли в какую-то карту доты на движке варкрафта. Теперь это дота2 и она от велв. Посмотрел видео на ютубе — да, вроде, варкрафт. На лурке более или менее стало ясно, что движок велв написала свой. А теперь вопрос: раз геймплей, а так же персонажи, прямо таки варкрафтовские, почему близард их не засудил еще?
Тем более, прочитав, как тот же близард, прое… проморгал такое детище, думаю батхерт там должна извергать напалм и плазму, и понемногу смещать планету с орбиты.
упд: вот, что значит «почитал лурк», теперь весь день буду так говорить.
Автор, спасибо тебе за находку. Учитывая, что оно может обновлять TTL, удалять и менять значения по паттерну, можно проще и удобнее работать с кешем без необходимости заранее знать все ключи (для удаления, обновления). Ждем питоновскую библиотеку.
mdel
Description: Delete keys verifying the given expression.
Parameters: key (string) The key prefix to use as expression.
Return value: Mixed The integer number of deleted items in case of success, FALSE in case of failure.
$gibson->mdel('f'); // Delete every f* key.
Мемкешд и редис не умеют так (редис, разве что, через консоль). А это в свою очередь позволяет удалять все значения, например, для измененной категории:
// Сохраняем страничку в кеше
$gibson->set('/foo/', 'bar');
// Меняем что-то там и кеширем
$gibson->set('/foo/', 'egg');
// Выносим каскадно все дочерние страницы из кеша
$gibson->mdel('/foo/');
«Delete every f* key.» — очень доходчиво, как по мне :)
Тогда мне вдвойне не понятно, чего еще ждать от метода модели, если речь идет о кверисете. Ну, как я и говорил, нет там магии: джанга не делает различий для одного или нескольких инстансов, экшены, ясное дело, работают через менеджер модели.
Блокировку надо где-то хранить, такие штуки нельзя предусмотреть для всех случаев, вы это делаете сами.
Второй пункт вполне справедливо, даже тупо, прям: валидация описывается в модели, но работает в админке.
Вы зря ждете от джанги магии, это приложение, смотрите сорцы — они ничуть не сложнее доков, зато в 10 раз нагляднее.
Вот тут мил человек собрал для amd64, есть и для i386 у него же. Дальше gnome eye открывает как любую картинку, все окей.
form.hidden_tag()— метода фласка, отдает все хидден филды в невидимом диве. Чтобы было красиво, без этогоinput_type != 'hidden', можно добавить метод в саму форму (и наследовать ее), что-то вроде:Ну и дальше в шаблоне. А для крутых случаев есть макросы.
Логика в шаблоне, как по мне. Прямо из доков.
WTForms — клевые.
Т.е. только опенсорс версии CWM или TWRP, оригинальный CWM закрыт.
Тем более, прочитав, как тот же близард, прое… проморгал такое детище, думаю батхерт там должна извергать напалм и плазму, и понемногу смещать планету с орбиты.
упд: вот, что значит «почитал лурк», теперь весь день буду так говорить.
Мемкешд и редис не умеют так (редис, разве что, через консоль). А это в свою очередь позволяет удалять все значения, например, для измененной категории:
«Delete every f* key.» — очень доходчиво, как по мне :)
Вот собсно, я так и прочитал: «архивируем ничего в постгрес» — Хм? Бессмыслица какая-та.
Спасибо.