Djangoの関数ベースビューでよく見かける
render / redirect / HttpResponse の3つ。
公式サイトに沿って、それぞれ3つを理解し、
自分なりに噛み砕いた説明をしていきます。
それぞれの違いを比較
3つそれぞれの違いを簡単に説明。
- HttpResponse
文字列の情報を渡す、ファイルを表示、ダウンロードなど様々なことができる。
テンプレート(HTML)の表示もできるが、手間がかかるため、不向き。
下記のrenderはこれのショートカット関数。 - render
関数ベースビューで一番多用される。
テンプレート単体や文字列を反映したテンプレートを簡単に表示できる。
ファイルの表示などには不向き。 - redirect
webページに来たユーザを別のURLに転送する。
サイトの表示用ではない。
HttpResponseの使い方
主な機能として4つあります。
これらは全て公式サイトを参照しています。
文字列をWebページに引き渡す
よく使われる機能。
HttpResponse() の中に文字列を入れて、Webページに表示させる。
def sample(request):
return HttpResponse("Hello, World!")
イテレータを引き渡す
イテレータがややこしいですが、簡単に言うとデータの集団に対し
順番にアクセスしていくためのオブジェクト。
そのオブジェクトをwebページに渡す機能。
イテレータに関してはこちらのサイトが分かりやすかったです。
この機能はあまりHttpResponseを使用して使わない。
ヘッダーフィールドを設定する
これはあまり使わない。
サイト訪問時、画面には出ないが、訪問情報として
持っているヘッダーフィールドを設定・変更できる。
例を書きます。辞書型でヘッダーフィールドを設定します。
response = HttpResponse()
response['Pragma'] = 'no-cache'
ファイルをブラウザーで表示できる
pdfやcsv、エクセル、pngなどの複数の形式の中から
選択した形式でデータを表示できる。
content-type = ‘***’の形で選択します。
***の部分と形式の種類はここを参考にするといいです。
#csvをダウンロードさせる場合
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
return response
#エクセルをダウンロードさせる場合
response = HttpResponse(my_data, content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename="somefilename.xls"'
return response
renderの使い方
関数ベースビューならこれを多用する。
HttpResponseの特定の機能を盛り込んだショートカット関数です。
HttpResponseではテンプレートを表示する際に
Django.templateモジュールのloaderなどを
引っ張ってくる必要がありますが、
renderでは第2引数でテンプレートを表示でき
第3引数で文字列などのデータを渡すことができます。
def sample(request):
context = {'sample':'この文字を引き渡す'}
return render(request, sample.html, context)
公式サイトの render はこちらです。
redirectの使い方
読み方通りのリダイレクトであり
Webページに来たユーザを別のURLに転送する。
例えば
フォーム入力が完了した際に元のページに戻る際に使われたり
今までのURLを残したまま、リニューアルしたURLへ転送する時に使われる。
(URLでお気に入り登録したユーザなどが混乱しないように)
redirectには3つの特徴があります。
- 転送先は、絶対URLか相対URL、urls.pyのview名で設定できる
def rel(request):
return redirect('/some/url/') #相対URL
def abs(request):
return redirect('https://example.com/') #直接URL
def name(request):
return redirect('viewname') #view名
- view名で設定した場合、引数も付属してリダイレクトすることができる
def name(request):
...
return redirect('viewname', hoge='hoge')
- モデルのidやuuidを使ったURLを使いたい場合
models.pyのget_absolute_url()にも対応している
以上です。公式サイトはこちらです。
まとめ
関数ベースビューでは、主に”render”を使用し
ファイルを表示するなどの場合は”HttpResponse”を使います。
”redirect”は転送したい場合になります。
ざっくりこの3行だけ覚えておけばどうにかなるかと。
最後に
djangoをより学びたい場合の関連記事です。
djangoをレベル別で書籍を使用し、順序よく学びたい方におすすめの本を紹介している記事です。
djangoを初めて学ぶ初学の方から、基礎を学び終えた初級の方、アプリを作った・作っている中級の方の3種のレベルに分けておすすめの本を紹介しています。
また、動画で学びたい方はこちらの記事をおすすめします。
djangoをこれから学ぶ方から、アプリ開発したいけどやり方がわからない!って方におすすめです。
Udemyでおすすめな厳選django動画教材を紹介します。