回答編集履歴
4
追記
test
CHANGED
@@ -108,8 +108,6 @@
|
|
108
108
|
|
109
109
|
|
110
110
|
|
111
|
-
|
112
|
-
|
113
111
|
- [WSGIアプリケーションとは?WebフレームワークからWSGIサーバーまで](https://blog.hirokiky.org/entry/2018/09/30/183840)
|
114
112
|
|
115
113
|
> PythonのWebアプリケーションは WSGI という仕様に則って開発されています。 WSGIに則って作られたWebアプリケーション(WSGIアプリケーション)は、WSGIの仕様に則ったサーバー(WSGIサーバー)上で動作させられます。
|
@@ -141,3 +139,7 @@
|
|
141
139
|
|
142
140
|
|
143
141
|
> FlaskでWebアプリケーションを作った場合、 app = Flask(...) でインスタンス化した app 自体がWSGIアプリケーションです。 例えば myapp.py というファイル内に app という名前でFlaskアプリケーションがある場合、以下のように gunicorn で起動できます。
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
- [http.server](https://docs.python.org/3/library/http.server.html#module-http.server)
|
3
追記
test
CHANGED
@@ -81,3 +81,63 @@
|
|
81
81
|
return [body.encode('utf-8')]
|
82
82
|
|
83
83
|
```
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
=======
|
88
|
+
|
89
|
+
参考になったURL
|
90
|
+
|
91
|
+
- [Web_Server_Gateway_Interfaceのwikipedia](https://ja.wikipedia.org/wiki/Web_Server_Gateway_Interface)
|
92
|
+
|
93
|
+
> WSGIには二つの側 — サーバ側とアプリケーション側が存在する。WSGIは、リクエスト情報・レスポンスヘッダ・レスポンス本文を、両者の間でどのようにやりとりするかをPythonのAPIとして定義している。
|
94
|
+
|
95
|
+
>
|
96
|
+
|
97
|
+
> Webサーバにリクエストが来ると、次のような流れでやりとりが行なわれる:
|
98
|
+
|
99
|
+
>
|
100
|
+
|
101
|
+
> サーバ側が、クライアントからリクエストを受ける。
|
102
|
+
|
103
|
+
> サーバ側は、アプリケーション側がエントリポイントとして提供するcallableオブジェクト(関数やクラスインスタンスなど __call__ が定義されたオブジェクト)を呼び出して、その引数として環境変数と1つのコールバック用callableオブジェクトを渡す。
|
104
|
+
|
105
|
+
> アプリケーション側は、このコールバック用callableオブジェクトを呼び出すことでステータスコードとレスポンスヘッダをサーバ側に伝え、さらに本文を生成するiterableオブジェクト(イテレータやリストなど)を戻り値として返す。
|
106
|
+
|
107
|
+
> サーバ側は、これらを用いてクライアントへのレスポンスを生成する。
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
- [WSGIアプリケーションとは?WebフレームワークからWSGIサーバーまで](https://blog.hirokiky.org/entry/2018/09/30/183840)
|
114
|
+
|
115
|
+
> PythonのWebアプリケーションは WSGI という仕様に則って開発されています。 WSGIに則って作られたWebアプリケーション(WSGIアプリケーション)は、WSGIの仕様に則ったサーバー(WSGIサーバー)上で動作させられます。
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
> environ: HTTPリクエストの情報(ヘッダーの値など)
|
120
|
+
|
121
|
+
> start_response: HTTPレスポンスのコード、返すヘッダーを指定して呼び出すための関数
|
122
|
+
|
123
|
+
> 戻り値: HTTPのボディーになるバイト型のイテラブル
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
> ブラウザー: HTTPでサーバーと通信する
|
128
|
+
|
129
|
+
> WSGIサーバー: HTTPの解釈、WSGIアプリケーションを呼び出し、結果をHTTPで返すサーバー
|
130
|
+
|
131
|
+
> WSGIアプリケーション: 上記仕様でHTTPの内容を返すPythonの呼び出し可能オブジェクト
|
132
|
+
|
133
|
+
> (Python)Webフレームワーク: Viewなど一部の処理を書くだけでWebアプリケーションが作れるPythonパッケージ
|
134
|
+
|
135
|
+
> ユーザーの書いたViewなどを読み込んで、WSGIアプリケーションとして動作する
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
- [gunicornでPython製Webアプリケーションを動作させよう(DjangoとFlask)](https://blog.hirokiky.org/entry/2018/10/06/151830)
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
> FlaskでWebアプリケーションを作った場合、 app = Flask(...) でインスタンス化した app 自体がWSGIアプリケーションです。 例えば myapp.py というファイル内に app という名前でFlaskアプリケーションがある場合、以下のように gunicorn で起動できます。
|
2
修正
test
CHANGED
@@ -14,9 +14,9 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
+
=======
|
17
18
|
|
18
|
-
|
19
|
-
flask runの補足:
|
19
|
+
flask runで起動する場合の補足:
|
20
20
|
|
21
21
|
- host, port指定していない場合、127.0.0.1と5000が設定されるとこ、[ここ](https://github.com/pallets/flask/blob/ba6db2e30783f81673bb8a6b5218f7bb8efa8f27/src/flask/app.py#L905)
|
22
22
|
|
@@ -42,8 +42,42 @@
|
|
42
42
|
|
43
43
|
|
44
44
|
|
45
|
-
python xx.pyの補足:
|
45
|
+
simple_serverをつかってpython xx.pyで起動する場合の補足:
|
46
46
|
|
47
47
|
- werkzeugと同様、simple_serverでもCPython内で定義されたHTTPServerが利用されてる
|
48
48
|
|
49
|
+
|
50
|
+
|
51
|
+
=======
|
52
|
+
|
53
|
+
混乱しそうなポイント:
|
54
|
+
|
49
|
-
|
55
|
+
app.run()は、フレームワークを利用してappをつくらないといけない。
|
56
|
+
|
57
|
+
ex) app = Flask(__name__)
|
58
|
+
|
59
|
+
pythonのみで起動するには、標準モジュールのwsgirefのutility郡を利用する。
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
もしくは、wsgiサーバーで下記のような感じでよんであげる。
|
64
|
+
|
65
|
+
wsgi_appというcallableなオブジェクトを指定してgunicorn側でよぶ。
|
66
|
+
|
67
|
+
```python
|
68
|
+
|
69
|
+
# app.py
|
70
|
+
|
71
|
+
# gunicorn app:wsgi_app
|
72
|
+
|
73
|
+
# curl http://localhost:8000
|
74
|
+
|
75
|
+
def wsgi_app(environ, start_response):
|
76
|
+
|
77
|
+
start_response('200 OK', [('Content-Type', 'text/plain')])
|
78
|
+
|
79
|
+
body = f"Method was {environ['REQUEST_METHOD']}"
|
80
|
+
|
81
|
+
return [body.encode('utf-8')]
|
82
|
+
|
83
|
+
```
|
1
修正
test
CHANGED
@@ -44,8 +44,6 @@
|
|
44
44
|
|
45
45
|
python xx.pyの補足:
|
46
46
|
|
47
|
-
|
47
|
+
- werkzeugと同様、simple_serverでもCPython内で定義されたHTTPServerが利用されてる
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
- app.run()を定義して実行する前提の場合。
|