add a dice rolling API view to the django app
This commit is contained in:
parent
f78d407d4c
commit
8fcc8365e3
8
dice/urls.py
Normal file
8
dice/urls.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
"""URL patterns for the dice views."""
|
||||||
|
from django.urls import path
|
||||||
|
|
||||||
|
from dice.views import rpc_roll_dice
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('rpc/roll/', rpc_roll_dice, name='dice_rpc_roll_dice'),
|
||||||
|
]
|
36
dice/views.py
Normal file
36
dice/views.py
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
"""Views for rolling dice."""
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from rest_framework.authentication import BasicAuthentication
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.decorators import api_view, authentication_classes, permission_classes
|
||||||
|
|
||||||
|
from dice.roller import DiceRoller
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
roller = DiceRoller()
|
||||||
|
|
||||||
|
|
||||||
|
@api_view(['POST'])
|
||||||
|
@authentication_classes((BasicAuthentication, ))
|
||||||
|
@permission_classes((IsAuthenticated, ))
|
||||||
|
def rpc_roll_dice(request):
|
||||||
|
"""Get a dice string from the client, roll the dice, and give the result."""
|
||||||
|
if request.method != 'POST':
|
||||||
|
return Response({'detail': "Supported method: POST."}, status=405)
|
||||||
|
|
||||||
|
try:
|
||||||
|
roll_data = json.loads(request.body)
|
||||||
|
dice_str = roll_data['dice']
|
||||||
|
except (json.decoder.JSONDecodeError, KeyError):
|
||||||
|
return Response({'detail': "Request must be JSON with a 'dice' parameter."}, status=400)
|
||||||
|
|
||||||
|
try:
|
||||||
|
result_str = roller.do_roll(dice_str)
|
||||||
|
return Response({'dice': dice_str, 'result': result_str})
|
||||||
|
except AssertionError as aex:
|
||||||
|
return Response({'detail': f"Could not roll dice: {aex}"}, status=400)
|
||||||
|
except ValueError:
|
||||||
|
return Response({'detail': f"Could not parse requested dice '{dice_str}'."}, status=400)
|
@ -13,6 +13,7 @@ admin.autodiscover()
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^$', TemplateView.as_view(template_name='index.html'), name='home'),
|
url(r'^$', TemplateView.as_view(template_name='index.html'), name='home'),
|
||||||
|
|
||||||
|
url(r'^dice/', include('dice.urls')),
|
||||||
url(r'^dispatch/', include('dispatch.urls')),
|
url(r'^dispatch/', include('dispatch.urls')),
|
||||||
url(r'^itemsets/', include('facts.urls')),
|
url(r'^itemsets/', include('facts.urls')),
|
||||||
url(r'^karma/', include('karma.urls')),
|
url(r'^karma/', include('karma.urls')),
|
||||||
|
Loading…
Reference in New Issue
Block a user