Python의 웹 프레임워크를 사용한 Tornado의 2

13653 단어 PythontornadoHTML

개시하다


요즘Tornado 놀고 있기 때문에 사용법을 총괄해야 합니다.
이번에는 템플릿을 사용해 보자.사용해 보았을 뿐 해설은 그다지 하지 않았다.다음을 기대하다.그리고 질문과 요구가 있으면 대답할게요.

운영 환경


나의 실행 환경은 다음과 같지만 파이톤이 일하는 환경은 문제없을 것이다.
  • CentOS release 6.5 (Final)
  • Python 2.6.6
  • 관련 보도

  • Python의 웹 프레임워크를 사용하는 Tornado 중 하나
  • 템플릿 엔진


    템플릿 엔진은 템플릿(모형)과 입력 데이터를 합성하여 문자열을 만드는 구조입니다.이번에는 파이썬의 웹 템플릿 엔진에만 한정됩니다.이 경우 템플릿 엔진은 HTML의 템플릿 내부에 파이썬 코드를 부분적으로 포함시켜 최종적으로 HTML을 생성하는 구조를 말한다.좀 어려우면 아래 위키백과 글을 참고하거나 구글에서 찾아보세요.
  • 위키백과 템플릿 엔진
  • 위키백과 웹 템플릿
  • Tornado의 템플릿 엔진


    백문이 불여일견, 우선 템플릿 엔진을 사용하는 예다.사용하는 index입니다.개조해 보겠습니다.또한 디렉터리 구성은 저번의 디렉터리 구성을 계승했다.
    이것은 매우 지루한 예이니 지금 시간을 보여 주시오.

    코드


    지난번부터 변경된 점은 다음과 같다.
  • {%from 데이터 time import 데이터 time 추가%}
  • 증가

    {datetime.now ()}

  • <!DOCTYPE html>
    <html>
      <head>
        <title>Hello, world</title>
        <link rel="stylesheet" href="{{ static_url("style.css") }}"/>
        {% from datetime import datetime %}
      </head>
      <body>
        <div id="container">
          <div id="main">
              <p>Hello, world</p>
              <p>{{datetime.now()}}</p>
          </div>
        </div>
      </body>
    </html>
    

    실행 예


    브라우저 액세스를 통해 현재 시간을 얻을 수 있습니다.
    저번

    해설


    Python에서는 익숙한 다음 코드를 {%와%} (또는 {및}) 로 묶어서 HTML에 직접 기술합니다.
    # datetimeモジュールからdatetimeをインポート
    from datetime import datetime
    # datetime.nowメソッドで現在時刻を取得
    datetime.now()
    
    지금까지 계속 쓰고 있어요.
    {{ static_url("style.css") }}
    
    템플릿 엔진의 기능이기도 하다.
    {%와%}(또는 {와})에 포함된 문자열은 평가 결과로 바뀝니다.간단하네.
    Tornado의 템플릿 엔진에서 기본적으로 HTML 파일에서 {%와%}(또는 {{와})로 파이톤 코드를 포위할 때 그 평가 결과는 HTML에 삽입됩니다.
    for,while,if,try-cxcept 등 제어 구조도 쓸 수 있습니다.
  • {% for var in expr %}...{% end %}
  • {% while condition %}... {% end %}
  • {% if condition %}...{% elif condition %}...{% else %}...{% end %}
  • {% try %}...{% except %}...{% finally %}...{% else %}...{% end %}
  • 템플릿의 변수를 정의할 수도 있습니다.
  • {% set x = y %}
  • 앞으로 더 잘 정리하고 더 자세히 알고 싶으신 분들은 Tornado 매뉴얼저번을 보세요.

    서버 프로그램의 계산 결과를 표시합니다


    다음은 서버 프로그램(server.py)의 계산 결과를 어떻게 받아들이는지 설명합니다.
    post () 방법과 get () 방법의 설명은 다음 이후로 잠시 사용해 보십시오.
    취직 활동 때 배려받은 글자수 통계 프로그램을 써 보세요.

    디렉토리 구조

    $ tree --charset=x
    .
    |-- server.py
    |-- static
    |   `-- style.css
    `-- templates
        |-- index.html
        `-- result.html
    

    코드


    index.) 게시된 POST 요청의 결과를 post 방법으로 받습니다.result.변수len>바디를 통해 표시됩니다.
    지루한 예처럼 보이지만 그렇게 할 수 있다면 파이톤을 통해 계산 결과를 전달할 수 있기 때문에 CGI 전성기 웹 애플리케이션은 쓸 수 있을 것 같다.
    server.py
    #!/bin/env python
    # -*- coding: utf-8 -*-
    from __future__ import print_function
    import os
    import tornado.ioloop
    import tornado.web
    
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            self.render("index.html")
    
        def post(self):
            body = self.get_argument('body')
    
            len_body = len(body)
    
            self.render("result.html",
                        len_body = len_body
                        )
    
    
    application = tornado.web.Application([
        (r"/", MainHandler)
        ],
        template_path=os.path.join(os.getcwd(),  "templates"),
        static_path=os.path.join(os.getcwd(),  "static"),
    )
    
    if __name__ == "__main__":
        application.listen(8888)
        print("Server is up ...")
        tornado.ioloop.IOLoop.instance().start()
    
    p 태그의 스타일을 삭제합니다.
    style.css
    body {
      font-family:'Lucida Grande', 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', "MS Pゴシック", sans-serif;
      width: 80%;
      margin: 0 auto;
    }
    
    index.단어 수를 계산하려는 문자열을 입력하는 화면을 표시합니다.
    index.html
    <!DOCTYPE html>
    <html>
      <head>
        <title>文字数カウンタ</title>
        <link rel="stylesheet" href="{{ static_url("style.css") }}"/>
      </head>
      <body>
        <div id="container">
          <div id="main">
            <form method="post" action="/">
              <textarea name="body" cols="40" rows="4"></textarea>
              <input type="submit">
            </form>
          </div>
        </div>
      </body>
    </html>
    
    result.) 계산 결과를 표시합니다.
    result.html
    <!DOCTYPE html>
    <html>
      <head>
        <title>文字数カウンタ</title>
        <link rel="stylesheet" href="{{ static_url("style.css") }}"/>
      </head>
      <body>
        <div id="container">
          <div id="main">
              <p>{{len_body}}</p>
          </div>
        </div>
      </body>
    </html>
    

    실행 예


    확실한 글자수는 셀 수 있다.환경에 따라 글자 수가 다를 수 있습니다.
    tornado.template — Flexible output generation

    다음 계획


    확장자 수.원한다면 TF/IDF 유사도 검색 같은 내용을 쓸 수도 있습니다.

    좋은 웹페이지 즐겨찾기