пятница, 29 октября 2010 г.

south на сервере django

Странное название заметки, объясню.
Тезисами, потому что некогда.
1. Сделал сайтик, залил на сервачок, есть кастомные апы и плагины для Django-CMS, они создают свои таблицы
2. Захотел поменять таблицы, поставил South
3. Выполнил инит, и миграции при изменении таблиц в приложении
4. Залил измененный код на сервер
5. Удалил нулевую миграцию для апа, потому что оно создаёт в ней архитектуру для таблицы и саму таблицу
6. запустил python manage.py migrate appname

среда, 27 октября 2010 г.

Вертикальное выравнивание в div

.imageholder {
position:relative;
display:table;
width:154px;
height:147px;
vertical-align: middle;
text-align: center;

background:url(/media/images/bg_product2.png) no-repeat ;
text-align:center;
}
.inner {
width:100%;
display:table-cell;
vertical-align:middle;
position:relative;
text-align:center;
}
.inner a img{
display:inline;
vertical-align:middle;
}
<!--[if lt IE 8]>
<style type="text/css">
.imageholder{overflow:hidden}
.imageholder,.inner{display:block}
.inner {top:50%;left:0;}
.inner img{top:-50%; position:relative;display:block}
</style>
<![endif]-->

<div class="imageholder" >
{% if product.image %}
<div class="inner">
<a href="{{ product.image.url }}" ><img src="{% thumbnail product.image 100x100 %}" alt="{{ product.product_name }}"/></a>
</div>
{% endif %}
</div>

Даже не жалко на такое ссылку разместить:

Как узнать размер файла в Python

Размер файла python
import os
folder_size = os.path.getsize(filename)

среда, 20 октября 2010 г.

Установка South(Unknown command: 'schemamigration')

Привет, бедный программист, который получил
D:\PycharmProjects\aproduct\products>python manage.py schemamigration
Unknown command: 'schemamigration'
Type 'manage.py help' for usage.
При попытке запустить комманду manage.py schemamigration из south tutorial :).
Возможный и простой вариант фикса этой проблемы: скопировать папку south из дистрибутива South в папку рядом с твоими аппами.
Более сложный, посмотреть в папку
c:\Python25\Lib\site-packages\South-0.6.1-py2.5.egg\south\management\commands
Обнаружить следующее, и понять, что чего-то не хватает, а именно schemamigration.py, как это решить думайте сами :)
convert_to_south.py
convert_to_south.pyc
migrate.py
migrate.pyc
startmigration.py
startmigration.pyc
syncdb.py
syncdb.pyc
test.py
test.pyc
testserver.py
testserver.pyc
__init__.py
__init__.pyc



А тут короче не заработала у меня даже 0.7.2 версия, хотя кто-то говорил, что нормально работает с M2M (many to many), пофиксил так, но не понял, почему заработало.
В это файле в 177 строке нужно вываливание из цикла добавить break
D:\PycharmProjects\southtest\south\db\generic.py
for sql in self.deferred_sql:
#AAAAAAAAAAAAAAAAAAAAAAA
self.execute(sql)
break

Реализация динамических фильтров в Django

Проблема
Постановка задачи: Есть таблица, с какими-то полями, к примеру такая
class Product(models.Model):
place = models.ManyToManyField(Place) # место расположения продукта
product_type = models.ManyToManyField(ProductType) # тип продукта
producer = models.ManyToManyField(Producer) # производитель


product_name = models.CharField(_(u'product name'), max_length=200) # название продукта
unit = models.CharField(_(u'unit'), max_length=15, blank=True, null=True) # единицы измерения
quantity = models.CharField(_(u'unit count'), max_length=15, blank=True, null=True) # шт/уп
price = models.FloatField(_(u'price'), blank=True, null=True) # цена
price_discount = models.FloatField(_(u'price discount'), blank=True, null=True) # цена со скидкой
description = models.CharField(_(u'description'), max_length=300, blank=True, null=True)
article = models.TextField(_(u'article'), max_length=5000, blank=True, null=True)
  1. image = models.ImageField(upload_to="uploads/images/", blank=True, null=True)


class Meta:
verbose_name = _(u'Product')
verbose_name_plural = _(u'Products')
__unicode__=lambda self:self.product_name


Нужно чтобы на страничке была формочка, которая умеет фильтровать содержимое. К примеру по цене.
Решение
  • Сначала делаем форму
forms.py
from django import forms
class FilterForm(forms.Form):
lo_price = forms.IntegerField(required=False)
hi_price = forms.IntegerField(required=False)
  • Добавляем отображение формы в шаблон
    <form action="{{ request.get_full_path }}" method="post">
    {{ form.as_p }}
    <input type="submit" value="Submit" />
    </form>
    Переменная {{ request.get_full_path }} говорит говорит текущий урл странички, на которой находимся (django-cms).
  • Теперь обработку этой формы добавляем во вьюху
if context['request'].POST: # If the form has been submitted...
form = FilterForm(context['request'].POST) # A form bound to the POST data


if form.is_valid(): # All validation rules pass
myquery = Q()
if form.cleaned_data['lo_price']:
myquery = Q(price__gt = form.cleaned_data['lo_price'])
if form.cleaned_data['hi_price']:
myquery &= Q(price__lt = form.cleaned_data['hi_price'])
products = Product.objects.filter(
Q(product_type=product_type),
Q(place=place),myquery)






