Marshmallow schemas for Django REST framework
Project description
django-rest-marshmallow
Marshmallow schemas for Django REST framework.
Overview
django-rest-marshmallow
provides an alternative serializer implementation to the built-in serializers, by using the python marshmallow library, but exposing the same API as REST framework's Serializer
class.
Requirements
- Python (2.7, 3.5+)
- Django REST framework (3.8+)
- Marshmallow (2.15+ and 3.0.0b18+)
Installation
Install using pip
...
$ pip install django-rest-marshmallow
Usage
Define your schemas as you would with marshmallow, but importing the Schema
class from rest_marshmallow
instead.
from rest_marshmallow import Schema, fields
class CustomerSchema(Schema):
name = fields.String()
email = fields.Email()
created_at = fields.DateTime()
The Schema class has the same interface as a Django REST framework serializer, so you can use it in your generic views...
class CustomerListView(generics.ListAPIView):
queryset = Customer.objects.all()
serializer_class = CustomerSchema
Or use the serializer API directly, for either serialization...
serializer = CustomerSchema(queryset, many=True)
return Response(serializer.data)
Or for validation...
serializer = CustomerSchema(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.validated_data
Instance create and update
If you want to support serializer.save()
you'll need to define the .create()
and/or .update()
methods explicitly.
class CustomerSchema(Schema):
name = fields.String()
email = fields.Email()
created_at = fields.DateTime()
def create(self, validated_data):
return Customer.objects.create(**validated_data)
def update(self, instance, validated_data):
for key, value in validated_data.items():
setattr(instance, key, value)
instance.save()
return instance
You can now use .save()
from your view code…
serializer = CustomerSchema(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
Or use the schema together with generic views that create or update instances...
class CustomerListView(generics.ListCreateAPIView):
queryset = Customer.objects.all()
serializer_class = CustomerSchema
Note that you should always use the create()
and update()
methods instead of overriding the make_object()
marshmallow method.
Nested representations
For nested representations, use marshmallow's standard Nested
field as usual.
from rest_marshmallow import fields, Schema
class ArtistSchema(Schema):
name = fields.String()
class AlbumSchema(Schema):
title = fields.String()
release_date = fields.Date()
artist = fields.Nested(ArtistSchema)
Excluding fields
The marshmallow only
and exclude
arguments are also valid as serializer arguments:
serializer = CustomerSchema(queryset, many=True, only=('name', 'email'))
return Response(serializer.data)
Testing
Install testing requirements.
$ pip install -r requirements.txt
Run with runtests.
$ ./runtests.py
You can also use the excellent tox testing tool to run the tests against all supported versions of Python and Django. Install tox globally, and then simply run:
$ tox
Documentation
To build the documentation, you'll need to install mkdocs
.
$ pip install mkdocs
To preview the documentation:
$ mkdocs serve
Running at: http://127.0.0.1:8000/
To build the documentation:
$ mkdocs build
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django-rest-marshmallow-4.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 15b3fea9cb5cb93bb50c5eb9e71e74c17192b09d5a821e6be6ee257c584dc1fc |
|
MD5 | f82ec08df658ae110df7b8063bbd66d9 |
|
BLAKE2b-256 | 56f982bb2c1ab8750fe3794ed4cecd2762390abf26a8bc572ca71f37bf43a996 |
Hashes for django_rest_marshmallow-4.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8646aeff382ad91270ca5508f17cf7e9c39e689b50e699a23837f3f9e3cfd9ce |
|
MD5 | c5e25defb88d5a4b54d75675da8c5298 |
|
BLAKE2b-256 | b65812091dc0607da44c37f9b7eafa9e618610b4355510007a102a11633a29f9 |