책: "HTML 파일 보내기 가능"

6923 단어 PythonWebhttptech

책이 갱신되었다


업데이트됨장 "HTML 파일 보낼 수 있음".
계속 읽고 싶은 사람은 북의'괜찮다'또는'필자 스토킹'에 주목해야 한다. -)
다음은 책 내용의 발췌문이다.

요청을 설명하고 지정된 HTML 파일을 반환합니다.


이전 장까지 먼저 HTTP 형식으로 응답하는 서버를 만들 수 있습니다.
그러나 브라우저에서 보내온 요청에 대한 해명 처리가 없기 때문에 어떤 요청을 받더라도 몸이 항상 답장It works!한다.
이러면 너무 심하니까 프로그램의 소스 코드와 다른 HTML 파일을 미리 준비하고 요청한 path로 지정한 파일을 응답 주체로 돌려주세요.
이른바 정적 파일 발표 기능.
서버의 소스 코드 등은 서버를 통해 공개할 필요가 없기 때문에 서버를 통해 공개하고자 하는 파일은 study/static/의 디렉터리에 넣어야 한다
예) 요청된 path/index.html=> study/static/index.html의 내용이 응답 주체로 반환됨
이런 상황입니다.

소스 코드


다른 지루한 것도 설명하지 않았으니 소스 코드로 직접 가보세요.
미리 준비한 HTML 파일을 응답체로 반납하기 위해 개량된 파일입니다.
소스 코드도 길어졌으니 이번부터 전체 소스 코드를 옮기지 마세요.
각 장, Giithub에 모든 소스 코드가 업로드되었으니 참조하십시오.study/webserver.pyhttps://github.com/bigen1925/introduction-to-web-application-with-python/blob/main/codes/chapter11/webserver.py
또 프로그램이 제대로 작동하는지 확인하기 위해 HTML 파일을 따로 준비해야 하기 때문에 그쪽도 만들어야 한다.study 디렉터리 바로 아래에 static 디렉터리를 새로 만들고 그 중에서 index.html를 만듭니다.
모처럼 왔는데 아파치 안 베끼는 내용으로 바뀌었어요.여러분들이 좋아하는 콘텐츠로 만들 수 있어요.
하지만 파일 이름을 바꾸면 이 책의 설명처럼 작동할 수 없으니 파일 이름index.html을 유지해 주십시오.study/static/index.htmlhttps://github.com/bigen1925/introduction-to-web-application-with-python/blob/main/codes/chapter11/static/index.html

해설


10-13 행: HTML 파일을 배치할 디렉토리 정의


에서 HTML 파일을 배치할 디렉토리를 정의합니다STATIC_ROOT.
    # 実行ファイルのあるディレクトリ
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    # 静的配信するファイルを置くディレクトリ
    STATIC_ROOT = os.path.join(BASE_DIR, "static")
python에서 파일 경로를 처리할 수 없으면 읽기 어려울 수 있습니다
  • BASE_DIR: study 디렉토리의 절대 경로
  • STATIC_ROOT: study/static 디렉토리의 절대 경로
  • 대화 상자.

    43-61 행: 파일에서 응답 바디 생성


    이것은 메인 요리다.
    HTTP 요구 사항을 분석하여 path 정보를 추출합니다.
    이후 path를 기반으로 파일을 읽고 응답 주체를 생성합니다.
                # リクエスト全体を
                # 1. リクエストライン(1行目)
                # 2. リクエストヘッダー(2行目〜空行)
                # 3. リクエストボディ(空行〜)
                # にパースする
                request_line, remain = request.split(b"\r\n", maxsplit=1)
                request_header, request_body = remain.split(b"\r\n\r\n", maxsplit=1)
    
                # リクエストラインをパースする
                method, path, http_version = request_line.decode().split(" ")
    
                # pathの先頭の/を削除し、相対パスにしておく
                relative_path = path.lstrip("/")
                # ファイルのpathを取得
                static_file_path = os.path.join(self.STATIC_ROOT, relative_path)
    
                # ファイルからレスポンスボディを生成
                with open(static_file_path, "rb") as f:
                    response_body = f.read()
    
    path 취득 후STATIC_ROOT 결합 취득static_file_path, 그 전에 시작/이 삭제되었음을 주의하십시오.
    pythonos.path.join(base, path)의 규격으로 두 번째 파라미터path/로 시작하는 절대 경로를 제공하면 첫 번째 파라미터base를 무시하기 때문이다.

    시험해 보다


    하고 싶은 걸 알면 소스 코드가 어렵지 않으니까 빨리 돌려봐.

    다음은 북!


    장 "HTML 파일 보낼 수 있음"

    좋은 웹페이지 즐겨찾기