Блог | Интернет нового века | webnewage.org

Интернет нового века

О django, веб-программировании и не только

Давно уже сталкиваюсь с одним неудобством в повседневной работе с джангой.

Например у нас есть моделька:

class Entry( models.Model ):
    title = models.CharField( max_length = 150 )
    type = <...>

И каким полем выразить тип (да, знаю, что имя конфликтует со встроенным, но тут это не принципиально)? "Ха!" - скажут некоторые. Да просто взять IntegerField и сделать типы целыми числами от 0 до сколько надо. Легко!

TYPES = ( ( 0, _( "inactive" ) ),
          ( 1, _( "active" ) ) )

class Entry( models.Model ):
    title = models.CharField( max_length = 150 )
    type = models.PositiveIntegerField( choices = TYPES )

Казалось бы, проблема решена. И этим можно пользоваться. Но, тут сразу начинаются неудобства.

Для того чтобы код не превращался в склад "магических чисел" надо добавить соответствующие константы, которые описывают эти два типа.

INACTIVE = 0
ACTIVE   = 1

# или даже
INACTIVE, ACTIVE = range( 0, 2 )

потом можно пойти ещё дальше и выразить choices через них, чтобы было меньше дублирования

TYPES = ( ( INACTIVE, _( "inactive" ) ),
          ( ACTIVE, _( "active" ) ) )

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

Читать далее

Наконец-то! Уверен, что я не один воскликнул это слово, когда узнал что долгожданная queryset-refactor ветка влилась в транк и теперь ORM в джанго стал ещё лучше и удобней! Этого момента ждали долга, поскольку это один из самых больших шагов по направлению к 1.0 версии джанги. Итак, что же мы получили.

Начну с основных изменения уже имеющегося функционала:

  • Указание сортировки по при-join-ненным моделям теперь стало более логичным и совпадает с фильтрами lookup'ов. Просто пример:

    Order.objects.all().order_by( "product__price" )
    
  • Обновлена реализация __iter__ метода queryset'a. И не грузит все строки результат в память сразу.

  • Особенно меня радует: сделана нормальная обработка None значения в lookup'ах. Т.е. если раньше приходилось писать писать воркэраунды для случая когда селект осуществлялся по NULL значениям, например так:

    if value is None:
        queryset = queryset.filter( field__isnull = True )
    else:
        queryset = queryset.filter( field = value )
    

    То теперь эта проверка лишняя не нужна. Ура!)

  • Есть ещё некоторое количество изменений, но они на низко уровне и на прямую ...

Читать далее

Со временем роста количества проектов, понимаешь как дорого строит их поддержка. Когда проектов мало, то что-то править и дописывать не трудно и почти не раздражает. А вот когда количество проектов переваливает за некоторое критическое число, то становится мучительно сложно что-то менять и обновлять. А особенно, когда эти проекты зависят от некоторой единой базы кода, т.е. грубо говоря от одних библиотек.

Я всегда использую транк джанги, поскольку релизится она не часто, а для примера можете сравнить насколько отличается текущая её версия от последнего релиза. Ага, как-будто вообще разные фреймворки в некоторых местах:)

Ну транк, так транк. Все хорошо, проект пишется какое-то время со свежим транком. Потом к счастью проект релизится и выходит в продакшн. И вот через некоторое время нужно либо что-то дописать, либо что-то исправить. Ну а почему бы и джангу не обновить под шумок и ещё несколько очередных плюшек новых использовать. Не проблема, обновили, код подправили и живем дальше. Но!

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

Читать далее

Этим вопросом я задаюсь очень часто последнее время. И чаще всего получаю на него ответ - "нету". Да, многие сайты, которые я регулярно посещаю, не имеют версию для мобильных устройств. Это очень разочаровывает.

nokia n95 8gb

Недавно я обзавелся новым мобильным телефоном. Это моё первое устройство, которое имеет GPRS/EDGE. И я сразу же стал активным потребителем беспроводного трафика.

По первости очень порадовал Google который имеет упрощенные версии своих сервисов. От почты до работы с документами. Для почты, карт и поиска есть даже J2ME приложения, которые делают ещё более удобным работу с сервисами.

Ещё Яндекс имеет некоторое количество сервисов заточенных под мобильные устройства. Это тоже радует.

Но вот другие сайты такой заботой к клиентам не отличаются. Увы.

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

А вообще впечатление моё от интернета в мобильном телефоне - супер! Да, я в восторге. Теперь я могу быть на связи через IM клиент почти круглые сутки ...

Читать далее

Данный материал не является текстовой перепечаткой моего доклада на Exception #07. Это повторное изложение мыслей на заданную тему. Полная версия слайдов в формате odp - 21кб

Я имею некоторый опыт во фриланс-веб разработке. И большая его часть связана с питоном и джангой. Это сайты средней сложности, в основном контент ориентированные. По прошествии времени, я могу смело утверждать что Python и Django - это отличная связка для тех, кто хочет чего-то добиться в этой сфере быстро и с удовольствием:)

слайд 1 - титул

В момент, когда я искал новую платформу/технологию для быстрого и удобного создания сайтов, то мой взор был почти сразу обращен в сторону питона. Хоть, к тому времени с питоном я уже был знаком, но на очень низком уровне. И всё норовил перенести в него парадигмы используемые мною до этого в С++. Как вы понимаете, это ни к чему хорошему не приводило. Но постепенно благодаря всё более плотному знакомству с джангой, изучению её внутренностей и вообще изучению потоночьего кода, я стал исправляться. И чем ...

Читать далее


Generation time 0:00:03.809811