際際滷

際際滷Share a Scribd company logo
REST EASY 
WITH 
DJANGO-REST-FRAMEWORK 
MARCEL CHASTAIN (@MARCELCHASTAIN) 
LA DJANGO - 2014-10-28
WHAT WELL COVER 
 Whats 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
DJANGO-REST-FRAMEWORK 
ABOUT 
REST
BUT IM NOT TIRED
BUT IM 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:
REST Easy with Django-Rest-Framework
EXACTLY, WONDER WOMAN.
PROPER SOLUTIONS 
django-rest-framework 
 900+ forks 
 304 contributors 
 3k stars 
 The greatest documentation 
Ive seen in a library 
django-tastypie 
 900+ forks 
 112 contributors 
 2.6k stars 
 Delicious-sounding name
YOUVE GOT 
OPTIONS
DJANGO-REST-FRAMEWORK 
THE SETUP
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
DJANGO-REST-FRAMEWORK 
THE CORE 
COMPONENTS
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'demo@demo.com' 
} 
}
2. APIVIEWS 
Subclass of Djangos 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 Djangos 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 youll 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:
DJANGO-REST-FRAMEWORK 
THE DEMO
INSTALLATION (REPO) 
git clone https://github.com/marcelchastain/drf-demo.git
API RUNNING!
DJANGO-REST-FRAMEWORK 
CUSTOMIZING
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)
DJANGO-REST-FRAMEWORK 
RESOURCES
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

More Related Content

REST Easy with Django-Rest-Framework

  • 1. REST EASY WITH DJANGO-REST-FRAMEWORK MARCEL CHASTAIN (@MARCELCHASTAIN) LA DJANGO - 2014-10-28
  • 2. WHAT WELL COVER Whats 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
  • 4. BUT IM NOT TIRED
  • 5. BUT IM NOT TIRED REST stands for Representational State Transfer All 4 CRUD operations Uses HTTP requests to: Post data(Create, Update) Read data Delete
  • 6. 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
  • 7. 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)
  • 10. ALL TOGETHER NOW: We should roll our own!
  • 11. OK JUST BE SURE TO INCLUDE serialization/deserialization
  • 12. OK JUST BE SURE TO INCLUDE serialization/deserialization parsing
  • 13. OK JUST BE SURE TO INCLUDE serialization/deserialization parsing model introspection
  • 14. 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!
  • 18. PROPER SOLUTIONS django-rest-framework 900+ forks 304 contributors 3k stars The greatest documentation Ive seen in a library django-tastypie 900+ forks 112 contributors 2.6k stars Delicious-sounding name
  • 21. INSTALLATION pip install djangorestframework pip install markdown # optional pip install django-filter # optional
  • 22. INSTALLATION (2) Add to INSTALLED_APPS # settings.py INSTALLED_APPS = ( ... rest_framework, )
  • 23. INSTALLATION (3) Include the login/logout views # urls.py
  • 28. 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
  • 29. 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
  • 30. 1.1 SERIALIZERS Declarative syntax, similar to Forms/ModelForms Automatically handle single Model instances or Querysets
  • 31. 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'demo@demo.com' } }
  • 32. 2. APIVIEWS Subclass of Djangos 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
  • 34. 3. VIEWSETS Similar to Djangos 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 youll need to take.
  • 37. 4. URL ROUTERS Automatic URL routing Simple, quick, consistent way of wiring your view logic to a set of URLs
  • 38. 4. URL ROUTERS Automatic URL routing Simple, quick, consistent way of wiring your view logic to a set of URLs
  • 39. 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)
  • 40. 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)
  • 41. 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:
  • 43. INSTALLATION (REPO) git clone https://github.com/marcelchastain/drf-demo.git
  • 46. 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)
  • 48. 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
  • 49. REST EASY WITH DJANGO-REST-FRAMEWORK MARCEL CHASTAIN (@MARCELCHASTAIN) LA DJANGO - 2014-10-28

Editor's Notes

  • #31: NoteSerializer.user would have been a plain primary key, but we use a nested serializer