воскресенье, 26 апреля 2009 г.

Страшный секрет

Дело в том, что в Django есть магия, которую нельзя удалить! Собственно я вот об этом:

ponybadge

И вообще это необычайный фреймворк (для тех кто не в курсе), а Cal Henderson вообще его ненавидит и рассказывает об этом серьёзным и зловещим голосом.

А теперь, когда вы это узнали, вас придётся убрать.

среда, 22 апреля 2009 г.

Патчим Django

Для задачи, которую на досуге пописываю, понадобилось мне изобразить wizard, причём на последней странице нужна капча против ботов.
Для капчи я решил использовать supercaptcha. В принципе это не единственное решение, скажем, я писал уже о Django Simple Captcha, но суперкапча мне как-то больше приглянулась.
Что касается wizard'а, то в django.contrib есть класс FormWizard, предназначенный как раз для этого.
И вроде всё хорошо, но обнаружился ньюанс - на самом последнем шаге FormWizard валидирует заново все данные, которые ввёл пользователь. Для обычных полей проблем никаких не возникает (разве что чуть больше времени тратится), а с капчей такой фокус не пройдёт, т.к. валидация у неё "одноразовая". Править капчу, на мой взгляд, в данном случае неправильно, поэтому пришлось внести изменения в FormWizard, о которых я написал ticket 10810 в Trac Django. По сути дела там реализован "хак", т.к. просто последняя форма не ревалидируется заново. Как решить задачу чтобы "и волки сыты, и овцы целы" я так пока и не придумал. Но текущее решение вполне работоспособное, поэтому пока остановлюсь на неём.

четверг, 16 апреля 2009 г.

Нам скрывать нечего!

Django - фреймворк с открытым кодом. И мало того, что открыт код самого фреймворка, если есть желание, то вполне можно посмотреть исходный код основного сайта Django - djangoproject.com, для этого надо лишь зайти в репозиторий Subversion. Я для себя, к примеру, обнаружил там ссылку на библиотечку Universal Feed Parser, как раз для проекта, который хочется реализовать.

четверг, 9 апреля 2009 г.

На деревню дедушке

Если продолжать тему ресурсов, посвящённых Django, то обязательно стоит упомянуть списки Google группы:
Правда отечественная не очень-то активна. А на английском немного раздражают сообщения с довольно тривиальными вопросами, например с проблемой в виде опечатки в коде, или по поводу вещей, хорошо описанных в документации. Но зато попадаются очень интересные и информативные ссылки, так, например, предыдущее видео я как раз подсмотрел в рассылке.
И ещё на мой вопрос, заданный вчера там, никто не ответил, хотя обычно отвечают быстро и исчерпывающе. Наверное слишком специфический сценарий, придётся решать самому :)
В целом, думаю, что группы - довольно полезный источник информации, к тому же там можно получить консультацию знающих людей.

вторник, 7 апреля 2009 г.

Простая магия переиспользования

Наткнулся на очень интересное видео с Джеймсом Беннетом, одним из значимых разработчиков в Django и автором книги Practical Django Projects, несколько устаревшей (по версии фреймворка), но, судя по всему, стоящей (поэтому она стоит у меня в списке к прочтению). В этом видео он рассказывает об очень важной составляющей идеологии фреймворка - идеи reusable apps, т.е. переиспользуемых приложений. В соответствии с ней, сайт представляет собой не оргомную монолитную кучу кода, а совокупность отдельных приложений, небольших, отвечающих за отдельную функциональность, но делающих это хорошо. За счёт этого приложение становится более прозрачным, код - более переиспользуемым, и повышается его поддерживаемость и расширяемость. На примерах показывается каким образом можно строить эти самые reusable apps.
Этому же посвящена 1-я часть слайдов с презентации Real World Django, прошедшей на PyCon 2009 (очень жалко, что не опубликовано видео оттуда).

воскресенье, 5 апреля 2009 г.

Простота - сильное преимущество.

Вначале я уже писал, что хотел попробовать веб-разработку на Haskell, и этот пункт всё ещё остаётся в моём TODO-списке.
Однако, читая заметки по воду создания сайта на Happstack (а это, на мой взгляд, один из интересных веб-фреймворков на Haskell) натыкаешься на разные моноиды, монадные трансформеры и т.п. вещи. В итоге у меня получается, что больше думаешь над тем как это всё выражено в типах, чем над самим содержанием приложения. Тогда как на Django прочитав учебник уже можно ваять, немного подглядывая по поводу конкретных тонкостей.
Хотя, возможно, тут сказывается мой небольшой опыт разработки на Haskell и, вероятно, если бы я попрограммировал полгодика, то уже бы все эти монады и иже с ними не оттягивали на себя внимание.
Только вот python до Django я практически не знал, а по Haskell прочитал далеко не один tutorial.
Так что фактор кривой обучения играет довольно сильно в пользу Django.

пятница, 3 апреля 2009 г.

Инструмент для ловли жуков

Обнаружил тут довольно интересное расширение - Django Debug Toolbar, которое добавляет на сайт вспомогательную панельку с информацией, полезной для отладки приложения. Если точнее там можно увидеть:
  • полную версию дистрибутива джанго;
  • время выполнения с разбивкой и числом переключений контекста;
  • настройки проекта (т.е. по сути ваш settings.py);
  • заголовки HTTP;
  • параметры запроса, т.е. куки, содержание словаря сессии, параметры GET и POST;
  • запросы SQL с их временем выполнения и планами;
  • шаблоны, которые использовались для форматирования ответа;
  • логи приложения (правда я ещё даже не пробовал их использовать)
Прикольная вещь на мой взгляд.
И всё это есть простое расширение на python, устанавливаемое буквально за 5 минут. Т.е. имеем ещё один аргумент в пользу расширяемости и удобства фреймворка.

среда, 1 апреля 2009 г.

Язык определяет мышление

Наверное, многие знают, что, согласно гипотезе Сепира - Уорфа, язык человека определяет его мышление и способ познания реальности. Поэтому, во-первых, программисту не стоит замыкаться на одном языке, и, во-вторых, стоит выбирать такой язык, который как можно лучше позволяет реализовывать проще и удобне решения задач, которые стоят перед разработчиком. К области веб-приложений это тоже вполне применимо.
Так вот "основой" для Django служит очень неплохой язык python: довольно простой и в то же время одновременно выразительно мощный и элегантный. Одной из наиболее ценных черт его, на мой взгляд, является целостность, т.е. все составляющие следуют общим принципам (наверное, тут снова стоит упомянуть The Zen of Python), одним из которых является There's Only One Way To Do It (Есть только один способ сделать это). Следование этому принципу уменьшает число вариантов, которые стоит рассматривать при решение задачи, поэтому разработчик тратит меньше времени и усилий, что не может не радовать. Хотя есть мнение, что ограничение свободы не есть положительная вещь, т.к. рамки сковывают "твоческий порыв". В качестве противоположной идеи сразу вспоминается перловский TIMTOWTDI. Однако, по-моему простота и скорость работы играют чаще всего определяющую роль, а если надо будет решать какие-то более "креативные" задачи, то никто не запрещает использовать другой инструмент.
В python я ещё пока совсем новичёк, поэтому для "подтягивания" своих навыков штудирую книгу Dive Into Python (текст доступен онлайн, есть и русская версия, хотя я предпочитаю читать оригинал) - довольно неплохо написано, правда стиль со сносками к исходникам мне немного не нравится.