Djangoメモ(29) : migrateでモデルに閲覧数カウント用のフィールドを追加
- モデルにフィールド追加
- migrateコマンド実行
- ビュー、テンプレートの変更
- まとめ
A Complete Beginner's Guide to Djangoのチュートリアルを参考にモデルに閲覧数カウント用のフィールドを追加してみる。
モデルにフィールド追加
migrate
コマンドを使ってTopicモデルに閲覧数カウント用のviewsフィールドを追加してみる。
作業を進める前に適用していないマイグレーションがないか確認しておく。No migrations to apply
となればよい。
$ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, boards, contenttypes, sessions Running migrations: No migrations to apply.続きを読む
Djangoメモ(28) : QuerySet API(count, annotate)で個数のカウント
- 対話型シェルで確認
- モデル、テンプレートの実装
- annotate()
- まとめ
A Complete Beginner's Guide to Djangoのチュートリアルを参考にQuerySet APIを使ってみる。
対話型シェルで確認
チュートリアルに沿って掲示板アプリを作成しているが、今回はQuerySet APIを使用してPost、Topicの個数、最後のPostに関する情報を表示してみる。
最初に、オブジェクトをわかりやすく表示するためにboards/models.py
の各モデルに__str__
を定義しておく。
Truncator
は文字列を切り詰めることができるクラス。
from django.db import models from django.utils.text import Truncator class Board(models.Model): # ... def __str__(self): return self.name class Topic(models.Model): # ... def __str__(self): return self.subject class Post(models.Model): # ... def __str__(self): truncated_message = Truncator(self.message) return truncated_message.chars(30)続きを読む
Djangoメモ(27) : 掲示板アプリの返信機能を実装する
- 返信一覧ページの作成
- 返信一覧ページのテスト
- 返信一覧の表示
- 返信フォーム作成
- 返信機能のテスト
- まとめ
A Complete Beginner's Guide to Djangoのチュートリアルを参考に掲示板アプリの返信機能を実装する。
返信一覧ページの作成
このチュートリアルで作成している掲示板アプリには以下のモデルがある。
- Board : カテゴリのようなもの(例:"Python"に関するBoard)
- Topic : スレッドのようなもの(例:"Python"Board内の"インストール方法"に関するTopic)
- Post : Topicに対する返信
これまでにBoardとTopicについては実装しているので、今回はPostに関して実装する。
最初にTopicに対するPostの一覧を表示するページのURLConfをmyproject/urls.py
に追加する。
path('boards/<int:pk>/topics/<int:topic_pk>/', views.topic_posts, name='topic_posts'),
pk
はBoardに対するプライマリキーでtopic_pk
はTopicに対するプライマリキー。
続いてtopic_posts
をboards/views.py
に追加する。
from django.shortcuts import get_object_or_404, render from .models import Topic def topic_posts(request, pk, topic_pk): topic = get_object_or_404(Topic, board__pk=pk, pk=topic_pk) return render(request, 'topic_posts.html', {'topic': topic})続きを読む
Djangoメモ(26) : coverage.pyでカバレッジ(網羅率)を計測
- coverage.pyのインストール
- coverage.pyの実行方法
- coverage.pyの設定
- coverage.pyのプラグイン
- まとめ
A Complete Beginner's Guide to Djangoのチュートリアルを参考に作成している掲示板アプリのテストコードのカバレッジを計測してみる。
coverage.pyのインストール
チュートリアルでは様々なテストコードを書いているがカバレッジ(網羅率)がどの程度なのか計測してみる。
ドキュメントにはcoverage.pyの説明があるのでcoverage.pyを試してみる。
coverage.pyはpip
コマンドでインストール可能。
$ pip install coverage
今回はPipenvで環境を構築しているので下記コマンドでインストール。
$ pipenv install coverage続きを読む
Djangoメモ(25) : login_requiredデコレータでビューをログイン済みユーザーのみに制限
- login_requiredデコレータ
- ログイン後のリダイレクト先
- login_requriedのテスト
- Topic作成者としてログインユーザーを指定
- まとめ
A Complete Beginner's Guide to Djangoのチュートリアルを参考にビューをログイン済みユーザのみに制限してみる。
login_requiredデコレータ
前回まででユーザー認証機能は実装したので、新しいTopicを作成する機能をログイン済みユーザのみに制限する。
上の画像からわかるように現時点ではログインしていないユーザーでもアクセスできるようになっている。
続きを読む