diff --git a/breccia_mapper/settings.py b/breccia_mapper/settings.py index 2260eae..5706267 100644 --- a/breccia_mapper/settings.py +++ b/breccia_mapper/settings.py @@ -71,6 +71,7 @@ THIRD_PARTY_APPS = [ 'dbbackup', 'django_countries', 'django_select2', + 'rest_framework', ] FIRST_PARTY_APPS = [ diff --git a/people/serializers.py b/people/serializers.py new file mode 100644 index 0000000..3c98db3 --- /dev/null +++ b/people/serializers.py @@ -0,0 +1,26 @@ +""" +Serialize models to and deserialize from JSON. +""" + +from rest_framework import serializers + +from . import models + + +class PersonSerializer(serializers.ModelSerializer): + class Meta: + model = models.Person + fields = [ + 'pk', + 'name', + ] + + +class RelationshipSerializer(serializers.ModelSerializer): + class Meta: + model = models.Relationship + fields = [ + 'pk', + 'source', + 'target', + ] diff --git a/people/templates/people/network.html b/people/templates/people/network.html new file mode 100644 index 0000000..4c703eb --- /dev/null +++ b/people/templates/people/network.html @@ -0,0 +1,120 @@ +{% extends 'base.html' %} + +{% block content %} + + +
+ +
+ + +{% endblock %} + +{% block extra_script %} + + + +{% endblock %} \ No newline at end of file diff --git a/people/urls.py b/people/urls.py index e3460b4..de38945 100644 --- a/people/urls.py +++ b/people/urls.py @@ -37,4 +37,16 @@ urlpatterns = [ path('relationships//update', views.RelationshipUpdateView.as_view(), name='relationship.update'), + + path('api/people', + views.PersonApiView.as_view(), + name='person.api.list'), + + path('api/relationships', + views.RelationshipApiView.as_view(), + name='relationship.api.list'), + + path('network', + views.NetworkView.as_view(), + name='network'), ] diff --git a/people/views.py b/people/views.py index a0e1bcc..1484a77 100644 --- a/people/views.py +++ b/people/views.py @@ -4,9 +4,11 @@ Views for displaying or manipulating models in the 'people' app. from django.http import HttpResponseRedirect from django.urls import reverse -from django.views.generic import CreateView, DetailView, FormView, ListView, UpdateView +from django.views.generic import CreateView, DetailView, ListView, TemplateView, UpdateView -from . import forms, models, permissions +from rest_framework.views import APIView, Response + +from . import forms, models, permissions, serializers class PersonCreateView(CreateView): @@ -176,3 +178,36 @@ class RelationshipUpdateView(permissions.UserIsLinkedPersonMixin, CreateView): form.save() return HttpResponseRedirect(self.relationship.get_absolute_url()) + + +class PersonApiView(APIView): + """ + List all :class:`Person` instances. + """ + def get(self, request, format=None): + """ + List all :class:`Person` instances. + """ + serializer = serializers.PersonSerializer(models.Person.objects.all(), + many=True) + return Response(serializer.data) + + +class RelationshipApiView(APIView): + """ + List all :class:`Relationship` instances. + """ + def get(self, request, format=None): + """ + List all :class:`Relationship` instances. + """ + serializer = serializers.RelationshipSerializer(models.Relationship.objects.all(), + many=True) + return Response(serializer.data) + + +class NetworkView(TemplateView): + """ + View to display relationship network. + """ + template_name = 'people/network.html' diff --git a/requirements.txt b/requirements.txt index fbcf909..1c63c7e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,9 +7,11 @@ django-bootstrap4==1.1.1 django-constance==2.6.0 django-countries==5.5 django-dbbackup==3.2.0 +django-filter==2.2.0 django-picklefield==2.1.1 django-select2==7.2.0 django-settings-export==1.2.1 +djangorestframework==3.11.0 dodgy==0.2.1 isort==4.3.21 lazy-object-proxy==1.4.3