読者です 読者をやめる 読者になる 読者になる

あれもPython,これもPython

Pythonで世界を包みたい

今週のPython(2016年4月16日週)

今週のPython

今週もPython記事です。

f:id:esu-ko:20160423002457p:plain

続きを読む

Cloud9でDjango入門(3_Modelの定義)

Django入門シリーズ

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.pyINSTALLED_APPSのリストの中に先ほどのapplication名を追加します。

そのあとpython manage.py makemigrationを実行し、migrateファイルを作成します。
migrateファイルはmigrate内容が保存されるファイルで、makemigrationするたびに追加されます。
このmigarateファイルをpython manage.py migarateしてデータベースに反映します。

初めて作成したモデルであればテーブルが作成されます。
すでにデータが入っている場合や、カラムの型変更が発生する場合、
警告が表示されます。

と、これでModelの基本は終わりなので、
データベースに反映させたら、
残りのTemplateやViewの開発を進めていきます。

Cloud9でDjango入門(2_初期設定)

ProjectとApplication

Djangoでアプリケーションを作成する場合、
projectとappliationという単位が存在します。

django-admin.py startproject プロジェクト名
で作成されるのがプロジェクトであり、もっとも大きな一つのまとまりになります。

このプロジェクト内にあるmanage.pyを用いて、このプロジェクトの様々な設定を行っていきます。

プロジェクトに必要なテーブルとユーザの用意

python manage.py migrateを行うと、
DBにDjnagoに必要なテーブルが作成されます。
一番最初のmigrateDjangoのプロジェクトに必ず必要なテーブルが作成されます。
(データベースとの接続設定はsetting.pyの中に記述されています。デフォルトではsqliteと呼ばれるdbを使用します。)

また、python manage.py createsuperuserを行うと、
Djangoの管理ユーザを作成します。
ユーザ名、メールアドレス、パスワードの設定が行われます。

adminページ

管理ユーザが作成できたら、adminページにログイン可能になります。
adminページはDjangoの大きな特徴機能です。
adminページではプロジェクトの様々なデータの管理を行うことが可能です。
プロジェクト内に作成したアプリケーションのデータを確認だけではなく、追加、更新、削除することができます。

多くのwebアプリケーション開発では、こうしたデータの管理機能は標準搭載ではなく、
データベースクライアントで対応することが多くあります。

対してDjangoはadmin画面やORM、manage.py migrateによってSQLをほとんど排除しながら開発が可能になります。

また、管理画面は標準でも必要最小限の機能を要していますが、
拡張が可能であるため、ダッシュボードの追加なども可能となります。

python manage.py runserverを実行するとDjangoの開発用サーバが立ち上がります。
ここで表示されたURLに/adminを付け足すと、管理ページにアクセスが可能になります。
(たとえばlocalhost:8080ならlocalhost:8080/adminとします)

アプリケーションの追加

python manage.py startapp アプリ名を実行するとapplicationディレクトリが作成されます。

applicationは設計によって大きく変わりますが、
幾つかの機能の塊だと思って置けばよいでしょう。
(データドメインが一つの区切りかもしれません)

Djangoは、ProjectとApplicationという2つの単位を持つことによって、
自然と機能やデータの分割を進め、再活用を高めることを可能にしています。

Applicationはディレクトリによって分割され、
その中にそのApplicationのデータモデルや機能を記述します。
言い換えれば、このディレクトリごとコピーすることで、
その機能を他のDjangoプロジェクトに再利用することが可能になります。

次回から、このApplicationを実装し、webアプリケーションを作成していきます。

esu-ko.hatenablog.com