tornado笔记2-web框架

tornado框架 2020-10-25 1263

主要讲解tornado框架的几个主体构成:

tornado.web

tornado.template

tornado.routing

import tornado.escape

import tornado.locale

import tornado.websocket

tornado.web

其中常用的几个方法,已在笔记一提到。

RequestHandler,支持get,post,patch,put,delete,options,head请求方法,当然你也可以自定义请求,不过我觉得没有必要。

输入方法(INPUT):

get_argument------------获取给定名称的参数的值。如果没有默认值,会被认为是必须的,如果缺少该参数,我们将引发一个 MissingArgumentError。
get_arguments-----------返回具有给定名称的参数列表。如果参数不存在,则返回一个空列表。
?name=5&name=6----> print(self.get_arguments('name')) # 结果:[5, 6]
get_query_argument-----------从请求查询字符串返回具有给定名称的参数的值。与get_argument类似,一般用于GET请求
get_query_arguments----------一般用于GET请求
get_body_argument------------一般用于POST请求
get_body_arguments-----------一般用于POST请求
decode_argument-----------对请求中的参数进行解码。这个方法用作 get _ argument ()和从 url 中提取并传递给 get ()/post ()/等值的过滤器。
如:self.decode_argument(response.body),它接受bytes类型
self.request---------------你可以从其中获取到很多参数,如body、headers、query等
path_args、path_kwargs---------------Path _ args 和 path _ kwargs 属性包含传递给 HTTP 谓词方法的位置参数和关键字参数。这些属性是在调用这些方法之前设置的,因此这些值在准备期间是可用的。
如:/book/1/, 则self.path_args=['1']
data_received-------------------实现此方法以处理流式请求数据。
输出方法(Output)
set_status(status_code,reason)------------------设置响应的状态代码。reason为浏览器NetWork中General中Status Code: 200 OK中的【OK】,你指定什么,它就是什么
set_header---------------------设置给定的响应头名称和值。
add_header---------------------添加给定的响应头和值。与 set_header 不同,add_header 可以被多次调用以返回同一个 header 的多个值。
clear_header--------------清除传出标头,取消以前的 set_header 调用。请注意,此方法不适用于由 add _ header 设置的多值头。
set_default_headers-----------重写此命令以在请求的开头设置 HTTP 标头。
self.write()--------------将给定的块写入输出缓冲区。如果给定的块是一个字典,我们将其编写为 JSON,并将响应的 Content-Type 设置为 application/JSON。
flush()----------------将当前输出缓冲刷新到网络。
finish()-------------完成这个响应,结束 HTTP 请求。
render()-------------呈现带有给定参数的模板作为响应。
render_string()-----------使用给定的参数生成给定的模板。我们返回生成的字节字符串(utf8)。
get_template_namespace-----------返回用作默认模板命名空间的字典。
redirect----------发送一个重定向到给定的(可选的相对) URL。
send_error-----------将给定的 HTTP 错误代码发送到浏览器。如果已经调用了 flush () ,则不可能发送错误,因此此方法将简单地终止响应。如果输出已经写入但尚未刷新,则将丢弃它并用错误页面替换。重写 write _ error ()以自定义返回的错误页。通过其他关键字参数可以写入错误。
write_error()------------重写以实现自定义错误页。
clear()-------------重置此响应的所有标题和内容。将header重置,状态置为200,_write_buffer置为[]
render_linked_js--------------用于渲染所渲染网页的最终 js 链接的默认方法。在子类控制器中重写此方法以更改输出。
render_embed_js---------------用于渲染所渲染网页的最终嵌入 js 的默认方法。在子类控制器中重写此方法以更改输出。
render_linked_css-------------用于渲染所渲染网页的最终 css 链接的默认方法。可重写
render_embed_css-----------------用于渲染所渲染网页的最终嵌入 css 的默认方法。可重写

Cookies 

cookies----------self.request.cookies 的别名。
get_cookie---------返回具有给定名称的请求 cookie 的值。
set_cookie---------使用给定的选项设置传出的 cookie 名称/值。
clear_cookie-------使用给定的名称删除 cookie。
clear_all_cookies--------删除用户在此请求中发送的所有 cookie。
get_secure_cookie--------安全的cookie,详见笔记一
get_secure_cookie_key_version-------返回安全 cookie 的签名密钥版本。
set_secure_cookie---------设置安全的cookie
create_signed_value---------通常通过set_secure_cookie使用,但作为非cookie使用的单独方法提供。 要解码未存储为Cookie的值,请使用get_secure_cookie的可选value参数。

其他

check_etag_header-------------------根据请求的 If-None-Match 检查 Etag 头。如果请求的 Etag 匹配并返回304,则返回 True。例如
self.set_etag_header()
if self.check_etag_header():
    self.set_status(304)
    return
check_xsrf_cookie-----------验证_xsrf cookie是否与_xsrf参数匹配。
compute_etag-----------计算用于此请求的 etag 标头。
create_template_loader--------------返回给定路径的新模板加载程序。可以被子类重写
current_user------------此请求的经过身份验证的用户。
detach()------------控制底层流。返回基础 IOStream 对象并停止所有进一步的 HTTP 处理。用于实现像 websockets 这样的协议,这些协议通过 HTTP 握手进行隧道化。
get_browser_locale----------从 Accept-Language 头确定用户的区域设置。
get_current_user-----------重写来确定当前用户
get_login_url()---------覆盖以根据请求自定义登录 URL。
get_status-------返回响应的状态代码。
get_user_locale---------重写以从已验证的用户确定区域设置。
log_exception----------重写以自定义未捕获异常的日志记录。
on_connection_close--------如果客户端关闭了连接,则在异步处理程序中调用。
set_etag_header---------使用self.compute_etag()设置响应的 Etag 头。
xsrf_token-----------当前用户/会话的 XSRF-prevention 标记。

