tornado提升_
整理基础工程
- 将原先的server包装集划分成以下几个文件
-
views包
用来存放视图函数
-
applation.py
用来存放路由和配置
-
config.py
用来设置配置信息
-
static目录
静态文件
-
templates目录
存放模板文件
-
server.py
服务器
-
Aplication
- settings
-
debug/autoreload
设置tornado是否是在工作模式下,默认时False,即工作在生产模式下。 = True的4个特性: 1.自动重启,tornado会监控源代码文件,当有保存改动,便会重新启动服务器,这样可以减少 手动重启的次数从而提高开发效率 注意:如果保存后代码有错误会导致重启失败,修改错误后就不会自动重启了 autoreload = True 2.取消缓存编译的模板 compiled_template_cache = False 3取消缓存静态文件的hash值 static_hash_cache = False 4提供追踪信息 serve_traceback = True 5关闭当前项目的的自动转义(一般不用) "autoescape":None, 6 配置安全cookie密钥 "cookie_secret":"tfA8keUBRy2y+HdXA91DSSDVq3v3EUp6gbsGqeHUHTA=", 7 开启XSRF保护 "xsrf_cookies":True 8 不符合验证用户的逻辑,请求会将访客重定向到配置中的login_url所指定的路由 "login_url":"/login"
-
static_path
设置静态文件目录
-
template_path
设置模板文件目录
-
- 路由
-
(r’/’,index.IndexHandler) 无参数
正常书写http 的 GET,POST等一些方法
-
(r’/luciano’,index.LucianoHandler,{“word1”:“good”,“word2”:“nice”}), 有参数
需要重写initialize()方法接受传递的参数
-
tornado.web.url(r’/yaoge’,index.yaogeHandler,{“word3”:“good”,“word4”:“nice”},name=“fanxiangdaili”) 有参数+反向解析
tornado.web.url()如果使用name属性来写带反向解析的路由,不能直接使用元组写 self.reverse_url("fanxiangdaili") 会获取到name为“fanxiangdaili”的路由的正则匹配
-
tornado.web.RequestHandler
-
利用HTTP协议向服务器传递参数
-
提取uri的特定部分
http://127.0.0.1:9000/liuyifei/is/a/woman url:(r'/liuyifei/(\w+)/(\w+)/(\w+)',index.liuyifeiHandler), handler:class liuyifeiHandler(RequestHandler): # 接受路由的正则表达式的"组" def get(self,h1,h2,h3,*args,**kwargs): print(h1+"-"+h2+"-"+h3) self.write("刘亦菲") ---------------------------------------------------- url:(r'/liuyifei/(?P<h1>\w+)/(?P<h2>\w+)/(?P<h3>\w+)', index.liuyifeiHandler), handler:class liuyifeiHandler(RequestHandler): # 接受路由的正则表达式的"组" def get(self,h3,h1,h2,*args,**kwargs): print(h1+"-"+h2+"-"+h3) self.write("刘亦菲")
-
查询字符串(get方式传递参数)
http://127.0.0.1:9000/zhangmanyu?a=1&b=2&c=3 get_query_argumenr()方法: self.get_query_argument(name,default=ARG_DEFAULT,strip=True) 参数说明: name:从get请求参数字符串中返回指定参数的值 注意:如果出现多个同名参数,返回的是最后一个值 default:如果设置了未传的name参数时会返回default的默认的值, 如果default也没有设置,那么会抛出警告"tornado.web.MissingArgumentError" strip:表示是否过滤掉两边的空白字符,默认True ------------------------------------------ 实例: application: (r'/zhangmanyu',index.zhangmanyu), handler: class zhangmanyu(RequestHandler): def get(self,*args,**kwargs): a = self.get_query_argument("a") b = self.get_query_argument("b") c = self.get_query_argument("c") print(a,b,c) self.write("张曼玉") ---------------------------------------------- http://127.0.0.1:9000/zhangmanyu?a=1&a=2&b=2&c=3 get_query_argumenrs()方法: self.get_query_arguments(name,strip=True) class zhangmanyu(RequestHandler): def get(self,*args,**kwargs): alist = self.get_query_arguments("a") b = self.get_query_argument("b") c = self.get_query_argument("c") print(alist[0],alist[1],b,c) self.write("张曼玉")
-
请求体携带数据(post方式传递参数)
self.get_body_argument(name,default=ARG_DEFAULT,strip=True) self.get_body_arguments(name,strip=True) ------------------------------------------------- 实例: class postfile(RequestHandler): # get用来展示页面 def get(self, *args, **kwargs): self.render('postfile.html') # post用来接受Post请求传递过来的数据 def post(self, *args, **kwargs): username = self.get_body_argument("username") password = self.get_body_argument("password") hobbylist = self.get_body_arguments("hobby") print(username,password,hobbylist) self.write("dsd")
-
既可以获取get请求,也可以获取post请求(一般不用)
self.get_argument(name,default=ARG_DEFAULT,strip=True) self.get_arguments(name,strip=True)
-
在http报文头中增加自定义字段
sad
-
-
request对象
- 作用:存储了关于请求的相关信息
- 属性:
-
method : HTTP请求的方式
-
host : 被请求的主机名
-
uri : 请求的完整资源地址,它包括路径和get查询参数部分
-
path : 请求的路径部分
-
query : 请求参数部分
-
version : 使用的http版本
-
headers : 请求的协议头,是一个字典类型
-
body : 请求体数据
-
remote_ip : 客户端的ip地址
-
files : 用户上传的文件,是一个字典类型
实例: def get(self,*args,**kwargs): print(self.request.method)
-
-
tornado.httputil.HTTPFile对象
- 作用:它是接受到的文件对象
- 属性:
-
filename :文件实际名字
-
body : 文件的数据实体
-
content_type : 文件的类型
文件对象的格式:
{
‘file’:[
{
‘filename’:‘a.txt’,
‘body’:'lucinao is goodman ',
‘content_type’:‘text/plain’},{} ], 'img':[ { 'filename':'a.png', 'body':'afwaeeij8998sdf32jo... ', 'content_type':'image/png' },{},{}... ] }
代码部分:
import config
import os
class upfileHandler(RequestHandler):
def get(self,*args,**kwargs):
self.render(‘upfile.html’)def post(self,*args,**kwargs): filesDict = self.request.files # 遍历 文件所有对象集合的key for inputname in filesDict: # 获取字典对象中的 valus 即 一个列表 fileArr = filesDict[inputname] # 获取文件对象 for fileobj in fileArr: # 指定存储路径 filePath = os.path.join(config.BASE_DIRS,'upfile/'+fileobj.filename) # 保存到服务器的upfile文件上 with open(filePath,'wb') as f: f.write(fileobj.body) self.write("上传成功")
-