通常,响应会包含 HTTP 状态代码 200,表示 [正常]。具体而言,代码 200 表明 URI 引用一个有效资源,且该资源包含于响应的输出中。不同的环境调用不同的错误代码。例如,如果存在一个服务器的内部错误条件,且该错误条件阻止了预期数据的输出,那么,该服务器可能会返回一个代码 500,表示 [服务器错误]。
该请求处理程序会提供一种 error(...) 方法以使用指定的错误代码准备错误响应。例如:
class MyHandler(webapp.RequestHandler):
def get(self):
self.response.out.write("You asked me to do something.")
try:
doSomething()
self.response.out.write("It's done!")
except Error:
# Clear output and return an error code.
self.error(500)
error(...) 方法会使用数字 HTTP 状态代码,并准备该请求处理程序的响应以使用此状态代码。它还会清除输出缓冲区,这样,处理程序便可以通过使用 out 准备顺利输出,之后如果有问题再调用 error(...)。
状态代码的另一个常见用途是将用户的浏览器重定向至另一个 URI。重定向可为永久性的,表示该 URI 曾经对所请求的资源有效,但该资源以后的所有请求应当使用新的 URI。重定向也可为临时的,表示所请求的 URI 是有效的,但浏览器目前应当请求另一个 URI。网络应用程序的常见技术是使用临时的重定向对表单成功提交做出响应,从而防止用户意外使用浏览器的 [返回] 按钮然后重新提交该表单。
请求处理程序提供了一个 redirect(...) 方法以准备重定向响应。例如:
class FormHandler(webapp.RequestHandler):
def post(self):
if processFormData(self.request):
self.redirect("/home")
else:
# Display the form, possibly with error messages.
redirect(...) 使用目标 URI 作为其第一个参数。默认情况下,它会建立一个临时重定向。可选参数 permanent=True 使用永久重定向代码。
请求处理程序方法 error(...) 和 redirect(...) 会更改响应的 HTTP 状态代码。redirect(...) 也可使用 HTTP 标头将新的 URI 传递到客户端。Response 对象可提供用来直接设置状态代码和 HTTP 标头的方法。
Response 对象的 set_status(...) 方法可更改响应的状态代码。该方法使用数字状态代码作为其第一个参数。可选的第二个参数指定了将代替指定状态代码默认邮件的邮件。
Response 对象的 headers 属性是一个 wsgiref.headers.Headers 实例,代表该响应的 HTTP 标头。有关如何设置标头的信息,请参阅 wsgiref.headers 文档。
class StatusImageHandler(webapp.RequestHandler):
def get(self):
img_data = get_status_image_for_current_user()
self.response.headers["Content-Type"] = "image/png"
self.response.headers.add_header("Expires", "Thu, 01 Dec 1994 16:00:00 GMT")
self.response.out.write(img_data)