kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

PPP3: Circle CI (続き2)

Djangoアプリケーションのテストを実行する方法を説明します。

まだDjangoは1行たりとも書いてませんがいきなりテストです

Djangoを仮想環境内でインストール
そのあとディレクトリ作ってdjango-admin startprojectするんですけど
そういう順番が普通なのかな
ディレクトリ作ってその中で仮想環境作る、ではない?
なんかディレクトリ階層がひとつ余分にできてるような
それとも今はCircleCIの説明だからってだけかな
たぶんそうだな

$ mkdir cafe
$ cd cafe
$ django-admin startproject apps
$ ls
apps

そしてさらにappsっていうフォルダができるのか
ついでにどんなファイルができてるのか見ておこう

$ tree
.
└── apps
    ├── apps
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    └── manage.py

さらにその下にもひとつappsが・・・
これ、django-admin startproject cafeじゃだめなん?
どういう階層を想定してるんだ

$ cd apps
$ python manage.py startapp menu

menuっていうのがアプリなのか
appsっていうくらいだからアプリがいくつも入るわけだな

manage.py startup menuにしないのはWindowsに気を使ってるのかな
いや違うなWindowsでも動くはずか
なんだっけ

モデル
ファイルはできてるものを修正

from django.db import models

TEA_KINDS = (("english", "英国紅茶"), ("chinese", "中国茶"), ("japanese", "日本茶"))

class TeaManager(models.Manager):
    def count_each_kind(self):
        result = self.values_list("kind").annotate(
            count=models.Count("kind"))
        return dict(result)

class Tea(models.Model):
    objects = TeaManager()
    name = models.CharField("名称", max_length=255)
    kind = models.CharField("種類", max_length=255, choices=TEA_KINDS)

なにやらデータベースのスキーマを書いてる感じ
字面だけ見るとnameとかkindとかローカル変数に代入してどうするのって
感じになるけど、きっとこれは裏で魔法が動いてるんだな?
values_listとかmodels.Countとかのあたりはクエリっぽいし
TEA_KINDSがリストじゃなくてタプルなのもそのへんと何か関係ありそう

次はフォーム
これは新規に作成

from django import forms
from menu.models import Tea, TEA_KINDS

class TeaSearchForm(forms.Form):
    name = forms.CharField(label="名前", maxlength=255, required=False)
    kind = forms.MultipleChoiceField(label="種類", choices=TEA_KINDS, required=False)

    def clean(self):
        if not self.is_valid():
            return self.cleaned_data
        if not self.cleaned_data["name"] and not self.cleaned_data["kind"]:
            raise forms.ValidationError("名称と種類のどちらかは入力してください。")
        return self.cleaned_data

これはまさしくFORMタグに対応してるものか
labelで要素を特定してmaxlengthとかrequiredでValidationするとか?
HTMLのサンプルはないけど
これが勝手にHTMLを生成してくれるとかはないよなさすがに
HTMLがないってことはテストだけが動く最低限ってことだろうか

Django知識ゼロで想像をたくましくして何をしているのかという問題
このあとDjangoで何かかんたんなもの動かしたりするんだっけ?
14章でやってる
ちょっと先回りしてさらっと読んでおこうか

・・・詳細は公式を、チュートリアルやっといてねって書いてあるな
チュートリアルやってから戻ってくるか