Skip to content

# Altering the Response

Sometimes you'll want to change the response just before it gets served, for example, to add a header or alter a cookie.

To do this, simply declare a function parameter with a type of `HttpResponse`:

    from django.http import HttpRequest, HttpResponse

    @api.get("/cookie/")
    def feed_cookiemonster(request: HttpRequest, response: HttpResponse):
        # Set a cookie.
        response.set_cookie("cookie", "delicious")
        # Set a header.
        response["X-Cookiemonster"] = "blue"
        return {"cookiemonster_happy": True}

## Temporal response object

This response object is used for the base of all responses built by Django Ninja, including error responses. This object is not used if a Django `HttpResponse` object is returned directly by an operation.

Obviously this response object won't contain the content yet, but it does have the `content_type` set (but you probably don't want to be changing it).

The `status_code` will get overridden depending on the return value (200 by default, or the status code if a two-part tuple is returned).

## Changing the base response object

You can alter this temporal response object by overriding the `NinjaAPI.create_temporal_response` method.

        def create_temporal_response(self, request: HttpRequest) -> HttpResponse:
            response = super().create_temporal_response(request)
            # Do your magic here...
            return response