请求头与响应头
请求头
响应头
设置响应头
set_header/add_header/clear_header
class MainHandler(RequestHandler): def get(self): self.write('life is short you need python') self.set_header('name','taka') #设置响应头 self.set_header('name','goolu') #存在两个相同的同名的key时,set_header会覆盖 self.set_header('age','1111') #set_header可以设置多个,如果有相同名字响应头会覆盖 class AddHandler(RequestHandler): def get(self): self.write('life is short you need python') self.add_header('name','taka') #添加响应头 self.add_header('name','taka') #添加响应头 self.add_header('name','taka') #添加响应头 self.add_header('age','111') #添加响应头 #add_header可以同时存在多个相同key self.clear_header('age') #清除指定key的响应头 self.clear_header('name') #如果相同key的响应头全部清除 application = tornado.web.Application( handlers=[ (r'/', MainHandler), (r'/add', AddHandler), ], template_path = 'templates', #指定静态模板的文件夹 debug=True #方便调试 )
设置状态码
send_error:
发送错误码到浏览器,指定HTTP错误码发送到浏览器
如果已经执行了flush ,则不能再执行send_error,因此该方法将简单的终止响应
如果输出页面已写入但尚未刷新,则将其丢弃并替换为错误页面
write_error:
send_error在其底层调用write_error,因此只需要重写该方法就可以实现自定义错误页面
未定义路由的处理
class SendHandler(RequestHandler): def get(self): self.write('hello world') #200 OK # self.flush() #刷新后面的错误码不显示 self.send_error(404) #发送错误码,可以主动去报错 404:Not Found # print('hello') def write_error(self, status_code, **kwargs): #重写write_error方法,自定义报错页面 # self.write('aaa %s'%status_code)
self.render('error_notfound.html') class NotHandler(RequestHandler): def get(self,*args,**kwargs): self.write('not haha') self.set_status(404,'error!!!') #设置状态码 print(args) application = tornado.web.Application( handlers=[ (r'/send', SendHandler), (r'/(.*)', NotHandler), # ], template_path = 'templates', #指定静态模板的文件夹 debug=True #方便调试 )
请求处理流程
调用顺序:
Tornado 在接受到请求之后,后按照此顺序选择响应的方法来执行
class IndexHandler(RequestHandler): ''' 客户端发请求过来,我们发响应回去,中间有一定的过程 ''' def set_default_headers(self): '''设置默认响应头''' print('-------set_default_headers---:设置headers') def initialize(self): print('----initialize-------:初始化') def prepare(self): print('------prepare----:准备工作') def get(self): self.write('hjjjjj <br/>eeeeee') def post(self): pass def write_error(self, status_code, **kwargs): print('----write_error--------:错误处理') def on_finish(self): '''结束工作''' print('-----on_finish-----:结束并释放资源') application = tornado.web.Application( handlers=[ (r'/index', IndexHandler), ], template_path = 'templates', #指定静态模板的文件夹 debug=True #方便调试 )
运行结果日志: