回答編集履歴

4

追記

2021/07/02 16:13

投稿

sequelanonymous
sequelanonymous

スコア123

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

追記

2021/07/02 16:13

投稿

sequelanonymous
sequelanonymous

スコア123

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

修正

2021/07/02 16:08

投稿

sequelanonymous
sequelanonymous

スコア123

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
- - app.run()を定義して実行する前提の場合
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

修正

2021/07/02 16:03

投稿

sequelanonymous
sequelanonymous

スコア123

test CHANGED
@@ -44,8 +44,6 @@
44
44
 
45
45
  python xx.pyの補足:
46
46
 
47
- app.run()を定義実行す前提の場合。
47
+ - werkzeugと同様、simple_serverでもCPython内で定義されたHTTPServerが利用されてる
48
48
 
49
-
50
-
51
- HTTPserverでリクエストうけつけてるの[ここ](https://github.com/python/cpython/blob/bb3e0c240bc60fe08d332ff5955d54197f79751c/Lib/http/server.py#L132)
49
+ - app.run()定義し実行す前提場合。