Создайте свой первый REST API с Django Rest Framework
Фреймворк Django REST - это мощный и гибкий набор инструментов для создания веб-API.
Некоторые причины, по которым вы можете захотеть использовать REST framework:
- Поддержка Web browsable API - огромный выигрыш в удобстве использования для ваших разработчиков.
- Политики аутентификации, включая пакеты для OAuth1a и OAuth2.
- Сериализация, поддерживающая как ORM, так и не-ORM источники данных.
- Настраиваемая по всему пути - просто используйте обычные представления на основе функций, если вам не нужны более мощные возможности.
- Расширенная документация и большая поддержка сообщества.
- Используется и пользуется доверием всемирно известных компаний, включая Mozilla, Red Hat, Heroku и Eventbrite.
Определение и причины использования фреймворка REST можно найти на домашней странице Django Rest Framework
В этом руководстве мы создадим REST API с помощью Django Rest Framework. API выполняет CRUD-операции приложения со списком Todo, разработанного в Django Framework.
Подготовка
Перед началом работы над учебником необходимо выполнить следующие настройки:
- Django Framework
- Веб-приложение Django, работающее на вашем сервере localhost.
Если вы новичок в разработке Django и до этого не создавали веб-приложений на Django, пожалуйста, просмотрите следующие ссылки:
Также необходимо создать пользователя, чтобы мы могли добавлять данные в базу данных. Для этого необходимо создать суперпользователя. См. ссылку ниже:
После всего этого, предполагая, что у вас есть работающее веб-приложение 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 следующим образом.
- Create URL for api web app
- 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/
Вернуться на верх