Flask의 응답
Part1: Flask의 Response
예제 프로그램 1
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '***Saltriver***'
if __name__ == '__main__':
app.run()
여전히 Flask에서.wsgi_app () 분석을 시작합니다.우리는 전체 과정에 이상이 발생하지 않았다고 가정한다.
def wsgi_app(self, environ, start_response):
...
try:
# response.
response = self.full_dispatch_request()
...
# response .
return response(environ, start_response)
...
fulldispatch_request()에서 다음을 수행합니다.
def full_dispatch_request(self):
...
if rv is None:
rv = self.dispatch_request()
# print , rv .
# ,rv '***Saltriver***'
print('rv--->', rv)
...
response = self.make_response(rv)
response = self.process_response(response)
...
return response
다음은 self를 보도록 하겠습니다.make_response(rv), make_response문의 파일에 따르면 rv값은 4가지 종류가 있는데 그 중에서str형식의 문자열을 포함하고 다른 문자열은 잠시 무시하고 예시 프로그램에서 rv가 문자열의 유형을 먼저 분석한다.
def make_response(self, rv):
status_or_headers = headers = None
...
if not isinstance(rv, self.response_class):
# rv text_type .
if isinstance(rv, (text_type, bytes, bytearray)):
# response_class rv (wrap).
rv = self.response_class(rv, headers=headers,
status=status_or_headers)
headers = status_or_headers = None
...
...
return rv
response_class는 어떻게 rv를 포장합니까?werkzeug 공식 문서 5.4절 Response를 볼 수 있습니다.설명서, In reality, response objects are nothing more than glorified WSGI applications.실제로response 대상은 WSGI 표준을 따르는 응용에 불과하다.즉, 우리는 심지어 그것을 호출할 수 있다.그것을 호출할 때 어떤 인자를 입력합니까?environ과 startresponse. full 로 돌아가기dispatch_request()에서 process에 대해response(response), 주로 두 가지 일을 하고 애프터request_functions와 Cookies를 설정하여response를 마지막으로 처리합니다.예시 프로그램에 실질적인 프로세스-response가 없습니다.마지막으로response(environ,start response)를 반환합니다!다음은 자세히 연구해 보겠습니다.
def run(self, host=None, port=None, debug=None, **options):
...
try:
# self Flask .
run_simple(host, port, self, **options)
finally:
...
앱에서.run ()에서 run 을 호출합니다단순 함수.우리는 werkzeug에 있을 수 있다.서버에서 보기.
def inner():
make_server(hostname, port, application, threaded,
processes, request_handler,
passthrough_errors, ssl_context).serve_forever()
run단순 () 중,makeserver(...).serve_forever(), 가령make서버가 BaseWSGIServer를 반환합니다.WSGIRequestHandler에서 run 중점적으로 분석wsgi() 함수.app(environ,start response)가 실행 중이기 때문에excute 함수를 보십시오.
def execute(app):
application_iter = app(environ, start_response)
try:
for data in application_iter:
write(data)
if not headers_sent:
write(b'')
finally:
if hasattr(application_iter, 'close'):
application_iter.close()
application_iter = None
우리가 Flask에 있으니까.wsgi_app(...)excute 함수를 전송하는 app, 즉response 대상을 되돌려줍니다.
# Werkzeug/wrappers.py/Class.BaseResponse
def __call__(self, environ, start_response):
app_iter, status, headers = self.get_wsgi_response(environ)
start_response(status, headers)
return app_iter
start_response의 임무는 WSGIRequestHandler에서run 을 설정하는 것입니다ssgi의 헤더스set 변수:
headers_set[:] = [status, response_headers]
런ssgi의 write(data) 함수에서 wfile에 데이터를 쓰기 전에 status와responseheaders.
def write(data):
assert headers_set, 'write() before start_response'
if not headers_sent: #
다음은 나 자신에게 남겨진 문제들(아직 해결되지 않은 문제들)이다.
Part2
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.