Created
May 3, 2018 21:24
-
-
Save chris-surge/23da2e1d30c7024aaec875046f785e36 to your computer and use it in GitHub Desktop.
Extracted source code for "Intro to Python"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.conf.urls import url, include | |
from django.contrib import admin | |
from django.db import models | |
from rest_framework import serializers, viewsets, routers | |
# DATA MODEL: expected to be in `models.py` | |
class Flavor(models.Model): | |
name = models.CharField(max_length=30) | |
def __str__(self): | |
return self.name | |
class Topping(models.Model): | |
name = models.CharField(max_length=30) | |
def __str__(self): | |
return self.name | |
class Order(models.Model): | |
flavor = models.ForeignKey('Flavor', on_delete=models.DO_NOTHING) | |
topping = models.ForeignKey('Topping', on_delete=models.DO_NOTHING) | |
def __str__(self): | |
return "Someone ordered {} topped with {}".format(self.flavor, self.topping) | |
# SERIALIZERS: handle content negotiation, generally goes `serializers.py` to reduce clutter | |
class FlavorSerializer(serializers.HyperlinkedModelSerializer): | |
class Meta: | |
model = Flavor | |
fields = ('name', 'url',) | |
class ToppingSerializer(serializers.HyperlinkedModelSerializer): | |
class Meta: | |
model = Topping | |
fields = ('name', 'url',) | |
class OrderSerializer(serializers.HyperlinkedModelSerializer): | |
order_string = serializers.SerializerMethodField() | |
class Meta: | |
model = Order | |
fields = ('order_string', 'topping', 'flavor') | |
def get_order_string(self, obj): | |
return "Someone ordered {} topped with {}".format(obj.flavor, obj.topping) | |
# VIEWS: Handle responding to HTTP web requests, go in `views.py` | |
class OrderViewSet(viewsets.ModelViewSet): | |
queryset = Order.objects.all() | |
serializer_class = OrderSerializer | |
class ToppingViewSet(viewsets.ModelViewSet): | |
queryset = Topping.objects.all() | |
serializer_class = ToppingSerializer | |
class FlavorViewSet(viewsets.ModelViewSet): | |
queryset = Flavor.objects.all() | |
serializer_class = FlavorSerializer | |
# ROUTERS: go in a `urls.py` file generally | |
# Defines the paths given for each ViewSet | |
router = routers.DefaultRouter() | |
router.register(r'flavors', FlavorViewSet) | |
router.register(r'toppings', ToppingViewSet) | |
router.register(r'orders', OrderViewSet) | |
# url pattern is django's way of defining routes | |
urlpatterns = [ | |
url(r'^', include(router.urls)), | |
url(r'^admin/', admin.site.urls), | |
] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment