Posts

Showing posts from August, 2012

Пошук атрибутів об’єкта

Сьогодні знайшов цікавий варіант пошуку атрибутів: filter(lambda aname: not aname.startswith('_'), dir(Myclass)) Функція filter конструює список для тих елементів об’єкту (що є ітерабельним), яким функція вертає True Отже функція фільтрування верне нам список атрибутів об’єкту Myclass, які не починаються з підкреслення(_) Також, головним чином, раджу використовувати методи hasattr(obj, name) , gettattr(obj,name) , setattr(obj,name,val)

Як перезавантажити сервер Django

Деколи по необережності для зупинки сервера Django натискаю Cntl-Z. Після такого завершення, при повторному запуску сервераз’являється повідомлення: Error: That port is already in use. Як вирішити проблему? Пропоную простою командою: sudo netstat -np | grep 8000 Зміст команди вивід інформації по 8000-му порту (порт по замовчуванню, на якому працює сервер Django) Далі ми беремо PID-процесу(proc_num) який займає порт, і вбиваємо його: sudo kill proc_num

Дещо про файли в Джанго

Трапився випадок коли прийшлося зберігати зображення в 2 етапи: Користувач має форму, яка складається з двох полів, одне з них поле для зображення. Аплоад зображення відбувається завдяки Аяксу, тобто користувач може відмовитися від подальшого коміту форми, трапитися розриви з’єднання і т.п. Тому вирішено картинки зберігати в тимчасовій папці, та при збереженні форми переносити зображення в іншу папку на постійне збереження. Як організувати перезбереження зображення? Для цього в Джанго є клас File або ImageFile (модуль django.core.files) some_obj.image = File(open(file_path))

Магія перетворення словника в список Python

Сьогодні знайшов ефективний спосіб перетворення словника в список кортежів Python. Для цього як найкраще підходить метод iteritems() . Цей метод вертає ітератор,який в свою чергу вертає пари ключ-значення: >>>dic ={'boys':16,'girls':18} >>>[(k,v) for (k,v) in dic.iteritems()] [('boys',16),('girls',18)] Крім того, можна отримати окремо ключі ( iterkeys() ), та значення ( itervavues() )

Баг сортування в Джанго

Підчас організації сортування вибірки з бази даних зіткнувся з такою проблемою: метод Джанго values_list() не вміє працювати з екстра полями в таблиці. Справа була так: a.) Є функція виду, яка робить наступну вибірку: entities = SomeModel.objects.select_related("another_model",).extra(SELECT={some_field: "SELECT * FROM ...."}) b.) Тепер після вибірки ми відсортуємо об’єкт запиту по полю отриманому через екстра: entities = entities.extra(order_by=['some_field']) c.) Далі припустимо, що нам треба получити суму по певному полю у вибірці. Для цього як найкраще підходить метод values_list(). Метод отримує як аргумент потрібні програмісту поля і виводить їх значення як список, тому: total = sum(values_list('field_1', flat=True )) Та ось тут і криється проблема, метод не вміє працювати з сортовоними по зовнішньому полю, об’єктами вибірки. Рішення: Проводити розрахунки суми до подібного сортування, тоді проблема не з’являється.