Архив рубрики: Python

Python: Django & PostgreSQL

Привет всем. Сегодня расскажу как подключать бд PostgreSQL(далее как постгрес) к фреймворку Джанго.

Итак, для начала установите pgAdmin. Качал я ее отсюда http://www.postgresql.org/download/ и как всегда самую последнюю версию. Процесс установки — я особо не заморачивался, кликал «далее». Теперь у меня на винде 8.1 есть такой менеджер — аналог phpmyadmin, как pgAdmin.

После этого нужно настроить общение с базой данных, для этого нужно некий драйвер, найти его можно по ссылке http://www.lfd.uci.edu/~gohlke/pythonlibs/ и найдите браузерным поиском такие два названия psycopg2-2.6.1-cp35-none-win32.whl  psycopg2-2.6.1-cp35-none-win_amd64.whl и нажмите на тот который подходит вашей системе и закиньте в папку site-packages которая находится у вас в папке проекта мой пример пути (D:djangopropyblogLibsite-packages) также можно ее закинуть в папку с таким же названием но уже в директории где установлен сам Python. Ну а теперь начнем связывать.

Для начала создайте базу данных в pgAdmin…

Далее найдите следующие строки в файле settings.py и замените их соответствующими данными вашей БД

'ENGINE': 'django.db.backends.postgresql_psycopg2', — должна быть одинакова у всех для использования постгреса.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', 
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': '123',
        'HOST': '',
        'PORT': '',
    }
}

