[[ともっくす alloc] init]

ともっくすの雑多な日記と技術的なメモ

Pyramidのチュートリアルをやってみる① 〜インストールからアプリケーションの起動まで

も言ったけど,Pyramidを使ってみようと思う.

ここのチュートリアルを進めていく.

日本語の情報少ないし,ツラいねー.


今回は,インストールとかの環境構築から,(ほとんど)何もしなくてもできる,それっぽいアプリケーションの起動まで.

環境構築

まず,Pyramidを使う仮想環境を作る.

$ mkvirtualenv env-pyramid

今回は,env-pyramidという環境名.

仮想環境については,ここ

Pyramidのインストール

$ pip install pyramid

で,インストールする.

現在は,env-pyramid環境にいるので,この環境でしか使えない.そういうやつ.

pyramidをインストールすると,色々自動でインストールされる.

$ pip freeze
Chameleon==2.11
Mako==0.8.1
MarkupSafe==0.18
PasteDeploy==1.5.0
WebOb==1.2.3
pyramid==1.4.3
repoze.lru==0.6
translationstring==1.1
venusian==1.0a8
wsgiref==0.1.2
zope.deprecation==4.0.2
zope.interface==4.0.5

プロジェクトの作成

tutorialという名前のプロジェクトを作成する.

$ pcreate -s alchemy tutorial

pcreateはプロジェクトを作成するためのコマンドで,~/.virtualenvs/env-pyramid/bin/の中.

-sオプションで,scaffoldを指定する.

ここでは,scaffoldという機能を使っていて,土台となる枠組みを自動で生成してくれるっていう感じ.

$ pcreate -l
Available scaffolds:
  alchemy:  Pyramid SQLAlchemy project using url dispatch
  starter:  Pyramid starter project
  zodb:     Pyramid ZODB project using traversal

使用可能なscaffoldの種類はこんな感じ.

ちゃんと理解はしてなけいけど,

  • alchemy:永続化にSQLAlchemyを使って,URLからコードへのマッピングにはURL dispatchを使う
  • starter:永続化はなしで,URLからコードへのマッピングにはURL dispatchを使う
  • zodb:永続化にZODBを使って,URLからコードへのマッピングにはtraversalを使う(Python3では不可)

って感じだろうか.

開発の下準備

簡単にプロジェクトの開発をするために、 setup.py develop コマンドを 使ってプロジェクトを開発用 egg として作業用スペースに “登録” する必要が あります。

インストール — The Pyramid Web Application Development Framework v1.4.1 (翻訳)

ということなので,

$ cd tutorial
$ python setup.py develop

として,実行.

そして,データベースの初期化を行う.

$ initialize_tutorial_db development.ini
2013-07-19 14:10:02,112 INFO  [sqlalchemy.engine.base.Engine][MainThread] PRAGMA table_info("models")
2013-07-19 14:10:02,112 INFO  [sqlalchemy.engine.base.Engine][MainThread] ()
2013-07-19 14:10:02,113 INFO  [sqlalchemy.engine.base.Engine][MainThread]
CREATE TABLE models (
	id INTEGER NOT NULL,
	name TEXT,
	value INTEGER,
	PRIMARY KEY (id),
	UNIQUE (name)
)


2013-07-19 14:10:02,113 INFO  [sqlalchemy.engine.base.Engine][MainThread] ()
2013-07-19 14:10:02,115 INFO  [sqlalchemy.engine.base.Engine][MainThread] COMMIT
2013-07-19 14:10:02,117 INFO  [sqlalchemy.engine.base.Engine][MainThread] BEGIN (implicit)
2013-07-19 14:10:02,118 INFO  [sqlalchemy.engine.base.Engine][MainThread] INSERT INTO models (name, value) VALUES (?, ?)
2013-07-19 14:10:02,118 INFO  [sqlalchemy.engine.base.Engine][MainThread] ('one', 1)
2013-07-19 14:10:02,119 INFO  [sqlalchemy.engine.base.Engine][MainThread] COMMIT

なんか,テーブルができてる感じがする.

ちなみに,プロジェクトの名前によって,コマンドは変わってくる.

正確には,

$ initialize_(プロジェクト名)_db development.ini

かな.

このコマンドの実行で,カレントディレクトリにtutorial.sqliteというデータベースファイルが作成される.

ちょっと見てみよう.

$ sqlite3 tutorial.sqlite
SQLite version 3.7.7 2011-06-25 16:35:41
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
models
sqlite> .schema models
CREATE TABLE models (
	id INTEGER NOT NULL,
	name TEXT,
	value INTEGER,
	PRIMARY KEY (id),
	UNIQUE (name)
);
sqlite> select * from models;
1|one|1
sqlite> .exit

なんかできてる.これでいいでしょう.

アプリケーションの起動

じゃあ,一旦アプリケーションを起動してみる.

$ pserve development.ini --reload
Starting subprocess with file monitor
Starting server in PID 3944.
serving on http://0.0.0.0:6543

デフォルトでは,ポート番号6543で起動される.

で,http://localhost:6543にアクセスすると,こんなページが!
f:id:o_tomox:20130721142927p:plain

環境を作って,pyramidをインストールして,setupして,DBを初期化して,起動するだけで,これだけのものが作れるのは素晴らしい.

ちなみに,右側にあるのは,デバッグツールバーで,色んな情報が見れる.
ヘッダー情報とか,ログとか,実行されたSQLとかとか.

あと,実行したときの--reloadオプションは,ファイルを変更したときに,自動で再起動してくれる優れもの.
ただ,試行錯誤で色々やってる段階だと,エラーが出まくってウザいので,要所要所で使うのがいいかと.

ちなみに,アプリケーションの中断はCtr-c.

あと,なんか,アプリケーションを起動する度に「アプリケーション"python"へのネットワーク受信接続を許可しますか?」って出てきて,なんとかならないのかね.
f:id:o_tomox:20130721144526p:plain
こんなやつね.
ファイアウォールの設定しても変わらないし.



とりあえず,今回はこんな感じで.


次 > Pyramidのチュートリアルをやってみる② 〜 wikiアプリケーションの設計(モデルの定義) - [[ともっくす alloc] init]