В части 2 мы сосредоточимся на серверной разработке с помощью Django. Мы установим необходимое программное обеспечение для внутренней разработки, создадим новый проект Django с именем server, создадим новое приложение с именем books, опишем модель Book, зарегистрируем модель у администратора и продемонстрируем администрирование базы данных через сайт администратора Django.

P1, P2, P3, P4, P5

2.1 Установка программного обеспечения

Прежде чем мы начнем наш бэкэнд-проект, нам нужно будет установить некоторое программное обеспечение:

2.1.1 Python

Если у вас последняя версия MacOS, скорее всего, на ней уже установлен Python 2.7. Не стесняйтесь использовать 2.7 или 3.x. По сути, они одинаковы для целей этого руководства.

Установка проста. Просто скачайте установщик и установите его, как обычное приложение MacOS. Скачайте Python с официального сайта.

2.1.2 пункт

Проще говоря, pip (Pip Installs Packages) - это система управления пакетами, используемая для установки и управления программными пакетами, написанными на Python. Полную документацию по установке можно найти здесь.

Теперь откройте терминал:

# cd into the desktop
  cd ~/desktop

# download the pip Python script
  curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

# run the script
  python get-pip.py

# once installation completes, verify that it's installed
  pip —-version

2.1.3 virtualenv

virtualenv - это инструмент 'для создания изолированных сред Python ... Он создает среду, которая имеет свои собственные каталоги установки, которые не разделяют библиотеки с другими средами virtualenv (и, возможно, не имеют доступа к глобально установленным библиотекам) '.

Мы можем использовать его для установки, изменения и игры с пакетами и библиотеками Python, не нарушая нашу глобальную среду. Полную документацию по установке можно найти здесь.

Теперь откройте терминал для установки virtualenv:

# use pip to install virtualenv
  pip install virtualenv

# verify that it's installed
  virtualenv —-version

Давайте создадим каталог для размещения наших виртуальных сред:

# cd into the root directory
  cd ~/

# create a hidden folder called .envs for virtual environments
  mkdir .envs

# cd into the virtual environments directory
  cd .envs

Теперь мы можем создать виртуальную среду для нашего проекта:

# create a virtual environment folder: my_library
  virtualenv my_library

# activate the virtual environment from anywhere using
  source ~/.envs/my_library/bin/activate

Теперь, когда мы создали виртуальную среду под названием my_library, убедитесь, что среда всегда активирована перед установкой, обновлением любых пакетов или библиотек в папке проекта или запуском сервера.

Наконец, найдите время, чтобы обновить pip внутри этой виртуальной среды:

pip install -U pip

2.1.4 Django 1.11 (LTS)

Django описывается его создателями как «высокоуровневый веб-фреймворк Python, который способствует быстрой разработке и чистому, прагматичному дизайну…»

Он предоставляет нам набор общих компонентов (например, способ обработки аутентификации пользователя, панель управления, формы, способ загрузки файлов и т. Д.), Поэтому нам не нужно изобретать все заново. Прочтите эту статью о DjangoGirls, чтобы узнать больше о Django и о том, почему он используется.

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

# inside my_library with virtualenv activated
  pip install Django==1.11

# verify that it's installed, open up the Python shell
  python

# access the django library and get the version (should be 1.11)
  import django
  print(django.get_version())

# exit using keyboard shortcut ctrl+D or:
  exit()

2.2 Проект Django

2.2.1 Создайте проект Django: server

Давайте воспользуемся django-admin, утилитой командной строки для административных задач от Django, чтобы сгенерировать новый проект Django:

# cd into the project folder
  cd ~/desktop/my_library

# initialize the virtual environment
  source ~/.envs/my_library/bin/activate

# use Django to create a project: server
  django-admin startproject server

# cd into the new Django project
  cd server
 
# synchronize the database
  python manage.py migrate

# run the Django server
  python manage.py runserver

Теперь зайдите в http://localhost:8000 в своем браузере и убедитесь, что проект Django работает:

Вы можете выключить сервер с помощью cmd+ctrl.

2.2.2 Создание учетной записи суперпользователя

Нам нужно будет создать суперпользователя для входа на сайт администратора и обработки данных базы данных. Внутри my_library/server запускаем:

# create superuser
  python manage.py createsuperuser

Заполните поля Username, Email Address (необязательно) и Password. Вы должны получить сообщение: Superuser created successfully.

Теперь запустите сервер с python manage.py runserver и перейдите к http://localhost:8000/admin, чтобы увидеть страницу входа администратора. Введите данные своей учетной записи суперпользователя для входа.

Отлично! Теперь у нас есть доступ к админке Django. После того, как мы создадим модель books и выполним соответствующие настройки, мы сможем добавлять, редактировать, удалять и просматривать данные о книгах.

Выйдите из системы и выключите сервер с помощью cmd+ctrl.

2.2.3 Защита наших секретов

Прежде чем делать что-либо еще, мы хотим обновить файл settings.py, чтобы убедиться, что мы не разглашаем наши секреты, случайно отправив учетные данные для аутентификации в Github. Есть несколько способов сделать это, но для простоты я выберу самый простой:

