Pythonでアプリを作ることになったので勉強 3日目 (Django)

2012年3月28日 20:45 under Python

都合により土曜日に何らかの成果物を用意する事になったので、そうなると今のペースでは間に合わないため書籍を読むのは程々にしてさっさと開発をはじめることにします。で、フレームワークとして Django を使うことになりました。それについても合わせて勉強していくことにします。

Django 環境を用意するため、まず python のパッケージ管理システムである pip をインストールします。インストールの方法としては pip 以前の python のパッケージ管理システムである easy_install を使用します。

myMachine:~ kyo$ sudo easy_install pip
Password:
Searching for pip
Reading http://pypi.python.org/simple/pip/
Reading http://pip.openplans.org
Reading http://www.pip-installer.org
Best match: pip 1.1
Downloading http://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#md5=62a9f08dd5dc69d76734568a6c040508
Processing pip-1.1.tar.gz
Running pip-1.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-1wivpX/pip-1.1/egg-dist-tmp-M4RiEo
warning: no files found matching '*.html' under directory 'docs'
warning: no previously-included files matching '*.txt' found under directory 'docs/_build'
no previously-included directories found matching 'docs/_build/_sources'
Adding pip 1.1 to easy-install.pth file
Installing pip script to /usr/local/bin
Installing pip-2.7 script to /usr/local/bin

Installed /Library/Python/2.7/site-packages/pip-1.1-py2.7.egg
Processing dependencies for pip
Finished processing dependencies for pip
myMachine:~ kyo$ 

滞り無く pip のインストールが終わったので Django をインストールします。 Django 1.4 は3月23日に公開されたばかりですが、 pip では既に 1.4 に対応しているようです。

ちなみに他のパッケージと同様に pip search django で django 関連のパッケージの検索をすることができますが、ヒット数が多すぎて中々レスポンスが返ってこないので止めておいたほうが良いです。

myMachine:~ kyo$ sudo pip install django
Downloading/unpacking django
  Downloading Django-1.4.tar.gz (7.6Mb): 7.6Mb downloaded
  Running setup.py egg_info for package django
    
Installing collected packages: django
  Running setup.py install for django
    changing mode of build/scripts-2.7/django-admin.py from 644 to 755
    
    changing mode of /usr/local/bin/django-admin.py to 755
Successfully installed django
Cleaning up...
myMachine:~ kyo$ 

インストールが終わったら python のインタラクティブシェルで Django をインポートしてみます。エラーが表示されなければ成功です。

myMachine:~ kyo$ python
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> 

早速 Django を使ったWebアプリケーションを作成してみましょう。適当な作業用のディレクトリを作成し、そこに change directory します。そこで django-admin.py startproject sample とすると、成功した場合特に何も表示されませんが sample というディレクトリが作成されているはずです。

myMachine:~ kyo$ mkdir study_python
myMachine:~ kyo$ cd study_python/
myMachine:study_python kyo$ django-admin.py startproject sample
myMachine:study_python kyo$ ls
sample
myMachine:study_python kyo$ cd sample/
myMachine:sample kyo$ ls
manage.py sample

サーバを起動して確認してみます。 python manage.py runserver を行い、表示されるURLにアクセスします。

myMachine:sample kyo$ python manage.py runserver
Validating models...

0 errors found
Django version 1.4, using settings 'sample.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Webブラウザで次のような画面が表示されれば成功です。

今回は DB に MySQL を使用します。 MySQL はすでにインストールしてあるものの、 python で MySQL に接続するためのモジュールが必要なので pip でインストールします。

myMachine:~ kyo$ sudo pip install MySQL-python
Password:
Downloading/unpacking MySQL-python
  Running setup.py egg_info for package MySQL-python
    
    warning: no files found matching 'MANIFEST'
    warning: no files found matching 'ChangeLog'
    warning: no files found matching 'GPL'
Installing collected packages: MySQL-python
  Running setup.py install for MySQL-python
    
    warning: no files found matching 'MANIFEST'
    warning: no files found matching 'ChangeLog'
    warning: no files found matching 'GPL'
Successfully installed MySQL-python
Cleaning up...
myMachine:~ kyo$ 

次に Django で作成したプロジェクトファイルの中に settings.py というファイルがあるので、ここで DB の設定を行います。予め MySQL で sampledb というデータベースを作成しておきます。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'sampledb',                      # Or path to database file if using sqlite3.
        'USER': 'mysqluser',                      # Not used with sqlite3.
        'PASSWORD': 'mysqlpassward',                  # 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.
    }
}

当初 ENGINE に ‘mysql’ と記述していたのですが、次の工程で以下のエラーが出たため、書き換えました。

myMachine:sample kyo$ python manage.py syncdb
Traceback (most recent call last):

 *** 中略 ***

django.core.exceptions.ImproperlyConfigured: 'mysql' isn't an available database backend.
Try using django.db.backends.mysql instead.
Error was: No module named mysql.base

次に プロジェクトに対応したデータベースを初期化する python manage.py syncdb を実行します。すると環境によるのかもしれませんが、私の環境では以下のエラーが出たため DYLD_LIBRARY_PATH の設定を行う必要がありました。

myMachine:sample kyo$ python manage.py syncdb
Traceback (most recent call last):

*** 中略 ***

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Library/Python/2.7/site-packages/_mysql.so
  Reason: image not found

# DYLD_LIBRARY_PATH に mysql/lib の場所を設定
myMachine:sample kyo$ export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
myMachine:sample kyo$ python manage.py syncdb
Creating tables ...
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 django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log

今度は成功し、するとスーパーユーザの作成を求められるので作成します。

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 'kyo'): 
E-mail address: 
Password: 
Password (again): 
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
myMachine:sample kyo$ 

ここで MySQL の sampledb データベースを確認するとテーブルがいくつか作成されているはずです。 mysql コマンドでログインしてもよいですが、以下のコマンドでデータベースにログインすることも可能です。

myMachine:sample kyo$ python manage.py dbshell

時間切れなので今日はここで終わりです。今日は環境設定にはまって精神と時間が削られたため説明がおざなりですみません。

参考にしたサイト


3 responses so far