Heroku で Django を使ってみたい(02)

とりあえず、Django Girls Japan の記事を参考にさせて頂いております。

 

ブログアプリケーションを作ってみよう

本家では、オブジェクト指向について軽く説明していますが、無理に理解しようとせず作りながら徐々に分かっていく感じでイイと思います。

オブジェクト指向に関する簡単な説明は、どれも一緒なのでまたすぐに目にすると思います。

 

ここで、一番大事なことは CUI(コマンドライン、ターミナル、端末)上からの操作です。

(myvenv) ~/djangogirls$ python manage.py startapp blog

 

 

仮想環境の上にあることを前提に、djangogirls のディレクトリ上で上のコマンドを実行します。

すると、以下のようなファイル構造が出来上がります。

djangogirls
├── blog
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

  blog アプリを作る準備ができましたので、blog  アプリと同じ階層にある mysite ディレクトリ下の settings.py で INSTALLED_APPS の行を見つけて、’blog’ の一行を追加します。 コロンも忘れないで下さい。

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
)

ここまでは、それほど複雑なものではありません。

 

ブログのポスト機能を作る

やや難しくなってくるのがこの後です。

 

blog / models.py のファイルを編集します。

from django.db import models
from django.utils import timezone

class Post(models.Model):
    author = models.ForeignKey('auth.User')
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

最初の2行は from と import で必要な部品を取得しています。

 

 

class Post(models.Model):

class はオブジェクトであることを定義しています。

Post は任意の名前を付けることができますが、分かりやすく、かつ、大文字で始まるというルールがあります。

models.Model は引数になりますが、ここではこの Post クラスが Django Model であることを示していて、Django がデータベースに保存するのだと分かるようにしています。

 

 

    author = models.ForeignKey('auth.User')
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

上記の行は、この Post クラスのなかで title や text といったプロパティを定義しています。

なぜなら、それぞれのフィールドのタイプを決める必要があるからです。

 

上から見ていくと、「 author 」 つまり製作者については、auth.User を参照するようになっています。

models.ForeignKey が他のモデルへのリンクを示しています。

 

「 title 」には、models.CharField となっており、最大200文字までの制限を設けています。

 

「 text 」には、models.TextField で、制限なしのテキスト用です。

 

「 models.DateTimeField 」は、日付と時間を表します。

 

 

def publish (self): はファンクション(関数)で、メソッドとも呼ばれます。

ファンクションには、英小文字とアンダースコアが使用できます。

 

このあたりも、実際の挙動を確認しながらの方が理解が深まると思います。

 

 

データベースを作成する

まずは、今までの変更点を Django に教えます。

(myvenv) ~/djangogirls$ python manage.py makemigrations blog

 

すると、

Migrations for 'blog':
  0001_initial.py:
  - Create model Post

と、返ってきます。

このコマンドで Django が、データベースに入れるための移行ファイルを作ります。

 

(myvenv) ~/djangogirls$ python manage.py migrate blog

さらに、上記のコマンドでポストモデルがデータベースに入りました。

 

以上です。

コメント

タイトルとURLをコピーしました