もた日記

くだらないことを真面目にやる

Djangoメモ(29) : migrateでモデルに閲覧数カウント用のフィールドを追加

  • モデルにフィールド追加
  • migrateコマンド実行
  • ビュー、テンプレートの変更
  • まとめ

Python 3.6.4 Django 2.0.2

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()
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にQuerySet APIを使ってみる。


対話型シェルで確認

チュートリアルに沿って掲示板アプリを作成しているが、今回はQuerySet APIを使用してPost、Topicの個数、最後のPostに関する情報を表示してみる。

f:id:wonder-wall:20180326220954p:plain

最初に、オブジェクトをわかりやすく表示するために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) : 掲示板アプリの返信機能を実装する

  • 返信一覧ページの作成
  • 返信一覧ページのテスト
  • 返信一覧の表示
  • 返信フォーム作成
  • 返信機能のテスト
  • まとめ

Python 3.6.4 Django 2.0.2

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_postsboards/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のプラグイン
  • まとめ

Python 3.6.4 Django 2.0.2

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作成者としてログインユーザーを指定
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にビューをログイン済みユーザのみに制限してみる。


login_requiredデコレータ

前回まででユーザー認証機能は実装したので、新しいTopicを作成する機能をログイン済みユーザのみに制限する。

f:id:wonder-wall:20180325132421p:plain

上の画像からわかるように現時点ではログインしていないユーザーでもアクセスできるようになっている。

続きを読む