Torando 起步

 
基本结构:
 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)

猜你喜欢

转载自www.cnblogs.com/yanhuazidi/p/10336494.html
今日推荐