Django開発~ショッピングカート構築編1~商品一覧作成①

django

今日からDjangoで、Shoppingカートを作りましょう。

事前準備

まずは、「shopping-cart」フォルダをDesktop上に保存してください。

次に、Djangoアプリケーション開発 ~事前準備編~で、開発環境を準備してください。

以下のような構成になっていれば、OKです。

環境が準備できたら、make djangoでプロジェクトを作成しましょう。

DB設定変更

次に、DjangoのDBをPostgreSQLに変更しましょう。デフォルトは、SQLite3なのですよ。

app/app/settings.pyを開いて、「DATABASES」の設定を変更してください。

Shopアプリケーションの作成

次にShopアプリケーションを作成しましょう。

app/app/settings.pyの「INSTALLED_APPS」に、shopを追加します。

この設定で、Djangoがshopを認識するようになりました。

テストコードの作成

今回は、テスト駆動開発にて、アプリケーション開発を行います。

Wikiによるとテスト駆動開発とは、次のことを指します。

テスト駆動開発 (てすとくどうかいはつ、test-driven development; TDD) とは、プログラム開発手法の一種で、プログラムに必要な各機能について、最初にテストを書き(これをテストファーストと言う)、そのテストが動作する必要最低限な実装をとりあえず行った後、コードを洗練させる、という短い工程を繰り返すスタイルである。

テスト駆動開発を詳しく知りたい方は、こちらをどうぞ。

テスト駆動開発では、テストコードを最初に書きます。

テストを書くためには「何を作るか」について、決める必要があります。

作成するアプリケーションが「Shopping Cart」なので、商品一覧が欲しいところですね。

ひとまず、「localhost:8000にアクセスしたとき、商品一覧が表示される」機能を作ってみましょう。

テストコードを書く前に、いくつかファイルを用意します。

私は、テスト対象ファイルごとにテストコードを分割するのが好きなので、元々のファイル(tests.py)を削除し、testsフォルダを作成後、個別のテストファイルを作成しています。

pytest.iniファイルは、テストフレームワークであるpytestの設定ファイルです。

requirements.txtの「pytest-django==3.5.1」でモジュールをインストールしてあります。

pytest.iniファイルに以下の設定をしておきましょう。

一応、補足しておきます。

・DJANGO_SETTINGS_MODULE -> プロジェクトのsettings.pyを指定
・python_classes -> XXXXTestのクラス名をテスト対象として認識する
・python_functions -> test_XXXXの関数名をテスト対象として認識する
・python_files -> テスト実行ファイルの命名規則
・norecursedirs -> pytestがテスト対象を検索するとき読み込みたくないディレクトリを指定

詳しく知りたい方は、こちらをどうぞ。

準備が整ったので、テストコードを書いてみましょう。

最初は、「localhost:8000」にアクセスしたら、HTTPステータスが「200」になるかテストしてみましょう。

テストを実行してみます。テストを実行するには、make testをterminal上で実行します。

「Not Found: /」となりました。

URLの設定がされていないので、エラーが出ているようですね。

URLの設定をしましょう。

shopアプリケーション配下にurls.pyファイルを作成しましょう。

ここまで設定できたらテストをしてみましょう。

views.pyに「all_products」が設定されていないため、エラーが発生しました。

app/shop/blogs.pyにall_products関数を追加してみましょう。

もう一度、テストを実行します。

今度は、テストがPASSしましたね。

しかし、テストがPASSした後、何やらエラーがでています。

これは、「flake8」でチェックしたPythonの文法チェックです。PEP8に遵守したコーディングを行えているか確認しているわけですね。

今のままだとチェックしたくないファイルまでチェックしてしまうので、設定ファイルを追加しましょう。

もう一度テストを実行してみましょう。

先ほどとは違って、settings.pyのチェックなどが外れているのがわかります。

時間があったらメッセージ内容に従って、修正してみて下さい。修正しなくてもこの後の開発には影響はありません。

Model作成

最初のテストはパスしました。

次は、Modelの実装に移りましょう。

Shopping Cartなので、カテゴリーとプロダクトのModelが必要そうです。

まずは、カテゴリーからテストしてみましょう。

Categoryモデルを作成後、データベースからCategoryモデルを取得し、データのチェックをします。

テストを実行してみましょう。

エラーになりました。

Categoryモデルの読み込みに失敗してますね。作成していないので、当然です。

models.pyにCategoryモデルを追加してみましょう。

models.pyに変更を加えたので、マイグレーションをしておきましょう。

テストしてみましょう。

おっと!タイポしてしまったようです。descriptionが、descriptoinになっていますね。

もう一度テストしてみましょう。

今度は、パスしましたね。

同じ要領でプロダクトも作成しましょう。

テストを実行します。

予想通りエラーになりましたね。今度は、プロダクトをmodels.pyに追加します。

マイグレーションを実行しましょう。

テストを実行します。

テストがパスしましたね。

商品一覧の作成

モデルがパスしたので、データの格納場所は確保できました。

続いては、画面の表示機能部分を作成しましょうか。

ユーザーが「localhost:8000」にアクセスしたときに、商品一覧が画面上に表示されるように実装していきます。

まずは、テストコードからですね。

localhost:8000にアクセスしたとき、product_list.htmlテンプレート利用する想定なので、ここからまずはテストします。

想定通りのエラーがでましたね。テンプレートを使用するようにviews.pyを書き換えましょう。

テストを実行します。

「TemplateDoesNotExist」が表示されましたね。テンプレートを作成しましょう。

テストを実行しましょう。

テストがパスしましたね。

長くなってきたので、本日は一旦終了にします。

次回

商品一覧の作成の続きを開発していきましょう。

コメントを残す