WebフレームワークとしてのDjango
DjangoはWebフレームワークであるので、
Webアプリケーションを開発するにあたって必要だが複雑な実装を
隠ぺいしてくれます。
そのためWebアプリケーションの開発の際は、
Djangoの規則に基づいて実装することで、
ド定番の機能の実装が不要になります。
といってもアプリケーションごとに変動する部分もあるため
、
それをうまい具合に切り分けた実装モデルをDjangoではMTVモデルと呼んでいます。
MTVモデル
MTVモデルはModel,Template,Viewの3要素からなる実装モデルです。
Djangoの開発の基本はこのモデルを自分のアプリケーションに基づいて実装することです。
Model
Modelはどのようなデータを操作するか、の定義です。
たとえば、SNSアプリケーションでは、
ユーザの基本情報や、コメントなどのデータを格納することになります。
そうした、どんな要素を持ったデータを扱うか、と
それはどう操作されるかという機能をModelに実装します。
どんなデータがどんな要素を持っているかは、
最終的にはデータベースに格納されるわけですが、
Djangoを使用する場合、SQLでデータベースを操作する必要がありません。
Djangoのアプリケーションで定義したモデルをデータベースに反映する機能が
フレームワーク側に組み込まれているためです。
というわけでModelを定義していきましょう。
python manage.py startapp sns
これでsnsアプリケーションのディレクトリが作成されました。
この中にはすでにmodels,py
ファイルが作成されています。
models.py
にアプリケーションで使用するモデルを定義していきます。
from django.db import models class Comment(models.Model): content = models.CharField("書き込み",max_length=140)
models.py
のデータのまとまりはクラスで表現します。
この際djangoのModelを継承します。
このクラスを継承することで、保存や更新など、データ操作に必要な機能を
自分で実装することとなく持たせることが可能になります。
また、このクラスのまとまりがリレーショナルデータベースのテーブルに該当し、
要素がカラムとなります。
同一のアプリケーションにほかの種類のデータも持たせたい場合は、
models.py
にクラスを追加していけば大丈夫です。
fieldの扱い
XXXFieldはテーブルのカラムに該当します。
データベースではカラムに型やlengthなどの定義が必要となることがあるため、
XXXfieldのXXX部分や引数でモデルに定義してやり、
データベース反映するとDjangoがよろしく作ってくれます。
たとえば文字列を表すCharField
や整数を表すIntegerField
、日付時刻を表すDatetimeField
などが定番どころでしょうか。
どんなものがあるかは公式レファレンスを見ていただきつつ、適宜データベースの型について勉強するのが良いかと思います。
その他リレーション定義や、主キー定義、
form作成時に便利なFileField,ImageFieldなどもありますが、
ここではいったん省略します。
データベースへの反映
先ほど作成したモデルを実際のデータベースに反映させます。
python manage.py migrate
で反映させることになりますが、
その前にDjangoにこのモデルを持つapplicationが作成中のwebアプリケーション(プロジェクト)の中で必要であることを
明示します。
setting.py
のINSTALLED_APPS
のリストの中に先ほどのapplication名を追加します。
そのあとpython manage.py makemigration
を実行し、migrateファイルを作成します。
migrateファイルはmigrate内容が保存されるファイルで、makemigrationするたびに追加されます。
このmigarateファイルをpython manage.py migarate
してデータベースに反映します。
初めて作成したモデルであればテーブルが作成されます。
すでにデータが入っている場合や、カラムの型変更が発生する場合、
警告が表示されます。
と、これでModelの基本は終わりなので、
データベースに反映させたら、
残りのTemplateやViewの開発を進めていきます。