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

謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

【プロジェクト作成】Django 初心者がコミュニティサイト的な何かにチャレンジしてみる

Django Python 日記

前回に続いて二回目です。
相変わらずここの人に助言貰って作ってます。
やっぱメインで使ってる人は一味違うね☆

プロジェクトの作成

先ずWebアプリケーションの土台を作ります。
RubyOnRails(Ruby) も Symfony(PHP) もプロジェクトという共通土台の上にアプリケーションが乗っかってます。
難しいことは特になくて、コンソールで対象のディレクトリへ移動し、

django-admin.py startproject sns

このとき「sns」はプロジェクト名が入ります。
コマンドが通じないときは、「C:\Python26\Scripts」とかこの辺へのPATH設定を疑うといいかも?
作り終わったら、「sns」というフォルダができてる。
中身は以下の通り。

  • __init__.py : モジュールの初期化情報(基本的に使わない)
  • manage.py : プロジェクトに対するコマンドを行うファイル
  • settings.py : プロジェクト内共通設定
  • urls.py : URL 設計とか行うファイル

びっくりするほど殺風景。これで大丈夫なの?と少し疑問に思うが動くんだから凄い。
とはいえ、プロジェクトではイロイロ使うものもあるので、ディレクトリを以下のように作る。

  • database : データベースファイル(sqlite3)置き場
  • static : 画像や css 置き場
  • templates : テンプレート置き場
  • wsgi : 公開時スクリプト置き場

最後のはあんま良くわからないと思うけど今はとりあえず作っとく。

Adminサイトの作成

管理者用画面の用意。出来合いのものがあるので、それでサックリ用意してみる。
これも実はそんなに難しいわけではなく、先ほど作った sns プロジェクトディレクトリの中のコードを編集してコマンド打つだけ。
変更するのは先ずは「settings.py」を弄る。
ファイル自体行数多いので、変更箇所だけ。

import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

# 中略

DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = os.path.join(BASE_DIR, 'database/data.dat')
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''

TIME_ZONE = 'Asia/Tokyo'
LANGUAGE_CODE = 'ja'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/')

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates/'),
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
)

ここの変更箇所はこんなところ。
もうひとつは urls.py を弄る。

from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Example:
    # (r'^sns/', include('sns.foo.urls')),
    (r'^admin/', include(admin.site.urls)),
)

URL 設計を自分で完全に好きにできる。
それこそ正規表現使って遊ぶことすらできるという。


だから、こんなことしてもOK

urlpatterns = patterns('',
    # Python 製でも何故か PHP!
    (r'^admin.php', include(admin.site.urls)),
)

まぁ冗談としても、自由さが売りなのは良いよね。
(RoR だとモジュール、アクションで名前が決まってて、それに対応するURLとか全部ルール化されてる。設定より規約ってモノだから書く手間省くという意味ではそれでもいいのか?)

ここまでやったらDB初期化

DB を初期化しとく。といってもコマンドひとつ。

manage.py syncdb

途中、Admin 権限ユーザ設定があるけど、今作っておくと面倒が無い。

早速確認

デバッグサーバを起動して、早速アクセスしてみる。
コマンドは、コンソールから

manage.py runserver

毎回書くの面倒なら、run.bat でも作っておくといいかも?
黙って起動すれば、「Development server is running at http://127.0.0.1:8000/」とか表示されるはず。
ここで書いてあるURLにアクセスしてみる。
加えて、さっき

urlpatterns = patterns('',
    # Example:
    # (r'^sns/', include('sns.foo.urls')),
    (r'^admin/', include(admin.site.urls)),
)

こんなん書いてたのに習って、http://127.0.0.1:8000/admin にアクセスする。
アカウントは、さっきコンソールで入力したとおりです。
こんな画面から、作ったテーブルとか直接管理できます。認証とかも自動でやってくれるし、いちいち phpMyAdmin とかイロイロ用意してた次期が懐かしいです。
尚、サーバの停止は「Ctrl + C」で終了できます。