はじめに
ここでは、djangoの関数ベースビューの基本について解説していきます。
アプリケーションディレクトリ下のviews.py
に書いていきます。
モデルとしてmodels.py
のSampleModel
を利用するものとします。
リストページ用のビュー関数
ブログの記事一覧ページなど、複数のレコードを一覧表示するページに使える関数です。
from django.shortcuts import render
from .models import SampleModel
def list_func(request):
object_list = SampleModel.objects.all()
context = {'object_list': object_list}
return render(request, 'app/app_list.html', context)
object_list
は、表示対象とするモデルに含まれる全てのレコードのリストです。
context
では、テンプレートとなるHTMLファイルに変数を埋め込むときの変数名と、この関数内での変数名との対応関係を示す辞書です。
そして最後のrender
関数に、テンプレートとなるHTMLファイルと、上で触れたcontext
を明示します(第一引数はrequest
になります)。
新規作成ページ用のビュー関数
ブログの新規記事の作成など、新しいレコードを作成するページに使える関数です。
from django.shortcuts import render, redirect
from .models import SampleModel
def create_func(request):
if request.method == 'POST':
object = SampleModel.objects.create(
title = request.POST['title'],
text = request.POST['text']
)
object.save()
return redirect('app_list')
else:
return render(request, 'app/app_create.html')
まず、if request.method == 'POST'
のところで、POST送信されたときの処理を記述しています。
Model.objects.create
メソッドで、POST送信されたrequest内容に従って新しいレコード(ここではobject
)を作成し、save()
メソッドでデータベースに登録します。
データベースへの書き込みに成功したら、redirect()
で指定したページへ遷移します。
POST
ではなくGET
でページが呼び出された場合(普通にURLを打ち込んでアクセスされた場合など)は、render()
で指定したテンプレートHTMLファイルが呼び出されます。
詳細ページ用のビュー関数
ブログの記事の個別ページなど、レコードの詳細を表示するページに使える関数です。
from django.shortcuts import render
from .models import SampleModel
def detail_func(request, pk):
object = SampleModel.objects.get(pk=pk)
context = {'object': object}
return render(request, 'app/detail.html', context)
object
は、モデルに登録されているレコードから、該当するレコードを抽出してきたものになります(pk
はprimary key)。
object
に関連する情報を、テンプレートHTMLファイルの変数に埋め込んで表示します。
編集ページ用のビュー関数
ブログの記事の編集画面など、一度作成したレコード内容を更新するページに使える関数です。
from django.shortcuts import render, redirect
from .models import SampleModel
def update_func(request, pk):
object = SampleModel.objects.get(pk=pk)
context = {'object': object}
if request.method == 'POST':
object.title = request.POST['title']
object.text = request.POST['text']
object.save()
else:
return render(request, 'app/app_update.html', context)
上で紹介したビューと同様に、object
で対象レコードを指定し、context
でHTMLテンプレートファイルに埋め込む変数名を明示します。
更新内容がPOST送信されたときは、各フィールドの内容をデータベースに上書きします。
削除ページ用のビュー関数
ブログの記事の削除画面など、作成したレコードを削除するページに使える関数です。
from django.shortcuts import render, redirect
from .models import SampleModel
def delete_func(request, pk):
object = SampleModel.objects.filter(pk=pk)
context = {'object': object}
if request.method == 'POST':
object.delete()
return redirect('app:app_list')
else:
return render(request, 'app/app_delete.html', context)
object
とcontext
は、上で紹介したビューと同様です。
delete
メソッドで、データベースからレコードを消去します。
まとめ
ここでは、djangoの関数ベースビューの基本について紹介しました。
次回は、urls.pyについて解説する予定です。