Архив

Архив раздела ‘web’

Ghost.py: Реализация sleep с обработкой событий.

Вообще мне Ghost.py не очень пока нравится. Судя по его версии (у меня Ghost.py 0.1b2) - достаточно сырой продукт. Нет некоторыз полезных shortcut'ов, некоторые фичи работают не очень хорошо (например, click - генерирует только JS-событие click, а для ExtJS надо бы mouseDown, для полной эмуляции клика мышкой - ещё и mouseUp). Называть пакет ghost и добавлять в него модуль ghost - тоже не лучшая идея, на мой взгляд (ну их, эти name collisions). Нет функции sleep, может это и плохо использовать именно sleep, но иногда так гораздо удобней, а в случае, если это будет работать плохо, - можно и переделать.

Читать далее...

Django: Не проходит аутентификация в LiveServerTestCase.

На одном проекте на Django начал писать функциональные тесты на Ghost.py. Написав первый тест на регистрацию пользователя, потратил достаточно много времени (во всяком случае, больше, чем хотелось бы) в поисках причины почему не проходит аутентификация. Причём по логам и через дебагер аутентификация проходит успешно, но следующий запрос - редирект на страницу входа.

Читать далее...

HTTP: Список кодов ответов и их описание.

27 апреля 2013 Нет комментариев

Код состояния ответа на HTTP запрос содержится в его заголовке и информирует о результате запрошенного действия и о том, что клиент должен предпринять далее. Возможно, не все знают как выглядит заголовок ответа сервера, но наверняка каждый, кто пользуется интернетом, встречался со страницей 404 Not Found или 403 Forbidden. Впрочем, далеко не обязательно, что эти страницы имеют соответствующий HTTP заголовок, но, если строго следовать стандартам, - должны.

Читать далее...

WordPress: На пути к валидному html5 или как пофиксить «rel=”category tag”» у тегов.

15 апреля 2013 Нет комментариев

Решил подчистить ошибки в html-коде этого бложика. Половина ошибок ушла с помощью перехода с XHTML на html5, но, как обычно это бывает, появилось и кое-что новое. Так, ссылки на теги имеют атрибут:

rel="category tag"

Который заботливо генерит WordPress и который не является валидным для html5.

Читать далее...

Django: Решение проблемы с кириллицей при использовании slugify.

14 апреля 2013 1 комментарий

Далее следует более-менее подробное описание проблемы и фикса. Если о проблеме вы в курсе и вас интересует только решение - смело листайте в конец поста.

TL/DR;

В django есть функция для генерации т.н. slug'ов. Перевести одним словом этот термин достаточно сложно, но, кто имеет хоть какой-то опыт работы с django должен знать что это такое. Если раскрыть суть - часть ЧПУ (человеко-понятного URL), которая относится к заголовку сущности. Например, slug для этого поста в терминах django было бы таким: "django-fix-non-latin-slugify" (если я не поменял URL записи после написания этих строк).

Читать далее...

Flask: Создание root-пользователя в flask-security и установка хешированного пароля.

10 апреля 2013 Нет комментариев

Вкратце:
Flask - micro web framework. По сути, тонкая обёртка вокруг wsgi-сервера werkzeug.

Flask-Security - расширение (extension) для flask, которое реализует возможность аутентификации и авторизации ("входа на сайт", другими словами - логина), регистрации пользователей. Flask-Security сам по себе использует другие сторонние расширения для реализации нужного функционала (например: flask-login для логина, flask-wtf для обработки форм).

Задача: во время инициализации БД создать пользователя с паролем. Примерно как это делает Django при первом syncdb с подключенным приложением django.contrib.auth.

Читать далее...

Django: Настраиваем STATIC_ROOT, STATICFILES_DIRS и MEDIA_ROOT правильно.

5 марта 2013 4 комментария

Для начала определимся с разницей между статикой и медиа-файлами в терминах Django. Первое - это все ваши файлы, которые вы сами создавали: css-стили, js-скрипты, картинки для дизайна и т.п. Медиа-файлы - всё, что загружает пользователь на ваш сервер (автарки, фотки), т.е. пользовательский контент. С пользовательским контентом всё более-менее просто и поэтому мы рассмотрим настройку только в конце поста. Читать далее...

Python: Сокращаем URL с помощью bit.ly API.

28 февраля 2013 Нет комментариев

