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

Django. База данных и модели ( часть 6)

Реляционные базы данных

Django прекрасно работает и с MySQL, PostgreSQL, SQLite, Oracle — все это реляционные базы данных.

Реляционные — это значит relational, relation — отношения, в нашем случае отношения между таблицами в нашем случае.

В прошлом уроке мы создали простое Django приложение “houses” и подключили его к проекту. А сейчас начнем его настраивать и начнем с файла models.py, в котором мы определим структуру данных приложения.

models.py — отвечает за описание нашей будущей базы данных

Внутри его, создаем класс House унаследованный от models.Model

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

Начинаем заполнять нашу таблицу. Таблицы в ORM оформляются в виде классов.

class House(models.Model):
      pass

Наши дома имеют определенные характеристики вроде:

  • Цены
  • Площади
  • Материала изготовления

Эти характеристики задаются внутри модели и называются полями модели
(переменные — колонки базы данных)

Создадим заголовок, первую колонку
name = models.CharField(«название», max_length=200)
# CharField — подразумевает собой набор символов
# max_length=200 — максимальная длина символов в строке

Создадим еще одно поле price, во вторую колонку
price = models.IntegerField(«цена»)
# IntegerField — может принимать и хранить целые числа
# “цена” — русское название поля price

Добавим еще одно поле description типа TextField в третью колонку
# TextField — в отличии от CharField, может хранить тексты произвольной длинны (для больших массивов текстовой информации) и его не нужно ограничивать параметром max_lenght
descriptions = models.TextField(“описание”)

Дополнительно
# models.DateTimeField — используется для хранения даты публикации статьи, это формат хранения как времени так и даты
# models.DateField — хранит только дату
# models.IntegerField — хранит цифровые целочисленные значения

class Meta — включает в себя дополнительные свойства для нашей будущей таблицы.

Нас интересует название таблицы, мы не хотим, чтобы Django самостоятельно давал название нашей таблицы, по-этому мы описываем это в классе Meta. Его нужно поместить во внутрь класса House (sites -> dom_u_morya -> houses)

файл models.py

сlass House(models.Model):
      class Meta():
            db_table = «new_houses»

Более современные требования требует дополнительных параметров

class House(models.Model):
      house_name = models.CharField(«Название», max_length=200, default=«»)
      house_price = models.IntegerField(«Цена», default=0)
      house_description = models.TextField(«Описание», default=«»)

И так в нашей модели House есть три поля, которые описывают его структуру


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

Django. Подготовка среды разработки (часть 4)

Как активировать virtualenv в PyCharm?

Ссылка на статью от Jetbrains

Переходим по следующему пути:

File -> Settings -> Project Dom_u_morja -> Project Interpreter

  • Нажимаем на эту маленькую шестеренку cogwheel_framed возле поля проекта и выбираем опцию More…
  • Нажимаем на “+” затем Add Local и выбираем нужный интерпретатор

Проверяем заработал ли интерпретатор. Нажимаем кнопку Run, если не заработало, то нажимаем Run/Debug Configurations и делаем настройку следующим образом как на рисунке.

Pycharm Professional — как открыть базу данных SQLite?

Переходим по следующему пути:

View -> Tool Windows -> Database

Автор: Vladimir Semenovich

Django. Создание первого приложения (часть 5)

Мы создали минимальный проект Django, теперь давайте посмотрим на его структуру.

Сама папка dom_u_morja в которой находится наш проект это всего лишь контейнер, она не на что не влияет и мы можем смело ее переименовать.

manage.py — это python скрипт для управления нашим проектом. Мы уже использовали его когда:

1)запускали тестовый сервер из консоли:
python manage.py runserver

2)применяли первые миграции:
python manage.py migrate

Внутренняя папка dom_u_morja — это python пакет для нашего проекта, в ней мы видим несколько файлов:

__init.py__ — сообщает python, что каталог dom_u_morja нужно рассматривать как пакет, а не просто папку

settings.py — отвечает за настройки сайта

urls.py — мы можем задавать url пути проекта

wsgi.py — это специальный файл для web серверов, которые будут запускать сайт

И так у нас есть основа и ее нужно расширять

Django-сайт состоит из приложений (applications), каждое из которых выполняет какую-то работу. Это один из принципов DRY.
DRY — don't repeat yourself

Приложения:

  • Каталог продукции
  • Форум
  • Блог

