【データの取得を行うメソッド】


1. **get(self, request, *args, **kwargs)**

テンプレートからGETメソッドで送られてきたときに処理を行う。表示のためのメソッド

 # 複数取得
   def get(self, request):
       items = Item.objects.all()
       return render(request, 'item_list.html', {'items': items})

 # 1つ取得
   def get(self, request, pk):
       item = Item.objects.get(pk=pk)
       return render(request, 'item_detail.html', {'item': item})



データベースから値を取得するメソッド(2つ)


2. **get_queryset(self)**
データベースから複数の値を取得することが主な使い方。modelとしかやり取りしないのが基本。

単数の特定の値を処理するときは下記のget_objectメソッドで処理する。

 

使う場面: 一覧表示などで、複数のオブジェクトを扱う場合。

データの取得方法:全体のリストや条件に基づいたフィルタリングを行います。

   def get_queryset(self):
       return Item.objects.filter(category='books') 


3. **get_object(self, queryset=None)**

データベースから1つの特定の値を取得することが主な使い方。modelとしかやり取りしないのが基本。

複数の特定の値を処理するときは上記のget_querysetメソッドで処理する。

 

使う場面: 詳細表示、更新、削除の際に特定のオブジェクトを扱う場合。

データの取得方法get_object はURLの pk (プライムキー:DBの一意なキー、主にID)を使って特定のオブジェクトを取得。

一致するデータがなければ自動で404エラーを出してくれる

 


   def get_object(self, queryset=None):
       obj = super().get_object(queryset)
       return obj


【データの送信・処理を行うメソッド】

1. **post(self, request, *args, **kwargs)**
テンプレートからフォームで送られてきたデータを処理する

   def post(self, request):
       form = ItemForm(request.POST)
       if form.is_valid():
           form.save()
           return redirect('item_list')
       return render(request, 'item_form.html', {'form': form})



2. **form_valid(self, form)**
フォームのバリエーションチェックを通過した時の処理を行う


   def form_valid(self, form):
       form.save()
       return super().form_valid(form)
 

3. **form_invalid(self, form)**
   - フォームが間違っているときの処理を行います。

   ```python
   def form_invalid(self, form):
       return self.render_to_response(self.get_context_data(form=form))
   ```

### データの削除

1. **delete(self, request, *args, **kwargs)**
   - データを削除するときに使います。

   ```python
   def delete(self, request, *args, **kwargs):
       item = self.get_object()
       item.delete()
       return redirect('item_list')
   ```

### 共通の処理や追加情報

1. **dispatch(self, request, *args, **kwargs)**
   - リクエストを処理する前の共通の処理を行います。

   ```python
   def dispatch(self, request, *args, **kwargs):
       if not request.user.is_authenticated:
           return redirect('login')
       return super().dispatch(request, *args, **kwargs)
   ```

2. **get_context_data(self, **kwargs)**
   - テンプレートに渡す追加のデータを設定します。

   ```python
   def get_context_data(self, **kwargs):
       context = super().get_context_data(**kwargs)
       context['page_title'] = '商品一覧'
       return context
   ```

3. **get_success_url(self)**
   - 処理が成功した後のリダイレクト先を指定します。

   ```python
   def get_success_url(self):
       return reverse('item_list')
   ```

これらのメソッドを使うと、Djangoでの基本的な操作を効率的に実装できます。組み合わせて使うことが多いので、それぞれの役割を覚えておくと便利です。