基本结构:
1 from tornado.web import Application,RequestHandler 2 from tornado.httpserver import HTTPServer 3 from tornado.ioloop import IOLoop 4 5 class IndexHandler(RequestHandler): 6 def get(self): 7 self.write(‘Hello World‘) 8 def post(self): 9 pass 10 11 app = Application(handlers=[(‘/‘,IndexHandler)]) 12 server = HTTPServer(app) 13 server.listen(8888) 14 IOLoop.current().start()
将端口号写到配置文件中
from tornado.options import define,parse_config_file,options
1. 定义端口号在配置文件中的名称,类型,默认值
define(‘名称‘,type=int,default=8888)
2. 解析配置文件
parse_config_file(‘配置文件路径‘)
3. 读取配置文件中的内容
options.名称
URL支持正则表达式,利用路径的变化请求不同资源
用()来表示正则模板
app = Application(handlers=[(‘/(day[0-9]+)‘,IndexHandler),(‘/java/(day[0-9]+)/(input[0-9]+)‘,JavaHandler)]
在view函数中可以接受正则匹配内容
def get(self, day,input): self.write(‘Hello Python‘)
利用参数请求不同资源 get
浏览器允许多个传参名相同:/python?day=1&day=2&day=3
self.get_query_argument(name, default=_ARG_DEFAULT, strip=True)
返回 value
name : 参数名
default : 默认值,用户不提供参数不设置会报错。
strip : 去参数两端的空白字符,默认去除
如果参数不止一次出现在url中,则返回最后一个值
self.get_query_arguments(name, strip=True)
用户不提供参数会返回空列表
以列表类型返回传参中name的所有值
利用参数请求不同资源 post
day = self.get_body_argument(‘day‘,default=‘0000000‘,strip=False) self.write(‘Hello Python‘+day) day = self.get_body_arguments(‘day‘,strip=False) print(day)
参数同上,在请求body中取值
其他
get_argument() #等同get_query_argument +get_body_argument get_arguments() #同理
适用场景: 在post请求中,请求行中也有参数的情况
示例:
POST /python?day=1&day=2&day=3 http1.1
header={}
\r\n\r\n
body={day:1,day:2,day:3}
from tornado.web import Application,RequestHandler from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop from tornado.options import define,parse_config_file,options class IndexHandler(RequestHandler): def get(self): self.write(‘<a href=/java>Hello World go java</a>‘) self.write(‘<br><a href=/python>Hello World go python</a>‘) def post(self): pass class JavaHandler(RequestHandler): def get(self,day=None,input=None): self.write(‘Hello Java‘) if day: self.write(‘Hello ‘+day) if input: self.write(‘Hello ‘+input) def post(self): pass class PythonHandler(RequestHandler): #覆盖RequestHandler get方法,响应get请求 def get(self): self.write(‘Hello Python‘) #GET获取参数 http://127.0.0.1:9999/python?day=111111111 day = self.get_query_argument(‘day‘,default=‘0000000‘,strip=False) self.write(‘Hello Python‘+day) #/python?day=1&day=2&day=3&day=4&day=5 day = self.get_query_arguments(‘day‘,strip=False) print(day)#[1,2,3,4,5] #覆盖RequestHandler post方法,响应post请求 def post(self): day = self.get_body_argument(‘day‘,default=‘0000000‘,strip=False) self.write(‘Hello Python‘+day) day = self.get_body_arguments(‘day‘,strip=False) print(day) define(‘port‘,type=int,default=8888) parse_config_file(‘config/config.txt‘) app = Application(handlers=[(‘/‘,IndexHandler), (‘/java‘,JavaHandler), (‘/java/([0-9]*)/([a-z0-9]*)‘,JavaHandler), (‘/python‘,PythonHandler)]) server = HTTPServer(app) server.listen(options.port) IOLoop.current().start()
重定向
为GET方式访问,支持参数的拼接传递
self.redirect(‘/python?day=1‘)
文件提交(表单要设置enctype=multipart/form-data)
request 是 RequestHandler对象的一个属性,引用的HttpServerRequest对象
该对象封装了与请求相关的所有内容print(self.request) , 其files属性引用着用户通过表单上传的文件,{} 结构
#结构示例 self.request.files={‘input_name1‘:[{‘content_type‘:‘image/jpeg‘, #文件类型 ‘body‘:b‘\....‘, #文件二进制内容 ‘filename‘:‘文件1名‘ #原文件名 },{文件2},{文件3},,,,], ‘input_name2‘:,,,,,,,,,,,,,,,} #input_name为文件类型表单控件名称,其值为此表单提交的文件列表,列表元素为字典,一个字典包含一个文件对象的全部属性
文件保存
img = self.request.files[‘input_name1‘] for a in img: content_type = a[‘content_type‘] filename = a[‘filename‘] body = a[‘body‘] with open(path+filename,‘wb‘) as f: f.write(body)
原文地址:https://www.cnblogs.com/yanhuazidi/p/10336494.html
时间: 2024-10-11 08:26:58