context['products'] = products
context['form'] = form
return context
else:
form = FilterForm() # An unbound form
Тут происходит следующее, если нам запостили данные, то мы производим проверку на валидность данных. Фишка myquery = Q(), это чудесная вещь, создание пустого Q-объекта.
Далее, если нам заданы максимальная и минимальная цена, то мы их добавляем в наш Q-объект.
if context['request'].POST это мы проверяем, что нам пришёл запрос post, такая странная форма записи, потому что наш request засунут в контекст django-cms, т. к. это кусок кода взят из django-cms плагина.
В общем, будет время напишу по-аккуратнее, но суть изложил


Основное
В django можно создавать пустые Q() объекты, где-то час искал


пятница, 15 октября 2010 г.

Поднятие Django lfs под windows

Ну и денёк сегодня выдался мать его 
Брюс Уилис

Начал ставить сабж, короче следующим образом
http://packages.python.org/django-lfs/introduction/installation.html

Качаем инсталлер,
>cd lfs-installer
> python bootstrap.py
> bin/buildout.exe -v
А вот тут под виндой выгребаем багу, не встаёт fcntl, для этого стираем строчки из
buildout.cfg

django-gunicorn

[django-gunicorn]
recipe = collective.recipe.template
port = 8000
workers = 4
input = ${buildout:directory}/misc/conf/django-gunicorn.sh.in
output = ${buildout:directory}/bin/django-gunicorn.sh

gunicorn

После этого всё получается. Тока чего-то шаблоны кажется не подцепились, но это уже другой вопрос.

Установка всякого Ubuntu 9.04

Установка джавы
sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts

Установка firefox 3.5
Firefox 3.5 on Ubuntu 9.04 Jaunty Jackalope.
1. Добавить репозиторий: sudo gedit /etc/apt/sources.list
и добавить строку:
deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ub... jaunty main
сохранить и закрыть файл.
2. Добавить ключ:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 247510BE
3) Обновляем
sudo apt-get update The "True" Firefox
4) Устанавливаем
sudo apt-get install firefox-3.5 firefox-3.5-gnome-support
5) Replace symbolic links
At this point you can run firefox 3.5 just by typing firefox-3.5 in the command line. But if you’re sure you don’t want to use firefox 3.0 anymore go to /usr/bin/ and remove the symbolic link:
rm -r firefox
and make it point to firefox-3.5
ln -s firefox-3.5 firefox
The Firefox-3.5 codename on Ubuntu is Shiretoko so don’t be suprised when you see your browser is named Shiretoko. That’s all, hope it helps feel free to comment .

Установка FlashPlayer
sudo apt-get install flashplugin-nonfree

можно тут почитать:
http://it-man.su/2009/04/30/vosstanavlivaem-rabotu-a...

mp3
Обновить репозитории. И запустить файл mp3, и согласиться, чтобы поискал "кодеки". Всё встанет само.

Установка виртуальной машины под ubuntu

всё есть тут:
http://nnm.ru/blogs/clug/linux_i_windows_na_odnom_ra...
или(и) тут:
http://ubuntologia.ru/virtualbox-windows-in-ubuntu

Единственное хочу заметить, что была трабла с VBoxGuestAdditions_1.5.6.iso, сначала он у меня оказался размером около 500 байт(хз почему не докачался). Нашёл в интернете нормальный. В устройствах нужно отключить старый, и додмантировать новый.

Книжки для ленивого программиста

С детства люблю когда мне читают книжки. Очень приятно слушать их в машине. Или когда есть много времени, когда руки заняты, а голова свободна, к примеру на прогулке с ребёнком.

http://mds.rudn.info/
Сайт программы "Модель для сборки". Книжки читает Влад Копп, под хороший эмбиент.

Книжки преимущественно фантастические и фентези. Также много современной литературы.

Хочу отметить сериалы:
Михаил успенский
Пелевин.

Фкусные оладьи от программиста

Оладьи для программиста
Ингредиенты:
2 яйца;
щепотка соли;
3 ч. ложки сахера;
1 стакан кефира или простокваши;
2 ст. ложки сметаны;
2 сакана муки;
0.5 ч. ложки соды;
0.5 стакана подсолнечного масла (на нём жарят, из рецепта это не очевидно)

Приготовление:
В мисочке растереть 2 яйца с солью и сахером, добавить кефир и ли простаквашу, сметану. Муку просеять через сито(зачем не понял), высыпать в мисочку. В течение минуты хорошенько смешать и взбить тесто, потом добавить соду. Снова всё размешать, чтобы тесто получилость как густая сметана. Теперь тесто должно постоять минут пятнадцать. Поставить на огонь большую сковородку, разогреть её, налить 2 ст. ложки подсолнечного масла. Огонь отрегулировать, чтобы масло не горело. На каждую оладью брать по столовой ложке теста. Тесто на сковороде должно сразу начинать расти. Если плохо жарятся, то увелчичить огонь. Переворачивать оладьи вилкой, чтобы не остывали, складывать их в миску, которая стоит рядом, на краю плиты. Подавать с сахаром, со сметаной и др.

Вступление

Короче, затевается блог для того, чтобы перенести заметки из вконтакта в общий доступ. Ибо пора