Откроем settings.py и пролистаем вниз до списка:

INSTALLED_APPS = [
          ‘django.contrib.admin’, — отвечает за панель администрирования
          ‘django.contrib.auth’, — отвечает за авторизацию на сайте
]

В этом списке содержатся приложения, которые уже подключены к нашему проекту. Все они являются частью Django и без них было бы сложно создать сайт. Кроме встроенных в Django, мы можем создавать свои собственные приложения.

Нажмем: CTRL+ALT+R, откроется консоль для взаимодействия с Django,

введем startapp houses, нажмем Enter, приложение создано.
(ссылка на Running Tasks of manage.py Utility

или в терминале запускаем команду: python manage.py startapp [app_label]

Если приложение не видно в проекте, то нажмем правой кнопкой на корневой папке проекта и выберем Synchronize dom_u_morja, чтобы обновить данные

Каталог houses появился. Раскроем его, это тоже python пакет со своей структурой данных


Теперь подключаем приложение к проекту, для этого достаточно добавить houses в список INSTALLED_APPS


Готово, приложение подключено.

Автор: Vladimir Semenovich

Django. Python, установка PIP и настройка Virtual Environment (часть 1)

В течение нескольких статей, я хотел бы поделиться своими знаниями в разработке сайтов на Django.

Системы управления пакетами:
cуществуют две основные системы pip и easy_install. Вам нужно решить, какую систему управления пакетами вы будете использовать.


Установка easy_install
$ sudo apt-get install python-setuptools
Эта команда установит easy_install

Установка VIRTUALENV (виртуального окружения) в систему
$ sudo easy_install virtualenv

Далее переходим в каталог, где мы хотим создать виртуальное окружение.
Создаем виртуальное окружение c опцией —no-site-packages, это означает не использовать системные библиотеки Python
pyvenv — название нашей папки
$ virtualenv —no-site-packages pyvenv
$ cd pyvenv

Активируем виртуальное окружение. Команда source переводит контекст пользователя из системного окружения в виртуальное окружение
$ source bin/activate

После предыдущей команды появится имя нашей папки в круглых скобках (pyvenv)vlad@vs:/media/vlad/android/pyvenv$
(pyvenv) — это название нашего виртуального окружения и это означает, что оно активировано и все пакеты будут устанавливаться именно сюда.

Для того, что-бы выйти из окружения нужно выполнить
$ deactivate

Установка pip
Для установки pip, нужно скачать и запустить файл get-pip.py
$ cd /tmp/
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python ./get-pip.py

Если setuptools и wheel еще не установлены, то get-pip.py установит их для вас.
Также про процесс установки почитать можно тут -> https://pip.pypa.io/en/stable/installing/

Установка VIRTUALENV (виртуального окружения) в систему
$ sudo pip install virtualenv

Обновим следующие пакеты
$ sudo pip install —upgrade pip virtualenv
Или
$ sudo pip install -U pip virtualenv

Далее переходим в каталог, где мы хотим создать виртуальное окружение.
Создаем виртуальное окружение с опцией —no-site-packages, это означает не использовать системные библиотеки Python

$ virtualenv -help
—no-site-packages DEPRECATED. Retained only for backward compatibility.
Not having access to global site-packages is now the
default behavior.

pyvenv — название нашей папки
$ virtualenv —no-site-packages pyvenv
$ cd pyvenv

Активируем виртуальное окружение. Команда source переводит контекст пользователя из системного окружения в виртуальное окружение
$ source bin/activate

После предыдущей команды появится имя нашей папки в круглых скобках (pyvenv)vlad@vs:/media/vlad/android/pyvenv$
(pyvenv) — это название нашего виртуального окружения и это означает, что оно активировано и все пакеты будут устанавливаться именно сюда.

Для того, что-бы выйти из окружения нужно выполнить
$ deactivate

Python3
Установка VIRTUALENV (виртуального окружения используя python3)
$ virtualenv -p python3 pyvenv3

Если у вас при создании будет ошибка то попробуйте обновить virtualenv:
$ pip install —upgrade virtualenv

Автор: Vladimir Semenovich

Django. Настройка поддержки Django проектов в Pycharm Professional (часть 3)

Django (часть 1). Python, установка PIP и настройка Virtual Environment
Установка Django (часть 2), создание первого проекта

Pycharm Professional

Нажимаем create new project => выбираем Django => далее в Location выбираем папку с нашим проектом (sites -> dom_u_morja)

Нажимаем Create -> yes

Если в панели управления не горит зеленым запуск сервера, то идем в настройки.

File -> Settings -> Languages & Frameworks -> Django -> Enable Django Support

 

Пункт 3. Выбираем папку проекта

 

Пункт 4. Выбираем файл с настройками settings.py

 

Жмем OK -> OK

Панель запуска сервера стала активной. Нажимаем зеленый треугольник и Web сервер запустился

Нажимаем на ссылку в терминале, должен открыться браузер по этому же адресу

Автор: Vladimir Semenovich

Установка Django. Создание первого проекта (часть 2)

Официальный сайт
https://www.djangoproject.com/download/

Установка Django нужной нам версии. Если версия 1.9.5 вас не устраивает, то просто замените на ту, которая вам нужна.

$ pip install Django==1.9.5

Расшифровка (LTS) — long-term support releases

После того как мы активировали virtualenv, внутри его мы создаем наш проект, ссылка на первую статью: Django (часть 1). Python, установка PIP и настройка Virtual Environment

$ pip install django
или
$ easy_install django

В папке pyvenv/bin у нас появится файл django-admin.py, он позволяет как создавать так и управлять django-проектами.

$ python django-admin.py — команда для просмотра параметров, которые может выполнить этот скрипт.

Type 'django-admin.py help ' for help on a specific subcommand.

Available subcommands:

[django]
   check
   compilemessages
   createcachetable
   dbshell
   diffsettings
   dumpdata
   flush
   inspectdb
   loaddata
   makemessages
   makemigrations
   migrate
   runserver
   sendtestemail
   shell
   showmigrations
   sqlflush
   sqlmigrate
   sqlsequencereset
   squashmigrations
   startapp
   startproject
   test
   testserver
Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.).

