수업 신청

5851 단어
애플리케이션: (코드 디렉토리: tornado-4.1\tornado\web.py)
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()

좋은 웹페이지 즐겨찾기