Pages

Tuesday, December 4, 2012

Django:実践チュートリアル3(管理画面を有効化し使用してみる)

この記事では、管理画面を有効化し、これまでに作成したモデルを操作してみましょう。

現在の構造を振り返ってみると

/programmingpapa/code/papatutorialのフォルダに以下の構造が出来上がっているとおもいます。前回のチュートリアル2ではpersons/models.pyにPersonクラスを書くところまで終わりました。

papaturtorial - manage.py
                       papatutorial - __init__.py
                                           - settings.py
                                           - urls.py
                                           - wsgi.py

                       persons        - __init__.py
                                           - models.py
                                           - tests.py
                                           - views.py
では、管理画面を有効化するためには以下のステップを取ります。
  1. 設定ファイルで管理機能を有効化する
  2. データベースに管理機能を反映する
  3. 管理画面にアクセスして動作を確認する

設定ファイルで管理機能を有効化する

以下のファイルに変更をかけます。
  • papatutorial/settings.py
  • papatutorial/urls.py

papatutorial/settings.pyではINSTALLED_APPS の設定で'django.contrib.admin'を有効にします。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'persons',
)

papatutorial/urls.pyは以下のように変更します。

from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'papatutorial.views.home', name='home'),
    # url(r'^papatutorial/', include('papatutorial.foo.urls')),
    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    # Uncomment the next line to enable the admin:
   url(r'^admin/', include(admin.site.urls)),
)

以下の3行を有効化するだけですね。
from django.contrib import admin
admin.autodiscover()

url(r'^admin/', include(admin.site.urls)),


データベースに管理機能を反映する

データベースに管理画面系のDBを反映させましょう では、実際にMySqlに反映させてみましょう。

./manage.py syncdb
Creating tables ...
Creating table django_admin_log
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

管理画面にアクセスして動作を確認する

では、サーバーを立ちあげて、動作を確認してみましょう サーバーを立ち上げるためには./manage.py runserverというコマンドを打ちます、そうすると、開発用サーバーが http://127.0.0.1:8000/ で起動します。
./manage.py runserver
Validating models...

0 errors found
Django version 1.4.2, using settings 'papatutorial.settings'
Development server is running at http://127.0.0.1:8000/ 
http://127.0.0.1:8000/にアクセスすると以下のようなページが出てきます。


早速エラー画面ですが、これは、urls.pyをいじったせいで、管理画面を有効にするURLしか定義していないと言われています。
確かにそうなので、アクセスを、http://127.0.0.1:8000/admin/のURLに対して行います。
そうすると、管理画面にの入り口が見えてきたでしょうか?
最初にプロジェクトを作った時に指定したユーザー名とパスワードを入力します。
忘れてしまった場合は、コンソールからリセットしましょう。方法についてはこちらを参照してください。

さあ、ログインすると以下の様な画面が見えてくるのではないでしょうか?

ここで、ユーザー管理などができます。
コーディングなしで、ここまで生成してくれるのは本当に開発のスピードを上げてくれますよね。管理画面のカスタマイズに関しては、後々また、紹介したいと思います。

今ここで、気がついて欲しいのは、定義したPersonsモデルが無いことです。
これを管理画面に表示させるにはもうひとつ作業しないといけないステップがありました。
以下をadmin.pyというファイルにしてpersonsプロジェクトの中に保存してください。
from django.contrib import admin
from persons.models import Person
admin.site.register(Person)
これは、管理画面でpersonsプロジェクトのモデルのPersonを表示させるように記しているものです。
今は以下の構造ができているはずです。


papaturtorial - manage.py
                       papatutorial - __init__.py
                                           - settings.py
                                           - urls.py
                                           - wsgi.py

                       persons        - __init__.py
                                           - models.py
                                           - tests.py
                                           - views.py
                                           - admin.py

では、これを記述したら、もう一度サーバーを立ちあげて、ログインしてみます。
 Personsが認識されているのがわかりますね。


では、Personsの横のAddをクリックして、データを追加してみましょう。
以下のような画面が出てくるので、項目を入力して、Saveを押下します。

すると、項目が追加されたのが一覧表で以下のようにわかると思います。
ここで、何か気が付かれたでしょうか?試しに、もう一項目データを入力してみて下さい。伊藤花子さんを追加しました。以下のような一覧になります。
問題点が分かって来ましたね。項目がPerson Objectと表示されていて、これでは管理しにくいですね。
では、これを正しましょう。
モデルの定義の__unicode__というメソッドをオーバーライドします。
papatutorial/persons/models.pyを以下のように編集して見ましょう。姓+名が表示されるようになるはずです。

from django.db import models
class Person(models.Model):
    first_name = models.CharField(u'名', max_length = 256)
    last_name = models.CharField(u'姓', max_length = 256)
    first_name_yomi = models.CharField(u'名読み', max_length = 256)
    last_name_yomi = models.CharField(u'姓読み', max_length = 256)
    email_address = models.EmailField(u'Emailアドレス', max_length = 256) #default max_length is 75
    #face = models.FileField('Images', upload_to="images")
 
    def __unicode__(self):
        return self.last_name + self.first_name
 
    class Meta:
        db_table = 'person'


では、画面をリロードまたは、開発サーバーを建て上げなおして、もう一度Personsの一覧を見てみましょう。
以下のように表示されているでしょうか?

だいぶ見やすくなりましたね。
次回のチュートリアルでは、顔写真のアップを行なってみましょう。



No comments:

Post a Comment