Допустим, у вас есть модель, которая хранит состояние в базе данных, данная модель связана с пользователями. Но как быть в случае неавторизованного пользователя? Хранить состояние в кукисах браузера. Для этого пришлось бы пробежаться по модулю и ставить проверки, добавлять новые методы, переменные. В итоге код превратится в сплошной if… else, а оно нам надо? «А что делать?» — спросите вы. (Надеюсь что не спросите =) Без паники! Я, как-а-вот, ваш спаситель, расскажу и покажу на выход.
Выход — сделать фейковую модель и орудовать ею, как и с обычной джанговской моделью.
Пример
class UserBasket(models.Model):
user = models.ForeignKey(User)
shakedtimes = models.IntegerField(default = 0)
Тогда нашей фейковой моделью будет
class AnonymousBasket(object):
def __init__(self, request, response):
self.shakedtimes = request.COOKIES.get('sk_times', '0')
self.response = response
Теперь в классе можно просто в одном месте добавить проверку на авторизованного пользователя. Но помимо получения значений, рабочий модуль может выполнить операцию сохранения. С моделью то ясно, жанга все сделает за нас, а вот фейковое сохранение надо прописать ручками.
def save(self):
self.response.set_cookie('sk_times', self.shakedtimes)
Красяво? Думаю да. Минусом выступает то что в фейковую модель необходимо передать объект запроса и ответа, но как вы собрались считывать и сохранять куки, а? А? То-то же.
Разместил: Виталий Волков в 20:12 Декабрь 12, 2009. Комментарии выключены
Рубрики: Без рубрики. Теги: code refactoring, cookies, django, python.
На балконе нашего здания, где мы находимся всегда стояла баночка для окурков, ну чтобы не сорить. Сегодня заметил что баночки-то нет и люди выходящие покурить бросают окурки на то место, где она была раньше. На такое наблюдать конечно забавно. Извините, а если у них в сортире убрать унитаз, они продолжуть срать в то место?
Разместил: Виталий Волков в 15:07 Июль 30, 2009. Комментарии выключены
Рубрики: Без рубрики.
Киев замечательный город. Где еще можно увидеть в центре большого города гитариста, который поет Сплина, и кучу молодых людей, которые громко ему подпевали? И все это почти в 9 часов вечера.
Гитаристу просто огромный респект!
Разместил: Виталий Волков в 10:07 Июль 27, 2009. Комментарии выключены
Рубрики: Без рубрики.
Случайно обнаружил, что окна в оболочке Gnome можно тягать, зажав кнопку Alt и перемещая мышь.
Разместил: Виталий Волков в 21:07 Июль 20, 2009. Комментарии выключены
Рубрики: Без рубрики.
Буквально на днях приобрел для себя внешний винчестер с расчетом на то, что в основном я этот винчестер буду в большинстве своем использовать под MacBook.
Другим для меня свойством было то что интернет у меня дома Волевский и на нем много не скачаешь. Поэтому подключать винт как минимум необходимо было и на моей рабочей машине, на которой стоит Ubuntu. И тут натолкнулся на грабли.
Первым делом отформатировал винчестер на HFS через дисковую утилиту. Отформатировал не подумавши с поддержкой журналирования, а драйвер на линуксе журналирование не поддерживал. Пришлось повторно очищать под обычный HFS (Mac OS Extended)
Второе стало то что после этого писать получалось с линукса только пользователю root. Починил это добавив запись в fstab файл:
/dev/sdb12 /home/hash3g/data auto rw,exec,auto,users 0
После этого перемонтировал диск и спокойно смог писать уже в линуксе.
Разместил: Виталий Волков в 15:07 Июль 20, 2009. Комментарии выключены
Рубрики: Без рубрики. Теги: hfs+, linux, mac osx.
Книги читать полезно, они развивают сознание, расширяют твой кругозор, вот мне лично стыдно за то, что я не прочитал Властелина Колец еще до его премьеры в кино. Каюсь.
Разместил: Виталий Волков в 02:07 Июль 17, 2009. Комментарии выключены
Рубрики: Без рубрики.
К вечной теме, на чем смотреть видео и слушать аудио. Ок?
Имхо для Linux систем VLC не подходит, ну никак! После мытарства по его плейлисту, который просто отвратителен в пользовании, я решил забить на него. Даже скины, которые на вид привлекательно изменяли внешность плеера, не помогут.
Два если:
- хотите слушать музыку, то поставьте foobar2000, да придется ставить wine, но линуксоиды? у кого он не стоит? -) Или можно поставить amarok, в общем для прослушивания музыки в линуксе достаточно софта, а вот с поддержкой cue не так уж и много, и все хромают когда в листе русские названия. А я любитель русского рока и lossless форматов :)
- хотите посмотреть видео, то пересоберите mplayer с выводом графики через видеокарту, потому что процессор со скаченными HD фильмам просто тупит. Да и вообще mplayer приятнее и пошустрее VLC.
Разместил: Виталий Волков в 13:07 Июль 11, 2009. Комментарии выключены
Рубрики: Без рубрики.
Предлагаю вашему вниманию небольшой снипет, который мы написали, когда понадобилось сделать вывод объектов по колонкам.
-
from django import template
-
-
-
register = template.Library()
-
-
-
class SplitObjectsNode(template.Node):
-
def __init__(self, objects, list):
-
self._objects = template.Variable(objects)
-
self._list = list
-
-
def render(self, context):
-
import math
-
columns_count = len(self._list)
-
objects = self._objects.resolve(context)
-
-
for item in self._list:
-
context[item] = []
-
-
if len(objects) == 0:
-
return ”
-
-
dec = float(len(list(objects))) / columns_count
-
mid = int(math.ceil(dec))
-
pass_part = len(list(objects)) % columns_count
-
count_full_cols = columns_count – pass_part
-
-
idx = 0
-
index = 0
-
for item in self._list:
-
step = mid
-
if idx >= pass_part and pass_part != 0:
-
step = mid – 1
-
context[item] = objects[index: step + index]
-
index += step
-
idx += 1
-
return ”
-
-
-
@register.tag
-
def split_objects(parser, token):
-
"""
-
Split content of the objects to equal parts. Number of parts is a count of passed arguments to tag.
-
-
Example:
-
{% split_objects objects col1 col2 col3 %}
-
<table><tr><td>
-
{% for item in col1 %} {{ item.title }} {% endfor %}
-
</td><td>
-
{% for item in col2 %} {{ item.title }} {% endfor %}
-
</td><td>
-
{% for item in col3 %} {{ item.title }} {% endfor %}
-
</td></tr></table>
-
"""
-
parts = token.contents.split()
-
if len(parts) < 3:
-
raise template.TemplateSyntaxError, "Tag should get at the least 3 arguments. Example usage is {% split_objects objects col1 col2 %}"
-
-
tagname = parts.pop(0)
-
objects = parts.pop(0)
-
return SplitObjectsNode(objects, parts)
Разместил: Виталий Волков в 11:06 Июнь 25, 2009. Комментарии выключены
Рубрики: Без рубрики. Теги: django, python.
Если вы работаете с текстом в консоли, возможно правите какую то конфигурацию на сервере под никсами (к примеру генту), то возможно вам будет интересно и полезно узнать некоторые горячие клавиши которые вы вероятно никогда не использовали.
Возвратится на начало текущей строки Ctrl + A
Возвратится в конец текущей строки Ctrl + E
Удалить слово назад Alt + BackSpace
Удалить слово вперед Alt + D
Переместить курсор к началу следующего слова Alt + F
Переместить курсор к началу предыдущего слова Alt + B
Удалить символ перед курсором Ctrl + D
Данные комбинации поддерживаюца большинством никсовых систем.
PS.: имхо иногда удобно очень, чем тыкать мышкой
Разместил: Виталий Волков в 16:05 Май 24, 2009. Комментарии выключены
Рубрики: Полезное. Теги: linux, горячие клавиши, консоль.
Сегодня установил себе на рабочий компьютер довольно занятный дистрибутив Zenwalk . Понравилось что зен это полноценный домашний десктоп да и еще к тому же абсолютно не избалованный гномами и кедами, и несет на своем борту такой легкий оконный менеджер xfce.
Очередным сюрпризом после установки явилось то, что версия питона стояла 2.6, так что обновлять его мне не пришлось, а сразу пошли установки пакетов – django, wxWidgets, wxPython, и еще всякого по мелочи.
Ну и плюс как обычно сделал себе полный набор девелоперского софта – Eclipse, lighttpd, php, mysql. Подумалось то что каждыйраз когда идет настройка новой оси или не совсем новой, то такие действия я повторяю из раза в раз. Пришла мысль сделать какой то пакет который бы при установке сразу же имел все необходимые мне вещи.
Возможно примусь за это в скором времени.
Разместил: Виталий Волков в 20:04 Апрель 21, 2009. Комментарии выключены
Рубрики: Без рубрики. Теги: zenwalk, ос.