業務エンジニアの攻撃は最大の防御ブログ

業務エンジニアのブログ。業務システム大好き。フレームワーク開発も好き。

Djangoに初挑戦してみた(2)迷走中

Pythonについて無知な者が、メモ代わりに想像で書き進めているので注意
*また、おかしなところはツッコミなどいただけると嬉しいです

さて、とりあえずひな形はできたのだけど、
他のRailsライクなフレームワークと違って、modelディレクトリやviewディレクトリがあるわけではない。
しかもDjango1.3までと1.4以降でプロジェクトの階層が違ってる。
なのでちょっと迷う

とりあえず間違ってもいいので公式サイトのチュートリアル、コマンド叩いたりコード書いたりしてみる
https://docs.djangoproject.com/en/1.4/intro/tutorial01/

わけも分からずコマンドを叩く

チュートリアルに従い下記のコマンドを叩いたら
>python manage.py startapp polls

を叩いたら最上位の階層に
polls/
__init__.py
models.py
tests.py
views.py

こんな構成のディレクトリが生成される
__init__.pyはパッケージだという事をあらわす空のpyファイル。
モデルとビューを記述すると思しきファイルが生成
tests.pyはユニットテストのためのファイルだろうきっと。

ためしに
>python manage.py startapp hoges
と叩いたらさっきと同じ構成で

hoges/
__init__.py
models.py
tests.py
views.py

というディレクトリができた

推測(英語読めないし難しい言葉が分からないヘタレエンジニアは勘に頼る)

これでなんとなく予想がついた
RailsやCakeは
model view controllerディレクトリに、それぞれhogeモデル・hogeコントローラ・hogeビューのファイルを作って、フレームワークさんがそれらを名前によって関連付けてくれる。

それに対してDjangohogeフォルダを生成してそれぞれの中にmodelやviewファイルを置くのだきっと。そして生成される各々のディレクトリの塊の事をappという概念でまとめてるんだ。
そしておそらく、共通処理なんかは、settings.pyやurls.pyのあるディレクトリに置くのだと思う。

modelsクラスを写経する

なんとなくDjangoの思想が理解できてきた(気になった)ところで
調子にのって、写経を開始

>cd polls
>vi models.py
models.py----------

from django.db import models

# Create your models here.

class Poll(models.Model):
question=models.CharField(max_length=200)
pub_date=models.DateTimeField('date published')

class Choice(models.Model):
poll=models.ForeignKey(Poll)
choice=models.CharField(max_length=200)
votes=models.IntegerField()

                                  • -

これもサンプル見て、想像しながら解読
from はpython予約語で、読み込むパッケージを書くやつ
import そのパッケージの中のモジュール名を書くやつ
だったと思う。
つまりDjangoのDB関連のモジュールをまとめたdjango.dbパッケージからmodelsというモジュールを呼んでる。

そして
class Poll(models.Model):
class Choice(models.Model):

はクラス定義だ。
Modelクラスを継承しているのは見たまんま
そして、DBのカラム名をフィールドとして定義していくんだな

概ね 
カラム名=models.型名を表す関数(カラムの制約を表す引数)
というかたちで定義していくようだ(みたまんまだけど)
実際のデータアクセスはこのクラスにメソッドを定義したりして、
書いていくのだと思う

多分この定義を、DBに反映させるようなコマンドもあるはずだ
複数のappにまたぐモデルなんかはどうするんだろう?という疑問を抱きつつ、
今回はこれまで<参考URL>
http://banana-splasher.blogspot.jp/2012/08/django-14-1.html
http://d.hatena.ne.jp/imagawa_yakata/20120817/1345187957
http://djangobook-ja.appspot.com/2.0/chapter03/
http://www.python.jp/doc/2.4/tut/node11.html