webapp2源码笔记

class Router(object):
    def default_dispatcher(self, request, response):
        """Dispatches a handler.


        :param request:
            A :class:`Request` instance.
        :param response:
            A :class:`Response` instance.
        :raises:
            ``exc.HTTPNotFound`` if no route matched or
            ``exc.HTTPMethodNotAllowed`` if a route matched but the HTTP
            method was not allowed.
        :returns:
            The returned value from the handler.
        """
        route, args, kwargs = rv = self.match(request)
        request.route, request.route_args, request.route_kwargs = rv


        if route.handler_adapter is None:
            handler = route.handler
            if isinstance(handler, basestring):
                if handler not in self.handlers:
                    self.handlers[handler] = handler = import_string(handler)
                else:
                    handler = self.handlers[handler]


            #找到合适的handler caller(adapter)
            # 所谓的handler适配器,面对的情况是:
            #      可能有多个handler,并且每个handler的handle过程不相同。
            #      适配器负责选择handler进行调用它,按照其相应过程。
            route.handler_adapter = self.adapt(handler)
	   # route保存了handle adapter(其实就是保存了一个handler,及使用该handler的方法)

        return route.handler_adapter(request, response)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一个简单的H5 webapp源码例子: ```html <!DOCTYPE html> <html> <head> <title>My WebApp</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> </head> <body> <header> <nav class="navbar navbar-expand-md bg-dark navbar-dark"> <a class="navbar-brand" href="#">My WebApp</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="collapsibleNavbar"> <ul class="navbar-nav"> <li class="nav-item"> <a class="nav-link" href="#">Home</a> </li> <li class="nav-item"> <a class="nav-link" href="#">About</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Contact</a> </li> </ul> </div> </nav> </header> <main class="container-fluid"> <div class="row"> <div class="col-md-6"> <h2>About Us</h2> <p>We are a company that specializes in web development and design.</p> </div> <div class="col-md-6"> <h2>Contact Us</h2> <p>Phone: 123-456-7890</p> <p>Email: info@mywebapp.com</p> </div> </div> </main> <footer class="footer bg-dark"> <div class="container"> <span class="text-muted">© 2021 My WebApp. All rights reserved.</span> </div> </footer> </body> </html> ``` 这是一个基于Bootstrap框架的简单webapp例子,包含了导航栏、主要内容和页脚。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值