bit.ly logo
Для начала стоит ответить на вопрос чего вообще сокращать ссылки. Варианты могут быть разные, но самая суть - это экономия места там, где оно действительно ценно. Т.е. если вы на форуме даёте ссылку на википедию, то, вероятно, лучше не пользоваться подобными сервисами, будет более удобно сразу видеть куда ведёт ссылка. Но в некоторых случаях это оправдано: при передаче через sms или, например, ссылку на ту же википедия иногда проще будет продиктовать голосом если она будет укорочена, при использовании, например, в рекламе, хотя тут уже спорно. Главная мысль - не надо их использовать где попало, это иногда раздражает.

Итак, к сути. На одном из проектов изначально планировалось использовать goo.gl в качестве сервиса по сокращению ссылок, но, случайно нашёл на stackoverflow инфомрацию о том, что некоторые операторы начали фильтровать SMS с такими URL от goo.gl (ответ был в сентябре 2012). Непонятно какие это операторы, скорее всего штатовские, да и было сказано что тех. поддержка twilio (облачный сервис который предоставляет различные услуги, связанные с телефонией, в том числе, отправка и приём SMS сообщений) пытается решить эту проблему, однако, не может предоставить отчёт о статусе, потому как всё зависит от тех самых мобильных операторов. Хотя с другой стороны, может не всё так плохо, я знаю как минимум один сервис который предоставляет коммуникацию с клиентами по SMS с использованием goo.gl, да и Google всё же крупная контора и, может быть, уже уладила данную проблему сама. Читать далее...

Встраиваем плеер в WordPress.

26 февраля 2013 Нет комментариев

Небольшой урок велосипедостроения от zetblog. Задача: дать возможность встроить аудио-плеер в посты WordPress с помощью плагина. Вообще, какие-то готовые плагины-плееры под wordpress уже существуют, но мне они, по разным причинам, мне не очень приглянулись. Тем более, хотелось заглянуть и узнать как это всё реализовано "под капотом". В качестве самого плеера была выбрана JS-библиотека audiojs. Читать далее...

WordPress: Модернизация плагина statpress.

21 февраля 2010 1 комментарий

Статистика — вещь не только интересная, но иногда и полезная. WordPress — один из популярнейших движков php для блогов, для него существует огромное количество плагинов, в том числе и плагины для просмотра статистики по посещаемости. Один из таких плагинов — statpress. Но есть в нём некоторые недостатки, автор плагина добавил распознавание некоторых русских поисковых движков, но так же некоторые упустил из виду. Хотя даже тот же Яндекс обрабатывается не очень хорошо, не учитываются переходы с yandex.ua, yandex.kz и т.п. Но opensource тем и хорош, что всегда можно поправить исходники, если что-то тебя не устраивает. Далее пойдёт речь об оптимизации плагина statpress под Российские поисковики. Читать далее...

Python: Реализация простого web-сервера.

Не для собственных нужд, но как-то понадобилось написать простой web-сервер для обработки на нём загруженных данных. В общем-то должен был получиться простой вёб-интерфейс к программе. Он и получился, местами даже слишком простой. В общем суть такова – необходимо получить от пользователя экзешник, на сервере его обработать нужными программами и выдать результат, т.е. обработанный файл для скачивания. Можно было бы написать скрипт на php, что было бы проще, но тогда необходимо с собой таскать какой-нибудь вёб-сервер (apache, denwer и т.п.). На питоне можно его реализовать достаточно просто в самом скрипте используя стандартные заготовки и библиотеки, такие как BaseHTTPServer. Ниже следует листинг с краткими комментариями. Читать далее...

PHP: Пример использования ORM Doctrine.

В данном посте рассмотрим простенький пример использования ORM, а именно, Doctrine. Если кто не в курсе, то ORM (Object-Relational Mapping, объектно-реляционная проекция) - такая штука, которая обеспечивают классам прозрачный доступ к базе данных. Правда не всяким классам, а тем, которые представляют описание нашей модели данных. В общем мне бы пару лет назад узнать о такой штуке, может быть я и не забросил изучение php, и вообще, много чего полезного сделал :D. Если кто-то знаком с паттернами проектирования, то можно сказать, что Doctrine соответствует шаблону Active Record. К своему стыду, сам я не знаком с ними, поэтому ничего конкретней сказать не могу пока что.

Кстати, мы уже затрагивали мельком тему ORM, но только для python. Можете посмотреть про SQLAlchemy тут.

Далее будет рассмотрен пример написания модуля на php с использованием ORM Doctrine для отправки личных сообщений между пользователей. Читать далее...