Следуйте этому пошаговому руководству, и у вас будет ядро ​​CRUD API, на котором можно будет работать дальше.

Django Rest Framework (DRF) — это платформа Django, предлагающая поддержку создания REST API. Как и Django, DRF позволяет создавать представления API с представлениями на основе функций или классов.

Хотя поначалу с представлениями на основе классов может быть сложно работать, они предлагают такие преимущества, как лучшая структура кода, возможность повторного использования, наследование и краткость.

Создайте API-интерфейс диспетчера рецептов с помощью Django REST Framework

Приложение-менеджер рецептов — отличный способ узнать о представлениях на основе классов в DRF. Такие функции, как добавление, удаление и редактирование рецептов, помогут вам понять, как реализовать операции CRUD (создание, чтение, обновление, удаление). Следующие шаги научат вас создавать CRUD API.

Вы можете найти код этого руководства на GitHub.

Шаг 1. Установите Django REST Framework и настройте свой проект

  1. Создайте виртуальную среду для своего проекта и установите следующие зависимости:
    instagram viewer
    pip install django djangorestframework
  2. Создайте проект Django под названием основной с помощью следующей команды:
    django-admin startproject core .
  3. Создайте приложение под названием рецепт_менеджер:
    python manage.py startapp recipe_manager
  4. Откройте свой ядро/settings.py файл и перейдите к INSTALLED_APPS список для регистрации ваших приложений:
    INSTALLED_APPS = [
    # custom apps
    'rest_framework',
    'recipe_manager',
    ]

Шаг 2. Создайте модель для вашего приложения с рецептами

  1. Откройте свой рецепт_менеджер/models.py файл и создайте модель для своего приложения. Вот базовый пример модели рецепта:
    # models.py
    from django.db import models

    classRecipe(models.Model):
    recipe_name = models.CharField(max_length=255)
    ingredients = models.TextField()
    instructions = models.TextField()

  2. Создайте миграции и перенесите свою модель в базу данных с помощью этой команды:
    python manage.py makemigrations && python manage.py migrate

Шаг 3. Создайте сериализатор для вашего приложения

Сериализатор — это компонент Django, который помогает конвертировать сложные типы данных, например набор запросов, в формат, который можно визуализировать, например JSON или XML, и наоборот.

Чтобы создать сериализатор, выполните следующие действия:

  1. Создайте файл с именем рецепт_менеджер/serializers.py.
  2. Импортируйте сериализаторы модуль, а также модель, которую вы хотите сериализовать:
    # serializers.py
    from rest_framework import serializers

    from .models import Recipe # the model to serialize

  3. В том же файле создайте класс сериализатора для вашей модели и определите Мета класс в нем:
    # serializers.py
    classRecipeSerializer(serializers.ModelSerializer):
    classMeta:
    model = Recipe
    fields = ('recipe_name', 'ingredients', 'instructions')
    В этом коде Мета Класс определяет модель для сериализации и конкретные поля, которые сериализатор должен обрабатывать. поля Атрибут может быть списком или кортежем. Если вы хотите сериализовать все поля в вашей модели, вы можете сделать это следующим образом:
    classMeta:
    fields = "__all__"

Шаг 4. Напишите представление для операции CREATE

Вы можете создать представления на основе классов для своего приложения, импортировав общее представление, доступное в Django. Вы можете прочитать об этих взглядах на Официальная документация Джанго. Чтобы реализовать операцию CREATE CRUD, вам следует импортировать СоздатьAPIView. Вам также следует импортировать сериализатор и модель:

# views.py
from rest_framework.generics import CreateAPIView

from .models import Recipe
from .serializers import RecipeSerializer

Чтобы реализовать операцию CREATE, вам нужно только указать сериализатор, который должно использовать ваше представление. Вот пример:

# Create view
classRecipeCreateView(CreateAPIView):
serializer_class = RecipeSerializer

Благодаря этой настройке вы можете отправлять запросы POST к своему приложению.

