Package: djangorestframework-camel-case
Django REST Framework JSON CamelCaseCamel case JSON support for Django REST framework.InstallationAt the command line:$ pip install djangorestframework-camel-caseAdd 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 RendererBy default the package usesrest_framework.renderers.JSONRenderer. If you want
to use another renderer, the two possible are:drf_orjson_renderer.renderers.ORJSONRendererorrest_framework.renderers.UnicodeJSONRendererfor DRF < 3.0,specify it in your django
settings file.# ...JSON_CAMEL_CASE={'RENDERER_CLASS':'drf_orjson_renderer.renderers.ORJSONRenderer'}# ...Underscoreize OptionsNo Underscore Before NumberAs raised inthis commentthere 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_bar2By 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 settingjson_underscoreize:fromdjangorestframework_camel_case.parserimportCamelCaseJSONParserfromrest_framework.genericsimportCreateAPIViewclassNoUnderscoreBeforeNumberCamelCaseJSONParser(CamelCaseJSONParser):json_underscoreize={'no_underscore_before_number':True}classMyView(CreateAPIView):queryset=MyModel.objects.all()serializer_class=MySerializerparser_classes=(NoUnderscoreBeforeNumberCamelCaseJSONParser,)Ignore FieldsYou 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",),# ...},# ...}Themy_keyfield would not have its data changed:{"myKey":{"do_not_change":1}}Ignore KeysYou can also specify keys which shouldnotbe 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",),# ...},# ...}Theunchanging_keyfield would not be renamed:{"unchanging_key":{"changeMe":1}}ignore_keys and ignore_fields can be applied to the same key if required.Running TestsTo run the current test suite, execute the following from the root of he project:$ python -m unittest discoverLicenseFree software: BSD licenseHistory1.4.2 (2023-02-13)Middleware to underscorize query params #1231.4.1 (2023-02-13)ORJSONRenderer #1241.4.0 (2023-02-09)Merge pull request #110Merge pull request #119Merge pull request #122Merge pull request #931.3.0 (2021-11-14)Merge pull request #104Merge pull request #99Merge pull request #100Merge pull request #90Merge pull request #92added ignore_keys1.2.0 (2020-06-16)added ignore_fieldsMerge pull request #88Merge pull request #84Merge pull request #77Merge pull request #731.1.2 (2019-10-22)Merge pull request #63Merge pull request #70Merge pull request #711.1.1 (2019-09-09)Add json_underscoreize as CamelCaseJSONParser class attribute #441.1.0 (2019-09-09)Long awaited stable release:Changes can be viewed:https://github.com/vbabiy/djangorestframework-camel-case/compare/e6db468…39ae6bb0.1.0 (2013-12-20)First release on PyPI.