Symfoware

Symfowareについての考察blog

FreeBSD 10にPythonフレームワーク「Pyramid」をインストールする

PythonのWebフレームワーク「Pyramid」を勉強してみようと思います。
フルスタックなフレームワークを使ってみるのは初めてかも。
FreeBSD 10に環境を構築するところから始めてみます。


Pythonのインストール



Pythonやeasy_installを使えるようにしておきます。
FreeBSD 10にPythonとeasy_installをインストールする(pkg install使用)



Pyramidのインストール



Pyramid チュートリアル
こちらを参考に進めていきます。

Pyramidはeasy_installでインストールしました。


# easy_install pyramid




あっさりインストール完了です。
バージョン1.5がインストールされました。





Hello, world



お決まりの「Hello, world」から。

こんなプログラムを作成し、「hello.py」というファイル名で保存しました。


  1. # -*- coding:utf-8 -*-
  2. from wsgiref.simple_server import make_server
  3. from pyramid.config import Configurator
  4. from pyramid.response import Response
  5. def hello_world(request):
  6.     return Response('Hello world!')
  7. if __name__ == '__main__':
  8.     config = Configurator()
  9.     config.add_view(hello_world)
  10.     app = config.make_wsgi_app()
  11.     server = make_server('0.0.0.0', 8080, app)
  12.     server.serve_forever()




プログラムを実行。


# python hello.py




ブラウザでhttp://[サーバーIP]:8080/を表示してみます。

413_01.png

ちゃんと表示できました。





ルーティング



URL毎に別の処理を行ってみます。

http://[サーバーIP]:8080/
http://[サーバーIP]:8080/hello

この2つで処理を分けてみます。


  1. # -*- coding:utf-8 -*-
  2. from wsgiref.simple_server import make_server
  3. from pyramid.config import Configurator
  4. from pyramid.response import Response
  5. from pyramid.view import view_config
  6. # /でアクセスされた時の処理
  7. @view_config(route_name='home')
  8. def index(request):
  9.     return Response("home url")
  10. # /helloでアクセスされた時の処理
  11. @view_config(route_name='hello')
  12. def hello_url(request):
  13.     return Response("hello url")
  14. if __name__ == '__main__':
  15.     config = Configurator()
  16.     config.add_route('home', '/')
  17.     config.add_route('hello', '/hello')
  18.     
  19.     #@view_configデコレーターの解析
  20.     config.scan()
  21.     app = config.make_wsgi_app()
  22.     server = make_server('0.0.0.0', 8080, app)
  23.     server.serve_forever()





ちゃんと表示するページが切り替えられました。

413_02.png

413_03.png



config.scan()で、@view_configデコレーターの解析を行い、Viewの登録を行ってくれます。
デコレーターを使用しないパターンだとこんな感じになります。


  1. # -*- coding:utf-8 -*-
  2. from wsgiref.simple_server import make_server
  3. from pyramid.config import Configurator
  4. from pyramid.response import Response
  5. from pyramid.view import view_config
  6. # /でアクセスされた時の処理
  7. def index(request):
  8.     return Response("home url")
  9. # /helloでアクセスされた時の処理
  10. def hello_url(request):
  11.     return Response("hello url")
  12. if __name__ == '__main__':
  13.     config = Configurator()
  14.     config.add_route('home', '/')
  15.     config.add_route('hello', '/hello')
  16.     
  17.     #viewの設定
  18.     config.add_view(index, route_name='home')
  19.     config.add_view(hello_url, route_name='hello')
  20.     app = config.make_wsgi_app()
  21.     server = make_server('0.0.0.0', 8080, app)
  22.     server.serve_forever()









makoテンプレート



テンプレートエンジンを使用してページの描画を行ってみます。
いろいろなテンプレートエンジンが使用できるようですが、今回はmakoを使用します。

テンプレート保存用のディレクトリを作成。


# mkdir templates




作成した「templates」フォルダに「index.mak」というファイルを作成。
内容は以下の通り。


  1. <html>
  2. <body>
  3. <h1>Hello, ${name}</h1>
  4. </body>
  5. </html>





プログラムの内容はこうなりました。


  1. # -*- coding:utf-8 -*-
  2. from wsgiref.simple_server import make_server
  3. from pyramid.config import Configurator
  4. from pyramid.view import view_config
  5. @view_config(route_name='home', renderer='index.mak')
  6. def index(request):
  7.     return dict(name='pyramid')
  8. if __name__ == '__main__':
  9.     
  10.     import os
  11.     here = os.path.dirname(__file__)
  12.     settings = {
  13.         'mako.directories' : [
  14.             os.path.abspath(os.path.join(here, 'templates')),
  15.         ],
  16.         }
  17.         
  18.     config = Configurator(settings=settings)
  19.     config.include('pyramid_mako')
  20.     config.add_route('home', '/')
  21.     
  22.     #@view_configデコレーターの解析
  23.     config.scan()
  24.     app = config.make_wsgi_app()
  25.     server = make_server('0.0.0.0', 8080, app)
  26.     server.serve_forever()




makoを使用するためのライブラリをインストールします。


# easy_install pyramid_mako




こんな感じで、ブラウザに表示されると思います。

413_04.png






ValueError: No such renderer factory .mak



最初、プログラムを実行した時


ValueError: No such renderer factory .mak



というエラーが発生しました。
ブラウザには


A server error occurred. Please contact the administrator.



と表示されます。

413_05.png


どうもPyramid 1.5で仕様が変更されたようで


  1. config.include('pyramid_mako')



この記載が必要でした。
http://docs.pylonsproject.org/projects/pyramid/en/master/whatsnew-1.5.html


ちなみに、どのテンプレートエンジンを使用するかは、ファイルの拡張子で判断しているようです。
makoを使用する場合は「.mak」または「.mako」
Chameleonというテンプレートエンジンを使用する場合は「.pt」とするようです。
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/04/22(火) 23:41:58|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