Django CRUDアプリケーション

スポンサーリンク

この記事では、Django の CRUD アプリケーションがどのように構成されているかを知り、その後、自分自身の CRUD アプリケーションを作成します。

スポンサーリンク

Django CRUD アプリケーションって何?

CRUD アプリケーションとは、CRUD-Create, Retrieve, Update, Delete 操作を扱う Web サイトのことです。

  CRUD アプリケーションの典型的な例は、学生データアプリケーションです。

このようなアプリケーションでは、以下のことが可能です。

  • 新しい学生データの追加/作成
  • 現在の生徒のデータを取得する
  • すでにある生徒のデータの更新/編集
  • 生徒データの削除

以下、それぞれの操作について説明します。

CRUD
CRUD
  • 作成。作成: データベースに新しい項目を作成、追加する
  • Retrieve: データベースからエントリ/エントリを取得する
  • Update: データベースの特定のエントリを更新する
  • Delete:削除 データベースから特定のエントリーを削除する

Django で独自の CRUD アプリケーションを作成する

それでは、簡単な学生データ CRUD アプリケーションを作ってみましょう。

1. モデルテーブルの作成

データを格納するために、Django のモデルを作成する必要があります。

したがって、以下のモデルをファイルに追加してください。

class StudentModel(models.Model):
    id = models.IntegerField(primary_key = True)
    student_name = models.CharField(max_length=80)
    rollnumber = models.CharField(max_length=10)
    student_class = models.IntegerField()
    student_age = models.IntegerField()
 
    def __str__(self):
        return f"{self.student_name} : {self.rollnumber}"

2. モデルフォームの作成

また、モデルフィールドをユーザーに表示するために、モデルフォームが必要です。

class StudentForm(forms.ModelForm):
    class Meta:
        model = StudentModel
        fields = ('id','student_name','rollnumber','student_class','student_age')

3. ビューの作成

Views.py で “CreateView” というビューを作成し、以下のコードを追加します。

from .models import StudentModel
from .forms import StudentForm
from django.shortcuts import render,redirect
 
def CreateView(request):
    if request.method == 'POST':
        form = StudentForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/data')
    else:
        form =StudentForm()
        context = {
            'form':form
        }
        return render(request,'create.html',context)

テンプレート “create.html “は、以下のようになります。

<form method = "post">
    {% csrf_token %}
    {{form.as_p}}
    <input type = "submit" value = "submit">
</form>

ビューのURLパスは以下のようになります。

path('data/create', CreateView),

4. リトリーブビューのコード化

さて、取得操作では、2つの方法が考えられます。

  • 全てのデータ一覧を表示する (Django List View)
  • 特定のデータのみを表示する (Django Detail View)

したがって、以下の両方の View を views.py ファイルに追加してください。

from django.shortcuts import render,redirect
from .models import StudentModel
from .forms import StudentForm
 
def Retrieve_ListView(request):
    dataset = StudentModel.objects.all()
    return render(request,'listview.html',{'dataset':dataset})
 
def Retrieve_DetailView(request,_id):
    try:
        data =StudentModel.objects.get(id =_id)
    except StudentModel.DoesNotExist:
        raise Http404('Data does not exist')
 
    return render(request,'detailview.html',{'data':data})

対応する ListView のテンプレートは以下のようになります。

{% for data in dataset %}
{{data}}
<hr>
{% endfor %}

対応する DetailView のテンプレートは以下の通りです。

<h3>Name:{{data.student_name}}</h3><br>
<h3>Roll Number:{{data.rollnumber}}</h3><br>
<h3>Class:{{data.student_class}}</h3><br>
<h3>Age:{{data.student_age}}</h3><br>
<hr/>

対応するViewsのURLパスは以下の通りです。

path('data/', Retrieve_ListView),
path('data/<int:_id>',Retrieve_DetailView),

5. アップデートビューの作成

次の Update View を views.py ファイルに追加します。

from django.shortcuts import render,redirect,get_object_or_404
from .models import StudentModel
from .forms import StudentForm
 
def UpdateView(request,_id):
    try:
        old_data = get_object_or_404(StudentModel,id =_id)
    except Exception:
        raise Http404('Does Not Exist')
 
    if request.method =='POST':
        form =StudentForm(request.POST, instance =old_data)
 
        if form.is_valid():
            form.save()
            return redirect(f'/data/{_id}')
     
    else:
 
        form = StudentForm(instance = old_data)
        context ={
            'form':form
        }
        return render(request,'update.html',context)

対応するupdate.htmlテンプレートは、以下のようになります。

<form method="post">
    {% csrf_token %}
    {{form.as_p}}
    <input type="submit" value = "Update">
</form>

このビューの URL パスは次のようになります。

path('data/<int:_id>/update', UpdateView),

6. Delete View のコード化

Delete View を views.py ファイルに追加します。

>に追加します。

対応するdelete.htmlは以下のようになります。

def DeleteView(request,_id):
    try:
        data = get_object_or_404(StudentModel,id =_id)
    except Exception:
        raise Http404('Does Not Exist')
 
    if request.method == 'POST':
        data.delete()
        return redirect('/data')
    else:
        return render(request, 'delete.html')

View の URL パスは以下のようになります。

<form method="post">
    {% csrf_token %}
    Click YES to confirm
    <input type = "submit" value="YES">
    <a href='/data'>Cancel</a>
</form>

Student’s App の実装

コーディングはここまでです。

では、サーバーを起動して、”/data/create” エンドポイントにアクセスしましょう。

path('data/<int:_id>/delete', DeleteView),

submitを押すと、生徒のリストが表示される”/data “ページに到達します。

Create
Create

次に、”/data/1″ エンドポイントを試してみましょう。

Retrieve List View
Retrieve List View

それでは、最初のエントリーを更新してみましょう。

“/data/1/update “にアクセスしてください。

Retrieve Detail View
Retrieve Detail View

いくつかの変更を加え、更新を押すと、特定の学生の詳細表示ページにリダイレクトされます。

最後に、最初の学生を削除してみましょう。

“/data/1/delete “にアクセスします。

Update
Update

YESを押して確認すると、特定の生徒のデータがDBから削除されます。

結論

以上、コーダーの皆さん! これは CRUD アプリケーションについてのすべてでした。

CRUD アプリケーションの REST API バージョンである Django REST API チュートリアルをチェックしてみてください。

次の記事でお会いしましょう! それまでは、コーディングを続けてください!

タイトルとURLをコピーしました