[Django] Http Headerを取得、追加する方法

Djangoでリクエストヘッダやレスポンスヘッダを操作する方法のご紹介

基本

リクエストヘッダはHttpRequestMETA属性、レスポンスヘッダの内容はHttpResponseから辞書と同じ書法で設定、取得できます。

response = HttpResponse()

# レスポンスヘッダの内容を設定する
response['Content-Language'] = 'content="ja"'

# レスポンスヘッダの内容を削除する
del response['X-PHP']

# レスポンスヘッダの内容を取得する
response['Content-Language'] # 'content="ja"'

関数ベースの場合

from django.shortcut import render

def your_view(request):
    template_name = "sample.html"
    request.META['HTTP_USER_AGENT'] # ex.)ユーザーエージェント
    response = render(request, template_name)
    return response

第一引数にうけとるのがHttpRequestオブジェクトなのでこれのMETA属性に辞書としてアクセスすればリクエストヘッダを確認できます。

render関数の戻り値が、HttpResponseオブジェクトなのでこれに対して辞書みたいに操作すれば、レスポンスヘッダを追加削除できます。

クラスベースの場合

クラスベースの場合は、リクエストヘッダの方はメソッド内でself.request.METAで簡単にアクセスできますが、レスポンスヘッダの方は、get, post, put, patch, delete, head, options, traceなどそれぞれのHttpメソッドに対応するメソッドの戻り値として返ってくるのでそれぞれのメソッドをオーバーライドして親クラスのメソッドの戻り値を操作することになると思います。

すべてのHttpメソッドで同じようにヘッダーを操作するのであればdispatchメソッドをオーバーライドして操作することができます。

from django.views.generic imprt TemplateView
class YourView(TemplateView):
    template_name = "sample.html"
    
    def dispatch(self, request, *args, **kwargs):
        response = super().dispatch(self, request, *args, **kwargs)
        response['Content-Language'] = 'content="ja"'
        return response