Skip to main content

No project description provided

Project description

DRF Standardized Response

Standarize your API responses

Table of Contents

Installation

  1. Install the package using pip:
pip install drf-standardized-response
  1. Add drf_standardized_response to INSTALLED_APPS
INSTALLED_APPS = [
    ...,
    "drf_standardized_response",
]
  1. Add renderer for all API views
"DEFAULT_RENDERER_CLASSES": [
    ...,
    "drf_standardized_response.renderers.StandardizedJSONRenderer",
    ...,
]

Now, your API responses will be standardized.

How It Works

The package takes care of standardization all responses returned by views.

  • if you return a string response, it will be wrapped in a message key. For example:
class MyView(APIView):
    def get(self, request):
        return Response("Thanks for using DRF Standardized Response")

The response will be:

{
    "success": true,
    "message": "Thanks for using DRF Standardized Response"
}
  • If your response data contains message, it will override the standardized message.
class MyView(APIView):
    def get(self, request):
        return Response({"message": "Thanks for using DRF Standardized Response"})

The response will be:

{
    "success": true,
    "message": "Thanks for using DRF Standardized Response"
}

  • if you return a dict response, it will be wrapped in a data key. For demostration, we will return a user profile.
class MyView(APIView):
    def get(self, request):
        user = request.user
        data = UserProfileSerializer(user).data
        return Response(data)

The response will be:

{
    "success": true,
    "message": "OK",
    "data": { # user profile },
}

  • if you return a list or tuple response, it will be wrapped in a data key. For demostration, we will return a list of user profiles.
class MyView(APIView):
    def get(self, request):
        users = User.objects.all()
        data = UserProfileSerializer(users, many=True).data
        return Response(data)

The response will be:

{
    "success": true,
    "message": "OK",
    "data": [ # list of user profiles ],
}

Customizing

Custom Wrapper Key

You can customize the key used to wrap the response data. By default, the key is data. To change it, set the DEFAULT_WRAPPER_KEY in pkg settings.

DRF_STANDARDIZED_RESPONSE = {
    "DEFAULT_WRAPPER_KEY": "results",
}

Or you can change it per view basis using the wrapper_key argument in the view:

class MyView(APIView):
    wrapper_key = "results"

Excluded Fields From Wrapping

You can exclude fields from wrapping. By default, the fields are links. To customize it, Set the DEFFAULT_WRAPPING_EXCLUDED_FIELDS in pkg settings.

DRF_STANDARDIZED_RESPONSE = {
    "DEFFAULT_WRAPPING_EXCLUDED_FIELDS": ["links", "meta"],
}

Or you can change it per view basis using the wrapping_excluded_fields argument in the view:

class MyView(APIView):
    wrapping_excluded_fields = ["links", "meta"]

Wrapping Paginated Response

By default, paginated responses are not wrapped. To customize this behavior, Set the WRAP_PAGINATED_RESPONSE in pkg settings.

DRF_STANDARDIZED_RESPONSE = {
    "WRAP_PAGINATED_RESPONSE": True,
}

Disable Standardization On View

You can disable standardization on a view by setting the should_strandardize property to False.

class MyView(APIView):
    should_strandardize = False

Custom Response Standarizer

You can also provide your own response standarizer to format response to your desired format. By default, the standarizer is drf_standardized_response.response_standarizer.ResponseStandardizer, which is well suitable for most projects.

But if you need that, set the RESPONSE_STANDARDIZER_CLASS in pkg settings.

DRF_STANDARDIZED_RESPONSE = {
    "RESPONSE_STANDARDIZER_CLASS": "your_app.response_standarizer.CustomResponseStandardizer",
}

DRF-Spectacular Integration

If you plan to use drf-spectacular to generate an OpenAPI 3 schema,

install with pip:

pip install drf-standardized-response[openapi].

After that, Set the default schema class to the one provided by the package

REST_FRAMEWORK = {
    # other settings
    "DEFAULT_SCHEMA_CLASS": "drf_standardized_response.openapi.AutoSchema"
}

Alternatively, you can use the drf_standardized_response.openapi.StandardizedAutoSchemaMixin mixin to your own schema class. (useful when using drf-standardized-errors).

Now, the OpenAPI schema will be generated with the standardized response format.

Disable Schema Standardization On Serializer

You can disable openapi schema standardization on a serializer by setting the should_standardize_schema property to False on Meta.

class MySerializer(serializers.Serializer):
    class Meta:
        should_standardize_schema = False

Contributing

Contributions are more than welcome! Please open an issue if you have any questions or suggestions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

drf_standardized_response-1.tar.gz (7.3 kB view details)

Uploaded Source

File details

Details for the file drf_standardized_response-1.tar.gz.

File metadata

  • Download URL: drf_standardized_response-1.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for drf_standardized_response-1.tar.gz
Algorithm Hash digest
SHA256 fb2b3f58013798a997df352ba4b710fcd94effa92e54b60d30543f3424e78720
MD5 50b9fbdfaf295f5944281f5f405a5d62
BLAKE2b-256 3416eaabdece2ae4e03c2a9728111dd3d9bd1251df5e18e8345c0e8d55effffb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page