백엔드 개발 파이썬 튜토리얼 Bottle 소스코드의 HeaderDict에 대한 자세한 설명

Bottle 소스코드의 HeaderDict에 대한 자세한 설명

Jul 24, 2017 am 09:20 AM
bottle 소스 코드

求 모든 프레임워크 요청 응답은 하나의 원칙을 기반으로 합니다. http 요청 --> wsgi 서버 --> wsgi 인터페이스(실제로 프레임워크에서 사용자 정의 구현으로 구현된 기능은 하단에 캡슐화되어 있음) Liao Xuefeng의 튜토리얼

class HeaderDict(dict):''' A dictionary with case insensitive (titled) keys.        You may add a list of strings to send multible headers with the same name.'''def __setitem__(self, key, value):return dict.__setitem__(self,key.title(), value) #注意这里使用title函数,它能将每个单词的开头大写def __getitem__(self, key):return dict.__getitem__(self,key.title())def __delitem__(self, key):return dict.__delitem__(self,key.title())def __contains__(self, key):return dict.__contains__(self,key.title())def items(self):""" Returns a list of (key, value) tuples """for key, values in dict.items(self):if not isinstance(values, list):
                values = [values]for value in values:yield (key, str(value))                def add(self, key, value):""" Adds a new header without deleting old ones """if isinstance(value, list):for v in value:self.add(key, v) #注意这里使用了递归elif key in self:if isinstance(self[key], list):self[key].append(value)else:self[key] = [self[key], value]else:          self[key] = [value]
로그인 후 복사
에서 wsgi 인터페이스에 대한 설명을 참조할 수 있습니다. HeaderDict는 사전을 캡슐화하고 사전 키에 있는 단어의 첫 글자를 대문자로 표시합니다. 그리고 value를 반복 가능한 객체로 바꾸고, value를 목록 객체, 즉 value=[value]로 바꿉니다. WSGI 표준은 문자열 유형을 목록 유형으로 변환해야 더 나은 표현을 제공하도록 정의합니다. 서버는 한꺼번에 출력할 필요는 없지만, 한 번에 너무 많은 출력을 방지하기 위해 Yield를 사용하여 출력을 제어할 수 있습니다. 전체적으로 dict를 캡슐화하는 이 클래스는 두 가지 기능을 구현합니다:

  1. 값을 목록으로 변환, 데이터 표현 최적화

  2. 키에 있는 단어의 첫 글자를 대문자로 표시

def abort(code=500, text='Unknown Error: Appliction stopped.'):""" Aborts execution and causes a HTTP error. """raise HTTPError(code, text)def redirect(url, code=307):""" Aborts execution and causes a 307 redirect """response.status = code
    response.header['Location'] = urlraise BreakTheBottle("")def send_file(filename, root, guessmime = True, mimetype = 'text/plain'):""" Aborts execution and sends a static files as response. """root = os.path.abspath(root) + '/'filename = os.path.normpath(filename).strip('/')
    filename = os.path.join(root, filename)#判断文件是否可获得if not filename.startswith(root): #主目录下的文件不可以下载abort(401, "Access denied.")if not os.path.exists(filename) or not os.path.isfile(filename):
        abort(404, "File does not exist.")if not os.access(filename, os.R_OK):
        abort(401, "You do not have permission to access this file.")# 获得文件类型if guessmime:
        guess = mimetypes.guess_type(filename)[0]if guess:
            response.content_type = guesselif mimetype:
            response.content_type = mimetypeelif mimetype:
        response.content_type = mimetype#设置Content_typestats = os.stat(filename)# TODO: HTTP_IF_MODIFIED_SINCE -> 304 (Thu, 02 Jul 2009 23:16:31 CEST)if 'Content-Length' not in response.header:
        response.header['Content-Length'] = stats.st_sizeif 'Last-Modified' not in response.header:
        ts = time.gmtime(stats.st_mtime)
        ts = time.strftime("%a, %d %b %Y %H:%M:%S +0000", ts)
        response.header['Last-Modified'] = tsraise BreakTheBottle(open(filename, 'r'))
로그인 후 복사
위의 세 가지 기능 서버 내부 오류, 리디렉션, 파일 다운로드 등이 각각 구현됩니다. 이 파일 다운로드 기능은 파일 유형 판단, Content_type 설정, 파일 권한 판단, 파일 상태 획득 등을 구현합니다. 이 기능은 여전히 ​​매우 간단하며 사용자 정의가 가능합니다.

위 내용은 Bottle 소스코드의 HeaderDict에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

소프트웨어 소스코드 보호에 있어서 Python의 응용실습 소프트웨어 소스코드 보호에 있어서 Python의 응용실습 Jun 29, 2023 am 11:20 AM

고급 프로그래밍 언어인 Python 언어는 배우기 쉽고 읽고 쓰기 쉬우며 소프트웨어 개발 분야에서 널리 사용되었습니다. 그러나 Python의 오픈 소스 특성으로 인해 소스 코드는 다른 사람이 쉽게 액세스할 수 있으므로 소프트웨어 소스 코드 보호에 몇 가지 문제가 발생합니다. 따라서 실제 응용 프로그램에서는 Python 소스 코드를 보호하고 보안을 보장하기 위해 몇 가지 방법을 사용해야 하는 경우가 많습니다. 소프트웨어 소스 코드 보호에는 Python에서 선택할 수 있는 다양한 응용 사례가 있습니다. 다음은 몇 가지 일반적인 사항입니다.

PHP 코드의 소스 코드를 해석 및 실행하지 않고 브라우저에 표시하는 방법은 무엇입니까? PHP 코드의 소스 코드를 해석 및 실행하지 않고 브라우저에 표시하는 방법은 무엇입니까? Mar 11, 2024 am 10:54 AM

