Django REST framework (DRF) — это мощный и гибкий инструмент для создания Web API на основе Django. Он предоставляет удобные средства для создания RESTful API, поддерживает аутентификацию, авторизацию, сериализацию, валидацию и другие функции.
В этой статье мы рассмотрим, как использовать Django REST framework для создания Web API на базе Django.
Шаг 1: Установка Django REST framework
Первым шагом является установка Django REST framework. Вы можете установить его с помощью pip:
pip install djangorestframework
Шаг 2: Создание проекта Django
Для создания проекта Django используйте команду:
django-admin startproject myproject
Шаг 3: Создание приложения Django
Создайте приложение Django с помощью команды:
python manage.py startapp myapp
Шаг 4: Настройка Django REST framework
INSTALLED_APPS = [
...
'rest_framework',
'myapp',
]
Добавьте REST framework middleware в MIDDLEWARE в файле settings.py:
MIDDLEWARE = [
...
'rest_framework.middleware.AuthenticationMiddleware',
'rest_framework.middleware.AuthorizationMiddleware',
]
Шаг 5: Создание модели Django
Определите модель Django в файле models.py вашего приложения:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
price = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
Шаг 6: Создание сериализатора Django REST framework
Определите сериализатор Django REST framework в файле serializers.py вашего приложения:
from rest_framework import serializers
from myapp.models import Product
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ['id', 'name', 'description', 'price', 'created_at', 'updated_at']
Шаг 7: Создание представления Django REST framework
Определите представление Django REST framework в файле views.py вашего приложения:
from rest_framework import generics
from myapp.models import Product
from myapp.serializers import ProductSerializer
class ProductList(generics.ListCreateAPIView):
queryset = Product.objects.all()
serializer_class = ProductSerializer
class ProductDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Product.objects.all()
serializer_class = Product
Шаг 8: Настройка маршрутов Django REST framework
Определите маршруты Django REST framework в файле urls.py вашего приложения:
from django.urls import path
from myapp.views import ProductList, ProductDetail
urlpatterns = [
path('products/', ProductList.as_view(), name='product-list'),
path('products/<int:pk>/', ProductDetail.as_view(), name='product-detail'),
]
Шаг 9: Запуск приложения Django
Запустите приложение Django с помощью команды:
python manage.py runserver
Шаг 10: Тестирование Web API
Откройте веб-браузер и перейдите по адресу http://127.0.0.1:8000/products/. Вы должны увидеть список всех продуктов.
Чтобы создать новый продукт, отправьте POST-запрос на http://127.0.0.1:8000/products/ с данными в формате JSON:
{
"name": "Product 1",
"description": "Description for Product 1",
"price": 10.99
}
Чтобы получить детали конкретного продукта, отправьте GET-запрос на http://127.0.0.1:8000/products/1/, где 1 - идентификатор продукта.
Чтобы обновить продукт, отправьте PUT-запрос на http://127.0.0.1:8000/products/1/ с данными в формате JSON:
{
"name": "Updated Product 1",
"description": "Updated Description for Product 1",
"price": 12.99
}
Чтобы удалить продукт, отправьте DELETE-запрос на http://127.0.0.1:8000/products/1/.
В этой статье мы рассмотрели, как использовать Django REST framework для создания Web API на базе Django. Django REST framework предоставляет удобные средства для создания RESTful API, поддерживает аутентификацию, авторизацию, сериализацию, валидацию и другие функции. С его помощью вы можете быстро и легко создавать мощные и гибкие Web API на базе Django.
AzamatKomaev
Хм, а где само тестирование?Ладно, я ожидал какое-то иное тестирование с использованием rest_framework.test
Раз уж вы создаете сериализатор, наследуясь от ModelSerializer и при этом собираетесь сериализовать все поля, то можно просто использовать fields = "__all__"
Тут опечатка, serializer_class = ProductSerializer. Хотя для CRUD операции можно использовать ModelView.