- DjangoにあるCreateViewの使い方とは?
- 投稿画面のページを作るには?
本記事ではこのような疑問を解決します。
Djangoではビュー(views.py)を記述する際に、「汎用ビュー」と呼ばれるものがあらかじめ用意されています。
汎用ビューとはクラスベースで作られた”キット”のようなものです。
汎用ビューは目的に応じていくつか用意されていますが、
今回はその汎用ビューの中から「CreateView」の使い方について解説していきます。
手順は簡単3ステップです!
CreateViewとは?
CreateViewとはデータの作成をする際に用いられるクラスベースビューです。
例えば、記事や写真を投稿したり、会員登録をしたりするページで使われます。
このような投稿機能や会員登録機能は多くのWebページで実装されているため、
クラスベースビューでのDjango開発ではCreateViewの使用頻度はとても高いです。
CreateViewの使い方
最初にCreateViewの使い方について全体の流れを確認しましょう。
①URLの設定をする
②クラスベースビューで処理を記述する
③テンプレートを作成する
※models.pyのマイグレートは完了済みであることが前提
なお、本記事では以下のモデル(models.py)を使用します。
from django.db import models
CATEGORY = (('北海道', '北海道'), ('東北', '東北'), ('関東', '関東'), ('中部', '中部'), ('近畿', '近畿'), ('中国', '中国'), ('四国', '四国'), ('九州', '九州'), ('沖縄', '沖縄'))
class FruitsModel(models.Model):
name = models.CharField(max_length=100)
producing_area = models.CharField(max_length=50, choices=CATEGORY)
さらにFruitsModelテーブルには、以下のようなレコードを入れることとします。
「name:りんご, producing_area:東北」
「name:みかん, producing_area:近畿」
「name:ぶどう, producing_area:中部」
そして、CreateViewを使った投稿ページを作成するにあたり、下の記事内で扱ったlist.htmlを一覧ページとして使用していきます。
DjangoにあるListViewの使い方とは?データの一覧ページを作るには? 本記事ではこのような疑問を解決します。Djangoではビュー(views.py)を記述する際に、「汎用ビュー」と呼ばれるものがあらかじめ用意されています[…]
それでは具体的な手順を次から見ていきましょう。
①URLの設定をする
まずはurls.pyにてURLの設定を行います。
ここではurls.pyに以下のような記述をします。
from django.urls import path
from .views import FruitsListView, FruitsCreateView
urlpatterns = [
path('list/', FruitsListView.as_view(), name="list"),
path('create/', FruitsCreateView.as_view(), name="create"),
]
②クラスベースビューで処理を記述する
次にviews.pyにてクラスベースビューで処理を記述していきます。
ここではviews.pyに以下のような記述をします。
from django.shortcuts import render
from .models import FruitsModel
from django.views.generic import ListView, CreateView
from django.urls import reverse_lazy
class FruitsListView(ListView):
template_name = 'list.html'
model = FruitsModel
class FruitsCreateView(CreateView):
template_name = 'create.html'
model = FruitsModel
fields = '__all__'
success_url = reverse_lazy('list')
template_nameには表示するHTMLファイルを指定し、modelにはデータを作成するモデルテーブルを指定します。
なお、fieldsはユーザーが投稿画面で入力する項目(フィールド)を指定するものです。
ここではすべての項目を入力させるため、’__all__’としています。
また、success_urlは投稿完了時に遷移するページを指定するものです。
ここでは投稿完了時に一覧ページ(list.html)に自動で切り替わるようにしています。
③テンプレートを作成する
最後にテンプレートを作成します。
ここではテンプレート(create.html)に以下のような記述をします。
<!DOCTYPE html>
<html>
<head></head>
<body>
<form action="" method="POST">{% csrf_token %}
{{ form.as_p }}
<button type="submit">フルーツを追加する</button>
</form>
</body>
</html>
{% %}はテンプレートタグと呼ばれ、{{ }}はテンプレート変数と呼ばれます。
{% %}には主にユーザー画面に表示させないPythonの処理を記述し、
{{ }}には主にユーザー画面に表示させるデータを記述します。
さらに、{{ form.as_p }}を記述することで自動で入力フォームが生成されます。
{{ form }}で入力フォームが生成され、
as_pをつけることで<p>タグとしてテンプレート上に出力するという意味です。
最後にサーバーを起動して画面を確認してみよう!
これまでのステップが完了したら、runserverコマンドでサーバーを起動して画面を確認してみましょう。
※今回はCSSやJavaScriptでの装飾は考慮外のため、白黒テキストのみ
まずは一覧ページ(list.html)に3つのデータが表示されていることを確認します。
↓↓↓
次に投稿ページ(create.html)で試しに1つ以下の内容で投稿してみます。
↓↓↓
投稿が完了すると、一覧ページ(list.html)で新しくデータが投稿されていることが確認できます。
↓↓↓
以上CreateViewを使うと、Webページにおいてデータの作成(投稿)をすることができます。
なお、テンプレートは見やすいようにHTML・CSSファイルを好きなようにアレンジしてみてください!
ListViewの使い方はこちら↓
DjangoにあるListViewの使い方とは?データの一覧ページを作るには? 本記事ではこのような疑問を解決します。Djangoではビュー(views.py)を記述する際に、「汎用ビュー」と呼ばれるものがあらかじめ用意されています[…]
DetailViewの使い方はこちら↓
DjangoにあるDetailViewの使い方とは?詳細ページを作るには? 本記事ではこのような疑問を解決します。Djangoではビュー(views.py)を記述する際に、「汎用ビュー」と呼ばれるものがあらかじめ用意されています。汎[…]
LoginViewの使い方はこちら↓
Djangoでログイン機能を実装するには?LoginViewの使い方とは? 本記事ではこのような疑問を解決します。Django開発に限らずログイン機能はWebアプリケーションにおいて頻繁に実装される機能です。そんなログイン機能をDj[…]
LogoutViewの使い方はこちら↓
Djangoでログアウト機能を実装するには?LogoutViewの使い方とは? 本記事ではこのような疑問を解決します。Django開発に限らずログアウト機能はWebアプリケーションにおいて頻繁に実装される機能です。そんなログアウト機[…]