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

1 URL设置

url地址可以如下操作:
1. 完整匹配,跳转控制器
2. 通过re匹配,跳转控制器
3. 通url传递参数
4. 跳转
4.1 url 反转
使用web.URLSpec中的name属性,在处理函数中使用reverse_url

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

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
包含附加请求参数的对象,例如头文件和主体数据
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

 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设置进行自定义。

 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()

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 13:40:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 13:40:05       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 13:40:05       87 阅读
  4. Python语言-面向对象

    2023-12-07 13:40:05       96 阅读

热门阅读

  1. 星期一 至 星期日的样本个数统计(Python)

    2023-12-07 13:40:05       59 阅读
  2. 基于灰狼算法求解旅行商问题的MATLAB源码

    2023-12-07 13:40:05       66 阅读
  3. nvm,node,npm,yarn相关安装报错问题记录

    2023-12-07 13:40:05       65 阅读
  4. CSS-2

    2023-12-07 13:40:05       47 阅读
  5. 数据库sql是什么?

    2023-12-07 13:40:05       56 阅读
  6. [Swift]RxSwift常见用法详解

    2023-12-07 13:40:05       54 阅读
  7. 开启gitlab中远程连接pgsql

    2023-12-07 13:40:05       47 阅读
  8. 【原创】Mac mini M1安装home-brew

    2023-12-07 13:40:05       57 阅读
  9. AURIX TC芯片中DSU实现安全启动

    2023-12-07 13:40:05       53 阅读
  10. 网络攻击有什么危害,该如何防御

    2023-12-07 13:40:05       58 阅读