Создание web-сервиса. Всё, но не сразу. Создание REST приложений на Django.
Продолжаем вести разработку на Django
В прошлых статьях мы затронули проектирование БД и создали базу данных. Теперь будем работать с, так называемыми, контроллерами, хотя в Django вместо контроллеров используются view.
Для дальнейшей работы потребуется djangorestframework — разработка для создания REST приложений на базе Django.
Установка производится командой
pip3 install djangorestframework.
После установки запускаем виртуальное окружение и сервер. Открываем ide и начинаем работать.
Первым делом создаём в папке «приложения» скрипт serialize.py
. Он будет использоваться для сериализации (преобразования) данных модели в JSON или XML.
В новосозданном скрипте, прописываем какие модели будем сериализировать.
Первым делом импортируем необходимые библиотеки и классы.
// импортируем «сериализатор»
from rest_framework import serializers
//модель User, она встроена в Django
from django.contrib.auth.models import User
// импортируем модели, которые мы создали
from .models import Company, Category, Product, Offer, Attribute
Разберём на примере одной модели, остальные модели будут по аналогии.
// называем сериализатор, наследуется от serializers.ModelSerializer
class CategorySerializer(serializers.ModelSerializer):
// Мета-класс, в котором опишем модель, поля,
class Meta:
// Модель, которую будет сериализировать
model = Category
// поля, которые нам понадобятся
fields = [
'id',
'name',
'slug',
'image'
]
// поле модели, по которому будет происходить выборка данных
lookup_field = 'slug'
// указываем произвольные дополнительные аргументы ключевых слов на полях
extra_kwargs = {
'url': {'lookup_field': 'slug'}
}
Другие классы будут описаны идентично.
Далее идём в views.py
нашего «приложения».
Здесь описывается, как ни странно, логика. Но в restframework немного проще всё.
Импортируем необходимые классы и библиотеки
from rest_framework import generics, permissions
//у меня называется скрипт сериализатор «serial.py»
from .serial import *
// Класс, в котором будем выводить Список компаний.
// ListCreateAPIView — используется для чтения и записи из экземпляров класса модели.
class CompaniesViewSet(generics.ListCreateAPIView):
//указываем класс-сериализатор, необходимый в этом представлении.
serializer_class = CompanySerializer
// по какому полю будем сортировать
ordering = ('id',)
//запрос к базе
queryset = Company.objects.all()
Далее, чтобы всё работало необходимо прописать урл, к нашему views. Идём в urls.py
нашего проекта.
Дополним его следующим кодом:
// импортируем представления нашего «приложения»
from general import views
и допишем в urlpatterns
// если обратиться к site.ru/companies, то Django обратится к нашему представлению к классу CompaniesViewSet
url(r'companies', views.CompaniesViewSet.as_view()),
Так мы получили все компании, зарегистрированные в нашем проекте.
Проверяем:
Для выборки одной из компании придётся немного поменять код представления:
// RetrieveUpdateDestroyAPIView — служит для записи, чтения или удаления одного экземпляра модели.
class CompanyViewSet(generics.RetrieveUpdateDestroyAPIView):
serializer_class = CompanySerializer
ordering = ('id',)
queryset = Company.objects.all()
Всё остальное как и в предыдущем представлении.
Так же допишем в urlpatterns следующую строку
url(r'^company/(?P<pk>[0-9]+)$', views.CompanyViewSet.as_view()),
(?P<pk>[0-9]+)
- указывает get-параметр pk в цифровом формате.
Вот и рассмотрели сериализацию и вывод данных.
Полный листинг файлов, с которыми мы работали:
urls.py
views.py
serialize.py
Данный пост подготовлен автором @zheev. В рамках данного цикла статей он расскажет о том, что и как он программировал, какие языки и технологии использовал. С какими трудностями пришлось столкнуться и их решение на реальных примерах.
Заглавное фото с сайта kickstarter.com
Первая часть - Вступление
Вторая часть - Проектирование БД
Третья часть - Установка окружения
Четвёртая часть - Установка и настройка Django
Пятая часть - Установка и сборка Vue
Шестая часть - Создание таблиц средствами Django