ancient.handlers --- 拓展原生模块

baseHandler

class ancient.handlers.baseHandler.BaseHandler(application, request, **kwargs)[源代码]

基类:tornado.web.RequestHandler

通过继承 BaseHandler 来使用它提供的便利方法,任何一条访问都是一个继承了 BaseHandler 的实例化对象 在0.3之后的版本,不建议直接继承BaseHandler,而是通过inheritHandler下的Base间接继承,这样你可以很轻松 的更改路由的父类,如你突然想要给这些子类加入拦截验证功能,你只需要改变inheritHandler/Base的指向就够了。

参数:
  • application -- tornado.web.Application对象
  • request -- HTTPServerRequest对象 (protocol,host,method,uri,version,remote_ip)
  • kwargs -- 其它在application加入到路由表时添加的额外字段
request

The tornado.httputil.HTTPServerRequest object containing additional request parameters including e.g. headers and body data:

request(uri,host,method,header,body,path,query,version,remote_ip,files)
talks_name

token或者session id 返回的cookie名称

json_body

当使用get_json_body方法后用于保存转换成json的body内容

HTTPFile(request.files):

self.request.files.get()方法,获取名称对应的file列表
file文件拥有属性,filename,body,content_type
clear_current_user()[源代码]

清除用户会话cookie

返回:None
data_received(chunk)[源代码]

重写方法 类加上 @stream_request_body 装饰器以后,自动调用的方法

参数:chunk -- 传入body中的流文件
返回:None
static expires_time(e_time)[源代码]

对cookie过期时间进行过滤

参数:e_time -- 过期时间,如3600秒
返回:赋值给expires的真实值
get_argument_for(these=None)[源代码]

获取一组query中或者body中的form-url格式参数

参数:these -- 一个字典对象,包含要获取的参数名称和对应的默认值,如果为None获取所有值
返回:dict 获取完成的字典对象,参数名和值相对应
get_argument_from(these_list)[源代码]

根据传入的参数列表获取参数,如果参数为空值则不返回,从body和query中查找参数

参数:these_list -- 想要获取的参数的列表
返回:dict 根据these_list提供的参数列表所能取到的变量键值对
get_argument_plus(arg_name, arg_default=None)[源代码]

获取任意格式传入的参数,可以参数写在链接中,也可以写在body中用json形式保存,也可以x-www-form-urlencoded形式传入body, 调用该方法将自动识别,不支持formdata类型获取,请使用request.files属性自行获取,或者通过data_received回调方法获取

参数:
  • arg_name -- 参数名称
  • arg_default -- 获取不到返回的默认值
返回:

经过处理获取到的值

get_body2json()[源代码]

获取请求的body,将其转换成json数据,并保存在属性json_body中

返回:dict
get_body_argument_for(these=None)[源代码]

获取一组body中的form-url格式参数

参数:these -- 一个字典对象,包含要获取的参数名称和对应的默认值,如果为None获取所有值
返回:dict 获取完成的字典对象,参数名和值相对应
get_body_argument_from(these_list)[源代码]

根据传入的参数列表获取参数,如果参数为空值则不返回,从body中查找参数

参数:these_list -- 想要获取的参数的列表
返回:dict 根据these_list提供的参数列表所能取到的变量键值对
get_current_user()[源代码]

当使用 tornado.web.authenticated 装饰器时调用的方法,如果返回内容,则验证通过,否则自动调整到登录页面,登录地址 设置application中的'login_url': '',参数

返回:str 当前用户的cookie信息
get_login_url()[源代码]

重写方法 自定义login_url地址,返回url地址,当使用@authenticated装饰器时,未验证的连接将跳转的url

返回:str
get_query_argument_for(these=None)[源代码]

获取一组query中的form-url格式参数

参数:these -- 一个字典对象,包含要获取的参数名称和对应的默认值,如果为None获取所有值
返回:dict 获取完成的字典对象,参数名和值相对应
get_query_argument_from(these_list)[源代码]

根据传入的参数列表获取参数,如果参数为空值则不返回,从query中查找参数

参数:these_list -- 想要获取的参数的列表
返回:dict 根据these_list提供的参数列表所能取到的变量键值对
on_close()[源代码]

当连接被意外断开时调用的方法,继承BaseHandler的类可以直接重写该方法

返回:None
on_connection_close()[源代码]

重写方法 当连接被意外断开时调用的方法,这个为tornado自带方法,内部有一定处理程序,不建议直接继承重写该方法, 正确的做法是继承BaseHandler对象,重写它的on_close方法

返回:None
on_finish()[源代码]

重写方法 当连接完成所有工作后,收尾时调用的方法,可以写入如sql关闭等任务,与prepare方法一样, 不建议直接改写BaseHandler的该方法,会影响到所有继承BaseHandler的类

返回:None
prepare()[源代码]

