7-tornado中Url设置、RequestHandler的使用、重定向 RedirectHandler、静态文件 StaticFileHandler

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()
相关推荐
qq_417695051 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水1 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
yy我不解释2 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
踩着两条虫2 小时前
VTJ.PRO 核心架构全公开!从设计稿到代码,揭秘AI智能体如何“听懂人话”
前端·vue.js·ai编程
紫丁香3 小时前
AutoGen详解一
后端·python·flask
FreakStudio3 小时前
不用费劲编译ulab了!纯Mpy矩阵micronumpy库,单片机直接跑
python·嵌入式·边缘计算·电子diy
jzlhll1233 小时前
kotlin Flow first() last()总结
开发语言·前端·kotlin
蓝冰凌4 小时前
Vue 3 中 defineExpose 的行为【defineExpose暴露ref变量】详解:自动解包、响应性与实际使用
前端·javascript·vue.js
奔跑的呱呱牛4 小时前
generate-route-vue基于文件系统的 Vue Router 动态路由生成工具
前端·javascript·vue.js