サイドバーの「Django ドキュメント検索」というプレースホルダの入った検索では、Django ドキュメント (Django 2.1) の公式サイト内を検索できます

はじめに

Django を学習するには、何はともあれ公式チュートリアル「はじめての Django アプリ作成」からスタートしてみるのが良いでしょう。しかし、いざチュートリアル通りに進めようとしても躓く場合も多いと思います。そこで、「チュートリアルの進め方」シリーズとして、チュートリアルに沿った作業を行いながら補足事項をまとめることにしました。チュートリアルで躓いた際のヒントとしてお使いください。

利用環境は Ubuntu、 Linux Mint を中心として説明しますが、 Windows についても補足します。

前回は、Django チュートリアルの進め方 その 5 (1) と題してはじめての Django アプリ作成、その 5の前半についてまとめました。

今回は、はじめての Django アプリ作成、その 5 の後半についてまとめました。

ビューをテストする

Django テストクライアント

シェルを開いてテスト環境をセットアップします。(setup_test_environment() の実行)

次に、テストクライアントを作成します。

まず、ルート (http://localhost:8000/) にアクセスしてみます。

ブラウザでは下記のような画面になります。


404 エラー (今回は正常動作) になります。
シェルからのアクセスは下記のようになります。

Not Found (404 エラーに相当) になります。
次に、polls/index にアクセスします。ブラウザの表示画面とシェルのコマンドは下記のとおりです。

shell 上ではアドレスをハードコードせずに、 reverse('polls:index') としてアクセスします。

ステータスコード200 = 成功です。
表示内容を確認します。

コンテキストの内容 (テンプレートに渡した変数) を確認します。

 

ビューを改良する

Polls.IndexVew が未来日付を公開しないように修正します。

新しいビューをテストする

pools/tests.py にビューのテストを作成していきます。
まず、reverse を使うための import文を書きます。

次に、question を生成しやすいように create_question() 関数を定義します。


question_text を質問項目とし、今日から days 後に公開する Question オブジェクトを生成する関数です。

このショートカット関数を使って、Question を作成してテストを行う事ができます。
テストケース QuestionIndexViewTests に下記メソッドを定義していきます。
まず、Question が存在しない場合のテストです。

assertContains

SimpleTestCase.assertContains(response, text, count=None, status_code=200, msg_prefix='', html=False)

Responseインスタンスが指定されたstatus_codeを生成し、text がレスポンスのコンテンツに含まれることを示す。

assertQuerysetEqual

TransactionTestCase.assertQuerysetEqual(qs, values, transform=repr, ordered=True, msg=None)

クエリセット qs が values のリストを返す事を示す。

次に過去 Question のテストです。

未来の Question のテストも同様です。

未来の質問と過去の質問が共存する場合もテストします。

過去の質問だけが2つある場合をテストします。

 

DetailView のテスト

DetailView も未来日付を表示しないようにします。DetailView にも get_queryset() メソッドを定義してクエリセットを制限します。

DetailView のテストを追加します。

 

参考

低価格なのに高速・多機能・高セキュリティ 月額400円(税別)から最大容量100GB WordPress専用高速サーバー Z.com WP
おすすめの記事