Django Test Client Method Override Header Django Test Client Method Override Header python python

Django Test Client Method Override Header


You need to specify header as 'HTTP_X_HTTP_METHOD_OVERRIDE' instead of 'X_HTTP_METHOD_OVERRIDE' i.e. add HTTP_ at the beginning of the header.

header = {'HTTP_X_HTTP_METHOD_OVERRIDE': 'PUT'}response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)

From the Django documentation:

HTTP headers in the request are converted to META keys by converting all characters to uppercase, replacing any hyphens with underscores and adding an HTTP_ prefix to the name. So, for example, a header called X-Bender would be mapped to the META key HTTP_X_BENDER.


Also, you can pass headers to the constructor of the Client:

from django.test import Clientclient = Client(HTTP_USER_AGENT="Mozilla/5.0 ...", HTTP_X_USER_ID="982734")

This way every request will contain default headers.

PS: This approach is valid for DRF TestApiClient and ApiRequestFactory.