重写方法 当实例连接进来需要预先处理内容时调用的函数,例如token认证等任务,写在其中, 不建议直接修改BaseHandler的该方法,应当继承BaseHandler后,重写该方法,并且之后拥有相同 行为的Handler,继续继承同一个被改写prepare的Handler的类

返回:None
set_access_headers(domain='*')[源代码]

设置允许跨域访问

参数:domain -- 域范围
返回:None
set_current_user(value, over_time=3600)[源代码]

设置用户会话cookie

参数:
  • value -- 值,可以是token,也可以是session id
  • over_time -- 过期时间
返回:

None

set_default_headers()[源代码]

重写方法 当返回响应的时候,需要设置header信息,调用的默认方法,BaseHandler默认采用text/html方式返回

返回:None
set_nocache_headers()[源代码]

设置不缓存该文件

返回:None
set_stream_headers(name)[源代码]

设置返回为流类型,一般用于文件下载

参数:name -- 文件名称
返回:None
throw(status_code=200, log_message='', **kwargs)[源代码]

send_error()方法并不会直接触发系统默认的错误处理样式,如果想使用默认错误处理返回的内容, 请使用throw()方法,注意该方法会被try捕获到,如果写入到try中的时候请注意

常用状态码:

400 - 请求出现错误,非常通用,不想明确区分的客户端请求出错都可以返回
401 - 没有提供认证信息,未登录或者用户名密码错误
403 - 请求的资源不允许访问,token过期
404 - 请求的内容不存在
405 - 请求的[ 方法 ]不允许使用
406 - 请求格式不正确
408 - 请求超时了
410 - 请求资源曾经存在,但现在不存在了
413 - 请求体过大
414 - 请求的 URI 太长了
415 - 不支持的媒体类型
参数:
  • status_code -- 状态码
  • log_message -- 返回消息
  • kwargs -- 额外参数,如{'status_code': 404, 'reason': None}
返回:

None

write_array(list_data, encode_date=False)[源代码]

返回JSON数据响应,对象数组

参数:
  • list_data -- 列表数据
  • encode_date -- 是否存在datetime类型的字段
返回:

None

write_dict(dict_data, encode_date=False)[源代码]

返回JSON数据响应,该返回为纯粹的数据,错误信息根据状态码进行判定,

参数:
  • dict_data -- dict类型数据
  • encode_date -- 是否存在datetime类型的字段
返回:

None

write_error(status_code, **kwargs)[源代码]

重写方法 当send_error方法被触发时,调用的方法,用来处理错误状态 想要触发原始错误信息,请使用send_error

想要使用json格式错误信息,请使用throw方法

使用send_error会触发tornado系统默认处理,请使用throw触发madtornado来处理错误

参数:
  • status_code -- 状态码
  • kwargs -- 额外参数,如exc_info包含HTTPError的错误信息元组
返回:

None

write_jsonp(key, value)[源代码]

当使用jsonp技术进行请求时,调用此方法,用来直接返回jsonp的内容

参数:
  • key -- jsonp的名称
  • value -- 返回jsonp的内容,多个内容用逗号分隔
返回:

None

write_ok()[源代码]

返回一个正常的状态,这个方法和self.throw(200)返回内容是一样的, 但是throw方法会被捕获异常所捕获到,write_ok并不会被捕获

返回:None
write_resp(status_code, **kwargs)[源代码]

restful风格的自定义错误数据,该错误返回JSON格式错误响应 重写该方法用于自定义错误响应格式,该方法重新时不要抛出错误异常或调用send_error,throw等

参数:
  • status_code -- 响应码
  • kwargs -- 额外参数和log_message
返回:

None

dealHandler

class ancient.handlers.dealHandler.PongHandler(application, request, **kwargs)[源代码]

基类:ancient.handlers.baseHandler.BaseHandler

有时可能需要测试服务器的服务是否启动,请访问/pong,来进行确定

get()[源代码]

有时可能需要测试服务器的服务是否启动,请访问/pong,来进行确定

post()[源代码]

有时可能需要测试服务器的服务是否启动,请访问/pong,来进行确定

class ancient.handlers.dealHandler.ProxyHandler(application, request, **kwargs)[源代码]

基类:ancient.handlers.baseHandler.BaseHandler

默认情况代理模块一定带有proxy前缀,可以在配置文件中更改proxy_prefix属性内容

代理服务采用流式请求远端服务器和流式返回内容的方式,即Transfer-Encoding: chunked

注意:代理请求根路径访问时结尾一定要加"/",如http://你的域名/proxy/bd/,否则不进行代理

在配置文件中,填写proxy_handler用来启用代理模块:

proxy_handler = [["p1","http://www.baidu.com"],["p2","http://www.google.com/"]]

上述配置了两个代理路由,访问URL如下:

  1. 第一个:http://你的域名/proxy/p1/要访问的地址,这将代理到baidu下面
  2. 第二个:http://你的域名/proxy/p2/要访问的地址,这将代理到google下面