# create a config.json file to hold our configuration values
  my_library/server/server/config.json

Внутри мы сохраним наше SECRET_KEY значение из settings.py в API_KEY:

{
  "API_KEY" : "abcdefghijklmopqrstuvwxyz123456789"
}

В settings.py импортируйте библиотеку json и загрузите переменные конфигурации:

import os
import json
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
with open(BASE_DIR + '/server/config.json', 'r') as config:
    obj = json.load(config)
SECRET_KEY = obj["API_KEY"]
...

Чтобы убедиться, что config.json с секретным ключом не помещается в репозиторий, создайте .gitignore файл в my_library, чтобы игнорировать его (вместе с некоторыми другими автоматически сгенерированными файлами и базой данных):

### Django ###
config.json
*.log
*.pot
*.pyc
__pycache__/
local_settings.py
db.sqlite3
media

Теперь, когда вы зафиксируете изменения, перечисленные выше файлы не будут зафиксированы. Наши секреты в безопасности, и наше репо не будет содержать лишних лишних файлов!

2.3 Приложение "Книги"

2.3.1 Создание приложения с книгами

Думайте о приложениях Django как о модулях, которые встраиваются в ваш проект. Мы создадим приложение под названием books, содержащее модели, представления и другие настройки для взаимодействия с данными книг в базе данных.

Загляните в эту ветку, чтобы лучше понять различия между проектами и приложениями в Django.

# create new app: books
  python manage.py startapp books

# creates directory: my_library/server/books

Теперь мы установим приложение books в проект server. Откройте файл настроек: my_library/server/server/settings.py.

Прокрутите до массива INSTALLED_APPS. Django по умолчанию установил собственные основные приложения. Установите приложение books в конец массива:

INSTALLED_APPS = [
  ...
  'books'
]

2.3.2 Опишите модель книги

Далее мы опишем модель Book в приложении books. Откройте файл моделей: my_library/server/books/models.py.

Опишите Book модель, которая сообщает Django, что каждая книга в базе данных будет иметь title до 500 символов в длину, поле author до 100 и поле description с открытым числом:

from django.db import models

class Book(models.Model):
  title       = models.CharField(max_length=500)
  author      = models.CharField(max_length=100)
  description = models.TextField()

2.3.3 Зарегистрируйте модель Book у администратора

Теперь мы зарегистрируем модель Book у администратора для нашего приложения books, чтобы мы могли просматривать ее на сайте администратора и управлять данными книг оттуда. Откройте админ-файл: my_library/server/books/admin.py и добавьте:

from django.contrib import admin
from .models import Book

@admin.register(Book)
class bookAdmin(admin.ModelAdmin):
  list_display = ['title', 'author', 'description']

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

python manage.py makemigrations
python manage.py migrate

Запустите сервер и перейдите на http://localhost:8000/admin для входа в систему. Обратите внимание, что отображается модель Book, зарегистрированная администратором:

При нажатии на «Книги» отображается пустой список, поскольку в базе данных нет книг. Нажмите «Добавить», чтобы начать создание новой книги для добавления в базу данных. Идите вперед и создайте несколько книг.

После сохранения и возврата к списку они должны отображаться вместе с title, author и description (определены в list_display array).

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

Примечание: для простоты мы будем использовать базу данных SQLite, которая предустановлена ​​при создании каждого проекта Django. Нет необходимости выполнять дополнительную работу с базами данных для целей этого руководства.

2.4 Заключение

Поздравляем, мы дошли до конца части 2! Вот что мы уже сделали:

  • Установлено python
  • Используется python для установки pip диспетчера пакетов
  • Используется pip для установки virtualenv для создания виртуальных сред
  • Создал виртуальную среду ~/.envs под названием my_library
  • Активировал my_library среду и обновил pip
  • Установлен Django 1.11 LTS в среде my_library
  • Создан каталог нашего проекта my_library
  • Создал проект Django server
  • Создал учетную запись суперпользователя для доступа к сайту администратора Django
  • Мы защитили наши секреты, переместив наш SECRET_KEY в config.json
  • Игнорируемые файлы, которые создаются автоматически и / или чувствительны к .gitignore
  • Создал новое приложение под названием books
  • Описал Book модель
  • Зарегистрировал модель Book у админа
  • Добавлены данные о книгах в базу

В части 3 мы начнем работу над REST API (с Django REST Framework) для доставки данных нашему клиентскому интерфейсу EmberJS. У API будут сериализаторы, представления и URL-адреса, которые будут структурировать наши данные и передавать их через конечные точки.

Дальнейшее чтение

Что такое Django?
Что такое модель?
Что такое представление?
Что такое суперпользователь?
Что такое миграция?
Что переносится?
Что такое SQLite?
Анализ JSON Python: простое руководство
Как безопасно хранить ключи API
Что такое Python?
Что такое pip?
Что такое virtualenv?
Лучшие практики для virtualenv и git repo