はじめに
原作者様: Javaで湯婆婆を実装してみる - Qiita
色々な言語での実装: 【毎日自動更新】湯婆婆 LGTMランキング! - Qiita
この「令和のHello World!」もプログラミング言語単体だと出尽くし感があるので、今度はWebアプリケーションフレームワークを使ってブラウザで動くデモを作ってみます。
今回は Python 3 + Tornado の組み合わせで作ります。
Tornado Web Server — Tornado 6.1 documentation
検証環境
- Windows 10 Home 2004
- Cygwin
- Python 3.6.10
- Tornado 6.1
事前準備
Tornadoをインストールしておいてください。
$ pip3 install tornado
コード
yubaba.py
import random
import tornado.ioloop
import tornado.web
import tornado.template
class MainHandler(tornado.web.RequestHandler):
_template = tornado.template.Template("""<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Yubaba</title>
</head>
<body>
<p>契約書だよ。そこに名前を書きな。</p>
<form action="/" method="POST">
<input name="name" size="30" value="{{name}}">
<input type="submit" value="送信">
</form>
{% if name != "" %}
<p>
フン。{{name}}というのかい。贅沢な名だねぇ。<br>
今からお前の名前は{{newName}}だ。いいかい、{{newName}}だよ。分かったら返事をするんだ、{{newName}}!!
</p>
{% end %}
</body>
</html>
""")
def get(self):
self.set_header("Content-Type", "text/html")
self.write(self._template.generate(name=""))
def post(self):
name = self.get_body_argument("name")
newName = random.choice(name)
self.set_header("Content-Type", "text/html")
self.write(self._template.generate(name=name, newName=newName))
if __name__ == "__main__":
app = tornado.web.Application([
(r"/", MainHandler),
])
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
- HTMLフォームと湯婆婆のメッセージを書いたHTMLをテンプレートとして用意しておきます。
- HTTPのGETメソッドとPOSTメソッドを実装します。
- GETのときは最初のセリフとHTMLフォームだけを出力します。
- POSTのときは↑に加えて、指定された名前から1文字ランダムに選んで新しい名前を作り、発表します。
動作例
$ python3 yubaba.py
ターミナルには何も出ませんが、これでWebサーバが起動して8888番ポートで待ち受けるので、ブラウザで http://localhost:8888/
にアクセスします。
名前を入れて「送信」を押すと
こうなります。
Python 3.3以降であれば「𠮷田」さんにも問題なく対応します。
関連: [Python] うちの湯婆婆が「𠮷田」さんに対応しているか知りたい - Qiita