Следующим шагом будет создание суперпользователя админки, но после того как вы подключите адаптер для БД. Делается это так
В консоли когда у вас запущено виртуальное окружение Джанго(смотрите прошлую статью http://pythlife.blogspot.com/2016/03/django-project-folder-create.html) — запись в консоли выглядит примерно так (pyblog) D:djangoproblogblog> , перейдите в папку где хранится ваша преднастройка проекта(из прошло записи, правильно называть виртуальное окружение) у меня это путь D:djangopropyblogLibsite-packages -> пишите команду pip install psycopg2-2.6.1-cp35-none-win32.whl

В итоге строка в консоли выглядит так:
(pyblog) D:djangopropyblogLibsite-packages> pip install sycopg2-2.6.1-cp35-none-win32.whl

Установка будет удачной если вам не высыпить никаких ерроров. 
Переходим в директорию нашего проекта где лежит файл manage.py и выполняем такую команду
python manage.py migrate auth
python manage.py migrate
python manage.py createsuperuser

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



























Запускаем сервер в консоли в директории с файлом manage.py .
python manage.py runserver
Переходим по ссылке http://127.0.0.1:8000/admin/ вводим данные и попадаем в админку.

На этом я заканчиваю… в итоге мы подключили БД, создали суперюзера и попали в админку, дальше будет интересней — обещаю!

Автор: Няшный Человек
Дата публикации: 2016-03-27T20:33:00.000+03:00

Python — Пример импортирования пакета

Рассмотрим практический пример программного кода, который демонстрирует, как используются файлы инициализации и пути к каталогам. Следующие три файла располагаются в каталоге dir1 и в подкаталоге dir2 – комментарии описывают пути к этим файлам:
# Файл: dir1__init__.py
Print(‘dir1 init’)
x = 1

# Файл: dir1dir2__init__.py
Print(‘dir2 init’)
y = 2

# Файл: dir1dir2mod.py
Print(‘in mod.py’)
z = 3
В данном случае каталог dir1 может быть подкаталогом нашего рабочего каталога (то есть домашнего каталога программы) или подкаталогом одного из каталогов, перечисленных в пути поиска модулей (технически, входящего в список sys.path). В любом из этих случаев для каталога, вмещающего подкаталог dir1, не требуется наличие файла __init__.py.
Инструкции  import  выполняют  файлы  инициализации  в  каждом  каталоге, которые присутствуют в пути к модулю, – инструкции print, присутствующие в этих файлах, позволят отследить их выполнение. Кроме того, как и файлы модулей, уже импортированные каталоги могут передаваться функции reload для  принудительного  повторного  исполнения  этого  единственного  элемента.
Как показано ниже, для повторной загрузки каталогов и файлов функция reload также может принимать цепочку имен, разделенных точками:


>>> import dir1.dir2.mod       # Сначала запускаются файлы инициализации
dir1 init
dir2 init
in mod.py
>>>
>>> import dir1.dir2.mod       # Повторное импортирование не выполняется
>>>
>>> from imp import reload     # Требуется в версии 3.0
>>> reload(dir1)
dir1 init

>>>
>>> reload(dir1.dir2)
dir2 init

После операции импортирования путь, указанный в инструкции import, становится цепочкой вложенных объектов. Здесь mod – это объект, вложенный в объект dir2, который в свою очередь вложен в объект dir1:
>>> dir1

>>> dir1.dir2

>>> dir1.dir2.mod

Каждый каталог в пути фактически становится переменной, которой присваивается объект модуля, пространство имен которого инициализируется всеми инструкциями присваивания в файле __init__.py, находящемся в этом каталоге. Имя dir1.x ссылается на переменную x, которой присваивается значение 
в файле dir1__init__.py, точно так же, как имя mod.z ссылается на переменную 
z, которой присваивается значение в файле mod.py:
>>> dir1.x
1

>>> dir1.dir2.y

2
>>> dir1.dir2.mod.z

3

Автор: Няшный Человек
Дата публикации: 2016-03-22T20:30:00.000+02:00

Настраиваем директорию для Django проекта

Всем привет, в этой статье я помогу вам настроить папку с проектом, и запустить свой сервер с стартовой страницей Django.
Итак для начала создайте папку в которой вы будете хранить все проекты, у меня она будет по такому пути /d/djangopro, находясь в этой директории в консоли выполняем команду virtualenv pyblog у меня создалась папка pyblog с необходимыми модулями для старта проекта. Далее заходим в папку pyblog/Scripts и выполняем команду activate — у меня она сработала в виндовой консоли.

В результате после выполнения этой команды в консоли перед путем  к папке у вас появилась такая запись (pyblog) — зависит от названия которое вы использовали в команде virtualenv. 
У меня віглядит все примерно так. Дальше нам нужно в этот проект «запихнуть» Django.
Для этого пишем pip install django==1.9.4, перед выполнением этой команды убедитесь что у вас установлен pip, это можно увидеть в папке где установлен Python и по следующему пути Python35-32Libsite-packages можно это увидеть. В случае его отсутствия его нужно установить, в текущем проекте это объяснение опустим. Если обьяснить по простому, вы выполнили надстройку над той директорией где будут лежать файлы нашего сайта.  Для следующего шага создайте папку blog в папке djangopro в консоли зайдите в нее и напишите такую команду (pyblog) D:djangoproblog> python D:djangopropyblogScriptsdjango-admin.py startproject blog. В результате после выполнения данной команды у вас в папке блог будут так сказать по простому первые файлы вашего сайта — это выясним дальше.
У меня получилось так, что в папке blog создалась еще папка blog а в ней уже появился первый файл manage.py он нам и нужен для следующей команды…
(pyblog) D:djangoproblogblog>python manage.py runserver
Если после ее запуска увидите примерно следующие строки
можно вас поздравить, вы запустили свой первый проект на Django и запустили сервер на котором его можно посмотреть введя адрес в браузере 127.0.0.1:8000 где вы увидете стартовую страницу приветствия.
Надеюсь в следующей статье разберем как подключить базу данных и уже начинать писать блог.
Спасибо за посещение, внимание и иногда за комментарии и лайки!



Автор: Няшный Человек
Дата публикации: 2016-03-17T21:29:00.000+02:00

Файлы __init__.py пакетов

Если вы решили использовать импортирование пакетов, существует еще одно условие, которое необходимо будет соблюдать: каждый каталог в пути, указанном в инструкции импортирования пакета, должен содержать файл с именем __init__.py, в противном случае операция импорта пакета будет терпеть неудачу. То есть в примере выше каталоги dir1 и dir2 должны содержать файл с именем __init__.py каталог-контейнер dir0 может не содержать такой файл, потому что сам он не указан в инструкции импортирования пакета. Точнее говоря, для такой структуры каталогов:
dir0dir1dir2mod.py
и инструкции импортирования, имеющей следующий вид:
import dir1.dir2.mod
применяются следующие правила:
•  dir1 и dir2 должны содержать файл __init__.py.
•  dir0, каталог-контейнер, может не содержать файл __init__.py – этот файл
будет проигнорирован, если он присутствует.
•  dir0, но не dir0dir1, должен присутствовать в пути поиска модулей (то есть он  должен  быть  домашним  каталогом  или  присутствовать  в  переменной окружения PYTHONPATH и так далее).

Таким образом, структура каталогов в этом примере должна иметь следующий вид (здесь отступы указывают на вложенность каталогов):

dir0          # Каталог-контейнер в пути поиска модулей
    dir1
        __init__.py
        dir2
            __init__.py
            mod.py
Файлы __init__.py могут содержать программный код на языке Python, как любые другие файлы модулей. Отчасти они являются объявлениями для интерпретатора и могут вообще ничего не содержать. Эти файлы, будучи объявлениями, предотвращают неумышленное сокрытие в каталогах с совпадающими именами истинно требуемых модулей, если они отображаются позже в списке путей поиска модулей. Без этого защитного механизма интерпретатор мог бы выбирать  каталоги,  которые  не  имеют  никакого  отношения  к  вашему  программному коду, только лишь потому, что в пути поиска они появляются ранее.
В общем случае файл __init__.py предназначен для выполнения действий по инициализации пакета, создания пространства имен для каталога и реализации поведения инструкций from * (то есть from … import *), когда они используются для импортирования каталогов:

Инициализация пакета
 Когда интерпретатор Python импортрирует каталог в первый раз он автоматически запускает программный код файла __init__.py этого каталога. По этой причине обычно в эти файлы помещается программный код, выполняющий действия по инициализации, необходимые для файлов в пакете.
 Например, этот файл инициализации в пакете может использоваться для создания файлов с данными, открытия соединения с базой данных и так далее. Обычно файлы __init__.py не предназначены для непосредственного выполнения – они запускаются автоматически, когда выполняется первое обращение к пакету.

Инициализация пространства имен модуля
При импортировании пакетов пути к каталогам в вашем сценарии после завершения операции импортирования превращаются в настоящие иерархии вложенных объектов. Например, в предыдущем примере после завершения операции импортирования можно будет использовать выражение dir1.dir2, которое возвращает объект модуля, чье пространство имен содержит все имена, определяемые файлом __init__.py из каталога dir2. Такие файлы создают пространства имен для объектов модулей, соответствующих каталогам, в которых отсутствуют настоящие файлы модулей.

Поведение инструкции from *
В качестве дополнительной особенности, в файлах __init__.py можно использовать списки __all__, чтобы определить, что будет импортироваться из каталог

Блог на Django. Часть 1 — установка

Всем привет, решил попробовать сделать блог на Django и рассказать «пошаговость» Вам. Первое и самое главное — без чего невозможно будет работать — это установить Python и Django. О совместимостях версий писать не буду так как все есть в гугле)

Итак начнем с установки Python-a. Так как у меня виндовс и к тому же 8.1 будет пробовать делать все под нее. Для того чтоб скачать свежую версию я воспользовался ссылкой https://www.python.org/downloads/ и на данный момент там есть версия 3.5.1, вот ее и возьму.

Во время установки я отметил галочкой пункт Add Python 3.5 to PATH, чтобы cmd его тоже распозновала.

Потом нажав Customize installtion ждем окончания установки.
Дальше нам надо установить Django, для этого переходим по ссылке https://www.djangoproject.com/download/ и в правой колонке есть ссылка для скачивания последнего релиза — ее и кликаем. Вы скачаете архив с которого нужно распаковать папку «Django-1.9.4» а потом в ее корне запустить команду python setup.py install .
Для того чтоб установить джанго я воспользовался ГИТовой консолью запустив ее с правами администратора и написал приведенную выше команду. Запуск консоли с правами администратора — обязателен !!!

Теперь проверим работоспособность нашего установленного Джанго. Для этого я выполнил в папке выше следующие команды…
в консоли запускаем python, а далее пишем следующие команды
>>> import django
>>> django.VERSION
(1, 9, 4, 'final', 0)
Если у вас отобразилась версия, поздравляю — вы установили все как надо.

Вот впринципе на этом данная статья может быть закончена, далее мы рассмотрим процесс настройки с БД. Хочу попробовать на postgreSQL, но а там как получится. А вообще выбор между MySQL & PostgreSQL.

Помогите с выбором БД, пишите в комментах какой отдать предпочтения.
Так же я в гит буду выкладывать все шаги разработки или же лучше выложить вконце один готовый вариант ?

Автор: Няшный Человек
Дата публикации: 2016-03-06T10:41:00.000+02:00

Пакеты и настройка пути поиска

Если вы используете эту возможность, имейте в виду, что пути к каталогам в инструкции import могут содержать только имена переменных, разделенные точками. Здесь нельзя использовать синтаксис путей к каталогам, специфичный для текущей платформы. Например, C:dir1.My Documents.dir2 или ../dir1 – это недопустимый синтаксис. Напротив, в настройках путей поиска модулей используется платформозависимый синтаксис – для именования необходимых каталогов-контейнеров.

Так, в предыдущем примере dir0 – это имя каталога, которое требуется добавить в путь поиска модулей и которое может иметь произвольную длину и путь, с учетом специфики используемой платформы, ведущий к каталогу dir1. Вместо того, чтобы использовать ошибочный синтаксис, как показано ниже:
import C:mycodedir1dir2mod     # Ошибка: недопустимый синтаксис

Добавьте путь C:mycode в переменную окружения PYTHONPATH или в файл .pth
(предполагается, что это не домашний каталог программы, поскольку в этом случае этот шаг не является необходимым) и используйте такую инструкцию:
import dir1.dir2.mod.
В сущности, записи в списке путей поиска модулей содержат платформозависимые пути к каталогам, которые ведут к самым левым именам в цепочках, Основы операции импортирования пакетов представленных  в  инструкциях  import,  а  сами  инструкции  import  содержат окончание пути к каталогам платформонезависимым способом.

Автор: Няшный Человек
Дата публикации: 2016-03-03T11:44:00.000+02:00