# 万能问题解决(提示)键ALT+ENTER
'''
创建Tornado服务器
'''
import tornado
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, parse_config_file, options
from tornado.web import Application, RequestHandler
# 继承自RequestHandler类
# 对请求的方式(get/post)调用重写父类的get/post方法做出响应
class IndexHandler(RequestHandler):
def get(self,*args,**kwargs):
# 服务器就是一个字符串
# 浏览器解析就是一个a标签,超链接
self.write('<a href=/python>Hello Python</a><br>')
self.write('<a href=/java>Hello Java</a>')
def post(self,*args,**kwargs):
pass
class PythonHandler(RequestHandler):
def get(self,p1=None,p2=None,*args,**kwargs):
self.write('人生苦短,我用Python!'+'<br>')
if p1:self.write('data:'+p1+'<br>')
if p2:self.write(('subject:'+p2))
def post(self,*args,**kwargs):
pass
class JavaHandler(RequestHandler):
def get(self, p1=None,p2=None,*args, **kwargs):
self.write('Java在手,天下我有!'+'<br>')
if p1:self.write('data:'+p1+'<br>')
if p2:self.write('subject:'+p2)
def post(self, *args, **kwargs):
pass
# 对程序中可能经常变化的值应该提取到配置文件中
# 创建文件夹在文件夹下创建file,充当配置文件
define('duankou',type=int,default=8888)
# 当前文件所在文件夹的上一个(mytornado)下的config/config
parse_config_file('../config/config')
# 创建Application对象
# Application是Tornado最核心的类
# 所有关于服务器的配置信息都要写在Application构造器中
# 以构造器的参数形式传入
# 比如:路由列表
# 路由列表的作用告诉Tornado,对特定路径的请求,
# 由哪个类进行响应
app = Application([('/',IndexHandler),
('/python',PythonHandler),
('/python/([0-9a-zA-Z]+)',PythonHandler),
('/python/([0-9a-zA-Z]+)/([a-zA-Z]+)',PythonHandler),
('/java',JavaHandler),
('/java/([0-9a-zA-Z]+)',JavaHandler),
('/java/([0-9a-zA-Z]+)/([a-zA-Z]+)',JavaHandler)])
# 创建真正的服务器程序
server = HTTPServer(app)
# 让服务器监听某一个端口(端口号是一个int,原则上不小于10000)
server.listen(options.duankou)
# 当前线程中启动服务器
IOLoop.current().start()
1.. 如果对路由列表中不存在的路径发起请求,会得到404:Not Found
2.. Python中,带有HTML标签的字符串也仅仅是一个普通的字符串.
但是将这样的字符串作为服务器的响应交给客户端时,客户端会进行解析,
渲染后呈现给用户.客户端(浏览器)会根据HTML标签做不同的渲染处理.
- 可以利用正则表达式匹配具有一定规律性的所有的路径.
路径的具体内容会以参数的形式传入get/post方法,参数名称可以随意指定,
但是最好给参数指定默认值,一般默认值为None
例如:
(‘/python’,xxHandler),
(‘/python/([0-9a-zA-Z]+)’,xxHandler),
(‘/python/([0-9a-zA-Z]+)/([a-zA-Z]+)’,xxHandler)