もた日記

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

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

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

続きを読む

Djangoメモ(24) : ユーザー認証を実装する〜パスワード変更

  • パスワード変更
  • パスワード変更のテスト
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にパスワード変更機能を実装する。


パスワード変更

サインアップ、ログアウト、ログイン、パスワードリセット機能を実装してきたが、最後にパスワード変更機能を実装する。
Djangoではパスワード変更のビューも提供されているのでmyproject/urls.pyに以下の2行を追加。

    path(
        'settings/password/',
        auth_views.PasswordChangeView.as_view(
            template_name='password_change.html'),
        name='password_change'),
    path('settings/password/done/',
        auth_views.PasswordChangeDoneView.as_view(
            template_name='password_change_done.html'),
        name='password_change_done'),
続きを読む

Djangoメモ(23) : ユーザー認証を実装する〜パスワードリセットとメール送信

  • パスワードリセットの流れ
  • メール送信設定
  • メールドアレス入力(password_reset.html)
  • メール送信完了(password_reset_done.html)
  • 新パスワード登録(password_reset_confirm.html)
  • パスワードリセット完了(password_reset_complete.html)
  • パスワードリセットのテスト
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にパスワードリセット機能を実装する。


パスワードリセットの流れ

ログイン、ログアウトと同様にパスワードリセットのビューもDjangoで提供されているが以下のようにメール送信など手順が多い。

  1. パスワードリセットを開始するフォームでEメールアドレスを入力するとパスワードリセットリンクが記載されたメールが送信される(reset/
  2. メールが送信されたことをユーザに伝える画面が表示される(reset/done/
  3. パスワードリセットリンクにアクセスして表示されるフォームで新パスワードを入力(reset/<uidb64>/<token>/
  4. パスワードリセットが完了したことをユーザに伝える画面が表示される(reset/complete/
続きを読む