Skip to main content

Django restframework custom schema

Project description

# Django restframework schema

This package is a schema for django restframework.

# How to use

## Installation

```bash
$ pip install django-rest-coreapi-schema
```

```bash
$ pip install -e git+https://github.com/emilioag/django_rest_coreapi_schema.git#egg=django_rest_coreapi_schema
```

## Configuration

### django settings

Add the next configuration in your settings.py file.

```python
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'django_rest_coreapi_schema.schema.CoreAPIAutoSchema',
}
```

### Restframework docs (urls)

Add to your urls.py the restframework docs


```python
from django.conf.urls import url
from rest_framework.documentation import include_docs_urls

urlpatterns = [
url(r'^docs/', include_docs_urls(title='My API title', description='API description', public=False)),
]
```

### Create your serializers

```python
from rest_framework import serializers


class UserSerializer(serializers.Serializer):
email = serializers.CharField(
required=False,
help_text="User email")
address = serializers.CharField(
required=False,
help_text="User address")


class FilterSerializer(serializers.Serializer):
order = serializers.ChoiceField(
required=False,
choices=[("asc", "Asc"), ("desc", "desc")],
help_text="Order")
username = serializers.CharField(
required=False,
help_text="Username pattern")


class PathSerializer(serializers.Serializer):
username = serializers.CharField(
required=True,
help_text="Username")
```

### Create your pagination

```python
from rest_framework.pagination import PageNumberPagination


class LargeResultsSetPagination(PageNumberPagination):
page_size = 1000
page_size_query_param = 'page_size'
max_page_size = 10000

```

## Create your view

### Documenting path variables

You have to use the class variable: `queryset`

```python
from django_rest_coreapi_schema.views import DocumentedBaseView

class UserView(DocumentedBaseView):
queryset = PathSerializer
```

### Url args

You have to use the class variables: `filter_backends` and `filter_fields`

* **filter_backends** is a list of serializers which contains all the possible url args.
* **filter_fields** is a list of arg names that will be appear in the coreapi documentation.

```python
from django_rest_coreapi_schema.views import DocumentedBaseView

class UserListView(DocumentedBaseView):
filter_backends = [FilterSerializer]
filter_fields = ('order', 'username')
```

### Body

Http put, post, etc. body.

```python
from django_rest_coreapi_schema.views import DocumentedBaseView

class UserView(DocumentedBaseView):
body_serializer_class = UserSerializer
```

### Pagination (for large results)

```python
from django_rest_coreapi_schema.views import DocumentedBaseView

class UserListView(DocumentedBaseView):
pagination_class = LargeResultsSetPagination
```



You can see a whole example in examples/restAPI folder inside this repository.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_rest_coreapi_schema-0.1.1.tar.gz (7.5 kB view hashes)

Uploaded Source

Built Distribution

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page