2014-11-15 32 views

回答

3

使用方法

每个处理程序类与像getpost名称的方法,HTTP方法GETPOST等这些方法后函数处理请求。

对您的服务器的每个请求都将被路由到请求处理程序对象,该对象是某个请求处理程序类的新实例。因此,每个请求都会创建一个请求处理程序实例,并在发送HTTP响应后进行垃圾收集。

通过继承webapp2.RequestHandler,您的处理程序类可以免费获得一堆功能。例如,处理程序实例会将来自HTTP请求的数据解析为字典并自动绑定到self,分别为self.request.headersself.request.body

webapp2.RequestHandler类也提供self.response,这是你写你的响应数据。

一旦新的请求处理程序实例被初始化,继承的__init__方法将调用映射到HTTP请求方法的方法,因此假设请求为GET,它将调用self.getwebapp2.RequestHandler类不实现这些方法;你的派生类可以。

响应

无论print也不是处理方法的返回值被用在这里。你不用这个框架“返回响应”;你编写对请求处理程序实例的(继承)self.response属性的响应。

您的实例继承self.response.out.write(其别名为self.response.write),它将其参数连接到响应正文,最初是一个空字符串。

注意:您可以拨打self.response.clear来清除响应主体。

当您从您的处理程序方法返回时 - getpost等 - 返回值被忽略。该框架使用self.response的状态为您自动创建和发送HTTP响应。

框架在幕后也有一些细微之处。

类在功能

主要优点是在继承。通常,您将创建一个BaseHandler类,该类来自webapp2.RequestHandlerBaseHandler类将包含实际处理程序的核心功能。例如,它可能包含一些用于将数据转换为Web API的小型JSON包的逻辑。所有实际处理请求的类都将从您的BaseHandler派生。

您希望为您的处理程序类自定义基类,以便从主要类派生,因此您可以编辑该基类。您希望该基类继承自webapp2.RequestHandler,以便您的所有处理程序实例都继承框架魔法。

有足够的手使整个事情混淆,但一旦你明白了,很容易理解,并且节省了很多麻烦。从技术上讲,你可以使用函数和字典来实现上述所有功能,但是Python是经典的面向对象的,所以它会很痛苦和奇怪。