Skip to content
Snippets Groups Projects
user avatar
Sylvain Le Bon authored
853816c4
History
Name Last commit Last update
djangoldp
.gitignore
README.md
setup.py

Synopsis

This module is an add-on for Django REST Framework that serves a django model respecting the Linked Data Platform convention.

It aims at enabling people with little development skills to serve their own data, to be used with a LDP application.

Requirements

  • Django (known to work with django 1.11)
  • Django Rest Framework
  • pyld

Installation

1- Install this module and all its dependencies

pip install djangoldp

2- Create a django project

django-admin startproject myldpserver

3- Create your django model inside a file myldpserver/myldpserver/models.py

from django.db import models

class Todo(models.Model):
    name = models.CharField(max_length=255)
    deadline = models.DateTimeField()

4- Add a url in your urls.py:

from django.conf.urls import url
from django.contrib import admin
from djangoldp.views import LDPViewSet
from .models import Todo

urlpatterns = [
    url(r'^todos/', LDPViewSet.urls(model=Todo)),
    url(r'^admin/', admin.site.urls),
]

This creates 2 routes, one for the list, and one with an ID listing the detail of an object.

5- In the settings.py file, add your application name at the beginning of the application list, and add the following lines

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')
LDP_RDF_CONTEXT = 'https://cdn.happy-dev.fr/owl/hdcontext.jsonld'

6- You can also register your model for the django administration site

from django.contrib import admin
from .models import Todo

admin.site.register(Todo)

7- You then need to have your WSGI server pointing on myldpserver/myldpserver/wsgi.py

8- You will probably need to create a super user

./manage.py createsuperuser

9- If you have no CSS on the admin screens :

./manage.py collectstatic

Execution

To start the server, cd to the root of your Django project and run :

python3 manage.py runserver

Custom Parameters to LDPViewSet

lookup_field

Can be used to use a slug in the url instead of the primary key.

LDPViewSet.urls(model=User, lookup_field='username')

nested_fields

list of ForeignKey, ManyToManyField, OneToOneField and their reverse relations. When a field is listed in this parameter, a container will be created inside each single element of the container.

In the following example, besides the urls /members/ and /members/<pk>/, two other will be added to serve a container of the skills of the member: /members/<pk>/skills/ and /members/<pk>/skills/<pk>/

    url(r'^members/', LDPViewSet.urls(model=Member, nested_fields=("skills",))),

License

Licence MIT