diff --git a/README.rst b/README.rst index 94a919b9..f2e9155d 100644 --- a/README.rst +++ b/README.rst @@ -74,7 +74,7 @@ From PyPI :: - pip install djangorestframework-jsonapi + $ pip install djangorestframework-jsonapi From Source @@ -86,6 +86,18 @@ From Source $ cd django-rest-framework-json-api && pip install -e . +Running the example app +^^^^^^^^^^^^^^^^^^^^^^^ + +:: + + $ git clone https://github.com/django-json-api/django-rest-framework-json-api.git + $ cd django-rest-framework-json-api && pip install -e . + $ django-admin.py runserver + +Browse to http://localhost:8000 + + Running Tests ^^^^^^^^^^^^^ diff --git a/docs/getting-started.md b/docs/getting-started.md index 4d2e8913..cc2af2b6 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -66,6 +66,14 @@ From Source git clone https://github.com/django-json-api/django-rest-framework-json-api.git cd django-rest-framework-json-api && pip install -e . +## Running the example app + + git clone https://github.com/django-json-api/django-rest-framework-json-api.git + cd django-rest-framework-json-api && pip install -e . + django-admin.py runserver + +Browse to http://localhost:8000 + ## Running Tests python runtests.py diff --git a/drf_example b/drf_example new file mode 100644 index 00000000..c813d5c1 Binary files /dev/null and b/drf_example differ diff --git a/example/models.py b/example/models.py index 7dfbc1ab..f2719923 100644 --- a/example/models.py +++ b/example/models.py @@ -42,9 +42,10 @@ class Entry(BaseModel): pub_date = models.DateField() mod_date = models.DateField() authors = models.ManyToManyField(Author) - n_comments = models.IntegerField() - n_pingbacks = models.IntegerField() - rating = models.IntegerField() + n_comments = models.IntegerField(default=0) + n_pingbacks = models.IntegerField(default=0) + rating = models.IntegerField(default=0) def __str__(self): return self.headline + diff --git a/example/serializers.py b/example/serializers.py index 76f99657..1f2c5965 100644 --- a/example/serializers.py +++ b/example/serializers.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from example.models import Blog +from example.models import Blog, Entry, Author class BlogSerializer(serializers.ModelSerializer): @@ -7,3 +7,16 @@ class BlogSerializer(serializers.ModelSerializer): class Meta: model = Blog fields = ('name', ) + +class EntrySerializer(serializers.ModelSerializer): + class Meta: + model = Entry + fields = ('blog', 'headline', 'body_text', 'pub_date', 'mod_date', + 'authors',) + +class AuthorSerializer(serializers.ModelSerializer): + + class Meta: + model = Author + fields = ('name', 'email',) + diff --git a/example/settings/__init__.py b/example/settings/__init__.py new file mode 100644 index 00000000..c7873286 --- /dev/null +++ b/example/settings/__init__.py @@ -0,0 +1 @@ +from .dev import * diff --git a/example/settings.py b/example/settings/dev.py similarity index 81% rename from example/settings.py rename to example/settings/dev.py index a0e054c1..f90226a4 100644 --- a/example/settings.py +++ b/example/settings/dev.py @@ -11,7 +11,7 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': ':memory:', + 'NAME': 'drf_example', } } @@ -36,18 +36,15 @@ MIDDLEWARE_CLASSES = () -JSON_API_FORMAT_KEYS = 'dasherize' +JSON_API_FORMAT_KEYS = 'camelize' +JSON_API_FORMAT_RELATION_KEYS = 'camelize' REST_FRAMEWORK = { - 'PAGINATE_BY': 1, + 'PAGINATE_BY': 5, 'PAGINATE_BY_PARAM': 'page_size', 'MAX_PAGINATE_BY': 100, 'EXCEPTION_HANDLER': 'rest_framework_json_api.exceptions.exception_handler', - # DRF v3.1+ 'DEFAULT_PAGINATION_CLASS': 'rest_framework_json_api.pagination.PageNumberPagination', - # DRF v3.0 and older - 'DEFAULT_PAGINATION_SERIALIZER_CLASS': - 'rest_framework_json_api.pagination.PaginationSerializer', 'DEFAULT_PARSER_CLASSES': ( 'rest_framework_json_api.parsers.JSONParser', 'rest_framework.parsers.FormParser', @@ -55,7 +52,7 @@ ), 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework_json_api.renderers.JSONRenderer', - 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.BrowsableAPIRenderer', ), + 'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata', } diff --git a/example/settings/test.py b/example/settings/test.py new file mode 100644 index 00000000..17d68007 --- /dev/null +++ b/example/settings/test.py @@ -0,0 +1,16 @@ +from .dev import * + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': ':memory:', + } +} + +ROOT_URLCONF = 'example.urls_test' + +JSON_API_FORMAT_KEYS = 'camelize' +JSON_API_FORMAT_RELATION_KEYS = 'camelize' +REST_FRAMEWORK.update({ + 'PAGINATE_BY': 1, +}) diff --git a/example/urls.py b/example/urls.py index 3e76cea7..554c4b05 100644 --- a/example/urls.py +++ b/example/urls.py @@ -1,23 +1,14 @@ from django.conf.urls import include, url from rest_framework import routers -from example.views import BlogViewSet -from .api.resources.identity import Identity, GenericIdentity +from example.views import BlogViewSet, EntryViewSet, AuthorViewSet router = routers.DefaultRouter(trailing_slash=False) -router.register(r"blogs", BlogViewSet) - -# for the old tests -router.register(r'identities', Identity) - +router.register(r'blogs', BlogViewSet) +router.register(r'entries', EntryViewSet) +router.register(r'authors', AuthorViewSet) urlpatterns = [ - url(r'^', include(router.urls)), - - # old tests - url(r'identities/default/(?P\d+)', - GenericIdentity.as_view(), name='user-default'), - ] diff --git a/example/urls_test.py b/example/urls_test.py new file mode 100644 index 00000000..a31670b7 --- /dev/null +++ b/example/urls_test.py @@ -0,0 +1,23 @@ +from django.conf.urls import include, url +from rest_framework import routers + +from example.views import BlogViewSet, EntryViewSet, AuthorViewSet +from .api.resources.identity import Identity, GenericIdentity + +router = routers.DefaultRouter(trailing_slash=False) + +router.register(r'blogs', BlogViewSet) +router.register(r'entries', EntryViewSet) +router.register(r'authors', AuthorViewSet) + +# for the old tests +router.register(r'identities', Identity) + +urlpatterns = [ + url(r'^', include(router.urls)), + + # old tests + url(r'identities/default/(?P\d+)', + GenericIdentity.as_view(), name='user-default'), +] + diff --git a/example/views.py b/example/views.py index 0357e643..4a41f5d8 100644 --- a/example/views.py +++ b/example/views.py @@ -1,9 +1,21 @@ from rest_framework import viewsets -from example.models import Blog -from example.serializers import BlogSerializer +from example.models import Blog, Entry, Author +from example.serializers import BlogSerializer, EntrySerializer, AuthorSerializer class BlogViewSet(viewsets.ModelViewSet): queryset = Blog.objects.all() serializer_class = BlogSerializer + +class EntryViewSet(viewsets.ModelViewSet): + + queryset = Entry.objects.all() + serializer_class = EntrySerializer + resource_name = 'posts' + +class AuthorViewSet(viewsets.ModelViewSet): + + queryset = Author.objects.all() + serializer_class = AuthorSerializer + diff --git a/pytest.ini b/pytest.ini index d2a24f2e..49c4dae9 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,2 +1,2 @@ [pytest] -DJANGO_SETTINGS_MODULE=example.settings +DJANGO_SETTINGS_MODULE=example.settings.test diff --git a/tox.ini b/tox.ini index 9287d73b..6ec1691a 100644 --- a/tox.ini +++ b/tox.ini @@ -13,7 +13,7 @@ deps = drf32: djangorestframework>=3.2 -r{toxinidir}/requirements-development.txt -setenv= DJANGO_SETTINGS_MODULE=example.settings +setenv= DJANGO_SETTINGS_MODULE=example.settings.test commands = py.test --basetemp={envtmpdir}