level 5
第一天学习成果总结
1. 定义RequestHandler类的子类UserHandler。并定义get方法、post方法,且它们都只接收1个self参数。get、post内通过self.write(response_string)写入响应报文主体内容
2. __main__代码块内创建Application类的实例对象,构造函数中传入urlmap参数。urlmap取值为[('/user/info', UserHandler)]
3. __main__代码块内调用app.listen(8080)方法,使得应用监听80端口
4. __main__代码块内调用IOLoop.instance().start()正式启动服务
class UserHandler(RequestHandler):
def get(self):
self.write('hello')
def post(self):
self.write('hello')
.
if __name__ == '__main__':
urlmap = [
('/user/info', UserHandler),
]
app = Application(urlmap)
app.listen(8080)
IOLoop.instance().start()
2025年10月29日 05点10分
2
level 5
第一天学习成果总结
1. 定义WebSocketHandler类的子类UserHandler。并定义open方法、on_message方法、on_close方法。open、on_close方法接收1个self参数,on_message方法接收self、message两个参数且message就是客户端发送来的消息体。on_message方法内通过self.write_message(response_bytes)写入响应报文主体内容
2. __main__代码块内创建Application类的实例对象,构造函数中传入urlmap参数。urlmap取值为[('/chat', ChatHandler)]
3. __main__代码块内调用app.listen(8080)方法,使得应用监听80端口
4. __main__代码块内调用IOLoop.instance().start()正式启动服务
class ChatHandler(WebSocketHandler):
def open(self):
print('open execute')
.
def on_message(self, message):
self.write_message(b'hello')
.
def on_close(self):
print('on_close execute')
.
if __name__ == '__main__':
urlmap = [
('/chat', ChatHandler),
]
app = Application(urlmap)
app.listen(8080)
IOLoop.instance().start()
2025年10月29日 05点10分
3
level 5
第一天学习成果总结
1. 定义TCPServer类的子类ChatServer。并定义handle_stream方法。handle_stream方法接收self、stream、address三个参数且stream就是把网络连接封装为字节流读写工具的对象。handle_stream方法内通过self.write(response_string)写入发送给客户端的TCP数据包主体内容
2. __main__代码块内创建ChatServer类的实例对象chat_server
3. __main__代码块内调用chat_server.listen(8080)方法,使得应用监听80端口
4. __main__代码块内调用IOLoop.instance().start()正式启动服务
class ChatServer(TCPServer):
def handle_stream(self, stream, address):
msg = stream.read_bytes(512)
stream.write('hello')
.
if __name__ == '__main__':
chat_server = ChatServer()
chat_server.listen(8080)
IOLoop.instance().start()
2025年10月29日 05点10分
4
level 5
Handler函数内写入响应报文主体内容
1. RequestHandler的get方法、post方法内写入text响应
self.write(response_str)
2. RequestHandler的get方法、post方法内写入json响应(json数据结构以dict类型值给出)
self.finish(response_dict)
2025年10月29日 05点10分
6
level 5
各种服务器的业务处理函数的函数名
1. RequestHandler的业务处理函数是:get、post
2. TCPServer的业务处理函数是:handle_stream
3. WebSocketHandler的业务处理函数是:on_message
2025年10月29日 05点10分
7
level 5
各种服务器的响应报文内容写入函数(function that writes response body)
1. RequestHandler的响应报文内容写入函数是:self.write、self.finish
2. TCPServer的响应报文内容写入函数是:self.write
3. WebSocketHandler的响应报文内容写入函数是:self.write_message
2025年10月29日 05点10分
8
RequestHandler的self.write写入text数据,self.finish写入json数据
2025年10月29日 09点10分
level 5
RequestHandler类的Handler函数内获取query、form参数
1. 获取query参数
arg_value = self.get_query_argument(arg_name)
arg_values = self.get_query_arguments(arg_name)
2. 获取form参数
arg_value = self.get_body_argument(arg_name)
arg_values = self.get_body_arguments(arg_name)
3. 获取form参数或query参数
arg_value = self.get_argument(arg_name)
arg_values = self.get_arguments(arg_name)
2025年10月29日 06点10分
9
这些函数都支持传入第2个参数,作为参数缺省时的默认值。例如arg_value = self.get_query_argument(arg_name, None)
2025年10月29日 09点10分
level 5
导入常用的类
1. 导入Application类
from tornado.web import Application
2. 导入RequestHandler类
from tornado.web import RequestHandler
2025年10月29日 06点10分
10
level 5
导入常用的类
1. 导入IOLoop类
from tornado.ioloop import IOLoop
2025年10月29日 06点10分
11
level 5
from tornado.web import Application
from tornado.web import RequestHandler
from tornado.ioloop import IOLoop
class UserHandler(RequestHandler):
def get(self):
name = self.get_query_argument('name')
age = self.get_query_argument('age')
resp_dict = {
'code': 0,
}
self.finish(resp_dict)
def post(self):
name = self.get_body_argument('name')
age = self.get_body_argument('age')
resp_dict = {
'code': 0,
}
self.finish(resp_dict)
if __name__ == '__main__':
urlmap = [
('/user/info', UserHandler),
]
app = Application(urlmap)
app.listen(8080)
IOLoop.instance().start()
2025年10月29日 06点10分
12