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章でやってる
ちょっと先回りしてさらっと読んでおこうか