• 15Oct

    Меня тут долго не было… Ремонт… Новая работа… Кучу всего свалилось… Даже за сервак забыл заплатит. Так что спасибо Гугу, напомнил.

    В первой части я рассказывал, как авторизовать человека по OpenID. В этой части я хотел предоставить свое виденье того, как это можно привязать к стандартной джанговской авторизации. Апп можно скачать тут

    Кроме того, что мы хотим узнать, что текущий пользователь на сайте авторизуется через OpenID. Мы хотим его авторизовать по всем правилам Django. И чтобы авторизированный пользователь через OpenID был таким же как и через стандартную Django авторизацию. Т.е. попробуем прижить вместе несколько авторизаций.

    Через массив бекендов у меня так и не получилось. Т.к. я хотел, чтоб у них был общий айдишник, и чтоб хранились они в общей таблице. Поэтому я просто расширил базовую авторизацию дополнительным функционалом. В последствии даже попробовал установить openid к уже рабочему проекту.

    Для определения, к какой авторизации принадлежит я пользователя привязывал к группе. Название группы, к которой я привязывал пользователя можно положить в настройки проекта OPENID_GROUP по умолчанию это значение OpenID.

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

    Сначала опишу процесс установки. На готовое, живое приложение.

    1. Распаковываем файлы из архива в любую папку вашего проекта. К примеру в openidconsumer.
    2. В установленные приложения проекта (INSTALLED_APPS) устанавливаем новое ‘openidconsumer’
    3. Заменяем бекенд авторизации на наш наследник от базавого.

    1. AUTHENTICATION_BACKENDS = ('django_openidconsumer.exauth.TypedModelBackend',)

    4. В файле settings.py установим имя группы, которое будет определять, что пользователь авторизируется через OpenID. OPENID_GROUP = ‘openid_auth’;
    5. Делаем инсерт в таблицу групп . По умолчанию у нее значение auth_group.

    1. INSERT INTO auth_group(name) VALUES (‘openid_auth’);

    6. В урлсы проекта urls.py прописываем урл, с которого будет проходить авторизация.

    1. (r'^openid/',include('openidconsumer.urls'),{'on_success':vm.init_openid}),

    Параметром on_success – мы указываем какая функция будет вызвана в случае удачной авторизации.
    7. Пишем обработчик этой функции:

    1. from openidconsumer import exauth
    2. from django.http import HttpResponseRedirect
    3.  
    4. def init_openid(request,identity_url, openid_response,*args,**kwargs):
    5.     if exauth.openid_login_first(request,identity_url, openid_response):
    6.         return HttpResponseRedirect('/edit_profile/');
    7.     return HttpResponseRedirect('/');

    тут все просто – либо идет редирект на /edit_profile/, в случае если пользователь зашел под своим OpenID url впервые , либо перебрасываем на главную

    Если вы обратили внимание, то я убрал мидвере класс из предыдущего описания. В принципе там была передача в объект реквеста параметра OpenID. Я же ее добавил в объект юзера.

    В принципе в зависимости от предыдущего описание модуля для работы с OpenID. Добавился файл exauth.py в котором и происходит расширение возможностей базавой авторизации и добавлены некоторые полезные функции.

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 23Sep

    Подкастинг – это создания аудио записи в стиле радио передачи. Либо сам с собой, либо подготовка диалога, либо диалог в онлайне.

    На само понятие и описание наткнулся на блоге Alpha-Beta-Release. Там же выложены ссылки на 2 популярных российских подкаст сервера: RussianPodcasting и PodFM. На Радио-Т натнулся уже на статье Developers.org.ua о айтишшных подкастах

    Я то думал это редкость, а потом пошло один за другим:
    Подкастинг социальных трендов
    NoMobile
    Еженедельник AppleInsider
    W3Cast – подкасат о вебразработке

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

    Rating 3.00 out of 5
    [?]

    Tags: ,

  • 24May

    Вопервых insight-it.ru – один из моих любимых форумов. Интересный, популярный.

    В нем очень часто описаны архитектуры популярных сервисов. В этот раз я наткнулся на твитер. Все как всегда, правда они пишут на рельсах, поэтому техническая часть мне была не особо интересна. А вот итоги в конце статьи, мне очень понравились. Очень четко описаны ключи к успеху хорошего сервиса.

    Перечислю их тут ( для себя), но вам лучше перейти на саму статью

    • Общайтесь со своим сообществом. Не прячьтесь и не пытайтесь решить абсолютно все проблемы самостоятельно. Много отличных людей будут готовы помочь, достаточно лишь попросить.
    • Рассматривайте вашу стратегию масштабирования как бизнес-план. Соберите советы помощников для того чтобы облегчить для себя принятие решений.
    • Стройте свой проект сами. Twitter потратил много времени, пытаясь приспособить готовые решения других людей, которые казалось бы должны работать, но это оказалось не совсем так. Лучше построить какие-то вещи самостоятельно, чтобы иметь высокую степень контроля над ситуацией и иметь возможность привносить новые возможности как только они понадобились.
    • Ставьте перед своими пользователями разумные ограничения. На обычных пользователей это не повлияет, но когда кому-нибудь взбредет в голову попытаться сломать систему (а такой человек рано или поздно найдется) – они сыграют свою роль и спасут работоспособность системы.
    • Не делайте базу данных центральным узким местом системы, врядли Ваше приложение на самом деле требует гигантских операций по объединению данных из нескольких таблиц. Используйте кэширование, или проявите свою смекалку для поиска альтернативных способов достижения того же результата.
    • Предусмотрите возможность сегментирования с самого начала, тогда перед Вами всегда будут открыты пути для дальнейшего масштабирования.
    • Очень важно вовремя осознать, что сайт начинает работать медленно. Сразу стоит задуматься о системе отчетов для отслеживания потенциальных проблем.
    • Оптимизируйте базу данных:
      - Индексируйте все таблицы, Rails не будет делать это за Вас.
      - Используйте “explain” для анализа выполнения запросов. Результаты могут не совпадать с Вашими ожиданиями.
      - Денормализуйте данные. Один только этот совет порой может спасти ситуацию. Для примера, в Twitter хранят все ID друзей каждого пользователя вместе, это позволило избежать многих ресурсоемких запросов.
      - Избегайте комплексного объединения данных из нескольких таблиц.
      - Избегайте сканирования больших наборов данных.
    • Кэшируйте все, что только можно.
    • Тестируйте все максимально тщательно:
      - Когда Вы развертываете приложение, Вы должно быть уверены, что оно будет работать корректно.
      - Они используют полный набор средств для тестирования. Таким образом, когда произошла неполадка в кэшировании, они узнали о ней еще до того как она на самом деле произошла.
    • Длительно функционирующие процессы стоит оформить в виде daemon’ов.
    • Используйте уведомления об исключительных ситуациях в совокупности с ведением логов, это необходимо для своевременного реагирования на них.
    • Не делайте глупостей!
      - Масштаб проект несколько меняет понятие “глупость”.
      - Пытаться загрузить 3000 друзей в память одновременно может заставить сервер временно перестать функционировать, хотя когда друзей было всего 4 – этот механизм прекрасно работал.
    • Большая часть производительности зависит не от использованного языка программирования, а от продуманной структуры приложения.
    • Превратите свой сайт в открытый сервис с помощью создания API. Их API является ключом к успеху Twitter. Он позволяет пользователям создавать постоянно расширяющуюся экосистему вокруг Twitter, соревноваться с которой не так-то просто. Вы никогда не сможете сделать столько же работы, сколько смогут Ваши пользователи для Вас, Вам просто не хватит креативных идей. Так что не стесняйтесь, откройте свое приложение и сделайте интеграцию Вашего приложения с другими максимально простой и удобной!

    Rating 3.00 out of 5
    [?]

    Tags: ,

   

Recent Comments

  • Every body remembers that modern life seems to be not very c...
  • Alexander, спасибо, интересная трактовка. Но целью статьи бы...
  • "И всегда выходит так, что супер силы, супер сразу — это суп...
  • Так, на вскидку - Лукъяненко пишет в жанре фантастика....
  • Не выдержала моя душа, вот по поводу идиотизма которого тебе...