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