应用程序配置

settings
    一般设置:
        autoreload:如果为 True,则当任何源文件发生更改时,服务器进程将重新启动
        debug:几个调试模式设置的缩写
        default_handler_class and default_handler_args:如果没有找到其他匹配,将使用此处理程序; 使用它实现自定义404页面
        compress_response:压缩响应: 如果为True,文本格式的响应将被自动压缩。
        log_function:这个函数将在每个请求结束时调用,以记录结果(带有一个参数,即requestthandler 对象)。
        # 默认实现将写入日志模块的根日志程序。也可以通过重写Application.log_request.请求来自定义。
        serve_traceback:如果为 True,则默认错误页面将包含错误的回溯。
        ui_modules and ui_methods:可以设置为模板可用的UIModule或 UI method的映射。可以设置为模块、字典或模块和/或命令列表。
        websocket_ping_interval:如果设置为一个数字,所有的 websocket 将每 n 秒被 ping 一次。
        websocket_ping_timeout:如果设置ping interval,并且服务器在这么多秒内没有收到‘pong‘,
        #它将关闭 websocket。默认值是 ping 间隔的三倍,最少30秒。如果没有设置 ping 间隔,则忽略。
    认证和安全设置:
        cookie_secret:由请求者使用。获取安全 cookie 并设置安全 cookie 签名。
        key_version:当cookie_secret是密钥字典时,由requestHandler set_secure_cookie用来使用特定密钥对cookie进行签名。
        login_url:如果用户未登录,则经过身份验证的装饰器将重定向到该URL。可以通过重写RequestHandler.get_login_url进行进一步自定义
        xsrf_cookies:启用跨站请求伪造保护
        xsrf_cookie_version:控制此服务器生成的新XSRF cookie的版本。通常保持默认就行
        twitter_consumer_key, twitter_consumer_secret, friendfeed_consumer_key等:oauth服务填入的客户端key和secret,国内基本用不到
        # 如果你要自定义,参考笔记1
    模板设置:
        autoescape:自动转义
        compiled_template_cache:默认为 True; 如果为False模板将在每个请求上被重新编译
        template_path:包含模板文件的目录。通过重写RequestHandler.get_template_path进一步定制
        template_loader:模板加载器,你可以通过重写RequestHandler.create_template_loader.支持Jinjia2等模板
        template_whitespace:控制模板中空格的处理
    静态文件设置:
        static_hash_cache:默认True,如果False静态url将在每次请求时重新计算。
        static_path:提供静态文件的目录。
        static_url_prefix:静态文件的Url前缀,默认为"/static/"。
        static_handler_class, static_handler_args:可以设置为对静态文件使用其他处理程序,而不使用默认的tornado.web.StaticFileHandler。
        #如果设置了static_handler_args,则应为关键字参数的字典,以将其传递给处理程序的initialize方法。

装饰器

web.authenticated-----------------------以此装饰方法,要求用户登录。如果用户没有登录,它们将被重定向到配置的login_url
web.addslash-----------------使用此修饰符可以在请求路径中添加缺少的斜杠尾部。对/foo的请求将重定向到/foo/,并使用这个 decorator。您的请求处理程序映射应该使用 r’/foo/? ’这样的正则表达式和装饰器一起用。好奇为什么不从底层支持,其他框架好像都支持默认支持这种。
web.removeslash-----------使用此修饰符可以删除请求路径中的拖尾斜杠。
web.stream_request_body------------应用于 requestthandler 子类以启用流媒体支持。
web.stream_request_body-------------启用流媒体支持。一般用于上传文件,详见:https://github.com/tornadoweb/tornado/blob/master/demos/file_upload/file_uploader.py

其他的一切

exception 异常处理:
    tornado.web.HTTPError---------------你可以无脑抛异常,raise tornado.web.HTTPError(),返回http 500
    tornado.web.Finish---------------结束请求而不产生错误响应的异常,当在RequestHandler中引发Finish时,请求将结束(如果尚未调用,则调用RequestHandler.finish),但是不会调用错误处理方法(包括RequestHandler.write_error)。
一种比覆盖write_error更方便的实现自定义错误页面的方法:
if self.current_user is None:
    self.set_status(401)
    self.set_header('WWW-Authenticate', 'Basic realm="something"')
    raise Finish()

    tornado.web.MissingArgumentError:当调用get_argument()方法有问题时,则引发此错误,返回http 400

UIModule:一个页面上可重用的模块化 UI 单元。,查看http://shouce.jb51.net/tornado/ch3.html#ch3-2-1,有详细的案例
tornado.web.ErrorHandler:为所有请求生成带有"status_code"的错误响应。
※ tornado.web.FallbackHandler:包装另一个 HTTP 服务器回调的 requestthandler。Fallback 是一个可调用的对象,它接受一个 HTTPServerRequest,比如 Application 或者 tornado.wsgi.WSGIContainer。这对于在同一个服务器中同时使用 Tornado requestlers 和 WSGI 是最有用的。典型用法:
wsgi_app = tornado.wsgi.WSGIContainer(
    django.core.handlers.wsgi.WSGIHandler())
application = tornado.web.Application([
    (r"/foo", FooHandler),
    (r".*", FallbackHandler, dict(fallback=wsgi_app),
])

tornado.web.RedirectHandler:为url提供重定向功能
application = web.Application([
    (r"/oldpath", web.RedirectHandler, {"url": "/newpath"}),
])
tornado.web.StaticFileHandler:一个简单的处理程序,可以从一个目录服务静态内容。https://www.tornadoweb.org/en/stable/web.html#tornado.web.StaticFileHandler

 

标签:tornado框架

文章评论

评论列表

已有0条评论