Итак дошли руки до DRF или django-rest-framework.org. Я решил пройти шаги обучения. Их примерно 8. Каждый по-своему интересен. Я начал с quickstart. В результате в конце всей работы у вас получится простое api-приложение с выводом данных пользователей в json-формате. Есть небольшие тонкости.
Для начала установите django 2 на ваш компьютер.
#создаём папку для приложения
mkdir drf
cd drf
# Create the project directory
mkdir tutorial
cd tutorial
# Create a virtualenv to isolate our package dependencies locally
virtualenv env
source env/bin/activate # On Windows use `env\Scripts\activate`
# Install Django and Django REST framework into the virtualenv
pip install django
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 ..
Осмотрим содержимое приложения tutorial. Вы можете использовать tree. Установите приложение sudo apt-get install tree.
pwd
/tutorial
$ find .
Запуск миграций.
python manage.py migrate
Создаём суперпользователя. Без него не получиться сделать запрос к апи.
python manage.py createsuperuser --email admin@example.com --username admin
Сначала мы определим некоторые сериализаторы. Давайте создадим новый модуль с именем tutorial/quickstart/serializers.py который мы будем использовать для представления данных. Обратите внимание, что в этом случае мы используем гиперссылки с HyperlinkedModelSerializer. Вы также можете использовать первичный ключ и различные другие отношения, но гиперссылка - хороший стиль RESTful.
# tutorial/quickstart/serializers.py
from django.contrib.auth.models import User, Group
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')
Вместо того, чтобы писать несколько представлений, мы группируем все общее поведение в классы, называемые наборами представлений. Мы можем легко разбить их на отдельные представления. Использование viewsets сохраняет view логику хорошо организованной и очень краткой.
# tutorial/quickstart/views.py
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from quickstart.serializers import UserSerializer, GroupSerializer
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
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
Подключим апи при помощи url. Поскольку мы используем viewsets вместо views, мы можем автоматически генерировать URLconf для нашего API, просто зарегистрировав viewsets с классом маршрутизатора. Опять же, если нам нужен больший контроль над URL-адресами API, мы можем просто перейти к использованию обычных представлений на основе классов и явно написать URL-адрес conf. Наконец, мы включаем представления входа и выхода по умолчанию для использования с просматриваемым API. Это необязательно, но полезно, если ваш API требует аутентификации и вы хотите использовать API.
# tutorial/urls.py
from django.urls import include, path
from rest_framework import routers
# from tutorial.quickstart import views - не работает
from 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'))
]
Предлагаю вам использовать postgres в качестве базы данных. Посмотрите на настройки. Если вы не знаете как установить постгрес, то читайте статью как создать базу данных постгрес на linux сервере Debian Ubuntu.
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'user_drf',
'USER': 'drf_user',
'PASSWORD': '123',
'HOST': 'localhost',
'PORT': '',
}
}
Разбиение на страницы позволяет управлять количеством возвращаемых объектов на странице. Чтобы включить его, добавьте следующие строки. Вам апи будет выдавать информацию порциями.
# settings.py
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
Добавляем rest_framework в подключаемые приложения django.
# settings.py
INSTALLED_APPS = (
...
'rest_framework',
)
Запускаем django-server. Теперь нужно сформировать запросы и опросить апи.
python manage.py runserver
Теперь запрашиваем данные с апи. Установите себе curl и http.
#установка curl
sudo apt-get install curl
#установка httpie
sudo apt-get install httpie
# при помощи curl
curl -H 'Accept: application/json; indent=4' -u admin:123 http://127.0.0.1:8000/users/
# при помощи http
http -a admin:password123 http://127.0.0.1:8000/users/