add RPC API to retrieve fact(s)
This commit is contained in:
parent
1fc8af09f8
commit
3aa3fb14e4
14
facts/serializers.py
Normal file
14
facts/serializers.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
"""Serializers for the fact objects."""
|
||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from facts.models import Fact
|
||||||
|
|
||||||
|
|
||||||
|
class FactSerializer(serializers.ModelSerializer):
|
||||||
|
"""Serializer for the REST API."""
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""Meta options."""
|
||||||
|
|
||||||
|
model = Fact
|
||||||
|
fields = ('id', 'fact', 'category')
|
@ -1,9 +1,13 @@
|
|||||||
"""URL patterns for the facts web views."""
|
"""URL patterns for the facts web views."""
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
from django.urls import path
|
||||||
|
|
||||||
from facts.views import index, factcategory_detail
|
from facts.views import factcategory_detail, index, rpc_get_facts, rpc_get_random_fact
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
path('rpc/<category>/', rpc_get_facts, name='weather_rpc_get_facts'),
|
||||||
|
path('rpc/<category>/random/', rpc_get_random_fact, name='weather_rpc_get_random_fact'),
|
||||||
|
|
||||||
url(r'^$', index, name='facts_index'),
|
url(r'^$', index, name='facts_index'),
|
||||||
url(r'^(?P<factcategory_name>.+)/$', factcategory_detail, name='facts_factcategory_detail'),
|
url(r'^(?P<factcategory_name>.+)/$', factcategory_detail, name='facts_factcategory_detail'),
|
||||||
]
|
]
|
||||||
|
@ -2,12 +2,49 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.shortcuts import get_object_or_404, render
|
from django.shortcuts import get_object_or_404, render
|
||||||
|
from rest_framework.authentication import BasicAuthentication
|
||||||
|
from rest_framework.decorators import api_view, authentication_classes, permission_classes
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from facts.models import FactCategory
|
from facts.models import FactCategory
|
||||||
|
from facts.serializers import FactSerializer
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@api_view(['GET'])
|
||||||
|
@authentication_classes((BasicAuthentication, ))
|
||||||
|
@permission_classes((IsAuthenticated, ))
|
||||||
|
def rpc_get_facts(request, category):
|
||||||
|
"""Get all the facts in a category."""
|
||||||
|
if request.method != 'GET':
|
||||||
|
return Response({'detail': "Supported method: GET."}, status=405)
|
||||||
|
|
||||||
|
try:
|
||||||
|
fact_category = FactCategory.objects.get(name=category)
|
||||||
|
except FactCategory.DoesNotExist:
|
||||||
|
return Response({'detail': f"Item set category '{category}' not found."}, status=404)
|
||||||
|
|
||||||
|
return Response(FactSerializer(fact_category.fact_set.all(), many=True).data)
|
||||||
|
|
||||||
|
|
||||||
|
@api_view(['GET'])
|
||||||
|
@authentication_classes((BasicAuthentication, ))
|
||||||
|
@permission_classes((IsAuthenticated, ))
|
||||||
|
def rpc_get_random_fact(request, category):
|
||||||
|
"""Get all the facts in a category."""
|
||||||
|
if request.method != 'GET':
|
||||||
|
return Response({'detail': "Supported method: GET."}, status=405)
|
||||||
|
|
||||||
|
try:
|
||||||
|
fact_category = FactCategory.objects.get(name=category)
|
||||||
|
except FactCategory.DoesNotExist:
|
||||||
|
return Response({'detail': f"Item set category '{category}' not found."}, status=404)
|
||||||
|
|
||||||
|
return Response(FactSerializer(fact_category.random_fact()).data)
|
||||||
|
|
||||||
|
|
||||||
def index(request):
|
def index(request):
|
||||||
"""Display a simple list of the fact categories, for the moment."""
|
"""Display a simple list of the fact categories, for the moment."""
|
||||||
factcategories = FactCategory.objects.all()
|
factcategories = FactCategory.objects.all()
|
||||||
|
Loading…
Reference in New Issue
Block a user