голосование
BASH
PHP
Javascript
HTML
Firebird
Программы
Майнинг
Хостинг
PostgreSQL
Железо
Мобильные технологии
Ресурсы
GIT
SEO
Oracle
Python
Ремонт
Mercurial
Заработок на сайте
Docker
Проголосуйте за категорию!
счётчик
Яндекс.Метрика

Проходим quickstart на django-rest-framework

Итак дошли руки до 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/
просмотры: 73, уровень: сложный уровень, рейтинг: 0, дата: 2019-06-03 23:57:16
проголосовать:

Комментарии:






поиск
реклама
банеры
сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP
http://trainingweb.ru/redirect/pingadmin мониторинг сайтов сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP
http://trainingweb.ru/redirect/well_web_vps_kvm Аренда VPS KVM в Европе Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.
http://trainingweb.ru/redirect/domains домен RU домен RU всего за 99 рублей