Skip to main content

Django REST Framework JSON CamelCase

https://travis-ci.org/vbabiy/djangorestframework-camel-case.svg?branch=master https://badge.fury.io/py/djangorestframework-camel-case.svg

Camel case JSON support for Django REST framework.

Installation

At the command line:

$ pip install djangorestframework-camel-case

Add the render and parser to your django settings file.

# ...
REST_FRAMEWORK = {

    'DEFAULT_RENDERER_CLASSES': (
        'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
        'djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer',
        # Any other renders
    ),

    'DEFAULT_PARSER_CLASSES': (
        # If you use MultiPartFormParser or FormParser, we also have a camel case version
        'djangorestframework_camel_case.parser.CamelCaseFormParser',
        'djangorestframework_camel_case.parser.CamelCaseMultiPartParser',
        'djangorestframework_camel_case.parser.CamelCaseJSONParser',
        # Any other parsers
    ),
}
# ...

Add query param middleware to django settings file.

# ...
MIDDLEWARE = [
    # Any other middleware
    'djangorestframework_camel_case.middleware.CamelCaseMiddleWare',
]
# ...

Swapping Renderer

By default the package uses rest_framework.renderers.JSONRenderer. If you want to use another renderer, the two possible are:

drf_orjson_renderer.renderers.ORJSONRenderer or rest_framework.renderers.UnicodeJSONRenderer for DRF < 3.0,specify it in your django settings file.

# ...
JSON_CAMEL_CASE = {
    'RENDERER_CLASS': 'drf_orjson_renderer.renderers.ORJSONRenderer'
}
# ...

Underscoreize Options

No Underscore Before Number

As raised in this comment there are two conventions of snake case.

# Case 1 (Package default)
v2Counter -> v_2_counter
fooBar2 -> foo_bar_2

# Case 2
v2Counter -> v2_counter
fooBar2 -> foo_bar2

By default, the package uses the first case. To use the second case, specify it in your django settings file.

REST_FRAMEWORK = {
    # ...
    'JSON_UNDERSCOREIZE': {
        'no_underscore_before_number': True,
    },
    # ...
}

Alternatively, you can change this behavior on a class level by setting json_underscoreize:

from djangorestframework_camel_case.parser import CamelCaseJSONParser
from rest_framework.generics import CreateAPIView

class NoUnderscoreBeforeNumberCamelCaseJSONParser(CamelCaseJSONParser):
    json_underscoreize = {'no_underscore_before_number': True}

class MyView(CreateAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MySerializer
    parser_classes = (NoUnderscoreBeforeNumberCamelCaseJSONParser,)

Ignore Fields

You can also specify fields which should not have their data changed. The specified field(s) would still have their name change, but there would be no recursion. For example:

data = {"my_key": {"do_not_change": 1}}

Would become:

{"myKey": {"doNotChange": 1}}

However, if you set in your settings:

REST_FRAMEWORK = {
    # ...
    "JSON_UNDERSCOREIZE": {
        # ...
        "ignore_fields": ("my_key",),
        # ...
    },
    # ...
}

The my_key field would not have its data changed:

{"myKey": {"do_not_change": 1}}

Ignore Keys

You can also specify keys which should not be renamed. The specified field(s) would still change (even recursively). For example:

data = {"unchanging_key": {"change_me": 1}}

Would become:

{"unchangingKey": {"changeMe": 1}}

However, if you set in your settings:

REST_FRAMEWORK = {
    # ...
    "JSON_UNDERSCOREIZE": {
        # ...
        "ignore_keys": ("unchanging_key",),
        # ...
    },
    # ...
}

The unchanging_key field would not be renamed:

{"unchanging_key": {"changeMe": 1}}

ignore_keys and ignore_fields can be applied to the same key if required.

Running Tests

To run the current test suite, execute the following from the root of he project:

$ python -m unittest discover

License

  • Free software: BSD license

History

1.4.2 (2023-02-13)

  • Middleware to underscorize query params #123

1.4.1 (2023-02-13)

  • ORJSONRenderer #124

1.4.0 (2023-02-09)

  • Merge pull request #110

  • Merge pull request #119

  • Merge pull request #122

  • Merge pull request #93

1.3.0 (2021-11-14)

  • Merge pull request #104

  • Merge pull request #99

  • Merge pull request #100

  • Merge pull request #90

  • Merge pull request #92

  • added ignore_keys

1.2.0 (2020-06-16)

  • added ignore_fields

  • Merge pull request #88

  • Merge pull request #84

  • Merge pull request #77

  • Merge pull request #73

1.1.2 (2019-10-22)

  • Merge pull request #63

  • Merge pull request #70

  • Merge pull request #71

1.1.1 (2019-09-09)

  • Add json_underscoreize as CamelCaseJSONParser class attribute #44

1.1.0 (2019-09-09)

Long awaited stable release:

Changes can be viewed: https://github.com/vbabiy/djangorestframework-camel-case/compare/e6db468…39ae6bb

0.1.0 (2013-12-20)

  • First release on PyPI.

Release files for djangorestframework-camel-case 1.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for djangorestframework-camel-case 1.4.2
File Size Uploaded
djangorestframework-camel-case-1.4.2.tar.gz 8.8 kB Details

Release files / djangorestframework-camel-case-1.4.2.tar.gz

Download URL djangorestframework-camel-case-1.4.2.tar.gz
Size 8.8 kB
Tags Source
SHA-256 checksum
How to use checksums
cdae75846648abb6585c7470639a1d2fb064dc45f8e8b62aaa50be7f1a7a61f4
BLAKE2b-256 checksum
How to use checksums
f487647ce93053cb5e35e07bded676340774fe43190388b885c54aff47d8557b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.2

Release history Release notifications | RSS feed

This release

1.4.2 This release

1 release file

1.4.1

1 release file

1.4.0

1 release file

1.3.0

1 release file

1.2.0

1 release file

1.1.2

1 release file

1.1.1

2 release files

1.1.0

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.2.0

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page