Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
6 лет назад

Создание 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

25
541.933 GOLOS
На Golos с August 2017
Комментарии (4)
Сортировать по:
Сначала старые