Hatena::Groupfukuoka-py

taketin.py RSSフィード

 | 

2009-02-15

Djangoチュートリアルを実践していく(1)

13:19 | Djangoチュートリアルを実践していく(1)  - taketin.py を含むブックマーク はてなブックマーク - Djangoチュートリアルを実践していく(1)  - taketin.py

Django v1.0 documentationを参考にDjangoを実際に使ってみる。

前回のインストールから早3ヶ月。綺麗さっぱり全てを忘れているので、ほんとにDjangoが入っているのか確認。

チュートリアルの通り、Terminalから、

python

import django

と打ってみる。

Python 2.6 (trunk:66714:66715M, Oct  1 2008, 18:36:04) 
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

こんな感じのバージョン表記他は特にエラーもないので良しという事だろうか。

プロジェクト用のディレクトリを作り、その中で

django-admin.py startproject mysite

と実行。

django0215/
    mysite/
        __init__.py
    manage.py
        settings.py
        urls.py

と、mysite配下に4ファイル生成された。各ファイルの説明はチュートリアルにそれぞれ解説がある。

次に、mysite配下で

python manage.py runserver

を実行。

これで開発用サーバが起動するとの事。

Djangoでは開発を迅速に行えるよう、とりあえずapacheをいじらなくてもいいようにこの開発用サーバがもれなく付いてくるみたい。

http://127.0.0.1:8000

でアクセスすると…

f:id:tksthdnr:20090215141355j:image

出た。

次に、settings.pyの中のデータベース設定をいじる。

 DATABASE_ENGINE -- 'sqlite3'
 DATABASE_NAME`  -- 'sample'
 DATABASE_USER -- データベースのユーザ名です (SQLite では使いません)。
 DATABASE_PASSWORD -- データベースのパスワードです。 (SQLite では使いません)。
 DATABASE_HOST -- データベースのあるホストです。 (SQLite では使いません)。

とりあえず一番手軽なsqliteでやってみる。

次に、勝手にテーブル作ってくれるコマンドとやらを実行。

python manage.py syncdb

これで、

Creating table auth_permission
Creating table auth_group
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でスーパーユーザアカウントを作成。

「さあ、これで自分用の環境、すなわちプロジェクトが立ち上がり、作業にとりかかる準備ができました。」(チュートリアルより)

らしい。これからモデルを作っていく。(ここまで超簡単。凄いなあDjango

「再度 settings.py ファイルを編集して、 INSTALLED_APPS 設定を変更し、 'mysite.polls' を入れます。」

と書いてある通りの事を行い、

python manage.py sql polls

と実行。

「以下のような (polls アプリケーション用の CRATE TABLE SQL 文) が表示されるはずです」

とあるが…、実際表示されたのは、

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 340, in execute_manager
    utility.execute()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 295, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 195, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 222, in execute
    output = self.handle(*args, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 286, in handle
    app_output = self.handle_app(app, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/commands/sql.py", line 10, in handle_app
    return u'\n'.join(sql_create(app, self.style)).encode('utf-8')
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/sql.py", line 28, in sql_create
    tables = connection.introspection.table_names()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/__init__.py", line 390, in table_names
    return self.get_table_list(cursor)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/sqlite3/introspection.py", line 49, in get_table_list
    ORDER BY name""")
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/util.py", line 19, in execute
    return self.cursor.execute(sql, params)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/sqlite3/base.py", line 168, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: database is locked

とか。うーむ、最後にsqliteのエラーメッセージが出てる。

なんか設定がおかしいのだろうか。ちょっと調査が必要ぽい。

…調査してみたけど、結局良く分からんかったので、新たにディレクトリ切って最初からやり直した。

んで、さっきつまづいた、

python manage.py sql polls

を実行。すると、

BEGIN;
CREATE TABLE "polls_poll" (
    "id" integer NOT NULL PRIMARY KEY,
    "question" varchar(200) NOT NULL,
    "pub_date" datetime NOT NULL
)
;
CREATE TABLE "polls_choice" (
    "id" integer NOT NULL PRIMARY KEY,
    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"),
    "choice" varchar(200) NOT NULL,
    "votes" integer NOT NULL
)
;
COMMIT;

と表示され、続く

python manage.py syncdb

を実行すると、

Creating table polls_poll
Creating table polls_choice
Installing index for polls.Choice model

と表示された。成功したっぽい。

…どうもさっきsqliteの事を調べた時に、グリグリと色んなコマンド打ってたのが悪影響だったのかな?

とりあえず次の項目

APIで遊んでみる」へ。

python manage.py shell

を実行し、書いてある通りの事を一通り試してみた。

なるほど、PHPのフレームワークしか知らない自分にとって、データベースAPIが非常に強力であろう事が分かった。

オブジェクトの扱い等もPHPと比べると実にスマートな感じ(ドットシンタックスが…)。

しかし、Pythonの基本自体をまだ良く分かって無いので、若干雲を掴む感じなのも事実。

チュートリアル第二部に行く前に、基礎の学習が必要か。

viで編集した時に勝手にタブになってたからインデントエラー頻発してたのも設定変えなければ。

という事で今日はこれまで!

RaychelRaychel2012/02/21 03:43Touchdown! That's a rellay cool way of putting it!

gngubahmllbgngubahmllb2012/02/22 01:172zFgjj , [url=http://mrmdrbjsphsr.com/]mrmdrbjsphsr[/url], [link=http://efyltrhzdfqk.com/]efyltrhzdfqk[/link], http://dlcxbaosgmgr.com/

comcbxcomcbx2012/02/29 02:25k5AYCi <a href="http://bmudulujjafr.com/">bmudulujjafr</a>

 |