友人から tornado フレームワークの開発を依頼されました。正直に言うと、私はこのフレームワークをあまり使用しません。 。 。
運用と保守の研究開発に関連した私自身の例をいくつか紹介します。
Tornado のインストール方法は誰もが知っていると思います。
pip install tornado
公式 Web サイトで紹介されているモジュールのいくつかについて話しましょう。私の理解も含めて、長々と繰り返します。
メインモジュール
web - FriendFeed で使用される基本的な Web フレームワーク。Tornado の重要な機能のほとんどが含まれています。
エスケープ - XHTML、JSON、URL エンコード/デコード メソッド
データベース - 使いやすくするための MySQLdb の単純なカプセル化。これは ORM です。
template - jinja2
に似た、Python ベースの Web テンプレート システム
httpclient - ノンブロッキング HTTP クライアント。Web および httpserver で動作するように設計されています。これは、urllib2
を追加するのと似ています。
auth - サードパーティ認証の実装 (Google OpenID/OAuth、Facebook Platform、Yahoo BBAuth、FriendFeed OpenID/OAuth、Twitter OAuth を含む)
locale - ローカリゼーションと翻訳のサポート
オプション - コマンドラインおよび設定ファイル解析ツール。サーバー環境に最適化され、パラメータを受け入れます
基礎となるモジュール
httpserver - Web モジュールを提供する非常に単純な HTTP サーバーの実装
iostream - 一般的な読み取りおよび書き込み操作を容易にする非ブロッキング ソケットの単純なカプセル化
ioloop - コア I/O ループ
Tornado がリクエストをどのように受け入れるかについて話しましょう:
入手方法について
class MainHandler(tornado.web.RequestHandler): def get(self): self.write("You requested the main page") class niubi(tornado.web.RequestHandler): def get(self, story_id): self.write("xiaorui.cc niubi'id is " + story_id) application = tornado.web.Application([ (r"/", MainHandler), (r"/niubi/([0-9]+)", niubi), ])
このように、/niubi/123123123 にアクセスすると、niubi クラスとその中の get パラメータが使用されます。
投稿方法について
class MainHandler(tornado.web.RequestHandler): def get(self): self.write('<html><body><form action="/" method="post">' '<input type="text" name="message">' '<input type="submit" value="Submit">' '</form></body></html>') def post(self): self.set_header("Content-Type", "text/plain") self.write("xiaorui.cc and " + self.get_argument("message"))
tornado では、一般に get と post は同じアクセス ルートにあり、メソッドが異なるだけで区別されます。
ナンセンスはこれくらいにして、取得と投稿をテストしてみましょう。
import tornado.ioloop import tornado.web import json class hello(tornado.web.RequestHandler): def get(self): self.write('Hello,xiaorui.cc') class add(tornado.web.RequestHandler): def post(self): res = Add(json.loads(self.request.body)) self.write(json.dumps(res)) def Add(input): sum = input['num1'] + input['num2'] result = {} result['sum'] = sum return result application = tornado.web.Application([ (r"/", hello), (r"/add", add), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
#フォーム テストを作成することも、curl -d を使用してテストすることもできます