python 내장 라 이브 러 리 wgiref 사용(WSGI 기본 입문)

4366 단어 pythonwsgirefWSGI
WSGI 기본 원리
1.WSGI 처리 과정
  • 브 라 우 저 에서 WSGI Server 로:브 라 우 저가 보 낸 요청 은 WSGI Server 로 먼저 갑 니 다.
  • environ:WSGI 서버 는 HTTP 요청 의 인자 등 정 보 를 environ(사전 하나)에 봉 합 니 다.
  • WSGI 서버 에서 WSGI 앱 으로:App 은 우리 가 직접 작성 한 백 엔 드 프로그램 입 니 다.모든 URL 은 해당 하 는 입구 처리 함수(또는 다른 호출 가능 한 대상)에 비 칩 니 다.WSGI 서버 에서 백 엔 드 앱 을 호출 할 때 environ 과 WSGI 서버 에서 자신의 startresponse 함 수 를 백 엔 드 앱 에 주입 합 니 다.
  • 논리 처리:배경 함수(또는 기타 호출 가능 대상)는 environ 과 start 를 받 아야 합 니 다.response,논리 적 처 리 를 한 후 교체 가능 한 대상 을 되 돌려 줍 니 다.교체 가능 한 대상 의 요 소 는 HTTP 본문 입 니 다.
  • WSGI App 에서 WSGI Server 로:배경 함수 처리 후 start 를 먼저 호출 합 니 다.response 함 수 는 HTTP 상태 코드,메시지 헤더 등 정보(응답 헤더)를 WSGI Server 에 되 돌려 준 다음 함수 의 반환 값 을 HTTP 본문(응답 body)으로 WSGI Server 에 되 돌려 줍 니 다.
  • WSGI 서버 에서 브 라 우 저 로:WSGI 서버 는 App 에서 얻 은 모든 정 보 를 response 로 패키지 하여 브 라 우 저 에 되 돌려 줍 니 다.
  • 2.WSGI 예시
    간단 한 예시
    다음 예제 프로그램 을 실행 한 후 브 라 우 저 에http://127.0.0.1:9999/로 시작 하 는 임의의 url 을 입력 하면 되 돌아 오 는 결 과 를 볼 수 있 습 니 다.인 스 턴 스 프로그램 에서 모든 url 은 같은 App 으로 처 리 됩 니 다.실제 생산 환경 에서 서로 다른 url 은 서로 다른 App 에 투사 해 야 하지만 이 부분 은 본 고 에서 설명 하지 않 습 니 다.
    
    # wsgiref Python      ,       wsgi      ,          
    from wsgiref.simple_server import make_server, demo_app
    
    # wsgi    socket server  
    #          url   demo_app    ,     demo_app  
    # app            ,          demo_app  , environ  、start_response  、     
    ws = make_server('127.0.0.1', 9999, demo_app)
    #     
    ws.serve_forever()
    demo_app 소스 코드
    
    def demo_app(environ,start_response):
        from io import StringIO
        stdout = StringIO()
        print("Hello world!", file=stdout)
        print(file=stdout)
        # environ     ,         
        h = sorted(environ.items())
        for k,v in h:
            print(k,'=',repr(v), file=stdout)
        # return      start_response       
        start_response("200 OK", [('Content-Type','text/plain; charset=utf-8')])
        return [stdout.getvalue().encode("utf-8")]  #        ,   byte  ,      start_response    Content-Type   
    demo_app 클래스 정의 두 가지 방식
    
    #      :    __init__ __iter__  ,         environ start_response,           
    # make_server app          
    class ApplicationClass:
        def __init__(self, environ, start_response):
            self.e = environ
            self.sr = start_response
            
        def __iter__(self):
            from io import StringIO
            stdout = StringIO()
            print("Hello world!", file=stdout)
            print(file=stdout)
            h = sorted(self.e.items())
            for k, v in h:
                print(k, '=', repr(v), file=stdout)
            self.sr("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
            yield from [stdout.getvalue().encode("utf-8")]
            
            
    #      :  __call__  ,     environ start_response,          
    # make_server app          
    class ApplicationInstance:
        def __call__(self, environ, start_response):
            from io import StringIO
            stdout = StringIO()
            print("Hello world!", file=stdout)
            print(file=stdout)
            h = sorted(environ.items())
            for k, v in h:
                print(k, '=', repr(v), file=stdout)
            start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
            return [stdout.getvalue().encode("utf-8")]
    3.WSGI 웹 서버 와 응용 프로그램
    WSGI 웹 서버
  • 본질 적 으로 TCP 서버 로 특정한 포트 에 감청 된다.
  • HTTP 프로 토 콜 을 지원 합 니 다.HTTP 요청 메 시 지 를 분석 할 수 있 고 HTTP 프로 토 콜 에 따라 응답 데 이 터 를 메시지 로 봉 하고 브 라 우 저 에 되 돌려 줄 수 있 습 니 다.
  • WSGI 프로 토 콜 을 실 현 했 습 니 다.이 프로 토 콜 은 응용 프로그램 과 의 인터페이스,즉 url 에서 app 사이 의 맵 을 약속 합 니 다.
  • WSGI 응용 프로그램
  • WSGI 협 의 를 따른다.
  • 자체 가 호출 가능 한 대상 이다.
  • start 호출response,응답 머리 를 되 돌려 줍 니 다.
  • 본문 을 포함 하 는 교체 가능 한 대상 을 되 돌려 줍 니 다.
  • 이상 은 python 내장 라 이브 러 리 wgiref 의 사용(WSGI 기초 입문)에 대한 상세 한 내용 입 니 다.python wgiref 의 사용 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기