diff --git a/apiv1/__init__.py b/apiv1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apiv1/admin.py b/apiv1/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/apiv1/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/apiv1/apps.py b/apiv1/apps.py new file mode 100644 index 0000000..d64dab4 --- /dev/null +++ b/apiv1/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class Apiv1Config(AppConfig): + name = 'apiv1' diff --git a/apiv1/migrations/__init__.py b/apiv1/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apiv1/models.py b/apiv1/models.py new file mode 100644 index 0000000..5c39d4f --- /dev/null +++ b/apiv1/models.py @@ -0,0 +1,7 @@ +from rest_framework import serializers +from bookmarks.models import Bookmark + +class BookmarkSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Bookmark + fields = ['title', 'url'] diff --git a/apiv1/tests.py b/apiv1/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/apiv1/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/apiv1/urls.py b/apiv1/urls.py new file mode 100644 index 0000000..cfc37c4 --- /dev/null +++ b/apiv1/urls.py @@ -0,0 +1,13 @@ +from django.urls import include, path +from rest_framework import routers +from . import views + +router = routers.DefaultRouter() +router.register(r'bookmarks', views.BookmarkViewSet) + +# Wire up our API using automatic URL routing. +# Additionally, we include login URLs for the browsable API. +urlpatterns = [ + path('', include(router.urls)), + path('api-auth/', include('rest_framework.urls', namespace='rest_framework')) +] \ No newline at end of file diff --git a/apiv1/views.py b/apiv1/views.py new file mode 100644 index 0000000..abe8aad --- /dev/null +++ b/apiv1/views.py @@ -0,0 +1,8 @@ +from rest_framework import viewsets + +from . import models +from bookmarks.models import Bookmark + +class BookmarkViewSet(viewsets.ModelViewSet): + queryset = Bookmark.objects.all() + serializer_class = models.BookmarkSerializer diff --git a/forgetmenot/settings.py b/forgetmenot/settings.py index cd97ab2..22fbeef 100644 --- a/forgetmenot/settings.py +++ b/forgetmenot/settings.py @@ -32,12 +32,14 @@ ALLOWED_HOSTS = [] INSTALLED_APPS = [ 'bookmarks.apps.BookmarksConfig', + 'apiv1.apps.Apiv1Config', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'rest_framework', ] MIDDLEWARE = [ @@ -121,3 +123,11 @@ USE_TZ = True # https://docs.djangoproject.com/en/3.1/howto/static-files/ STATIC_URL = '/static/' + +REST_FRAMEWORK = { + # Use Django's standard `django.contrib.auth` permissions, + # or allow read-only access for unauthenticated users. + 'DEFAULT_PERMISSION_CLASSES': [ + 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' + ] +} \ No newline at end of file diff --git a/forgetmenot/urls.py b/forgetmenot/urls.py index 250479a..95e11be 100644 --- a/forgetmenot/urls.py +++ b/forgetmenot/urls.py @@ -22,5 +22,6 @@ urlpatterns = [ path('', views.home, name='home'), path('bookmarks/', include('bookmarks.urls')), path('admin/', admin.site.urls), - path('accounts/', include('django.contrib.auth.urls')) + path('accounts/', include('django.contrib.auth.urls')), + path('api/v1/', include('apiv1.urls')), ] diff --git a/requirements.txt b/requirements.txt index b36fdc3..eecc6f2 100644 Binary files a/requirements.txt and b/requirements.txt differ