вторник, 25 ноября 2014 г.

Дизассемблировать python-программу

Порой бывает интересно, что происходит "под капотом" вашей программы. В python есть замечательный модуль dis, который позволяет посмотреть, как интерпретатор выполняет ваш код.

Создадим файл app.py:
import dis

n = 0

def application(env, start_response):
    global n
    n = n + 1
    response = "%.6d" % n
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return [response]

if '__main__' == __name__:
    print(dis.dis(application))
А теперь в терминале запустите этот файл:
$ python app.py

Программа выведет следующее:
           0 LOAD_GLOBAL              0 (n)
              3 LOAD_CONST               1 (1)
              6 BINARY_ADD         
              7 STORE_GLOBAL             0 (n)

           10 LOAD_CONST               2 ('%.6d')
             13 LOAD_GLOBAL              0 (n)
             16 BINARY_MODULO      
             17 STORE_FAST               2 (response)

 10          20 LOAD_FAST                1 (start_response)
             23 LOAD_CONST               3 ('200 OK')
             26 LOAD_CONST               6 (('Content-Type', 'text/plain'))
             29 BUILD_LIST               1
             32 CALL_FUNCTION            2
             35 POP_TOP            

 11          36 LOAD_FAST                2 (response)
             39 BUILD_LIST               1
             42 RETURN_VALUE       

Слева приведены строки нашей программы. Здесь видно, что операция инкремента переменной n (строка 7) занимает 4 операции.

четверг, 2 октября 2014 г.

Сделать на Django приложение бронирования времени приема

Как вы помните, фреймворк Django предназначен для быстрой разработки (Rapid Development). Следовательно, он поможет быстро решить следующую задачу.

Пролог
В компании ООО "Позитив", имеющей филиалы в нескольких городах России, возникла необходимость организовать 35 тысяч встреч со своими клиентами по вопросу оформления документов. Очевидно, что если все клиенты придут в первый день, то у специалистов компании "Позитив" будет в душе негатив. Кроме того, клиенты будут недовольны, ибо никто не любит терять время в километровых очередях.

Набросок технического задания
Нужно на Django создать сайт, где клиенты смогут указать свои данные и забронировать свободное время в удобный для них день.
Данные, требующиеся от клиента, которые должны быть отображены пользователю при бронировании времени:
  • ФИО
  • телефон
  • наименование организации
  • ИНН
  • Город, где удобно прийти на встречу
  • Адрес офиса, где будет проходить встреча
  • Дата встречи
  • Время встречи
При этом следует учесть ряд моментов:
  • организация не может забронировать более одной встречи
  • в списке дат и времени занятые значения должны отображаться серым цветом
Интерфейс придумайте самостоятельно. Защита "от дурака" (капча, невозможность создать более одной заявки с одного IP, валидация значений) не обязательна, ибо задание учебное.

Свои готовые решения можете публиковать ссылкой на проект github в комментариях к данной статье.

вторник, 3 июня 2014 г.

Запрограммируем сайт на Django

В сети нашел отличный сайт с видеоуроками по Bitrix. Там рассказывается, как на базе этой системы запрограммировать сайт. Сразу возникло желание сделать эту же работу на фреймворке Django.
Предлагаю Вам скачать шаблон сайта и запрограммировать его на Django. Гарантирую, вы многому научитесь.
Свою реализацию программирования сайта thesame я опубликовал на github.

понедельник, 26 мая 2014 г.

Пагинация страниц в Django

Часто требуется ограничить количество записей, выводимых на страницу. Для этого используется постраничное разделение материала - пагинация (pagination). В этом уроке мы рассмотрим реализацию пагинации стандартными средствами Django.

Добавить поля в модель User в Django

Данный урок написан на базе рекомендаций документации Django по добавлению новых полей к модели пользователя.

среда, 14 мая 2014 г.

prepopulated_fields в админке Django

Во многих CMS предусмотрена возможность создания поля slug на базе заголовка. К примеру, пользователь вводит название статьи: "Как я научился плавать", а система генерирует "kak-ya-nauchilsya-plavat". По этому id статьи можно к ней будет обращаться, например:
http://somesite.com/articles/kak-ya-nauchilsya-plavat

понедельник, 12 мая 2014 г.

Опрос (ч.7)

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