見出し画像

Django4の説明13:マイページの作成


0.前提

今回は、会員の投稿した一覧を表示します。
自分のページは常にあります。これがまず基本になります。

  1. ナビゲーションにマイページのリンク設定

  2. マイページのURLパターンの設定

  3. マイページのビューの作成

  4. マイページのテンプレートの作成

  5. 確認

  6. まとめ

1.ナビゲーションにマイページのリンク設定

/code/photo/templates/base.html 編集画面

2.マイページのURLパターンの設定

/code/photo/urls.py 編集画面

3.マイページのビューの作成

3.1./code/photo/views.py

以下はコードの概要です:

  1. インポート: Djangoフレームワークの特定のモジュールから必要な要素をインポートしています。これらは、ビュー(views)、モデル(models)、フォーム(forms)、デコレーター(decorators)、URLリバース(reverse)、ログイン要求(login_required)などの機能を提供します。

  2. ビューの定義: ウェブアプリケーションのページごとに異なる機能を提供するためのビュー(views)が定義されています。

    • IndexView: 前回までに説明済み

    • CreatePhotoView: 前回までに説明済み

    • PostSuccessView: 前回までに説明済み

    • CategoryView: 前回までに説明済み

    • UserView: 前回までに説明済み

    • DetailView: 前回までに説明済み

    • MypageView: ユーザーごとのマイページを表示するためのビュー。ログインユーザーの投稿を表示し、ページネーションも実装しています。

  3. 各ビューのアトリビュート: 各ビュークラス内で、テンプレート名、使用するモデル、クエリセット、フォームクラス、成功時のリダイレクト先などのアトリビュートが定義されています。

  4. 各ビューのメソッド: 各ビュークラス内で、特定の動作を実行するためのメソッドが定義されています。例えば、フォームのバリデーションを通過した後に実行されるform_valid()メソッドや、特定の条件でデータベースからデータを取得するget_queryset()メソッドなどがあります。

このコードは、Djangoのクラスベースのビューを使用して、さまざまなページをレンダリングし、ユーザーが写真を投稿し、閲覧できるウェブアプリケーションを構築するためのものです。

3.2.MypageViewの機能と属性

  1. テンプレートの指定:

    • template_name: マイページの内容を表示するためのテンプレートが指定されています。このテンプレートは、ユーザーの投稿を表示するために使用されます。

  2. ページネーション:

    • paginate_by: 1ページに表示するレコードの件数が設定されています。これにより、ユーザーの投稿が複数のページに分割されて表示されます。

  3. get_queryset()メソッド:

    • get_queryset()は、ビューが表示するべきクエリセットを返すためのメソッドです。この場合、ログインしているユーザーの投稿を取得するためのクエリが実行されます。

    • 現在ログインしているユーザーの情報はself.request.userに格納されています。このユーザーに関連する投稿を取得するために、PhotoPost.objects.filter(user=self.request.user)が使用されています。

    • データベースから取得された投稿は、posted_at(投稿日時)の降順で並べ替えられています。

  4. ページのレンダリング:

    • MypageViewは、指定されたテンプレートに取得したユーザーの投稿データを渡して、それをレンダリングします。ユーザーはページネーションにより、複数のページに分割された投稿を閲覧できます。

  5. 検索結果の表示:

    • MypageViewは、ログインユーザーが投稿した写真の一覧を提供します。これにより、ユーザーは自分の投稿した写真を見ることができます。

このビューは、DjangoのListViewを使用して、特定のユーザーに関連するデータを取得し、マイページとして表示するためのものです。ログインユーザーのコンテンツを表示する際に活用されます。

4.マイページのテンプレートの作成

/code/photo/templates/mypage.html
以下はコードの機能の要約です:

  • {% extends 'base.html' %}: 'base.html'というベーステンプレートを拡張しています。これは他のテンプレートファイルで共通の部分を定義するために使用されます。

  • {% block title %}Mypage{% endblock %}: ページタイトルを'Mypage'に設定しています。これはベーステンプレート内の{% block title %}で指定された場所に挿入されます。

  • {% block contents %}から{% endblock %}: ページのコンテンツを定義しています。このセクションには以下が含まれています:

    • ユーザーがログインしている場合にのみ表示される部分。

      • ユーザー名と投稿件数を表示し、投稿がない場合はその旨を表示します。

      • 投稿するためのリンクを提供します。

    • "photos_list.html"というテンプレートファイルを読み込んで表示します。

    • "pagination.html"というテンプレートファイルを読み込んで表示します。おそらく、ページネーション(ページ分割)のためのものです。

このコードの目的は、ユーザーのマイページを表示し、そのユーザーが行った投稿一覧を表示することです。

5.確認

遷移確認画面

6.まとめ

基本的な手順を理解していただけると、スムーズにDjangoの方法が簡単にできます。
ただし、基本的なものです。
更にセキュリティなどを強化する際は、更なるDjangoのフレームワークを知っておく必要があります。
次回は投稿した記事を削除します。


この記事が気に入ったらサポートをしてみませんか?