Django REST Framework Camel Case
djangorestframework-camel-case (version 1.4.2) is an active Python library that provides seamless camel case JSON support for Django REST framework. It automatically converts API request and response fields between Python's `snake_case` and JavaScript's `camelCase`, allowing developers to maintain consistent Pythonic naming conventions while exposing JavaScript-friendly APIs. The library was last updated in February 2023.
Warnings
- gotcha When testing with `APITestCase`, `response.data` will contain `snake_case` keys, while the actual `camelCase` output is found in `json.loads(response.content)`. Ensure your assertions target the correct response parameter.
- gotcha The package uses a default underscoreization convention (e.g., `v2Counter` -> `v_2_counter`). If you prefer an alternative convention (e.g., `v2Counter` -> `v2_counter`), you must explicitly configure `JSON_UNDERSCOREIZE` in your `settings.py` or as a class attribute on parsers.
- gotcha If you intend to use a different base JSON renderer (e.g., `drf_orjson_renderer`, `drf_ujson_renderer`), you must specify it within the `JSON_CAMEL_CASE` setting in `settings.py`, not directly in `DEFAULT_RENDERER_CLASSES` as the primary renderer.
- gotcha For proper camel case representation in OpenAPI schemas generated by `drf-spectacular`, an additional post-processing hook needs to be configured in your `SPECTACULAR_SETTINGS`.
Install
-
pip install djangorestframework-camel-case
Imports
- CamelCaseJSONRenderer
from djangorestframework_camel_case.render import CamelCaseJSONRenderer
- CamelCaseJSONParser
from djangorestframework_camel_case.parser import CamelCaseJSONParser
- CamelCaseBrowsableAPIRenderer
from djangorestframework_camel_case.render import CamelCaseBrowsableAPIRenderer
- CamelCaseFormParser
from djangorestframework_camel_case.parser import CamelCaseFormParser
- CamelCaseMultiPartParser
from djangorestframework_camel_case.parser import CamelCaseMultiPartParser
- CamelCaseMiddleWare
from djangorestframework_camel_case.middleware import CamelCaseMiddleWare
Quickstart
import os
# In your Django settings.py file
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
'djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer', # Optional
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
'DEFAULT_PARSER_CLASSES': [
'djangorestframework_camel_case.parser.CamelCaseJSONParser',
'djangorestframework_camel_case.parser.CamelCaseFormParser', # Optional
'djangorestframework_camel_case.parser.CamelCaseMultiPartParser', # Optional
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser',
],
}
# Optionally, add middleware for query parameter conversion
# In your Django settings.py file, in the MIDDLEWARE list
MIDDLEWARE = [
# ... other middleware ...
'djangorestframework_camel_case.middleware.CamelCaseMiddleWare',
# ...
]
# Example of how you might integrate with a custom renderer (e.g., ORJSON)
# JSON_CAMEL_CASE = {
# 'RENDERER_CLASS': 'drf_orjson_renderer.renderers.ORJSONRenderer'
# }
# Example of customizing underscoreization for specific cases (e.g., v2Counter -> v2_counter)
# REST_FRAMEWORK = {
# 'JSON_UNDERSCOREIZE': {
# 'no_underscore_before_number': True,
# },
# # ... other DRF settings ...
# }
# A basic DRF serializer example (Python snake_case)
from rest_framework import serializers
class MyModelSerializer(serializers.Serializer):
my_field_name = serializers.CharField(max_length=100)
another_data_point = serializers.IntegerField()
# When rendered by CamelCaseJSONRenderer, it will appear as:
# {
# "myFieldName": "value",
# "anotherDataPoint": 123
# }