Быстрый старт
Мы создадим простой API, позволяющий администраторам просматривать и редактировать пользователей и группы в системе.
Настройка проекта
Создайте новый проект Django с именем tutorial, затем создайте новую приложение с именем quickstart.
# Create the project directory mkdir tutorial cd tutorial # Create a virtual environment to isolate our package dependencies locally python3 -m venv env source env/bin/activate # On Windows use `env\Scripts\activate` # Install Django and Django REST framework into the virtual environment pip install djangorestframework # Set up a new project with a single application django-admin startproject tutorial . # Note the trailing '.' character cd tutorial django-admin startapp quickstart cd ..
Структура проекта должна выглядеть так:
$ pwd <some path>/tutorial $ find . . ./tutorial ./tutorial/asgi.py ./tutorial/__init__.py ./tutorial/quickstart ./tutorial/quickstart/migrations ./tutorial/quickstart/migrations/__init__.py ./tutorial/quickstart/models.py ./tutorial/quickstart/__init__.py ./tutorial/quickstart/apps.py ./tutorial/quickstart/admin.py ./tutorial/quickstart/tests.py ./tutorial/quickstart/views.py ./tutorial/settings.py ./tutorial/urls.py ./tutorial/wsgi.py ./env ./env/... ./manage.py
Возможно, покажется необычным, что приложение создано внутри директории проекта. Использование пространства имен проекта позволяет избежать конфликтов имен с внешними модулями (тема, выходящая за рамки быстрого старта).
Теперь синхронизируйте базу данных впервые:
python manage.py migrate
Мы также создадим начального пользователя с именем admin и паролем. Позже в нашем примере мы аутентифицируемся как этот пользователь.
python manage.py createsuperuser --username admin --email admin@example.com
После настройки базы данных и создания начального пользователя, откройте директорию приложения и приступим к кодированию...
Сериализаторы
Сначала мы определим некоторые сериализаторы. Создадим новый модуль с именем tutorial/quickstart/serializers.py для представления данных.
from django.contrib.auth.models import Group, User
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'groups']
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ['url', 'name']
Обратите внимание, что в данном случае мы используем гиперссылочные связи с HyperlinkedModelSerializer. Также можно использовать первичные ключи и различные другие связи, но гиперссылочные связи — хороший подход RESTful-дизайна.
Представления
Хорошо, теперь нам нужно написать некоторые представления. Откройте tutorial/quickstart/views.py и начнём набирать код.
from django.contrib.auth.models import Group, User
from rest_framework import permissions, viewsets
from tutorial.quickstart.serializers import GroupSerializer, UserSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all().order_by('name')
serializer_class = GroupSerializer
permission_classes = [permissions.IsAuthenticated]
Вместо написания нескольких представлений, мы группируем все общее поведение в классы, называемые ViewSets.
Мы можем легко разбить их на отдельные представления, если это необходимо, но использование виджетов поддерживает хорошую организацию логики представления, а также является очень лаконичным.
URL-адреса
Хорошо, теперь настроим URL-адреса API. Перейдём к tutorial/urls.py...
from django.urls import include, path
from rest_framework import routers
from tutorial.quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
Поскольку мы используем виджеты вместо представлений, мы можем автоматически сгенерировать URL-конфигурацию для нашего API, просто зарегистрировав виджеты с помощью класса маршрутизатора.
Опять же, если нам нужен больший контроль над URL-адресами API, мы можем вернуться к использованию обычных представлений на основе классов и явно написать URL-конфигурацию.
Наконец, мы включили стандартные представления для входа и выхода для использования с просматриваемым API. Это необязательно, но полезно, если ваш API требует аутентификации, и вы хотите использовать просматриваемый API.
Пагинация
Пагинация позволяет управлять количеством объектов на странице. Чтобы её включить, добавьте следующие строки в tutorial/settings.py
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
Настройки
Добавьте 'rest_framework' в INSTALLED_APPS. Модуль настроек будет в tutorial/settings.py
INSTALLED_APPS = [
...
'rest_framework',
]
Готово.
Тестирование API
Теперь мы готовы протестировать созданный API. Запустим сервер из командной строки.
python manage.py runserver
Теперь мы можем получить доступ к нашему API, как из командной строки, используя инструменты, такие как curl...
bash: curl -u admin -H 'Accept: application/json; indent=4' http://127.0.0.1:8000/users/
Enter host password for user 'admin':
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"url": "http://127.0.0.1:8000/users/1/",
"username": "admin",
"email": "admin@example.com",
"groups": []
}
]
}
Или используя инструмент командной строки httpie...
bash: http -a admin http://127.0.0.1:8000/users/
http: password for admin@127.0.0.1:8000::
$HTTP/1.1 200 OK
...
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"email": "admin@example.com",
"groups": [],
"url": "http://127.0.0.1:8000/users/1/",
"username": "admin"
}
]
}
Или напрямую через браузер, перейдя по адресу http://127.0.0.1:8000/users/...
Если вы работаете через браузер, убедитесь, что вошли в систему, используя элемент управления в правом верхнем углу.
Отлично, это было легко!
Если вы хотите более глубоко понять, как REST Framework работает вместе, перейдите к учебнику или начните просмотр руководства по API.
Copyright © 2011–present Encode OSS Ltd.
Licensed under the BSD License.
https://www.django-rest-framework.org/tutorial/quickstart/