Subscribe

Categories

Checkio.ORG

Subscribe to Posts

Email:

  • 01Dec

    Сегодня из интереса написал небольшой модуль сериализации в ХМЛ. На скорую руку. Как по мне – довольно элегантное решение. Как думаете?

    1. def xml_escape(text):
    2.     return str(text).replace('&','&amp;').replace('<','&lt;').replace('>','&gt;').replace('"','&quot;').replace("'",'&apos;')
    3.  
    4. def xmlSerial(name,attr=None,inner=None):
    5.     if attr:
    6.         name_attr = name+' '+' '.join(map(lambda (a,b):a+'="'+xml_escape(b)+'"',attr.items()))+' '
    7.     else:
    8.         name_attr = name
    9.    
    10.     if inner:
    11.         if type(inner) == list:
    12.             inner_str = ''.join(map(lambda a: xmlSerial(*a),inner))
    13.         else:
    14.             inner_str = inner
    15.         return '<'+name_attr+'>'+inner_str+'</'+name+'>'
    16.     else:
    17.         return '<'+name_attr+'/>'

    Вот, как его мона юзать:

    1. print xmlSerial('HI',{'a':'1','c':3,'d':'WOW'},[['RR'],['WOW',{'and_attr':'45t'}],['WIN',{'a':1},'HI IT IS INNER']])
    2. print xmlSerial('HI',{'a':'1','c':3,'d':'WOW'},[['RR'],['WOW',{'and_attr':'45t'}]])
    3. print xmlSerial('HI',{'a':'1','c':3,'d':'WOW'},[['RR'],['WOW']])
    4. print xmlSerial('HI',{'a':'1','c':3,'d':'WOW'},'AND INNER')
    5. print xmlSerial('HI',{'a':'1','c':3,'d':'WOW'})
    6. print xmlSerial('HI',{'a':'1'})
    7. print xmlSerial('HI')
    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 09Nov

    Надеюсь, все из вас понимают, что на python manage.py runserver … продакшен работать не будет. Это хорошо. На самом деле ответы на все эти вопросы можно накапать в гугле.

    Создавая проект на, к примеру, на перле у меня был fcgi скрипт, в котором и обрабатывались все запросы. Этот скрипт писался мной либо Catalyst сам генерил этот файл. На внешнем сервере я просто лайти указывал путь на этот файл и все. Удобно это было хотя бы тем, что лайти сам следил за тем, чтоб скрипт не отваливался и в случае необходимости доподнимал необходимое количество скриптов.

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

    1. $HTTP["host"] == "yourwebsite.com" {
    2.  
    3. server.document-root = "/home/www/website/static/"
    4.  
    5. fastcgi.server = (
    6.     "/manage.fcgi" => (
    7.         "main" => (
    8.             # Use host / port instead of socket for TCP fastcgi
    9.             # "host" => "127.0.0.1",
    10.             # "port" => 3033,
    11.             "socket" => "/home/www/website/manage.sock",
    12.             "check-local" => "disable",
    13.         )
    14.     ),
    15. )
    16. alias.url = (
    17.     "/static/" => "/home/www/website/static/",
    18. )
    19.  
    20. url.rewrite-once = (
    21.     "^(/static.*)$" => "$1",
    22.     "^/favicon\.ico$" => "favicon.ico",
    23.     "^(/.*)$" => "/manage.fcgi$1",
    24. )
    25. }

    Что тут происходит? Сначало направляем фаст “/manage.fcgi” на сокет “/home/www/website/manage.sock”.
    В алиасах прописываем пути к вашим папкам со статикой.

    Реврайты лайти проверяет поочереди. Поэтому сначала записываются статика с favicon. А потом реврайт на fastcgi. Т.е. на фаст попадают только не статические запросы.

    По модулям lighttpd – проверте, чтоб у вас были активны следующие: mod_alias, mod_rewrite и mod_fastcgi

    Далее скрипт, который создает непосредственно сокет. Его можно положить в папку с manage.py

    1. #!/bin/bash
    2.  
    3. # Replace these three settings.
    4. PROJDIR="/home/www/website/"
    5. PIDFILE="$PROJDIR/manage.pid"
    6. SOCKET="$PROJDIR/manage.sock"
    7.  
    8. cd $PROJDIR
    9. if [ -f $PIDFILE ]; then
    10.     kill `cat$PIDFILE`
    11.     rm -f — $PIDFILE
    12. fi
    13.  
    14. ./manage.py runfcgi socket=$SOCKET pidfile=$PIDFILE
    15. chmod a+w $SOCKET

    В принципе и скрипт и конфиг лайти, с небольшими поправками, можно нарыть в доках по джанго.

    Но этого будет мало.
    Во первых необходимо сразу указать в settings.py:

    1. FORCE_SCRIPT_NAME = ''

    иначе вас ждут несколько неприятных сюрпризов с редиректами. Далее проконтролируйте урлы и пути в файле settings.py. Хотябы LOGIN_URL у вас точно должен был поменятся.

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

    1. DEBUG = False
    2.  
    3. ADMINS = (
    4.      ('Alexander Lyabah', 'alexander@lyabah.com'),
    5. )
    6.  
    7. EMAIL_HOST = 'smtp.gmail.com'
    8. EMAIL_PORT = 587
    9. EMAIL_HOST_USER = 'support@lyabah.com'
    10. EMAIL_HOST_PASSWORD = '***'
    11. EMAIL_SUBJECT_PREFIX = '[My-Web-Site]'
    12. EMAIL_USE_TLS = True

    Пока все… если что еще всплывет, буду еще об этом писать.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

   Next Entries »

Recent Posts

Recent Comments

  • похоже, опчатка...
  • JSONotEncode - Это JSON Not Encode? Не сразу это понял )...
  • В чем фишка этого маневра-дублирования?loads = json.l...
  • Очень понравилось!...
  • Если данные простые, я чаще всего пихаю их в ту же таблиц...