proxy_prefix和alias(也就是配置中的p1或p2)可以为空,但是不能包含"/"

代理路径是 http://你的域名/proxy_prefix/alias/要访问的路径

proxy_address

代理地址关键信息,包含{instead, address, host}

delete()[源代码]

DELETE方法请求代理

返回:None
get()[源代码]

GET方法请求代理

返回:None
initialize(**kwargs)[源代码]

__init__之前回调的方法

参数:kwargs -- __proxy_address
返回:None
options()[源代码]

符合下列条件,会跨域预检:

1. 请求方法不是GET/HEAD/POST
2. POST请求的Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain
3. 请求设置了自定义的header字段
返回:None
post()[源代码]

POST方法请求代理

返回:None
prepare()[源代码]

预处理回调,在请求开始之前执行的内容,设置允许跨域

返回:None
proxy()[源代码]

访问代理:

http://域名/proxy/自定义后缀/代理的内容路径
返回:None
proxy_received_body(chunk)[源代码]

处理收到的body信息

参数:chunk -- 收到的body块
返回:None
proxy_received_header(chunk)[源代码]

处理收到的头部信息

参数:chunk -- 收到的一行头部信息
返回:None
put()[源代码]

PUT方法请求代理

返回:None
class ancient.handlers.dealHandler.StaticHandler(application, request, **kwargs)[源代码]

基类:tornado.web.StaticFileHandler, ancient.handlers.baseHandler.BaseHandler

继承 StaticFileHandlerBaseHandler ,用于处理静态文件访问控制的类,

get(path, include_body=True)[源代码]

默认等于StaticFileHandler.get()行为,通过写该方法,对文件进行控制,可以直接在这里编写代码

initialize(path: str, default_filename: str = None, spa_page: str = None) → None[源代码]

inheritHandler

class ancient.handlers.inheritHandler.AbstractBaseHandler(application, request, **kwargs)[源代码]

基类:ancient.handlers.baseHandler.BaseHandler, abc.ABC

delete(*params)[源代码]
get(*params)[源代码]
post(*params)[源代码]
put(*params)[源代码]
class ancient.handlers.inheritHandler.CROSBaseHandler(application, request, **kwargs)[源代码]

基类:ancient.handlers.baseHandler.BaseHandler

继承该类,让路由拥有跨域访问的能力

options(*args)[源代码]
prepare()[源代码]

重写方法 当实例连接进来需要预先处理内容时调用的函数,例如token认证等任务,写在其中, 不建议直接修改BaseHandler的该方法,应当继承BaseHandler后,重写该方法,并且之后拥有相同 行为的Handler,继续继承同一个被改写prepare的Handler的类

返回:None
class ancient.handlers.inheritHandler.CustomErrorBaseHandler(application, request, **kwargs)[源代码]

基类:ancient.handlers.baseHandler.BaseHandler

madtornado全面使用restful风格规范,并且错误处理分割已经预定义为JSON格式响应,如果想自定义 JSON的数据内容可以调用时传参self.throw(404,log_message="message content")

如果想自定义一类错误处理,可以如该模块一样重写write_resp,并且做拦截,注意你也许并不是所有请求方法 下都需要拦截并自定义处理错误,请对请求方法和错误码进行判断,之后你可以让拥有相同错误处理方式的类都继承该类

write_resp(status_code, **kwargs)[源代码]

重写write_resp错误响应方法,该方法中切记不要调用任何抛出异常或者send_error,throw方法 否则会一直递归调用,请在结尾处调用父类该方法,保证其它响应异常可以被正确处理

该类是一个自定义响应信息处理类,当GET方法并且响应404时返回自定义的内容,其余交给父类处理用resultful风格 当你使用send_error方法抛出响应状态时,该方法不执行,因为send_error是tornado的方法,错误处理由tornado直接 进行,请使用madtornado的方法throw()抛出响应异常

参数:
  • status_code -- 响应状态码
  • kwargs -- 额外参数和log_message
返回:

None

class ancient.handlers.inheritHandler.InterceptorBaseHandler(application, request, **kwargs)[源代码]

基类:ancient.handlers.baseHandler.BaseHandler, abc.ABC

该类可以作为一个验证拦截器,你可以继承该类之后你需要重写interceptor 在该方法中做权限验证,这个拦截器目前只作用于get,post,put,delete方法 并且你要书写的请求也不是在get等中了,而是派生的i_get,i_post,i_put,i_delete

举例:

async def i_get(self):
    ...

async def i_post(self):
    ...
delete(*params)[源代码]
get(*params)[源代码]
i_delete(*params)[源代码]
i_get(*params)[源代码]
i_post(*params)[源代码]
i_put(*params)[源代码]
interceptor(*args)[源代码]

重写该方法

返回:返回True则继续执行,返回False将不继续执行
post(*params)[源代码]
put(*params)[源代码]