tornado requesthandler可以重写的方法
一 :RequestHandler
一般我们继承tornado.web.RequestHandler
1,RequestHandler.initialize()一般用于初始化,第三个字典参数传入
class ProfileHandler(RequestHandler):
def initialize(self, database):
self.database = database def get(self, username):
... app = Application([
(r'/user/(.*)', ProfileHandler, dict(database=database)),
])
2,RequestHandler.prepare()
调用 prepare()。无论使用了哪种 HTTP 方法, prepare 都会被调用到, 因此 这个方法通常会被定义在一个基类中, 然后在子类中重用。prepare可以产生输出 信息。如果它调用了finish(或send_error` 等函数), 那么整个处理流程 就此结束。
3,RequestHandler.on_finish()
重写结束的方法
4,RequestHandler.get
RequestHandler.head
RequestHandler.post
RequestHandler.delete
RequestHandler.path
RequestHandler.put
RequestHandler.options
5,相当于指定,同时也可以增加需要写的函数
class WebDAVHandler(RequestHandler):
SUPPORTED_METHODS = RequestHandler.SUPPORTED_METHODS + ('PROPFIND',) def propfind(self):
pass
二:RequestHandler 取出请求结果的方式
1,RequestHandler.get_argument
2,RequestHandler.get_arguments
3,RequeatHandler.get_query_argument
4,RequestHandler.get_query_arguments
5,RequestHandler.get_body_argument
6,RequestHandler.get_body_arguments
7,RequestHandler.decode_argument
8,RequestHandler.request
9,RequestHandler.path_args
10,RequestHandler.path_kwargs
三 RequestHandler 设置值方式
1,RequestHandler.set_status(status_code, reason=None)
2,RequestHandler.set_header(name, value)
3,RequestHandler.add_header(name, value)
4,RequestHandler.clear_header(name)
5,RequestHandler.set_default_headers()[
6,RequestHandler.write(chunk)
7,RequestHandler.flush(include_footers=False, callback=None)(缓冲数据等)
8,RequestHandler.finish(chunk=None)
9,RequestHandler.render(template_name, **kwargs)
10,RequestHandler.render_string(template_name, **kwargs)
11,RequestHandler.get_template_namespace()
12,RequestHandler.redirect(url, permanent=False, status=None)
13,RequestHandler.send_error(status_code=500, **kwargs)
14,RequestHandler.write_error(status_code, **kwargs
15,RequestHandler.clear()
16,RequestHandler.data_received(chunk)
四:Cookies
1,RequestHandler.cookies
2,RequestHandler.get_cookie(name, default=None)
3,RequestHandler.set_cookie(name, value, domain=None, expires=None, path='/', expires_days=None,**kwargs)
4,RequestHandler.clear_cookie(name, path='/', domain=None)
5,RequestHandler.clear_all_cookies(path='/', domain=None)
6,RequestHandler.get_secure_cookie(name, value=None, max_age_days=31, min_version=None)加密cookies
7,RequestHandler.get_secure_cookie_key_version(name, value=None)
8,RequestHandler.set_secure_cookie(name, value, expires_days=30, version=None, **kwargs)
9,tornado.web.MIN_SUPPORTED_SIGNED_VALUE_VERSION= 1
10,tornado.web.MAX_SUPPORTED_SIGNED_VALUE_VERSION= 2
11,tornado.web.DEFAULT_SIGNED_VALUE_VERSION= 2
12,tornado.web.DEFAULT_SIGNED_VALUE_MIN_VERSION= 1
五:其他
当前通过认证的用户在请求处理器的 self.current_user 当中, 而且还存在于模版中的current_user. 默认情况下, current_user 的值为 None.
为了在你的应用程序中实现用户认证, 你需要覆盖请求控制器中的 get_current_user() 方法 来确认怎样获取当前登陆的用户, 例如, 从 cookie 的值中获取该信息. 下面这个例子展示了通过用户的昵称来确定用户身份, 值被保存在 cookies 中:
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self):
return self.get_secure_cookie("user") class MainHandler(BaseHandler):
def get(self):
if not self.current_user:
self.redirect("/login")
return
name = tornado.escape.xhtml_escape(self.current_user)
self.write("Hello, " + name) class LoginHandler(BaseHandler):
def get(self):
self.write('<html><body><form action="/login" method="post">'
'Name: <input type="text" name="name">'
'<input type="submit" value="Sign in">'
'</form></body></html>') def post(self):
self.set_secure_cookie("user", self.get_argument("name"))
self.redirect("/") application = tornado.web.Application([
(r"/", MainHandler),
(r"/login", LoginHandler),
], cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__")
1,RequestHandler.current_user()用于检查用户登录
def get_current_user(self):
user_cookie = self.get_secure_cookie("user")
if user_cookie:
return json.loads(user_cookie)
return None
如果用prepare()初始化必须是gen.coroutine,,,结束yeile才可以以
@gen.coroutine
def prepare(self):
user_id_cookie = self.get_secure_cookie("user_id")
if user_id_cookie:
self.current_user = yield load_user(user_id_cookie)
六:装饰器
1,tornado.web.asynchronous(method)
一般适用于http开头的请求方式
class MyRequestHandler(RequestHandler):
@asynchronous
def get(self):
http = httpclient.AsyncHTTPClient()
http.fetch("http://friendfeed.com/", self._on_download) def _on_download(self, response):
self.write("Downloaded!")
self.finish()
2,tornado.web.authenticated(method)
用于判断是否登录状态
3,classtornado.web.FallbackHandler(application, request, **kwargs)
wsgi_app = tornado.wsgi.WSGIContainer(
django.core.handlers.wsgi.WSGIHandler())
application = tornado.web.Application([
(r"/foo", FooHandler),
(r".*", FallbackHandler, dict(fallback=wsgi_app),
])
下面列出RequestHandler中需要重写的方法
RequestHandler.initialize()
RequestHandler.prepare()
RequestHandler.get()
RequestHandler.post()
RequestHandler.put()
RequestHandler.delete()
RequestHandler.option()
RequestHandler.patch()
RequestHandler.head()
RequestHandler.on_finish()
RequestHandler.set_default_headers()
RequestHandler.get_template_namespace()
RequestHandler.create_template_loader()
RequestHandler.write_error(status_code, **kwargs)
RequestHandler.get_user_locale()
RequestHandler.get_current_user()
RequestHandler.get_login_url()
RequestHandler.get_template_path()
RequestHandler.compute_etag()
RequestHandler.data_received()
RequestHandler.log_exception()
更过可以参考:http://tornado-zh-cn.readthedocs.io/zh_CN/latest/web.html#tornado.web.RequestHandler
tornado requesthandler可以重写的方法的更多相关文章
- Tornado 自定义Form,session实现方法
一. 自定义Tornado 验证模块 我们知道,平时在登陆某个网站或软件时,网站对于你输入的内容是有要求的,并且会对你输入的错误内容有提示,对于Django这种大而全的web框架,是提供了form表单 ...
- tornado自定义实现django include方法
tornado自定义实现django include方法 自定义URLmethod模块 from Custom.errors import * def include(base_url, expan ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
- EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态
本文目录 查看实体当前.原始和数据库值:DbEntityEntry 查看实体的某个属性值:GetValue<TValue>方法 拷贝DbPropertyValues到实体:ToObject ...
- 【java开发】方法重写和方法重载概述
类的继承 父类-子类 关键字 extends 新建一个父类 public class Person { private String name; private int ...
- android中使用startactivityforresult跳转Activity后需要重写onBackPressed()方法
在android项目中经常会用startactivityforresult从一个Activity跳转到另一个Activity(这里指Activity_A和Activity_B),你可以从Activit ...
- 重写toString()方法来描述一个类
package com.zch.test; /* toString方法以及重写toString方法 toString方法是一个自我描述方法 方法本身返回的是该对象的实现类的 类名 + @ + hash ...
- 重写ajax方法实现异步请求session过期时跳转登录页面
jQuery(function($){ // 备份jquery的ajax方法 var _ajax=$.ajax; // 重写ajax方法, $.ajax=function(opt){ var _suc ...
- 为什么重写equals时必须重写hashCode方法?
原文地址:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452206.html 首先我们先来看下String类的源码:可以发现Stri ...
随机推荐
- 文件上传之 commons-fileupload(二)
对commons fileupload上传组件的简单封装 在上一篇文章<利用Jakarta commons fileupload组件实现多文件上传>中,我介绍了commons fileup ...
- 544. Top k Largest Numbers【medium】
Given an integer array, find the top k largest numbers in it. Example Given [3,10,1000,-99,4,100] ...
- Python 集合常用方法总结
数据类型:int/str/bool/list/dict/tuple/float/set (set类型天生去重) 一.集合的定义 s = set() #定义空集合 s = {'a','b','c' ...
- poj2392 Space Elevator(多重背包问题)
Space Elevator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8569 Accepted: 4052 ...
- Linux之IO Redirection
一.引言 前几天使用一个linux下的内存检测工具valgrind,想要把检测的结果重定向到文件,结果总是没有任何内容,最后才发现是重定向的原因,它输出的信息是输出到stderr的,所以我使用 > ...
- PHP学习笔记(8)验证码使用session对比
知识点: 1. session获取其他页面的变量: (1)先在画验证码php里开启session_start(),$_SESSION['随便起名']=验证码字符串, (2)再在submit提交到act ...
- 分析并实现 360 P1路由器上的朋友专享网络 功能
笔者分析了360 P1路由器上的朋友专享网络功能,发现其主要由如下子功能组成: 1. APP点击“立即开启”,则路由器会多出一个新的SSID:360朋友专享网络-8463.此SSID不加密:同时,原有 ...
- Paxos发展、算法原理
Paxos 发展史 Leslie Lamport所提出的Paxos算法是现代分布式系统中的一项重要的基础性技术,得到广泛的应用. Paxos的整个发展过程大概可以分为三个阶段: 第一阶段:萌芽期,大致 ...
- HttpClient+jsoup登录+解析 163邮箱
找了几个,只有这个靠谱,用的是httpclient4,另外还需要commons-lang和jsoup包 http://jsoup.org/ http://www.oschina.net/code/sn ...
- 微信公众号实现zaabix报警2017脚本(升级企业微信后)
#!/bin/bash CropID='xxxxxxxxxxxxxxxxx' Secret='xxxxxxxxxxxxxxxx' GURL="https://qyapi.weixin.qq. ...