{"id":5913,"library":"djangorestframework-camel-case","title":"Django REST Framework Camel Case","description":"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.","status":"active","version":"1.4.2","language":"en","source_language":"en","source_url":"https://github.com/vbabiy/djangorestframework-camel-case","tags":["django","rest-framework","camel-case","json","serialization","parser","renderer"],"install":[{"cmd":"pip install djangorestframework-camel-case","lang":"bash","label":"Install stable version"}],"dependencies":[{"reason":"This library is an extension for Django REST Framework and requires it to function.","package":"djangorestframework"}],"imports":[{"symbol":"CamelCaseJSONRenderer","correct":"from djangorestframework_camel_case.render import CamelCaseJSONRenderer"},{"symbol":"CamelCaseJSONParser","correct":"from djangorestframework_camel_case.parser import CamelCaseJSONParser"},{"note":"Optional: For camel case in Django REST Framework's browsable API.","symbol":"CamelCaseBrowsableAPIRenderer","correct":"from djangorestframework_camel_case.render import CamelCaseBrowsableAPIRenderer"},{"note":"Optional: Use for parsing form data with camel case.","symbol":"CamelCaseFormParser","correct":"from djangorestframework_camel_case.parser import CamelCaseFormParser"},{"note":"Optional: Use for parsing multipart form data with camel case.","symbol":"CamelCaseMultiPartParser","correct":"from djangorestframework_camel_case.parser import CamelCaseMultiPartParser"},{"note":"Optional: For automatic conversion of query parameters.","symbol":"CamelCaseMiddleWare","correct":"from djangorestframework_camel_case.middleware import CamelCaseMiddleWare"}],"quickstart":{"code":"import os\n\n# In your Django settings.py file\nREST_FRAMEWORK = {\n    'DEFAULT_RENDERER_CLASSES': [\n        'djangorestframework_camel_case.render.CamelCaseJSONRenderer',\n        'djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer', # Optional\n        'rest_framework.renderers.JSONRenderer',\n        'rest_framework.renderers.BrowsableAPIRenderer',\n    ],\n    'DEFAULT_PARSER_CLASSES': [\n        'djangorestframework_camel_case.parser.CamelCaseJSONParser',\n        'djangorestframework_camel_case.parser.CamelCaseFormParser', # Optional\n        'djangorestframework_camel_case.parser.CamelCaseMultiPartParser', # Optional\n        'rest_framework.parsers.JSONParser',\n        'rest_framework.parsers.FormParser',\n        'rest_framework.parsers.MultiPartParser',\n    ],\n}\n\n# Optionally, add middleware for query parameter conversion\n# In your Django settings.py file, in the MIDDLEWARE list\nMIDDLEWARE = [\n    # ... other middleware ...\n    'djangorestframework_camel_case.middleware.CamelCaseMiddleWare',\n    # ...\n]\n\n# Example of how you might integrate with a custom renderer (e.g., ORJSON)\n# JSON_CAMEL_CASE = {\n#     'RENDERER_CLASS': 'drf_orjson_renderer.renderers.ORJSONRenderer'\n# }\n\n# Example of customizing underscoreization for specific cases (e.g., v2Counter -> v2_counter)\n# REST_FRAMEWORK = {\n#     'JSON_UNDERSCOREIZE': {\n#         'no_underscore_before_number': True,\n#     },\n#     # ... other DRF settings ...\n# }\n\n# A basic DRF serializer example (Python snake_case)\nfrom rest_framework import serializers\n\nclass MyModelSerializer(serializers.Serializer):\n    my_field_name = serializers.CharField(max_length=100)\n    another_data_point = serializers.IntegerField()\n\n# When rendered by CamelCaseJSONRenderer, it will appear as:\n# {\n#   \"myFieldName\": \"value\",\n#   \"anotherDataPoint\": 123\n# }","lang":"python","description":"To quickly enable camel case conversion, configure the `DEFAULT_RENDERER_CLASSES` and `DEFAULT_PARSER_CLASSES` in your `settings.py` to use the provided camel case renderers and parsers. You can also add `CamelCaseMiddleWare` for query parameter conversion."},"warnings":[{"fix":"Use `json.loads(response.content)` for assertions in tests when expecting camel case output.","message":"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.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Set `REST_FRAMEWORK = {'JSON_UNDERSCOREIZE': {'no_underscore_before_number': True}}` in `settings.py` or `json_underscoreize = {'no_underscore_before_number': True}` on your parser class.","message":"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.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Configure `JSON_CAMEL_CASE = {'RENDERER_CLASS': 'your_custom_renderer_path'}` in `settings.py`.","message":"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.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Add `'drf_spectacular.contrib.djangorestframework_camel_case.camelize_serializer_fields'` to `POSTPROCESSING_HOOKS` in your `SPECTACULAR_SETTINGS`.","message":"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`.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-14T00:00:00.000Z","next_check":"2026-07-13T00:00:00.000Z"}