• 27Oct

    Решил просто не копипастить… я сразу кинуть ссылку… Многие в этой статье найдут своих начальников.

    http://habrahabr.ru/blogs/pm/41843/

    Rating 3.00 out of 5
    [?]
  • 24Oct

    Небольшой экскурс, и наверняка его все знают. Связка урл-обработчик задается в файлике urls.py. Ссылка на этот файлик лежит в сеттинге. Если к примеру мне необходимо перед каждым запуском выполнять какой либо код, то мне необходимо создать MIDDLEWARE_CLASSES, и передать его в тех же сеттингах. Но проблема в том, что этот миддл класс будет действовать вообще на все урлы. А если вы ходите подключить сторонний аплет через include, а ему нужен еще один миддлеваре, а если вы еще начнете друг другу мешать… Система не идеальна. Я хочу предложить или попробовать свое решение.

    Есть функция patterns, в нее передается собственно все связки. Идея в том, что можно эту функцию заменить на другую, в которую будут передаваться еще один параметры – ссылка на функцию, которая будет вызываться перед всеми урлами этого блока. Решение довольно простое, как по мне. Ниже приведен текст модуля.

    1. from django.conf.urls.defaults import url
    2.  
    3. class AddNewUrl(object):
    4.     def __init__(self,prefix,view,*t):
    5.         self.prefix = prefix
    6.         self.view = view
    7.         self.t = t
    8.     def __call__(self,*t):
    9.         if 'before' in self.prefix :
    10.             self.prefix['before'](*t)
    11.         return self.view(*t)
    12.  
    13. def newpatterns(prefix, *args):
    14.     pattern_list = []
    15.     for t in args:
    16.         pattern_list.append(newurl(prefix, *t))
    17.     return pattern_list
    18.  
    19. def newurl(prefix,regex,view,*t):
    20.     return url(regex,AddNewUrl(prefix,view,*t),*t)

    Теперь вместо patterns используем newpatterns. Итого использование выглядит примерно так:

    1. from django.conf.urls.defaults import *
    2. from newpatern.defaults import newpatterns
    3.  
    4. import test_newpaterns.views as vv
    5. urlpatterns = newpatterns({'before':vv.before_all},
    6.     (r'^$', vv.index),
    7. )

    Сразу видно ограничение:

    1. Нельзя использовать вместо ссылок на функции текст функции. На самом деле я на этом просто пока не заморачивался. Это пока просто принципиальная схема.
    2. Если будет какая либо вложенность блоков в виде инклюда, то функция before_all на них распространятся не будет. Хотя, это с другой стороны и плюс тоже.

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

    На этом пока все. От вас ждем конструктивную критику. полный архив проекта выкладываю сюда.

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 22Oct

    Сегодня залил новые обновки на свой WP

    * новый дизайн
    * Граватар
    * Опенайди
    * капчу в комментах
    * СЕО фикчи всякие

    Rating 3.00 out of 5
    [?]

    Tags: ,

  • 22Oct

    Исходный материал – это Fedora Core 6 ( но и на 8ой я тестил – работает) и MSSQL 2000

    Сразу скажу, что в перле нет DBD::MSSQL, лично у меня – это сразу паника. Ну ничего. Есть такая умная штука как ODBC (Open DataBase Connectivity) она была создана именно для того, чтоб универсализировать доступ к различным типам баз данных, и по сути из себя представляет интерфейс. Я когда в буйной молодости кодил под винду, то сталкивался с этим, но тогда особо не заморачивался на тему «что оно такое?», и «как работает?». Так вот в линуксе есть подобная штука. Называется она unixODBC. ЕЕ и ставим.

    Устанавливаем unixODBC.

    1. yum install unixODBC.i386

    Единственная проблема, что стандартные сошники есть только для MySQL и PostgreSQL. А на официальном сайте я нашел драйвер для Microsoft SQL Server – он прям там красуется на первом месте, но не могет не смущать надпись «Download free trial from…»

    В этом случае спасает FreeTDS – это и есть те самые библиотеки для общения с Microsoft SQL Server и Sybase. И с ним тоже при установке не должно быть никаких проблем.

    1. yum install freetds.i386

    Не забываем поставить модуль для DBI.

    1. cpan DBD::ODBC

    дальше добавляем конфиг

    в файл /etc/odbcinst.ini

    1. [MyServer2k]
    2. Driver = /usr/lib/libtdsodbc.so

    На этом конфигурация закончена. В перле это происходит так:

    1. my $dbh2 = DBI->connect("DBI:ODBC:DRIVER={MyServer2k};Server=10.1.1.1;Database=MSSQL_DB_NAME;Uid=DB_USER_NAME;Pwd=DB_PASSWORD", ' DB_USER_NAME', 'DB_PASSWORD',{AutoCommit => 1, RaiseError=> 1, PrintError =>0});
    Rating 3.00 out of 5
    [?]

    Tags: , , , , , ,

  • 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: , ,

  • 05Oct

    Наверно все знают, что 6ого октября, тобиш завтра пройдет конференция, на тему организаций построений приложений с высокими нагрузками HighLoad++.

    Лично для меня это было очень ожидаемое событие, но попасть на него я так и не смогу. но к счастью для меня онлайн трансляция будет вестись на Smotri.com.

    Но что то мне подсказывает, что и в трансляцию я поглядеть не смогу. Так что есть возможность потестить тулсовину для этих целей HTTP Ripper. Если и с ней будет облом, то последняя надежда, что где то, возможно на том же Smotri.com будет выложено видео.

    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

   

Recent Posts

Recent Comments

  • Я просто оставлю это тут: ...
  • спасибо...
  • Если вдуматься в каждое слово, то время беСконечно в русском...
  • Спасибо, Евгений, исправленно.P.S.: перехал на диску...
  • за опечатку - спасибо...