Фев 09

Ускоряем Django: View на С

Иногда требуются ресурсоемкие вычисления, и узким местом становится именно питон. Тогда на помощь приходит код написанный на C/С++
К счастью питон-модули пишутся довольно просто, и документация с примерами есть на официальном сайте. Никакой америки я сейчас не открою, и если вы когда-нибудь сталкивались с написанием модуля для питона — далее можно не читать — все довольно примитивно.

Continue reading

Фев 06

Django: POST

Тут все предельно просто, параметры POST-запроса парсятся и услужливо складываются в словарь POST объекта request, который всегда передается первым параметром в любой view.
Пример.
Форма

<form method="POST" action="/hello">
<label>Name:</label><input type="text" name="name" />
<input type="submit" /> 
</form>

view обрабатывающий URL /hello:

@csrf_exempt # глушилка защиты CSRF, об этом ниже
def hello(request):
text = ""
 if "name" in request.POST: 
  text = u"Параметр POST передан: привет %s" % request.POST['name']
 else:
  text = u"Параметр POST не передан"
 return HttpResponse(text)

Continue reading

Янв 26

Django. Передача GET-параметров

В продолжении Личное: Django. От простого

Научим приложение main здороваться с конкретным человеком. Для этого нужно в представление сообщить имя этого человека: модифицируем наше представление:

def hello(Response, name='World'):
 return HttpResponse("Hello %s!" %name)

Теперь функция представления принимает один необязательный аргумент name
Добавим привязку в urls.py

url(r'^(\w+)$', 'main.views.hello'),

Подробнее с регулярными выражениями можно познакомиться в документации на Python http://docs.python.org/2/library/re.html

В случае совпадения URL с данным регулярным выражением, Django вытащит группу указанную в скобках \w+ в качестве второго параметра функции представления: например запрос

http://127.0.0.1:8000/User
приведет к вызову

hello(Request,"User")

И страничка поздоровается c User:

Hello User!

Янв 26

Django. От простого

В продолжении Django. Структура проекта.

Итак проект создан — и уже работает, можно запустить development сервер и посмотреть, что получилось:

$ ./manage.py runserver
Validating models...

0 errors found
Django version 1.4.3, using settings 'first.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Здесь видно что сервер запустился на loopback интерфейсе на порту 8000. Использование loopback-интерфейса по-умолчанию кроет в себе некий смысл:
development-сервер можно (и нужно) использовать только для разработки проекта.
Continue reading

Янв 26

Django. Структура проекта.

Все нижеописанное отностится к версии django-1.4, в 1.3 и ниже есть некоторые отличия.

Основная причина недоумения и непонимания людей всю жизнь видевших только PHP фреймворки в как раз в структуре проекта и принципах работы фреймворка Django. Я надеюсь после прочтения туман рассеется и ориентироваться станет много проще.
Continue reading

Янв 26

Установка Python + Django под Windows

Писалось для того, кто не может поставить питон под Windows, отсюда и

Минимум, что потребуется — это сам python и django. Python будем использовать 2.7, а django 1.4.3 (последняя стабильная на данный момент), впрочем не думаю, что установка других версий будет в корне другая.

Итак python: тут все просто — идем на python.org/getit и скачиваем Python 2.7.X Windows Installer (или X86-64 если установлена x64 система)
Continue reading

Окт 06

Двухэтапная авторизация django

Понадобилось сделать подтверждение авторизации через SMS… Подумалось, и придумалось вот что:
Переделывать полностью систему авторизации было влом, да и вообще хотелось бы обойтись «малой кровью», поэтому решено было переделать django’ый декоратор login_required — чтобы не только спрашивал логин и пароль, но и активировал сессии через SMS

Идея будет такая:

  1. В профиле пользователя сохраняем телефон и флаг использования SMS-авторизации.
  2. Переписываем декоратор login_required, чтобы после авторизации отправлял на активацию сессии
  3. Заменяем во всех views from django.contrib.auth.decorators import login_required на наш декоратор
  4. ???
  5. PROFIT!

Использован вот этот SMS-шлюз (ибо как-то уже пробовал и работает)
модуль для работы с онным скачать тут
Continue reading

Сен 23

Конвертация таблиц MySQL в UTF8

Джанга в очередной раз создала кучу таблиц в latin1, а вручную уж очень не хотелось

#!/bin/bash
host="127.0.0.1"
database=$1
pwd="password"
user="user"
tables=`mysql -h $host --user=$user --password=$pwd $database -e "show tables;" -s -r -N`
for table in $tables
do
	echo "Converting $table"
        #тут можно так же optimize table и что там еще
	mysql -h $host --user=$user --password=$pwd $database -e \    
           "alter table $table convert to character set 'utf8';"
done
Июл 29

Qt Http Post и File

Понадобилось загрузить файл из Qt, и хорошо бы чтобы он опознавался со стороны сервера как файл ($_FILES в php или Request.FILES в django)
По Qtшному экземплу не взлетел: все передается, но файл файлом не опознался, так и остался торчать в заголовках POST.
Проблема оказывается действительно есть, решения страшные, вроде ручной сборки заголовков

Continue reading