Создайте свой первый REST API с Django Rest Framework

Фреймворк Django REST - это мощный и гибкий набор инструментов для создания веб-API.

Некоторые причины, по которым вы можете захотеть использовать REST framework:

Определение и причины использования фреймворка REST можно найти на домашней странице Django Rest Framework

В этом руководстве мы создадим REST API с помощью Django Rest Framework. API выполняет CRUD-операции приложения со списком Todo, разработанного в Django Framework.

Подготовка

Перед началом работы над учебником необходимо выполнить следующие настройки:

  1. Django Framework
  2. Веб-приложение Django, работающее на вашем сервере localhost.

Если вы новичок в разработке Django и до этого не создавали веб-приложений на Django, пожалуйста, просмотрите следующие ссылки:

  1. Django Framework Installation
  2. Create a New Django Application

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

После всего этого, предполагая, что у вас есть работающее веб-приложение djnago, давайте начнем разработку REST API с помощью Django Rest Framework

Установка Django Rest Framework

Первым делом нам нужно установить Django Rest Framework из pip. Введите следующую команду в терминале:

pip install djangorestframework

После установки Django Rest Framework добавьте его в свой файл настроек (settings.py)

INSTALLED_APPS = [
    ...
    'rest_framework',
]

Создайте приложение для вашего API

Создание API - это также создание другого веб-приложения Django. Поэтому из вашего терминала создайте приложение:

python manage.py startapp api

Сейчас, когда вы создали приложение с именем "api", вы можете видеть папку с различными файлами, такими как admin.py, apps.py, models.py, tests.py и views.py. После создания приложения вам нужно зарегистрировать его в настройках как установленное приложение.

INSTALLED_APPS = [
    ...
    'api.apps.ApiConfig',
    'rest_framework',
]

Создание модели

Сначала создадим модель для приложения todo. Добавьте следующий код в ваш models.py:

from django.db import models

class Task(models.Model):
    title = models.CharField(max_length=200)
    completed = models.BooleanField(default=False, blank=True, null=True)

    def __str__(self):
        return self.title

API списка todo добавляет задачи и статус задач.

Создание сериализатора

Здесь мы имеем дело с данными, хранящимися в базе данных, которые необходимо получить через веб-запросы с помощью API. Поэтому лучшим способом получения данных является форма JSON. Поэтому нам нужно разобрать данные из базы данных в формате JSON. Эту работу выполняет сериализатор. Создайте файл с именем (serializer.py)

from rest_framework import serializers
from .models import Task

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = '__all__'

Настройка URL-адресов

Мы настраиваем URL следующим образом.

  1. Create URL for api web app
  2. Link that api url to Django Project’s main URL

В urls.py добавьте следующий путь URL:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/',include('todo_api.urls')),
]

Сейчас в папке api, которая является вашим приложением, создайте файл urls.py и добавьте в него следующие пути:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.apiOverview, name="api-overview"),
    path('task-list', views.taskList, name="task-list"),
    path('task-detail/<str:pk>/', views.taskDetail, name="task-detail"),
    path('task-create/', views.taskCreate, name="task-create"),

    path('task-update/<str:pk>/', views.taskUpdate, name="task-update"),
    path('task-delete/<str:pk>/', views.taskDelete, name="task-delete"),
]

Создайте свой вид

Мы создали модели и сериализатор. Теперь наша задача - создать представление, в котором мы будем выполнять операции CRUD. Поскольку мы настроили URL-адреса.

Обзор API

В нашем представлении мы создадим первое представление, в котором будут перечислены все URL-адреса, которые будут раскрыты. Мы будем использовать декоратор api_view, предоставляемый фреймворком rest. Нам нужно импортировать TaskSerializer, который мы создали ранее. Сериализатор задач анализирует запрос из базы данных и представляет строки JSON

from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import TaskSerializer

from .models import Task
# Create your views here.

@api_view(['GET'])
def apiOverview(request):
    api_urls = {
        'List': '/task-list/',
        'Detail View': '/task-detail/<str:pk>/',
        'Create': '/task-create/',
        'Update': '/task-update/<str:pk>/',
        'Delete': '/task-delete/<str:pk>/',
    }
    return Response(api_urls)

Run your server and browse the url: http://127.0.0.1:8000/api/

Здесь перечислены все запросы, которые мы можем сделать к API. Далее мы увидим список задач, добавленных в приложение todo list. Перед этим перейдите на сайт администратора из браузера http://127.0.0.1:8000/admin/ и добавьте несколько задач.

Помните основы:

Чтобы добавлять элементы в базу данных, необходимо сначала зарегистрировать свою модель Task в файле admin.py

from django.contrib import admin
from .models import Task
# Register your models here.

admin.site.register(Task)

API TaskList

Сейчас в нашем представлении мы создадим еще один метод для добавления в список всех элементов из базы данных.

@api_view(['GET'])
def taskList(request):
    tasks = Task.objects.all()
    serializer = TaskSerializer(tasks, many=True)
    return Response(serializer.data)

Этот API можно просматривать из браузера по следующему URL: http://127.0.0.1:8000/api/task-list

Вы увидите следующие ответы:

Этот api запрос перечислил все пункты в вашем списке todo. Теперь для просмотра отдельных элементов создадим еще один метод.

Детализация задачи

Этот метод API выведет список деталей элементов на основе id.

@api_view(['GET'])
def taskDetail(request, pk):
    tasks = Task.objects.get(id=pk)
    serializer = TaskSerializer(tasks, many=False)
    return Response(serializer.data)
We can view the response from thie URL: http://127.0.0.1:8000/api/task-detail/1/
HTTP 200 OK
Allow: OPTIONS, GET
Content-Type: application/json
Vary: Accept

{
    "id": 1,
    "title": "Donot To Verify that Admin can create a School",
    "completed": true
}

Создание задачи

Этот метод создавал задания, т.е. сохранял элементы в базе данных:

@api_view(['POST'])
def taskCreate(request):
    serializer = TaskSerializer(data=request.data)

    if serializer.is_valid():
        serializer.save()
    return Response(serializer.data)

Задание может быть создано из url: http://127.0.0.1:8000/api/task-create/

Обновление и удаление задач

Сейчас мы создадим два метода для обновления и удаления элементов в списке todo. Приведенный ниже код обеспечит возможность обновления и удаления элементов через URL.

@api_view(['POST'])
def taskUpdate(request, pk):
    task = Task.objects.get(id=pk)
    serializer = TaskSerializer(instance=task, data=request.data)

    if serializer.is_valid():
        serializer.save()
    return Response(serializer.data)

@api_view(['DELETE'])
def taskDelete(request, pk):
    task = Task.objects.get(id=pk)
    task.delete()
    return Response("Task Deleted Successfully")

URL для обновления задачи: http://127.0.0.1:8000/api/task-update/1/
URL для удаления задачи: http://127.0.0.1:8000/api/task-delete/5/

http://thequickblog.com/restapi-with-python-djangorestframework/

Вернуться на верх