基本的なプログラミングのpython:Pythonは、Webページエンドブック表示を実現するためにトルネードフレームワークを使用します

トルネードは、PythonのWeb開発フレームワークの人気が高いです、私たちは本の最後を示すWebページのインスタンスを達成するためにトルネードPythonのフレームワークを使用することを示すために、ここにいる、1は明らかにトルネードテンプレートのプロセスを実行し、例を通じてWeb全体のプログラムを使用することを学ぶことができます。
:まず、なぜトルネード選択
などgevent、ねじれ、libevent、右行うことができ、1高性能ネットワークライブラリを。
、非同期IOタイムアウトイベント処理のためのサポートを提供してこれに基づきtcpserverのを提供し、HTTPClientは、特にcurlhttpclientは
確かに既存のHTTPクライアントで1位。それは私の知る限り、業界はゲームサーバとしての竜巻を使用していた、爬虫類、ゲームサーバのために使用することができます

DJANGOでき2.webフレームワーク、フラスコ右。
それは、ルーティング、テンプレートや他のWebフレームワークの前提条件を提供します。そして、他の違いは、竜巻が非同期、自然なフィット長い回転、ということです
竜巻のFriendFeed発明の理由で、現在のフラスコをサポートすることができますが、geventなどの助けを必要と

3. Aより完全なHTTPサーバ、この缶とnginxの、apacheのコントラスト、
だけnginxのを使用して、前方マルチコアをより良く利用するためにだけでなく、HTTP1.1をサポートするために許可されてHTTP1.0、DOをサポートしています

gunicoreできる4.完全なWSGIサーバ、比較を行うためにgevent WSGIサーバ、
フラスコは竜巻上で実行することができましょうと言うことです、竜巻加速フラスコを聞かせて

5. HTML5ゲームは利便性を提供します、完全なWebSocketをサポートし、提供します。
我々が使用しているのWebSocket回転で、ほぼ限り知っているが、WebSocketの電話サポートは、非常に良いではありません
前に、時限AJAXを使用するために多数の要求を送信するために持っていたいくつかの時間、すぐに携帯電話のブラウザを追いつく期待

使用が導入シンプルなページの本作成竜巻
仕事に取り掛かる、まあを、この本で見てみましょうが、実現のコードページについて説明します
。1.ウェブサービスエントリファイルblockmain.pyを作成します。

#coding:utf-8
import tornado.web
import tornado.httpserver
import tornado.ioloop
import tornado.options
import os.path
import json
import urllib2
 
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
 
class MainHandler(tornado.web.RequestHandler):
  def get(self):
    self.render(
      "index.html",
      page_title = "Burt's Books ¦ Home",
      header_text = "Welcome to Burt's Books!",
      books = ['细说php','python','PHP','小时代']
    )
 
 
class HelloModule(tornado.web.UIModule):
  def render(self):
    return'<h1>I am yyx and this is an information from module hello!</h1>'
 
class BookModule(tornado.web.UIModule):
  def render(self,bookname):
    doubanapi = r'https://api.douban.com/v2/book/'
    searchapi = r'https://api.douban.com/v2/book/search?q='
    searchurl = searchapi+bookname
    searchresult = urllib2.urlopen(searchurl).read()
    bookid = json.loads(searchresult)['books'][0]['id']
    bookurl = doubanapi+bookid
    injson = urllib2.urlopen(bookurl).read()
    bookinfo = json.loads(injson)
    return self.render_string('modules/book.html',book = bookinfo)
 
  def embedded_javascript(self):
    return "document.write(\"hi!\")"
 
  def embedded_css(self):
    return '''.book {background-color:#F5F5F5}
         .book_body{color:red}
    '''
 
  def html_body(self):
    return '<script>document.write("Hello!")</script>'
 
if __name__ == "__main__":
  tornado.options.parse_command_line()
  app = tornado.web.Application(
    handlers = [
      (r'/',MainHandler),
 
    ],
    template_path = os.path.join(os.path.dirname(__file__),'templates'),
    static_path = os.path.join(os.path.dirname(__file__),'static'),
    debug = True,
    ui_modules={'Hello':HelloModule,'Book':BookModule}
 
 
    )
  http_server = tornado.httpserver.HTTPServer(app)
  http_server.listen(options.port)
  tornado.ioloop.IOLoop.instance().start()

MVCの基本的な概念のいくつかの説明:
トルネードパス情報パターンはパラメータを取得するために、ユーザの入力にマッチしているが、その後、このようなIなどの様々なモードのための適切なクラスのクラス一致を設定することで処理され、適切なハンドラを、呼び出しますこれによりMainHandler / GETリクエストクラスから処理され
たパラメータでのindex.htmlのパラメータは{{}}呼び出しに、MainHandlerはindex.htmlをレンダリングする要求をレンダリング

2.、適切なテンプレートを確立し、テンプレートベースの親main.htmlとを作成し、テンプレートディレクトリを作成し、その下main.htmlとを作成し、このテンプレートは、唯一の最も基本的なWebサイトのフレームワーク、それはから継承されたその具体的な内容を定義しますサブクラス具現化

<html>
<head>
  <title>{{ page_title }}</title>
  <link rel="stylesheet" href="{{ static_url("css/style.css") }}" />
