[Django] Http Headerを取得、追加する方法
Djangoでリクエストヘッダやレスポンスヘッダを操作する方法のご紹介
基本
リクエストヘッダはHttpRequest
のMETA
属性、レスポンスヘッダの内容は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