воскресенье, 30 июня 2013 г.

Ошибка «Undefined variable from import»

Просматривая файлы компонента django-registration в файле registration/backends/default/views.py обнаружил ошибку в строке:

if Site._meta.installed:

типа переменная _meta не определена, хотя компонент django-registration в процессе работы ошибок не выдавал.

Лечение следующее: в Eclipse на строке нажать Ctrl+1, и выбрать UndefinedVariable.

Основы работы с архивами в Linux

В Linux в основном используется архиватор tar. Существует большое разнообразие команд для работы с архивами, но 2 команды используются наиболее часто. Ниже они представлены.

  • Упаковка содержимого текущего каталога в архив, с последующим удалением файлов:

    $ tar -cvzf archive_name.tar.gz * --remove-files

    где c — ключ для создания архива, v — ключ для вывода списка файлов, которые упаковываются (что-то вроде прогресса выполнения), z — указание использовать архиватор gzip, f — ключ нужен для упаковки содержимого в файл, archive_name — название архива, * — означает, что нужно упаковать все содержимое текущего каталога, --remove-files — ключ для удаления файлов после упаковки.

  • Распаковка архива в каталог.

    $ tar -xvf archive_name.tar.gz

    Где ключ x означает команду распаковки архива.

суббота, 22 июня 2013 г.

Местоположение исходников Django в системе

Следующая нехитрая команда выводит полный путь к исходникам Django:

python -c "
import sys
sys.path = sys.path[1:]
import django
print(django.__path__)"

четверг, 20 июня 2013 г.

Как узнать, какой sql-скрипт сгенерирует Django?

Посмотреть, как в реальности создадутся таблички на основе модели приложения, можно с помощью следующей команды:

$ python manage.py sql app_name, где app_name — имя приложения.

Данная команда только покажет скрипт, но ничего не создаст.

Вывод полного пути к каталогу в Linux

Для вывода полного пути к текущему каталогу, служит команда pwd.

Запуск shell с окружением Django в Eclipse

Правой кнопкой мыши по проекту: Django -> Shell whith django environment

Фича полезная, должна пригодиться.

Настройка отправки писем в Django

Если письма не отправляются, надо залезть в settings.py и проверить настройки. Вот работающий конфиг:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL = 'user@domain.com'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.domain.com'
EMAIL_HOST_USER = 'user@domain.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587

где user@domain.com — полное название вашего почтового ящика, а smtp.domain.com — адрес smtp-сервера вашего хостера. К примеру у хостинга jino этот адрес выглядит так: smtp.jino.ru.

среда, 19 июня 2013 г.

Отображение логина, имени и фамилии пользователя в шаблоне Django

Следующий простой код можно поместить в шапку базового шаблона:

{% if user.is_authenticated %}
<p>Вы вошли как {{ user.username }} [{{ user.first_name }} {{ user.last_name }}]. <a href="{% url "auth_logout" %}">Выход</a></p>
{% else %}<p>Вы не вошли в систему. <a href="{% url "auth_login" %}">Войти</a></p>
{% endif %}

Соответственно, user.username — логин, user.first_name — имя, user.last_name — фамилия пользователя.

Подтверждение перехода по ссылке

Если нужно вызвать всплывающее окно с подтверждением перехода по ссылке, то необходимо написать код, подобный следующему:

<a href='http://it-tasks.blogspot.ru/' onclick='return confirm("Вы уверены, что хотите перейти по ссылке?")'>Текст ссылки.</a>

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

среда, 12 июня 2013 г.

Механизм сравнения файлов в Debian

Иногда бывает очень полезно сравнить 2 файла и увидеть, чем они отличаются. Для этого нужно установить механизм сравнения. Их много, я выбрал kompare. Установка простая:

# aptitude install kompare

Затем в файловом менеджере (к примеру, в Krusader) необходимо выделить 2 файла и выбрать пункт меню: Файл -> Сравнить файлы.

Ошибка NoReverseMatch в Django 1.5

При переходе с Django 1.4 на Django 1.5 обнаружил появление следующих ошибок:

'url' requires a non-empty first argument. The syntax changed in Django 1.5, see the docs.

Лечится ошибка заменой конструкции вида:

{% url url_name %}

на:

{% url "url_name" %}

Т. е. просто название url надо окружить кавычками.

вторник, 11 июня 2013 г.

Django South и ошибка "Table already exists"

Если при выполнении операции:

python manage.py migrate app_name

появляется следующая ошибка:

DatabaseError: (1050, "Table 'table_name' already exists"), то необходимо произвести фейковую миграцию:

python ./manage.py migrate app_name --fake

понедельник, 10 июня 2013 г.

Ошибка при открытии файла под рутом в редакторе под иксами

Установил базовый дистрибутив Debian 7, установил mysql-server, после чего решил отредактировать файл my.cnf, чтобы не было проблем с кодировками. Но при вводе команды:

# gedit /etc/mysql/my.cnf

появляются следующие ворнинги:

(gedit:3684): EggSMClient-WARNING **: Failed to connect to the session manager: Authentication Rejected, reason : None of the authentication protocols specified are supported and host-based authentication failed

** (gedit:3684): WARNING **: Could not connect to session bus

Поискав в гугле, так ничего и не нашел. Спросил в IRC-канале #debian-russian. Там ребята посоветовали использовать вместо gedit какой нибудь консольный редактор типа vim, mcedit либо nano.

Объяснили, что это происходит из-за того, что работая под иксами, приложение должно авторизоваться в иксах. Хотя в Debian 6 подобного не было.

пятница, 7 июня 2013 г.

Как выключить компьютер в Linux из терминала?

Команда для выключения вполне логичная:

shutdown -h now

Установка LibreOffice в Debian 7

Вообще сначала поставил OpenOffice, потом про него почитал, и стало понятно, что идеалогически более правильно поставить LibreOffice.

Установка следующая:

# aptitude install libreoffice

Также можно поставить русскую справку (вместе с которой поставится и русский язык интерфейса):

# aptitude install libreoffice-help-ru

четверг, 6 июня 2013 г.

Установка Dropbox в Debian 7

Для установки Dropbox в Debian x64 необходимо выполнить команду:

$ cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

Затем надо запустить демон Dropbox:

~/.dropbox-dist/dropboxd

Чтобы Dropbox автоматически запускался при старте системы необходимо запустить планировщик задач Cron:

crontab -e

и добавить строку:

@reboot ~/.dropbox-dist/dropboxd
Важно! Операции выше делаем от обычного пользователя, под которым вы работаете.