Шаг 5. Напишите представление для операции чтения.

  1. Чтобы реализовать операцию READ, импортируйте ЛистAPIView вашим взглядам. Это представление поможет вам составить список объектов модели:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView
  2. Создайте класс для своих представлений и укажите используемый сериализатор и набор запросов:
    # List view
    classRecipeListView(ListAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()
  3. Создайте представление, чтобы прочитать конкретный рецепт. Для этого вам понадобится ПолучитьAPIView поэтому добавьте его в свой список импорта:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveAPIView
    Далее создайте необходимое вам представление:
    # Retrieve view
    classRecipeRetrieveView(RetrieveAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

Шаг 6. Запишите представления для операций UPDATE и DELETE.

Для реализации операций UPDATE и DELETE вам понадобится ОбновлениеAPIView и УничтожитьAPIView соответственно, поэтому импортируйте их:

from rest_framework.generics import (
ListAPIView,
CreateAPIView,
RetrieveAPIView,
UpdateAPIView, # new
DestroyAPIView, # new
)

Затем создайте представления, как вы это делали раньше. На этот раз ваши представления будут наследовать от ОбновлениеAPIView и УничтожитьAPIView, соответственно:

# Update view
classRecipeUpdateView(UpdateAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()

# Delete view
classRecipeDeleteView(DestroyAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()

Шаг 7. Создайте URL-адреса для вашего приложения

  1. Добавьте этот код в ядро/urls.py чтобы настроить URL-адреса:
    from django.urls import path, include

    urlpatterns = [
    path('api/', include('recipe_manager.urls'))
    ]

  2. Добавьте следующий код в свой рецепт_менеджер/urls.py файл:
    from django.urls import path
    from. import views

    urlpatterns = [
    # List view (Read all)
    path('recipes/', views.RecipeListView.as_view(), name='recipe-list'),

    # Create view
    path('recipes/create/', views.RecipeCreateView.as_view(), name='recipe-create'),

    # Retrieve view (Read one)
    path('recipes//', views.RecipeRetrieveView.as_view(), name='recipe-retrieve'),

    # Update view
    path('recipes//update/', views.RecipeUpdateView.as_view(), name='recipe-update'),

    # Delete view
    path('recipes//delete/', views.RecipeDeleteView.as_view(), name='recipe-destroy'),
    ]

    Из приведенного выше кода вы заметите, что представления на основе классов используют метод as_view() для создания шаблонов URL. Вы также можете прочитать о различия между проектом и приложением в Django если вас смущает их использование здесь.

Шаг 8. Проверьте конечные точки API

Из каталога вашего проекта запустите следующее:

python manage.py runserver

Это должно запустить ваш сервер, выполнить некоторые проверки и распечатать URL-адрес, по которому вы можете получить к нему доступ.

Теперь вы можете протестировать конечные точки API, перейдя по соответствующим URL-адресам (например, /api/recipes/) и отправка Методы HTTP-запроса для операций CRUD. Вы должны увидеть интерфейс по умолчанию, подобный этому:

Вместо использования браузера вы можете проверьте свой API с помощью Postman.

Практика DRY при создании CRUD API

DRY (Не повторяйся) — это принцип программирования, который вы должны принять для улучшения качества вашего кода.

Хотя представленные выше представления работают хорошо, вы можете избежать большого количества повторений, используя СписокCreateAPIView и ПолучитьUpdateDestroyAPIView общие взгляды.

ListCreateAPIView объединяет ЛистAPIView и СоздатьAPIView, а RetriveUpdateDestroyAPIView объединяет ПолучитьAPIView, ОбновлениеAPIViewи УничтожитьAPIView.

Вы можете изменить свои предыдущие представления, чтобы они выглядели следующим образом:

from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView

from .models import Recipe
from .serializers import RecipeSerializer

classRecipeListCreateAPIView(ListCreateAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()

classRecipeRetrieveUpdateDeleteAPIView(RetrieveUpdateDestroyAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()

Такой подход уменьшает общий объем кода.

Вы можете создать URL-адреса для новых представлений следующим образом:

from django.urls import path
from .views import RecipeListCreateAPIView, RecipeRetrieveUpdateDeleteAPIView

urlpatterns = [
# List and Create view
path('recipes/', RecipeListCreateAPIView.as_view(), name='recipe-list-create'),

# Retrieve, Update, and Delete view
path('recipes//', RecipeRetrieveUpdateDeleteAPIView.as_view(), name='recipe-retrieve-update-destroy'),
]

Вы можете протестировать эти конечные точки с помощью Postman или любого другого Инструмент тестирования API Вы предпочитаете.

Универсальные представления на основе классов упрощают вашу работу

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

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