はじめに1.フラスコ
フラスコをマイクロに基づいており、HTTP要求の要求を受信するためのWERKZEUGソケットサーバの基本的Pythonの開発者のフレームとテンプレートJinja2のWERKZEUG WSGIやサービスを、依存しており、前処理され、その後、現像フレームのフラスコに基づくフラスコフレームを、トリガそれはつまり、適切な治療を要求する機能を提供し、ユーザーに返さ、ユーザーに複雑なコンテンツを返すようにしたい場合は、それが処理テンプレートを実装するためにJinja2のテンプレートを必要とします:レンダリング後のテンプレートとデータのレンダリング、キャラクター文字列は、ユーザーのブラウザに返されます。
「マイクロ」(マイクロは)あなたが(ただし、実際に)単一のPythonファイルにWebアプリケーション全体を配置する必要がありますという意味ではありません、それはフラスコは多少の機能に欠け意味するものではありません。「マイクロ」のマイクロフレームワークは、コアをシンプルに保つように設計されており、拡張しやすいフラスコを意味します。このようなデータベースを使用するように - フラスコはあなたのためにあまりにも多くの決定をすることはありません。これらは、フラスコを選択 - などのテンプレートエンジンを使用する方法として - 交換することは非常に簡単です。あなたの手による以外のすべてのものによります。だから、フラスコはあなたと試合を完璧ことができます。
デフォルトによって、フラスコデータベース抽象化レイヤは、フォーム検証、または既存の機能の可能なライブラリーの他の任意の多様を含みません。しかし、拡張子を持つアプリケーションにこれらの機能を追加するためにフラスコのサポートは、達成することがフラスコ自体と同じです。数多くの拡張機能は、データベースの統合、フォーム検証、アップロード取り扱い、さまざまなオープン認証などの機能を提供します。フラスコは、「小さな」かもしれないが、複雑な生産環境を要求する準備ができていると使用に入れ
2. wsgiref簡単なアプリケーション
最も単純なWebアプリケーションでは、ユーザーは、要求を受信したHTMLファイルとリターンから読み込み、最初のHTMLファイルは、既存のHTTPサーバソフトウェアで、良いで保存されています。
あなたが動的にHTMLを生成したい場合は、自分自身を達成するためにこれらのステップを配置する必要があります。しかし、HTTPリクエストを受け付け、解析HTTPリクエスト、HTTPレスポンスが送信されクーリーは、私たち自身が、これらの基礎となるコードを記述する場合、それはまだ、ダイナミックHTMLを記述するために開始されていない、生きる、あなたはHTTPの仕様を読み取るために月を過ごす必要があります。
正しいアプローチは、専用サーバー・ソフトウェアによって実現される基本的なコードで、我々は、HTML文書を生成するのPythonに焦点を当てます。私たちは、TCP接続、HTTPリクエストと、元の応答形式なので、そのようなプロトコル・サーバ・ソフトウェアを実装するための統一されたインタフェースの必要性へのアクセスをしたくないので、私たちは、Pythonを使用してWebサービスを書くことに集中しましょう。Webサーバーゲートウェイインターフェイス:このインタフェースはWSGIです。wsgirefのPythonモジュールはWSGIプロトコルサービスモジュールに基づいて開発されました
from wsgiref.simple_server import make_server
def mya(environ, start_response):
print(environ)
start_response('200 OK', [('Content-Type', 'text/html')])
if environ.get('PATH_INFO') == '/index':
with open('index.html', 'rb') as f:
data = f.read()
elif environ.get('PATH_INFO') == '/login':
with open('login.html', 'rb') as f:
data = f.read()
else:
data = b'<h1>Hello Web</h1>'
return [data]
if __name__ == '__main__':
myserver = make_server('127.0.0.1', 4000, mya)
print('监听4000')
myserver.serve_forever()
3.フラスコのインストール
pip install flask
4. WERKZEUGプロフィール
WERKZEUG WSGIツールキットで、彼は、低レベルのライブラリのWebフレームワークとしての役割を果たすことができます。ここで少し話、WebサーバではないWERKZEUG、またそれは、Webフレームワークではなく、ツールキットで、関係者はWSGIが、それはかなり良く、Webをカプセル化するため、低レベルのライブラリのWebフレームワークとして使用することができるツールキットでありますなどのリクエスト、レスポンス、など何フレームワーク、
コード例:
from werkzeug.wrappers import Request,Response
@Request.application
def hello(request):
return Response('Hello World!')
if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost',4000,hello) # 调用run_simple起服务,参数为ip、端口、要执行的对象
5.フラスコクイック
from flask import Flask
# 实例化产生一个Flask对象
app = Flask(__name__)
# 将‘/’和视图函数index的对应关系添加到路由中
@app.route('/')
def index():
return 'ok'
if __name__ == '__main__':
app.run() # 调用run()方法
なぜapp.run()メソッドは、サービスを再生することができますか???実際には、基本的にベースWERKZEUGは(run_simpleと呼ばれます)
app.run()ソース
def run(self, host=None, port=None, debug=None, load_dotenv=True, **options):
if os.environ.get("FLASK_RUN_FROM_CLI") == "true":
from .debughelpers import explain_ignored_app_run
explain_ignored_app_run()
return
if get_load_dotenv(load_dotenv):
cli.load_dotenv()
if "FLASK_ENV" in os.environ:
self.env = get_env()
self.debug = get_debug_flag()
elif "FLASK_DEBUG" in os.environ:
self.debug = get_debug_flag()
if debug is not None:
self.debug = bool(debug)
_host = "127.0.0.1"
_port = 5000
server_name = self.config.get("SERVER_NAME")
sn_host, sn_port = None, None
if server_name:
sn_host, _, sn_port = server_name.partition(":")
host = host or sn_host or _host
port = int(next((p for p in (port, sn_port) if p is not None), _port))
options.setdefault("use_reloader", self.debug)
options.setdefault("use_debugger", self.debug)
options.setdefault("threaded", True)
cli.show_server_banner(self.env, self.debug, self.name, False)
from werkzeug.serving import run_simple
try:
# 在这里导入并调用了 run_simple 来起服务
run_simple(host, port, self, **options) # host、端口
finally:
self._got_first_request = False