수업 신청
httpserver가 클라이언트가 요청한 구성 항목 집합에 미치는 영향을 구성하는 데 사용되는 클래스입니다. 개발자는 사용자 정의 웹 응용 프로그램에서 이 클래스의 데이터를 구성하고, 이를 기반으로 HTTPServer의 인스턴스를 생성하고, HTTPServer의 모니터링을 시작하고, IOLoop를 동기적으로 시작합니다. 클래스 시작은 웹 응용 프로그램을 시작합니다. (사용자가 PC에서 브라우저를 열고 확인하기 위해 url을 입력한 후, 브라우저는 url에 정의된 서버의 특정 포트로 요청을 보내고 서버에서 이 포트의 리스닝 클래스가 있음을 알 수 있습니다. 특정 요청과 토네이도 프레임워크가 이를 어떻게 수신할 것인지 특정 처리로 이동하기 위한 요청은 IOLoop 클래스, TCPServer 클래스 등을 주의 깊게 읽어야 합니다.)
간단한 사용 예: (모든 웹 애플리케이션은 유사한 스크립트로 시작된다고 생각할 수 있습니다. 먼저 앱 클래스를 인스턴스화한 다음 서버 리스너를 시작하고 마지막으로 싱글톤 클래스 IOLoop의 시작을 사용하여 웹 서비스를 시작합니다.)
application = web.Application([
(r"/", MainPageHandler),
])
http_server = httpserver.HTTPServer(application)
http_server.listen(8080)
ioloop.IOLoop.instance().start()
Application 클래스의 가장 중요한 매개변수 중 하나는 핸들러입니다. 핸들러는 여러(1개 포함) 튜플((regexp, request_class)로 구조화됨)로 구성된 목록입니다. 여기서 regexp는 일반적으로 상대 경로를 가리키고 request_class는 다음을 수행하는 데 사용됩니다. 클라이언트 입력을 수신하고 해당 응답 클래스를 만듭니다. 일반적으로 사용자가 사용자 정의하고 tornado.web.RequestHandler에서 상속합니다(이 regexp 및 request_class가 작동하는 방식, RequestHandler 클래스 및 HTTPServer 클래스를 자세히 읽어야 함).
class Application(httputil.HTTPServerConnectionDelegate):
"""A collection of request handlers that make up a web application.
Instances of this class are callable and can be passed directly to
HTTPServer to serve the application::
application = web.Application([
(r"/", MainPageHandler),
])
http_server = httpserver.HTTPServer(application)
http_server.listen(8080)
ioloop.IOLoop.instance().start()
The constructor for this class takes in a list of `URLSpec` objects
or (regexp, request_class) tuples. When we receive requests, we
iterate over the list in order and instantiate an instance of the
first request class whose regexp matches the request path.
The request class can be specified as either a class object or a
(fully-qualified) name.
Each tuple can contain additional elements, which correspond to the
arguments to the `URLSpec` constructor. (Prior to Tornado 3.2, this
only tuples of two or three elements were allowed).
A dictionary may be passed as the third element of the tuple,
which will be used as keyword arguments to the handler's
constructor and `~RequestHandler.initialize` method. This pattern
is used for the `StaticFileHandler` in this example (note that a
`StaticFileHandler` can be installed automatically with the
static_path setting described below)::
application = web.Application([
(r"/static/(.*)", web.StaticFileHandler, {"path": "/var/www"}),
])
We support virtual hosts with the `add_handlers` method, which takes in
a host regular expression as the first argument::
application.add_handlers(r"www\.myhost\.com", [
(r"/article/([0-9]+)", ArticleHandler),
])
You can serve static files by sending the ``static_path`` setting
as a keyword argument. We will serve those files from the
``/static/`` URI (this is configurable with the
``static_url_prefix`` setting), and we will serve ``/favicon.ico``
and ``/robots.txt`` from the same directory. A custom subclass of
`StaticFileHandler` can be specified with the
``static_handler_class`` setting.
"""
def __init__(self, handlers=None, default_host="", transforms=None,
**settings):
if transforms is None:
self.transforms = []
if settings.get("compress_response") or settings.get("gzip"):
self.transforms.append(GZipContentEncoding)
else:
self.transforms = transforms
self.handlers = []
self.named_handlers = {}
self.default_host = default_host
self.settings = settings
self.ui_modules = {'linkify': _linkify,
'xsrf_form_html': _xsrf_form_html,
'Template': TemplateModule,
}
self.ui_methods = {}
self._load_ui_modules(settings.get("ui_modules", {}))
self._load_ui_methods(settings.get("ui_methods", {}))
if self.settings.get("static_path"):
path = self.settings["static_path"]
handlers = list(handlers or [])
static_url_prefix = settings.get("static_url_prefix",
"/static/")
static_handler_class = settings.get("static_handler_class",
StaticFileHandler)
static_handler_args = settings.get("static_handler_args", {})
static_handler_args['path'] = path
for pattern in [re.escape(static_url_prefix) + r"(.*)",
r"/(favicon\.ico)", r"/(robots\.txt)"]:
handlers.insert(0, (pattern, static_handler_class,
static_handler_args))
if handlers:
self.add_handlers(".*$", handlers)
if self.settings.get('debug'):
self.settings.setdefault('autoreload', True)
self.settings.setdefault('compiled_template_cache', False)
self.settings.setdefault('static_hash_cache', False)
self.settings.setdefault('serve_traceback', True)
# Automatically reload modified modules
if self.settings.get('autoreload'):
from tornado import autoreload
autoreload.start()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.