Python + Tornado에서 할머니를 구현해보십시오.

소개



원작자 : 자바로 유파를 구현해 보자 ​​- Qiita
다양한 언어로 구현 : 【매일 자동 갱신】유파파 LGTM 랭킹! - Qiita

이 「영화의 Hello World!」도 프로그래밍 언어 단체라고 다진 느낌이 있으므로, 이번에는 웹 어플리케이션 프레임워크를 사용해 브라우저로 움직이는 데모를 만들어 봅니다.
이번에는 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
    

    터미널에는 아무것도 나오지 않지만, 이제 웹 서버가 시작되어 8888번 포트에서 기다리므로 브라우저에서 http://localhost:8888/ 에 액세스합니다.

    이름을 넣고 '제출'을 누르면

    이렇게 됩니다.

    Python 3.3 이후라면 「𠮷田」씨에게도 문제없이 대응합니다.
    관련 : [Python] 우리 유파가 "𠮷田"씨를 지원하는지 알고 싶다 - Qiita


    약속



    이름을 아무것도 쓰지 않고 제출하면 떨어집니다. 더 이상 전통예

    이 때의 터미널의 모습이 이쪽.

    좋은 웹페이지 즐겨찾기