Upload
marcel-chastain
View
1.545
Download
4
Tags:
Embed Size (px)
Citation preview
REST EASY
WITH
DJANGO-REST-
FRAMEWORK
MARCEL CHASTAIN (@MARCELCHASTAIN)
LA DJANGO - 2014-10-28
WHAT WE’LL COVER
• What’s REST? Why/when would we use it?
• REST challenges
• Django solutions
• Installing DRF
• DRF Core Components (and Django counterparts)
• Building our Demo API
• Customizing
• Resources
ABOUT
REST
DJANGO-REST-FRAMEWORK
…BUT I’M NOT TIRED
BUT I’M NOT TIRED
REST stands for Representational State Transfer
All 4 CRUD operations
Uses HTTP requests to:
• Post data(Create, Update)
• Read data
• Delete
WHY REST?
Better than SOAP
XML is the stuff of nightmares
Uses JSON for data structures
Popular – most modern 3rd party web APIs use RESTful
endpoints
COMMON USE-CASES
Single-Page Applications
Real-Time Services
SaaS APIs
Creating external APIs for existing sites
Mobile Apps
WebComponents, Polymer, modular site design
Modern JS Site Frameworks (Angular, Ember, Backbone, etc)
SOUNDS SIMPLE
ENOUGH!
ALL TOGETHER NOW:
ALL TOGETHER NOW:
We should
roll our own!
… OK JUST BE SURE
TO INCLUDE
• serialization/deserialization
… OK JUST BE SURE
TO INCLUDE
• serialization/deserialization
• parsing
… OK JUST BE SURE
TO INCLUDE
• serialization/deserialization
• parsing
• model introspection
… OK JUST BE SURE
TO INCLUDE
• serialization/deserialization
• parsing
• model introspection
• relationship traversal
• pluggable authentication
• permissions
• url structure
• proper HTTP methods
• pagination
• forms
• error handling
• request filters
• consistency
• maybe some generic views
• request throttling
• …and tests!
ALL TOGETHER NOW:
EXACTLY, WONDER WOMAN.
PROPER SOLUTIONS
django-rest-framework
• 900+ forks
• 304 contributors
• 3k stars
• The greatest documentation
I’ve seen in a library
django-tastypie
• 900+ forks
• 112 contributors
• 2.6k stars
• Delicious-sounding name
…YOU’VE GOT
OPTIONS
THE SETUP
DJANGO-REST-FRAMEWORK
INSTALLATION
pip install djangorestframework
pip install markdown # optional
pip install django-filter # optional
INSTALLATION (2)
Add to INSTALLED_APPS
# settings.py
INSTALLED_APPS = (
...
‘rest_framework’,
)
INSTALLATION (3)
Include the login/logout views
# urls.py
MODELS
MODELS
MODELS
DJANGO MODELS
THE CORE
COMPONENTS
DJANGO-REST-FRAMEWORK
IN TRADITIONAL
DJANGO:
1. Models/Querysets
2. Class-Based Views/Mixins
3. Generic Views
4. URLs
5. HTTP Requests
6. Rendered Responses
IN DRF:
1. Serializers
2. APIViews/Mixins
3. ViewSets
4. Routers
5. HTTP Requests
6. HTTP Responses
1. SERIALIZERS
“Serializers allow complex data to be
converted to native Python datatypes that
can then be easily rendered in JSON, XML
or other content types”
1.1 SERIALIZERS
Declarative syntax, similar to Forms/ModelForms
Automatically handle single Model instances or Querysets
1.2 SERIALIZERS
# using it
>>> note = Note.objects.first()
>>> serializer = NoteSerializer(note)
>>> serializer.data
{u'id': 1,
'body': u'First, do no harm.',
'pub_date': datetime.datetime(2014, 10, 28, 11, 23, 30, tzinfo=<UTC>),
'title': u'Hippocratic Oath',
'user': {
'id': 1,
'username': u'demo',
'email': u'[email protected]'
}
}
2. APIVIEWS
Subclass of Django’s View class
Simple - has .get() .post(), etc methods
Some Differences:
• Requests not normal HTTPRequest (more later)
• Responses are not normal HTTPResponse (more later)
• Auth, permissions, throttling done in advance
2.1 APIVIEWS
3. VIEWSETS
Similar to Django’s Generic Views.
“A type of Class-Based View that provides actions like
.list() and .create() instead of .get() and .post()”
Combine the logic for a set of related views into one class,
for all the actions you’ll need to take.
3.1 VIEWSETS
3.2 MODELVIEWSETS
4. URL ROUTERS
Automatic URL routing
Simple, quick, consistent way of wiring your view logic to a
set of URLs
4. URL ROUTERS
Automatic URL routing
Simple, quick, consistent way of wiring your view logic to a
set of URLs
5. REQUESTS
• In an APIView or ViewSet, ‘request’ is a DRF Request.
• Incoming JSON data in request is processed just like
Form data
• Makes request data available as
• request.DATA (vs .POST)
• request.FILES
• request.QUERY_PARAMS (vs .GET)
6. RESPONSES
Uses content-negotiation to render final content
(Hence why built-in API Console shows rich interface to us
but would deliver plain JSON to an AJAX request)
IN TRADITIONAL
DJANGO:
1. Models/Querysets
2. Class-Based Views/Mixins
3. Generic Views
4. URLs
5. HTTPRequest
6. HTTPResponse
IN DRF:
1. Serializers
2. APIViews/Mixins
3. ViewSets
4. URL Routers
5. DRF ‘Request’
6. DRF ‘Response’
REVIEW:
THE DEMO
DJANGO-REST-FRAMEWORK
INSTALLATION (REPO)
git clone https://github.com/marcelchastain/drf-demo.git
API RUNNING!
CUSTOMIZING
DJANGO-REST-FRAMEWORK
CUSTOMIZING VIEWS
• queryset
• serializer_class
• filter_class
• authentication_classes (rest_framework.authentication)
• permission_classes (rest_framework.permissions)
• parser_classes (rest_framework.parsers)
• renderer_classes (rest_framework.renderers)
• throttle_classes (rest_framework.throttling)
• paginate_by, max_paginate_by
(Defaults for most can be set in settings.py)
RESOURCES
DJANGO-REST-FRAMEWORK
RESOURCES
Docs: http://www.django-rest-framework.org
Tutorial: http://www.django-rest-framework.org/#tutorial
IRC: #restframework on irc.freenode.net
StackOverflow: ‘django-rest-framework’ tag
Author: Tom Christie (@_tomchristie)
Commercial Support: “DAB Apps” http://dabapps.com
REST EASY
WITH
DJANGO-REST-
FRAMEWORK
MARCEL CHASTAIN (@MARCELCHASTAIN)
LA DJANGO - 2014-10-28