このページの本文へ

PROGRAMMING 山崎徳之の実践Python塾 ― 第2回

初めてのDjangoプロジェクト

2010年09月07日 10時00分更新

山崎徳之/ゼロスタートコミュニケーションズ代表取締役

  • この記事をはてなブックマークに追加
本文印刷

初めてのDjangoプロジェクト

 Djangoには「プロジェクト」と「アプリケーション」という概念があります。プロジェクトには複数のアプリケーションが存在できる、という関係です。どう使うかは人それぞれですが、私はユーザー向けのフロント側、管理側、APIというように、UIを切り口にしてアプリケーションを分離しています。PC用とモバイル用は、そもそもプロジェクトを分離してしまうことが多いです。もちろんベタープラクティスもありますが、このあたりは好みの問題でもあるので、いろいろトライしてみるとよいです。サービス単位でアプリケーションを分けることもあるでしょうし、まずはアプリケーションが1つのプロジェクトから始めればOKです。

 さっそくプロジェクトを作成しましょう。この連載では、Twitterと連携するアプリケーションを作ろうと思います。数あるTwitterアプリの中でも、私が大好きなツールにMeityがあります。とてもよくできていて、もはや Meityなしは考えられない状態です。ただ、 Meityにも「もっとこういう機能があったら」と思うことがあるので、Meityを私なりに改善するアプリケーションを趣味と実益をかねてサンプルとして作ることにしました。名前はとりあえずtwixにしようと思います。そういうお菓子ありましたね。

 twixプロジェクトを作成するには、Djangoをインストールすると一緒に用意されるdjango-admin.pyというスクリプトを使います。django-admin.pyは、プロジェクトの作成でお世話になるスクリプトです。


$ django-admin.py startproject twix


 django-admin.pyを実行すると、「twix」というディレクトリが作成されるはずです。twixプロジェクトの開発は、twixディレクトリ以下での作業が基本になります。 twixディレクトリの中身を見てみましょう。


$ cd twix
$ ls
__init__.py        manage.py        settings.py        urls.py


 __init__.pyは、サイズが0バイトのPythonが認識する特殊なファイルです。ディレクトリ内にインポートする対象のパッケージがある場合に、中身が空でもよいので置いておくキマリがあります。

 manage.pyは、今後の開発で用いるユーティリティスクリプトです。中身はdjango-admin.pyと殆ど一緒で、manage.pyにコマンドを与えることでいろいろなことができます。

 settings.pyは、名前のとおり各種設定を記述するためのファイルです。django-admin.pyでプロジェクトを作成した直後は必要最小限の設定と説明文が書かれています。settings.pyは設定ファイルですが、Pythonスクリプトのファイルであり、Pythonとして書けることが実質何でも書けます。settings.pyに関数やクラス、メソッドも書けます。

 urls.pyはURLconfでURLとメソッドのマッピングをするためのファイルです。プロジェクトを作成した直後は、最小限の内容と説明文が記述されています。 プロジェクト作成後に最初にするのは、アプリケーションの作成かsettings.pyの編集です。ここではsettings.pyをいじることから始めましょう。といってもその前に、twix用のデータベースを作成しましょう。MySQLが起動していなければ起動してください。


$ mysqld_safe &


 mysqlコマンドかmysqladminコマンドでデータベースをcreateします。


$ mysql –uroot
mysql> create database twix;


 便宜上、twixデータベースにはMySQLのrootユーザーで接続する形で話を進めますが、もちろん実際にアプリケーションを作成、公開するときは、セキュリティ上、別のアカウントで接続するのが必須です。

 データベースを作成して接続用のユーザーに権限を設定したら、settings.pyの接続情報を記述します。Djangoのバージョンによって異なりますが、Django-1.2.1の場合、settings.pyのデータベース接続情報の部分は、標準では以下のようになっているはずです。


DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
       'NAME': '',                      # Or path to database file if using sqlite3.
       'USER': '',                      # Not used with sqlite3.
       'PASSWORD': '',                  # Not used with sqlite3.
       'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
       'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
   }
}


 上記コメント部分を削除し、接続情報を付加して以下のように修正します。もちろん、NAME/USER/PASSWORD/HOST/PORTは環境にあわせて記述します。


DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.mysql',
       'NAME': 'twix',
       'USER': 'root',
       'PASSWORD': '',
       'HOST': '',
       'PORT': '',
   }
}


 次にmanage.pyを使って必要なテーブルを作成します。manage.pyにsyncdbというコマンドを渡すと、必要なテーブル各種を作成してくれるのです。また、このプロジェクト上でのスーパユーザアカウントを作成しますか?(黄色い部分)と聞かれるので必要に応じて作成します。


[zaki:zaki/1902]$ python manage.py syncdb
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'zaki'):
E-mail address: mail@example.com
Password:********
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Group_permissions model
Installing index for auth.User_user_permissions model
Installing index for auth.User_groups model
Installing index for auth.Message model
No fixtures found.
[zaki:zaki/1903]$


 manage.py でテーブルを作った後でMySQLでshow tablesすると、テーブルが作成されていることを確認できるはずです。以上で最低限の事前準備は完了ですので、サーバーを起動してみましょう。manage.pyにrunserverというコマンドを渡すと127.0.0.1からのアクセスをポート8000を待ち受ける状態でサーバーが起動します。


$ python manage.py runserver


 ブラウザーでアクセスすると、起動している画面が見られるでしょう。

サンプルアプリを起動したところ

 runserverの引数で指定すると、アクセスできるアドレスや待ち受けポートを変更できます。たとえば全IPアドレスからのアクセスをポート8888で待ち受けるときは、以下のように引数を指定します。


$ python manage.py runserver 0.0.0.0:8888


 さて、今回はDjangoのファーストステップについて解説しました。正直ここまではネット上でたくさん見かける内容ですが、かといって省くわけにもいかないのでご容赦ください。次回からは具体的な実装内容とPythonプログラミングについて解説します!

著者:山崎徳之

ゼロスタートコミュニケーションズ代表取締役。青山学院大学卒業後、アスキー、So-netなどでネットワーク、サーバエンジニアを経験。オン・ザ・エッヂ(現ライブドア)のデータセンターである「データホテル」を構築、運営。2003年にベイエリアにおいてVoIPベンチャーであるRedSIP Inc.を創業。2006年6月に(株)ゼロスタートコミュニケーションズを設立、代表取締役就任(現任)。

■関連サイト

Web Professionalトップへ

Web Professionalトップページバナー

この記事の編集者は以下の記事をオススメしています

ASCII.jp会員サービス 週刊Web Professional登録

Webディレクター江口明日香が行く

ランキング