This project has been archived by its maintainers, and is no longer receiving any updates.
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
Metadata
Release files for django-rest-marshmallow 4.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django-rest-marshmallow-4.0.2.tar.gz | 5.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_rest_marshmallow-4.0.2-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 10.3 kB
Release files / django-rest-marshmallow-4.0.2.tar.gz
| Download URL | django-rest-marshmallow-4.0.2.tar.gz |
|---|---|
| Size | 5.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e6193fd6aa572779c69a76a56040312e2cdc67e8a583e68d781208d78915a4e
|
|
BLAKE2b-256 checksum How to use checksums |
bf56bfde38f2bca792c26390b0f97347a580b91bb789d93b42692d3186d886e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Release files / django_rest_marshmallow-4.0.2-py2.py3-none-any.whl
| Download URL | django_rest_marshmallow-4.0.2-py2.py3-none-any.whl |
|---|---|
| Size | 4.9 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
73efee3969656fdbc3aed6abade362023e9d1e432dc5698898b9db1390485cb1
|
|
BLAKE2b-256 checksum How to use checksums |
3c735ed18afea11fada8deb35dc23c1bb443992415b78c0d98ec3f606a140502
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|