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
File details
Details for the file django-rest-marshmallow-4.0.2.tar.gz
.
File metadata
- Download URL: django-rest-marshmallow-4.0.2.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.1 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e6193fd6aa572779c69a76a56040312e2cdc67e8a583e68d781208d78915a4e |
|
MD5 | 069f33a5f9a3dd4ace41fa4c03a4b1c9 |
|
BLAKE2b-256 | bf56bfde38f2bca792c26390b0f97347a580b91bb789d93b42692d3186d886e0 |
File details
Details for the file django_rest_marshmallow-4.0.2-py2.py3-none-any.whl
.
File metadata
- Download URL: django_rest_marshmallow-4.0.2-py2.py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.1 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 73efee3969656fdbc3aed6abade362023e9d1e432dc5698898b9db1390485cb1 |
|
MD5 | 28956cf3a85bb91c76e5a97d52c91b80 |
|
BLAKE2b-256 | 3c735ed18afea11fada8deb35dc23c1bb443992415b78c0d98ec3f606a140502 |