Быстрый старт
Мы собираемся создать простое API, которое позволяло пользователям-администраторам просматривать и изменять пользователей и группы в системе.

Настройки проекта

Создайте новый Django проект, названный tutorial, затем создайте новое приложение, названное quickstart.
1
# Создайте директорию проекта
2
3
mkdir tutorial
4
cd tutorial
5
6
# Создайте виртуальное окружение, чтобы изолировать установленные пакеты локально
7
8
virtualenv env
9
source env/bin/activate # Для Windows используйте `env\Scripts\activate`
10
11
# Установите Django и Django REST framework в виртуальное окружение.
12
pip install django
13
pip install djangorestframework
14
15
16
# Создайте новый проект с одним приложением
17
18
django-admin.py startproject tutorial . # Не забудьте последний символ '.'
19
20
cd tutorial
21
django-admin.py startapp quickstart
22
cd ..
Copied!
Создайте базу данных:
1
python manage.py migrate
Copied!
Так же необходимо создать Администратора admin с паролем password123. Потом мы авторизуем этого пользователя в нашем примере.
1
python manage.py createsuperuser
Copied!
После того, как вы создали базу данных, Администратора и готовы продолжать, откройте директорию приложения и давайте уже начнем писать код.

Сериализаторы

Для начала мы определим несколько сериализаторов. Создайте модуль serializers.py, расположенный в quickstart, который мы будем использовать для представления наших данных.
1
from django.contrib.auth.models import User, Group
2
from rest_framework import serializers
3
4
5
class UserSerializer(serializers.HyperlinkedModelSerializer):
6
class Meta:
7
model = User
8
fields = ('url', 'username', 'email', 'groups')
9
10
class GroupSerializer(serializers.HyperlinkedModelSerializer):
11
class Meta:
12
model = Group
13
fields = ('url', 'name')
Copied!
Заметьте, мы используем ссылочные отношения в данном случае. Для этого мы используем HyperlinkedModelSerializer. Вы так же можете использовать первичный ключ или любые другие способы связи объектов, однако ссылочная связь считается более правильной при проектировании API.

Представления

Теперь мы добавим несколько представлений. Откройте quickstart/views.py и напишите:
1
from django.contrib.auth.models import User, Group
2
from rest_framework import viewsets
3
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
4
5
6
class UserViewSet(viewsets.ModelViewSet):
7
"""
8
API endpoint that allows users to be viewed or edited.
9
"""
10
11
queryset = User.objects.all().order_by('-date_joined')
12
serializer_class = UserSerializer
13
14
15
class GroupViewSet(viewsets.ModelViewSet):
16
"""
17
API endpoint that allows groups to be viewed or edited.
18
"""
19
20
queryset = Group.objects.all()
21
serializer_class = GroupSerializer
Copied!
Вместо того, чтобы писать большое количество представлений, мы группируем их в классы с общим поведением, называемые ViewSet.
Конечно, мы легко можем разбить их на отдельные представления, но зачем, если можно держать всю логику в одном месте.

URL-ы

Теперь давайте привяжем к нашему API URL адреса. Заходим в urls.py:
1
from django.conf.urls import url, include
2
from rest_framework import routers
3
from tutorial.quickstart import views
4
5
router = routers.DefaultRouter()
6
7
router.register(r'users', views.UserViewSet)
8
router.register(r'groups', views.GroupViewSet)
9
# Привязываем наше API используя автоматическую маршрутизацию.
10
# Также мы подключим возможность авторизоваться в браузерной версии API.
11
12
urlpatterns = [
13
url(r'^', include(router.urls)),
14
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
15
]
Copied!
Поскольку мы используем наборы представлений (ViewSet-ы), мы можем автоматически сгенерировать конфигурацию URL-ов, просто зарегистрировав наборы представлений в классе router.
Опять же, если нам нужно больше контроля над URL адресами API, мы можем просто разбить это на обычные представления-классы и описать конфигурацию URL явно.
В конце мы подключаем стандартные представления авторизации и выхода из сессии для использования в браузерной версии API. Это опционально, однако очень удобно, если ваше API требует авторизации и вы хотите использовать браузерную версию API.

Настройки

Так же мы добавим несколько глобальных настроек. Мы включим постраничный вывод и предоставим доступ только пользователям-администраторам. модуль настроек находится в tutorual/settings.py.
1
INSTALLED_APPS = (
2
...
3
'rest_framework',
4
)
5
6
...
7
8
REST_FRAMEWORK = {
9
'DEFAULT_PERMISSION_CLASSES':[
10
'rest_framework.permissions.IsAdminUser',
11
],
12
'PAGE_SIZE':10
13
}
Copied!
Теперь мы закончили.

Тестирование нашего API

Теперь мы готовы протестировать наше API. Запустите сервер командой
1
python manage.py runserver
Copied!
Теперь мы можем получить доступ к нашему API как из командной строки, используя утилиту curl...
1
bash: curl -H 'Accept: application/json; indent=4' -u admin:password123 http://127.0.0.1:8000/users/
2
{
3
"count": 2,
4
"next": null,
5
"previous": null,
6
"results": [
7
{
8
"email": "[email protected]",
9
"groups": [],
10
"url": "http://127.0.0.1:8000/users/1/",
11
"username": "admin"
12
},
13
{
14
"email": "[email protected]",
15
"groups": [],
16
"url": "http://127.0.0.1:8000/users/2/",
17
"username": "tom"
18
}
19
]
20
}
Copied!
или httpie...
1
bash: http -a admin:password123 http://127.0.0.1:8000/users/
2
3
HTTP/1.1 200 OK
4
...
5
{
6
"count": 2,
7
"next": null,
8
"previous": null,
9
"results": [
10
{
11
"email": "[email protected]",
12
"groups": [],
13
"url": "http://localhost:8000/users/1/",
14
"username": "paul"
15
},
16
{
17
"email": "[email protected]",
18
"groups": [],
19
"url": "http://127.0.0.1:8000/users/2/",
20
"username": "tom"
21
}
22
]
23
}
Copied!
так и через браузер, открыв адрес http://127.0.0.1:8000/users/...
Could not load image
Если вы работаете через браузер, убедитесь, что вы авторизовались через меню в правом верхнем углу.
Это было легко=)
Если вы хотите изучить, как все части DRF работают друг с другом, продолжайте читать руководство, или начните изучать путеводитель по API.
Last modified 1yr ago