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

忘れないようにメモっとく

機械学習とかプログラミングとか。

Apache上のDjangoでadmin画面を表示する

Djangoの管理画面を表示するのに詰まったところがあったのでメモ。

アプリの作成、DBの設定は
はじめての Django アプリ作成、その 1 — Django 1.4 documentation

はじめての Django アプリ作成、その 2 — Django 1.4 documentation
を参考にした。

最速チュートリアルを書くと、

  1. settings.pyでDBの設定
  2. アプリケーションの作成
  3. models.pyを編集

これで、DBのひな形を作れる。
管理画面は

  1. settings.pyでadminを有効に
  2. urls.pyでadminのコメントアウトを外す
  3. /admin/へアクセス

でブラウザに表示される。
ここまでの流れを下で、もうちょっと詳しく。

settings.pyでDBの設定

チュートリアルと同じく、sqlite3を使う。
test_proj/settings.pyを開いて、DATABASESを編集する。

DATABASES = { 
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': '/home/ec2-user/test_proj/test.db',
        'USER': '', 
        'PASSWORD': '', 
        'HOST': '',
        'PORT': '',
    }
}

変更するところは、ENGINEとNAMEだけで、sqlite3のファイルをフルパス指定することに気をつける。
DB設定を変更したら、以下のコマンドを実行。

$ python manage.py syncdb

アプリケーションの作成

チュートリアルに従って、pollsというアプリケーションを作成する。

python manage.py startapp polls

作成されたpollsディレクトリ内のmodels.pyを編集して、モデルの設定をする。

models.pyを編集

polls/models.pyを以下のように編集。

from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()

モデルを有効にするために、settings.pyのINSTALLED_APPSを編集。

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',
    'polls',
)

以下のコマンドで、モデルを有効にする。

$ python manage.py sql polls

djangoのshellについては省略。

ここまでで、DBの設定は完了なので、管理画面を表示できるようにする。

settings.pyでadminを有効に

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',
    'django.contrib.admin',  # 追加
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'polls',
)

追加したら、python manage.py syncdbを実行。

urls.pyでadminのコメントアウトを外す

次に、urls.pyでadminに関する設定がコメントアウトされているので、3行を外す。

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'^$', '{{ project_name }}.views.home', name='home'),
    # url(r'^{{ project_name }}/', include('{{ project_name }}.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)),
)

/admin/へアクセス

これで、/test_proj/admin/でアクセスできる。
あるあるエラーとして、sqliteのファイルが見つからないことがあるので、ファイルをフルパスで指定しているかとか、ファイルのpermission、ファイルが入っているディレクトリのpermissionなどを確認する。

ちなみに管理画面にcssとかが反映されてない気がするんだけどなんでだろう?
テキストベタ書きみたいでかっこわるい。。