</head>
<body>
  <div id="container">
    <header>
      {% block header %}<h1>Burt's Books</h1>{% end %}
    </header>
    <div id="main">
      <div id="content">
        {% block body %}{% end %}
      </div>
    </div>
    <footer>
      {% set mailLink = '<a href="mailto:[email protected]">Contact Us</a>' %}
      {% set script = '<script>alert("hello")</script>' %}
      {% block footer %}
 
        <p>
          For more information about our selection, hours or events, please email us at{% raw mailLink %}
 
          <!-- {% raw script %} 这里将原样输出,也就是会弹一个框-->
        </p>
      {% end %}
    </footer>
  </div>
  <script src="{{ static_url("js/script.js") }}"></script>
  </body>
</html>

ここで、メインフレーム、前記内側{%ブロックヘッダ%}の定義は

バートさんブックス

{%エンド%が}サブクラス継承ブロック(ブロック)、サブクラス継承このmain.htmlとするためのテンプレートであり、それはデフォルトの親クラスを実装していない場合、このブロックは、サブクラスによって実装されたライトに特異的に何場合の値、

バートさんブックス

、MainHandlerクラスは親クラスを継承するのindex.html index.htmlを、その後、次の書き込みをレンダリングすることです

{% extends "main.html" %}
 
{% block header %}
  <h1>{{ header_text }}</h1>
{% end %}
 
{% block body %}
  <div id="hello">
    <p>Welcome to Burt's Books!</p>
    {% module Hello() %}
 
    {% for book in books %}
      {% module Book(book) %}
    {% end %}
    <p>...</p>
  </div>
{% end %}

また、継承の利点を使用して、簡単なシンプルなバー、長い親クラスの内容の実現をブロックできるようとして、書き込み何かに親クラスを繰り返さない
レンダリングメソッドのパラメータMainHandlerクラスを

page_title = "Burt's Books | Home",
header_text = "Welcome to Burt's Books!",
books = ['细说php','python','PHP','小时代']

ここで、パラメータに送信する
ための場合に使用する場合、他の使用中に{%}%エンドの端部に使用することができるテンプレート竜巻のPythonコード、プラス{%}%
コード{%モジュールブック(書籍)% } 定義されたサービスモジュール対応する「予約」をエントリし、ファイルを呼び出す
ui_modules = {:HelloModule「こんにちは」 、「ブック」:BookModuleは} BookModuleある、BookModuleの上記定義を参照します

class BookModule(tornado.web.UIModule):
  def render(self,bookname):
    doubanapi = r'https://api.douban.com/v2/book/'
    searchapi = r'https://api.douban.com/v2/book/search?q='
    searchurl = searchapi+bookname
    searchresult = urllib2.urlopen(searchurl).read()
    bookid = json.loads(searchresult)['books'][0]['id']
    bookurl = doubanapi+bookid
    injson = urllib2.urlopen(bookurl).read()
    bookinfo = json.loads(injson)
    return self.render_string('modules/book.html',book = bookinfo)

tornado.web.UIModuleから継承されたBookModuleは、UIモジュールは、レンダリングするテンプレートにオブジェクトを配置する最後のrender_string()メソッドで使用して、私はここに単に尋ねるためにまず、クレソンブックAPIを使用について検索することによりキーワードを含めます書籍情報には、対応するテンプレートに、この特定の書籍情報をレンダリングします、その後、本についての問い合わせ、特定の情報への本のAPIを使用し、最初の本IDを返す
テンプレートディレクトリ内のmodulesディレクトリを作成するには、[次へbook.htmlを作成しますここでは、特定の書籍の枠組みの内容が表示されます

<div class="book">
  <h3 class="book_title">{{ book["title"] }}</h3>
  <a href="{{book['alt']}}" target="_blank"><p>点击查看详情</p></a>
  {% if book["subtitle"] != "" %}
    <h4 class="book_subtitle">{{ book["subtitle"] }}</h4>
  {% end %}
  <img src="{{ book["images"]["large"] }}" class="book_image"/>
  <div class="book_details">
    <div class="book_date_released">Released: {{ book["pubdate"]}}</div>    
    <h5>Description:</h5>
    <div class="book_body">{% raw book["summary"] %}</div>
  </div>
</div>

最終的なディレクトリ構造は次のようになります。

├── blockmain.py
└── templates
  ├── index.html
  ├── main.html
  └── modules
    └── book.html

この手順が実行される:
最初の「/」はMainHandlerのindex.html ----> index.htmlを(本でmain.htmlを----> {%モジュールブックのindex.htmlから継承されたアクセス経路のタイプで使用され)%}がブック対応ui_modulesでblockmain.pyターンを探す----結果のクエリをレンダリングする>書籍の内容は、モジュール内のbook.htmlにui_modulesは、ありませんので、完全なコンテンツが提示入れますHTTP経由でサービスを開始blockmain.pyのpythonで......フロントを行う:// localhostを:8000を取得するには、以下のWebサイトにアクセスするにはここに画像を挿入説明
、非常に広いのpython学習資源の収集をお勧めする最後に、[入力します]私は前にそこに集まります、ペンを学ぶ、体験学習

我々はまた、メッセージではなく、以下のことができ、そこに企業の経験の兆しがあり、実際のプロジェクトデータに基づいてゼロに沈静化し、覚えておいてください

提案を理解し、我々は進歩を一緒に勉強します

公開された60元の記事 ウォン称賛25 ビュー80000 +

おすすめ

転載: blog.csdn.net/haoxun11/article/details/105169587