PHP 코드의 소스 코드를 해석 및 실행하지 않고 브라우저에 표시하는 방법은 무엇입니까? PHP는 동적 웹 페이지를 개발하는 데 일반적으로 사용되는 서버 측 스크립팅 언어입니다. 서버에서 PHP 파일이 요청되면 서버는 그 안에 있는 PHP 코드를 해석하고 실행한 후 최종 HTML 콘텐츠를 브라우저에 보내 표시합니다. 그러나 때때로 PHP 파일의 소스 코드를 실행하는 대신 브라우저에 직접 표시하고 싶을 때가 있습니다. 이 기사에서는 PHP 코드의 소스 코드를 해석 및 실행하지 않고 브라우저에 표시하는 방법을 소개합니다. PHP에서는 다음을 사용할 수 있습니다.

소스 코드를 온라인으로 볼 수 있는 웹사이트 소스 코드를 온라인으로 볼 수 있는 웹사이트 Jan 10, 2024 pm 03:31 PM

브라우저의 개발자 도구를 사용하여 웹사이트의 소스 코드를 볼 수 있습니다. Google Chrome 브라우저에서: 1. Chrome 브라우저를 열고 소스 코드를 보려는 웹사이트를 방문합니다. 2. 웹의 아무 곳이나 마우스 오른쪽 버튼으로 클릭합니다. 페이지에서 "검사"를 선택하거나 단축키 Ctrl + Shift + I를 눌러 개발자 도구를 엽니다. 3. 개발자 도구의 상단 메뉴 표시줄에서 "요소" 탭을 선택합니다. 4. HTML 및 CSS 코드를 확인합니다. 웹사이트의.

Vue가 소스 코드를 표시할 수 있나요? Vue가 소스 코드를 표시할 수 있나요? Jan 05, 2023 pm 03:17 PM

Vue에서 소스 코드를 표시할 수 있습니다. 1. "git clone https://github.com/vuejs/vue.git"을 통해 vue를 가져옵니다. 2. "npm i"를 통해 종속성을 설치합니다. 3. "npm i -g Rollup"을 통해 롤업을 설치합니다. 4. 개발 스크립트를 수정합니다. 5. 소스 코드를 디버그합니다.

아이디어에서 Tomcat의 소스 코드를 보는 방법 아이디어에서 Tomcat의 소스 코드를 보는 방법 Jan 25, 2024 pm 02:01 PM

IDEA에서 Tomcat 소스 코드를 보는 단계: 1. Tomcat 소스 코드를 다운로드합니다. 3. Tomcat 소스 코드를 봅니다. 4. Tomcat의 작동 원리를 이해합니다. 7. 도구 및 플러그인 사용 8. 커뮤니티에 참여하고 기여합니다. 자세한 소개: 1. Tomcat 소스 코드 다운로드 Apache Tomcat 공식 웹사이트에서 소스 코드 패키지를 다운로드할 수 있습니다. 일반적으로 이러한 소스 코드 패키지는 ZIP 또는 TAR 형식 등입니다.

golang 프레임워크 소스 코드 학습 및 적용에 대한 종합 가이드 golang 프레임워크 소스 코드 학습 및 적용에 대한 종합 가이드 Jun 01, 2024 pm 10:31 PM

Golang 프레임워크 소스 코드를 이해함으로써 개발자는 언어의 본질을 마스터하고 프레임워크의 기능을 확장할 수 있습니다. 먼저, 소스 코드를 얻고 해당 디렉토리 구조에 익숙해지십시오. 둘째, 코드를 읽고, 실행 흐름을 추적하고, 종속성을 이해합니다. 실제 사례에서는 이러한 지식을 적용하는 방법, 즉 맞춤형 미들웨어를 생성하고 라우팅 시스템을 확장하는 방법을 보여줍니다. 모범 사례에는 단계별 학습, 무의미한 복사 붙여넣기 방지, 도구 활용 및 온라인 리소스 참조가 포함됩니다.

Python 경량 웹 프레임워크: Bottle 라이브러리! Python 경량 웹 프레임워크: Bottle 라이브러리! Apr 13, 2023 pm 02:10 PM

Bottle 라이브러리는 가볍기 때문에 사용하기도 매우 간단합니다. 나는 이 글을 읽기 전에 독자들은 이미 Python에 대해 간단한 이해를 갖고 있다고 믿습니다. 그렇다면 수백 줄의 코드로 서버의 기능을 완성할 수 있는 신비한 작업은 무엇일까요? 기다려 보자. 1. Bottle 라이브러리 설치 1) pip를 사용하여 설치 2) Bottle 파일 https://github.com/bottlepy/bottle/blob/master/bottle.py 다운로드 2. "HelloWorld!"라는 말처럼 모든 것이 먼저 성공합니다. HelloWorld는 이 간단한 예를 통해 Bottle의 기본 메커니즘을 이해합니다. 코드부터 시작해 보겠습니다. 먼저 b부터 시작합니다.

PHP 소스 코드 오류: 인덱스 오류 문제 해결 PHP 소스 코드 오류: 인덱스 오류 문제 해결 Mar 10, 2024 am 11:12 AM

PHP 소스 코드 오류: 인덱스 오류 문제를 해결하려면 특정 코드 예제가 필요합니다. 인터넷의 급속한 발전으로 인해 개발자는 웹사이트와 애플리케이션을 작성할 때 다양한 문제에 직면하게 됩니다. 그 중 PHP는 널리 사용되는 서버 측 스크립팅 언어이며 소스 코드 오류는 개발자가 자주 직면하는 문제 중 하나입니다. 가끔 웹사이트의 인덱스 페이지를 열려고 하면 "InternalServerError", "Unde" 등 다양한 오류 메시지가 나타나는 경우가 있습니다.

See all articles