Web

Python:Djangoを使ってみる②

スポンサーリンク

アプリケーションを作る

前回は、開発用の仮想環境を作ってDjangoをインストールするところから初めて、プロジェクトの作成、データベースの作成しました。そして最後に、Webサーバーの起動確認までおこないました。

今回は、さらに一歩進めてアプリケーションを作ります。Djangoではアプリケーションに必要なファイルも自動生成されます。まずは次のコマンドを実行してください。

すると次のようにmasterというディレクトリができます。

masterというディレクトリの中には、アプリケーションに必要なファイルが自動で生成されています。

まだこの状態では、アプリケーションはプロジェクトと紐づけられていません。アプリケーションをプロジェクトに含めるには、setting.pyで構成クラスへの参照を INSTALLED_APPS 設定に追加する必要があります。 
※setting.pyに作成したアプリの存在を教えてあげる

MasterConfig クラスは、 master/apps.py にあるので、ドットつなぎのパスは ‘master.apps.MasterConfig’ となります。 mysite/settings.py を編集し、 INSTALLED_APPS 設定にドットつなぎのパスを追加してください。

アプリケーションのファイルは複数ありますが、今回はこの中から、models.py、admin.py、forms.pyを扱います。

models.py

モデルは、保存したいデータを表すデータフィールドと、挙動を定義します。通常、1つのモデル = 1つのデータベーステーブルに対応しています。

【モデルの基本】
・基本ファイルは、 アプリディレクトリ内のmodels.py (ここではmaster内)
・各モデルはPythonのクラスで、django.db.models.Model のサブクラス
・モデルの各アトリビュートは、データベース上のあるフィールドを表現する
・モデルの情報をもとに、DjangoはデータベースAPIを自動生成する

models.pyを次のように編集します。

import uuid
from django.conf import settings
from django.db import models
from django.utils import timezone
from django.core.validators import RegexValidator

class Theme(models.Model):
    """ メンバーマスタ """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(verbose_name = "名前", max_length=20,default='')
    name_furigana = models.CharField(verbose_name = "ふりがな", max_length=20,default='')
    theme_name = models.CharField(verbose_name = "テーマ名", max_length=50,default='')
    role = models.CharField(verbose_name = "役割", max_length=10,default='')
    explain = models.CharField(verbose_name = "内容", max_length=200,default='')

    created_date = models.DateTimeField(verbose_name = "作成日", default=timezone.now)
    published_date = models.DateTimeField(verbose_name = "更新日", blank=True, null=True)

    def save(self, *args, **kwargs):
        auto_now = kwargs.pop('published_date', True)
        if auto_now:
            self.published_date = timezone.now()
        super(Employee, self).save(*args, **kwargs)

    def __str__(self):
        return self.name

次に、データベースにモデルのためのテーブルを作るファイルを作ります。

python manage.py makemigrations master
python manage.py migrate master

すると、次のように0001_initial.pyができます。

【ポイント】
models.pyを編集したらDBにその内容を必ず伝える必要があります。
DBに変更内容を伝えるには、次のコマンドを打つ必要があります。

python manage.py makemigrations master
python manage.py migrate master

admin.py

作成したテーブルの追加、編集、削除するのにDjango adminを使います。 admin.pyを次のように編集します。

from django.contrib import admin
from .models import Theme
 
admin.site.register(Theme)

ログインするには、superuser (サイトの全てを管理するユーザー)を作る必要があります 。コマンドプロンプトに次のように打ち込んでスーパーユーザーを作成してください。

python manage.py createsuperuser

ユーザー名、メールアドレス、パスワードを設定してスーパーユーザーを作成します。ここで、一旦、サーバーを立ち上げてログインしてみましょう。

すると、管理画面が立ち上がって「投稿」できるようになっています。さっそく投稿してみましょう。

無事登録できました。

admin.pyを編集すると、この管理項目の表示項目を簡単に変更することができます。ここでは、テーマ名と内容、役割を増やしてみましょう。次のようにします。

class ThemeAdmin(admin.ModelAdmin):
    list_display = ('theme_name','explain','name','role')
 
admin.site.register(Theme,ThemeAdmin)

さらに、検索の仕組みを作ることも簡単にできます。ここでは、フィルターと検索窓を設置してみましょう。以下のように、
・list_filter
・search_fields
を記述します。

class ThemeAdmin(admin.ModelAdmin):
    list_display = ('theme_name','explain','name','role')

    	
    list_filter = ['theme_name','name','role']
    search_fields = ['theme_name','name','role']
 
admin.site.register(Theme,ThemeAdmin)

この記述を書くことで、次のような管理画面となります。

forms.py

最後に、入力欄の見た目の調整をおこないましょう。これは、forms.pyでおこないます。このファイルは自動生成されるわけではないので、まずはmaster(自分が作ったアプリの名称)ディレクトリの中にforms.pyというテキストファイルを作りましょう。

そのファイルに次のように書き込みます。

from django import forms
from .models import Theme
from django.forms import widgets
from django.forms.fields import DecimalField, DateTimeField
 
 
class ThemeForm(forms.ModelForm):
    name = forms.CharField(max_length=20, label='名前',
        help_text='フルネームを入力',
        widget = widgets.Input(attrs={'size':30}))

    explain = forms.CharField(max_length=200, label='内容',
        help_text='テーマの内容を入力',
        widget = widgets.Input(attrs={'size':50}))    
 
    created_date = forms.DateTimeField(label='作成日',
        widget = widgets.Input(attrs={'readonly':'readonly', 'size':30}))

その後、admin.pyに次のように書き込み、forms.pyを認識させます。

from django.contrib import admin
from .models import Theme
from .forms import ThemeForm

class ThemeAdmin(admin.ModelAdmin):
    form = ThemeForm
    list_display = ('theme_name','explain','name','role')

    	
    list_filter = ['theme_name','name','role']
    search_fields = ['theme_name','name','role']
 
admin.site.register(Theme,ThemeAdmin)

すると、次のように入力画面を調整することができました。

スポンサーリンク

まとめ

いかがでしたでしょうか?今回は、ちょっと難しかったかもしれませんね。しっかり復習して、まずは管理画面の仕組みを理解するようにしてください。お疲れ様でした。

コメント

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