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