Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Django-rester, как легкая альтернатива django-rest-framework

Django-rester, как легкая альтернатива django-rest-framework

Александр Ковалёв (Яндекс) @ Moscow Python Meetup 54
"При разработке сервисов на django, мы столкнулись с тем, что не пользуемся большей частью пакета django-rest-framework, о чем я упоминал на Moscow Python Conf 2017. В итоге мы сделали свой небольшой пакет для простой реализации REST API в Django проектах".
Видео: http://www.moscowpython.ru/meetup/54/django-rester/

Moscow Python Meetup
PRO

March 22, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. django-rester, как
    легкая альтернатива
    Django Rest Framework
    Александр Ковалев
    https://alkov.pro
    Сергей Ковалев
    https://www.fb.com/acropyth

    View Slide

  2. О себе
     Около 25 лет в разработке:
     Assembler
     C/C++
     FoxBase/FoxPro/Clipper
     PHP
     Perl
     VBA (Макросы Microsoft Office)
     1С 7.7 - 8.3

    View Slide

  3. Disclaimer
    Доклад НЕ про Яндекс!
    Осторожно, MVP!

    View Slide

  4. DRF?!
    WTF?!
    Requests
    Responses
    Views
    Generic views
    Viewsets
    Routers
    Parsers
    Renderers
    Serializers
    Serializer fields
    Serializer relations
    Versioning
    Content negotiation
    Metadata
    Schemas
    Format suffixes
    Validators
    Authentication
    Permissions
    Throttling
    Filtering
    Pagination
    Format suffixes
    Returning URLs
    Exceptions
    Status codes
    Testing
    Settings

    View Slide

  5. django-rester
    BaseAPIView:
    @permissions
    request_fields
    response_fields
    AuthBackend:
    JWT
    redis

    View Slide

  6. 1. pip install django-rester
    2. settings.py:
    DJANGO_RESTER = {
    'RESPONSE_STRUCTURE': {
    'success': 'success',
    'message': 'message',
    'data': 'data',
    },
    'CORS_ACCESS': True,
    'SOFT_RESPONSE_VALIDATION': True,
    'AUTH_BACKEND': 'django_rester.rester_jwt',
    'FIELDS_CHECK_EXCLUDED_METHODS': ['OPTIONS', 'HEAD'],
    }
    DJANGO_RESTER_JWT = {
    'SECRET': 'secret-key',
    'EXPIRE': 60 * 60 * 24 * 14,
    'AUTH_HEADER': 'Authorization',
    'AUTH_HEADER_PREFIX': 'jwt',
    'ALGORITHM': 'HS256',
    'PAYLOAD_LIST': ['username'],
    'USE_REDIS': False,
    'LOGIN_FIELD': 'username’,
    }

    View Slide

  7. class TestView(BaseAPIView):
    request_fields = {
    "POST": {
    "id": JSONField(field_type=int, required=True, ),
    "title": JSONField(field_type=str, required=True,
    default='some_title'),
    },
    "GET": {
    "title": JSONField(field_type=str, required=True,
    default='some_title'),
    }
    }
    response_fields = {
    "POST": {
    "id": JSONField(field_type=int, required=True, ),
    "title": JSONField(field_type=str, required=True,
    default='some_title'),
    "fk": [
    {"id": JSONField(field_type=int, required=True)}
    ]
    },
    "GET": {
    "title": JSONField(field_type=str, required=True,
    default='some_title'),
    }
    }

    View Slide

  8. POST:
    response = {
    "success": True,
    "message": "",
    "data": {
    "id": 1,
    "title": "Super Cool Post",
    "fk": [
    {
    "id": 233
    }
    ]
    }
    }

    View Slide

  9. Ключевые элементы
    class BaseApiView
    @permissions

    View Slide

  10. Профит
    Автоматическая валидация request и response
    JWT авторизация с возможностью отзыва token’ов
    SWAGGER Docs! (in progress though) ;)
    Быстрая и понятная разработка API с низким порогом входа :)
    Простая поддержка и доработка API

    View Slide

  11. Что дальше?
    Отладка, оптимизация
    Feedback довольных (и не очень) пользователей :)
    Много тем для дальнейших докладов! :)
    SWAGGER Docs
    Тесты

    View Slide

  12. Спасибо за внимание!
    Вопросы? Я здесь:
    [email protected]
    https://alkov.pro
    https://www.facebook.com/alkov.pro
    https://github.com/alkovpro
    https://github.com/lexycore
    https://github.com/devopshq/crosspm
    https://github.com/devopshq/youtrack
    Сергей Ковалев здесь:
    https://www.facebook.com/acropyth
    https://github.com/CruelSoftware
    https://github.com/lexycore

    View Slide