В настоящий момент нас интересует только параметр startproject

Создаем папку sites в каталоге pyvenv, тут будут храниться наши сайты.
$ mkdir sites
$ cd sites

Создаем наш первый проект на Django
$ python django-admin.py startproject dom_u_morja

Переходим в него
$ cd dom_u_morja

В этой папке находится очень интересный файл manage.py, он позволяет управлять уже созданным приложением.

$ python manage.py — команда для просмотра параметров, которые может выполнить этот скрипт

Type 'manage.py help ' for help on a specific subcommand.

Available subcommands:

[auth]
   changepassword
   createsuperuser

[django]
   check
   compilemessages
   createcachetable
   dbshell
   diffsettings
   dumpdata
   flush
   inspectdb
   loaddata
   makemessages
   makemigrations
   migrate
   sendtestemail
   shell
   showmigrations
   sqlflush
   sqlmigrate
   sqlsequencereset
   squashmigrations
   startapp
   startproject< /span>
   test
   testserver

[sessions]
   clearsessions

[staticfiles]
   collectstatic
   findstatic
   runserver

В настоящий момент нас интересует только параметр runserver

Этой командой мы запускаем встроенный в Django Web-сервер
$ python manage.py runserver

Выполнив эту команду мы получим информацию об используемой версии Django, текущую дату или информацию об ошибках, а также путь к нашему серверу 127.0.0.1:8000

April 15, 2016 — 19:17:14
Django version 1.9.5, using settings 'dom_u_morja.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Not Found: /
[15/Apr/2016 19:18:02] «GET / HTTP/1.1» 200 1767
Not Found: /favicon.ico
[15/Apr/2016 19:18:02] «GET /favicon.ico HTTP/1.1» 404 1941

Вернемся опять в командную строку и увидим сообщение о не примененных миграциях.
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
ctrl + c — чтобы остановить север.

Теперь введем.
$ python manage.py migrate

Сейчас в Django 1.9 используем migrate вместо syncdb.
Перед тем как делать syncdb, правильно запускать проверку:
python manage.py validate – проверяет на ошибки структуру ваших моделей,
validate — эта команда не работает в django 1.9 (нужно использовать check)

$ python manage.py check

Django выполнит миграции необходимые для работы сайта. В данном случае Django создаст базу данных и несколько таблиц.

Operations to perform:
Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
Rendering model states… DONE
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying sessions.0001_initial… OK

Автор: Vladimir Semenovich