1 URL设置
url地址可以如下操作:
1. 完整匹配,跳转控制器
2. 通过re匹配,跳转控制器
3. 通url传递参数
4. 跳转
4.1 url 反转
使用web.URLSpec中的name
属性,在处理函数中使用reverse_url
python
from tornado import web,ioloop
class IndexHandler(web.RequestHandler):
async def get(self):
self.write('Hello Tornado!!')
class IndexHandler2(web.RequestHandler):
async def get(self):
self.write('Hello Tornado22!!')
class UserHandler(web.RequestHandler):
async def get(self,id):
self.write(f'Hello User!! 您登录编号是:{id}')
class UserNameHandler(web.RequestHandler):
async def get(self,name):
self.write(f'Hello User!! 您登录用户名是:{name}')
class UserPwdHandler(web.RequestHandler):
async def get(self,name,pwd):
self.write(f'您登录用户名是:{name} 密码是:{pwd}')
class rediect2Handler(web.RequestHandler):
async def get(self):
self.redirect(self.reverse_url('index'))
class rediect3Handler(web.RequestHandler):
def initialize(self,name,pwd):
self.name = name
self.pwd = pwd
print(name,'========',pwd)
async def get(self):
self.redirect(self.reverse_url('index'))
args ={
'name':'吕小布',
'pwd':'123'
}
if __name__ == '__main__':
app = web.Application([
('/',IndexHandler),
web.URLSpec('/index/?',IndexHandler2,name='index'),
('/user/(\d+)/?',UserHandler),
('/user/(\w+)/?',UserNameHandler),
# ('/user/(\w+)/(\w+)/?',UserPwdHandler),
('/user/(?P<name>\w+)/(?P<pwd>\w+)/?',UserPwdHandler),
web.URLSpec('/redirect/',rediect2Handler),
web.URLSpec('/redirect2/',rediect3Handler,args)
],debug = True)
app.listen(8000)
ioloop.IOLoop.current().start()
2 RequestHandler
python
tornado.web.RequestHandler
HTTP请求处理程序的基类
initialize
钩子类初始化。要求每个请求
prepare
在get、post、etc之前的请求开始时调用
执行通用初始化
on_finish
请求结束后调用
此方法以执行清理,日志记录等
- get
- head
- post
- delete
- patch
- put
- Options
get_argument
返回具有给定名称的参数的值
get_arguments
返回具有给定名称的参数列表
get_query_argument
从请求查询字符串中返回具有给定名称的参数的值
get_query_arguments
返回具有给定名称的查询参数的列表
get_body_argument
从请求主体返回具有给定名称的参数的值
get_body_arguments
返回具有给定名称的主体参数列表。
tip
url字符串参数可以使用
Content-Type为 application/x-www-form-urlencoded 或者 multipart/form-data 的可以使用
如果是json 无法获取数据
request
包含附加请求参数的对象,例如头文件和主体数据
python
from tornado import web,ioloop
from json import loads
class IndexHandler(web.RequestHandler):
# def initialize(self,db = None):
# self.db = db
# 初始化handler参数
def prepare(self):
# 日志,打开文件
print('1111')
def on_finish(self):
# 清理内容
print('3333')
async def get(self):
print('2222')
name = self.get_argument('q')
names = self.get_arguments('q')
# name = self.get_query_argument('q')
# names = self.get_query_arguments('q')
print(name)
print(names)
self.write('成功访问get请求')
async def post(self):
# name = self.get_body_argument('name')
# names = self.get_body_arguments('name')
# name = self.get_argument('q')
# names = self.get_arguments('q')
args = self.request.body.decode('utf-8') # raw
print(args)
# print(loads(args))
# print(name)
# print(names)
self.write('成功访问post请求')
self.finish({'msg':'成功访问'})
# put delete options patch head
if __name__ == '__main__':
app= web.Application([
('/',IndexHandler),
],debug = True)
app.listen(8000)
ioloop.IOLoop.current().start()
3 重定向 RedirectHandler
python
from tornado import web, ioloop
from tornado.web import RedirectHandler
# 301是永久重定向, 302是临时重定向
class IndexHandler(web.RequestHandler):
def get(self):
self.finish('Hello Tornado!')
class LoginHandler(web.RequestHandler):
def get(self):
self.redirect('/')
# print(self.reverse_url('index'))
if __name__ == "__main__":
app = web.Application([
web.URLSpec('/',IndexHandler,name='index'),
web.URLSpec('/login/',LoginHandler),
web.URLSpec('/index/',RedirectHandler,{'url':'/'})
],debug=True)
app.listen(8000)
ioloop.IOLoop.current().start()
4 静态文件 StaticFileHandler
可以提供目录中的静态内容
如果将static_path关键字参数传递给Application,则会自动配置StaticFileHandler。 此处理程序可以使用static_ul_preix、static_handler_class和static_hander_args设置进行自定义。
python
from tornado import web, ioloop
from tornado.web import StaticFileHandler
class IndexHandler(web.RequestHandler):
def get(self):
self.finish('Hello Tornado!')
settings={
'static_path':'./static/',
'static_url_prefix':'/img/'
}
if __name__ == "__main__":
import os
static_url = os.path.join(os.path.dirname(os.path.abspath(__file__)),'static')
app = web.Application([
web.URLSpec('/',IndexHandler,name='index'),
('/img2/(.*)',StaticFileHandler,{'path':static_url}) # #方法3
],
debug=True,
# static_path ='./static/', #方法1
# static_url_prefix='/img/' #方法1
# **settings # #方法2
)
app.listen(8000)
ioloop.IOLoop.current().start()