関数ベースのView
関数ベースのView
DjangoのバックエンドであるViewは驚くほど簡単に書くことができます。
DjangoのViewには関数ベース(def)とクラスベース(class)の2種類存在しています。
基本的には全てのViewをクラスベースで書くべきだと思いますが、
関数ベースは作成するのがとても簡単です。
views.py
from django.shortcuts import render
def index(request):
context = {
'sample_data': 'Hello world!'
}
return render(request, 'index.html', context)
これでsample_viewの作成が完了しました。
urls.py
from django.urls import path
from . import views
app_name= sample_app
urlpatterns = [
path('', views.index, name="index"),
]
上記のようにsample_viewをurls.pyにルーティング登録したら、htmlファイルで contextデータを受け取ることができます。
templates/index.html
{{ sample_data }}
これでページに
Hello world!
と表示されます。
リクエストを分ける
関数ベースでViewを作成する場合、GETリクエストとPOSTリクエストを分けるのが良いとされています。
ここで分けるときは、純粋にIf文で分岐をかけます。
views.py
from django.shortcuts import render, redirect
from .models import Article
def index(request):
if request.method == 'POST':
# POSTの処理を書く
url = request.META['HTTP_REFERER'] #リクエスト元のURLを取得
return redirect(url)
# GETの処理
articles = Article.objects.all()
context = {
articles: articles'
}
return render(request, 'index.html', context)
これによって、POSTリクエストが送られてきた際、自動でリクエスト元のページにリダイレクトし、GETリクエストの場合は、models.pyで作成したArticleのデータのクエリセット を返すViewが完成しました。
Viewの作成に向けて
これで少し気づいたかもしれませんが、Viewを関数ベースで作り込んでいくと、コードが段々と冗長に長くなってきます。
本来であれば、POSTリクエストの処理とGETリクエストの処理を分ける方が良いですし、
プログラムは、関数に分けて管理した方が楽です。
コードの運用面においてもクラスベースで実装を進めた方が良いので、次章からクラスベースのViewの書き方を見ていきましょう。
処理が一つだけの場合、関数ベースの方が楽な場合もあります。
ケースバイケースに書き分けていけると良いでしょう。
Just Python フリープラン
ジャスパイなら教材は全て無料!