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
-
data_received
(chunk)[源代码]¶ 重写方法
类加上 @stream_request_body 装饰器以后,自动调用的方法参数: chunk -- 传入body中的流文件 返回: None
-
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_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_query_argument_for
(these=None)[源代码]¶ 获取一组query中的form-url格式参数
参数: these -- 一个字典对象,包含要获取的参数名称和对应的默认值,如果为None获取所有值 返回: dict 获取完成的字典对象,参数名和值相对应
-
get_query_argument_from
(these_list)[源代码]¶ 根据传入的参数列表获取参数,如果参数为空值则不返回,从query中查找参数
参数: these_list -- 想要获取的参数的列表 返回: dict 根据these_list提供的参数列表所能取到的变量键值对
-
on_connection_close
()[源代码]¶ 重写方法
当连接被意外断开时调用的方法,这个为tornado自带方法,内部有一定处理程序,不建议直接继承重写该方法, 正确的做法是继承BaseHandler对象,重写它的on_close方法返回: None
-
on_finish
()[源代码]¶ 重写方法
当连接完成所有工作后,收尾时调用的方法,可以写入如sql关闭等任务,与prepare方法一样, 不建议直接改写BaseHandler的该方法,会影响到所有继承BaseHandler的类返回: None
-
prepare
()[源代码]¶ 重写方法
当实例连接进来需要预先处理内容时调用的函数,例如token认证等任务,写在其中, 不建议直接修改BaseHandler的该方法,应当继承BaseHandler后,重写该方法,并且之后拥有相同 行为的Handler,继续继承同一个被改写prepare的Handler的类返回: None
-
set_current_user
(value, over_time=3600)[源代码]¶ 设置用户会话cookie
参数: - value -- 值,可以是token,也可以是session id
- over_time -- 过期时间
返回: 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
dealHandler¶
-
class
ancient.handlers.dealHandler.
PongHandler
(application, request, **kwargs)[源代码]¶ 基类:
ancient.handlers.baseHandler.BaseHandler
有时可能需要测试服务器的服务是否启动,请访问/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如下:
proxy_prefix和alias(也就是配置中的p1或p2)可以为空,但是不能包含"/"
代理路径是 http://你的域名/proxy_prefix/alias/要访问的路径
-
proxy_address
¶ 代理地址关键信息,包含{instead, address, host}
-
-
class
ancient.handlers.dealHandler.
StaticHandler
(application, request, **kwargs)[源代码]¶ 基类:
tornado.web.StaticFileHandler
,ancient.handlers.baseHandler.BaseHandler
继承 StaticFileHandler 和 BaseHandler ,用于处理静态文件访问控制的类,
inheritHandler¶
-
class
ancient.handlers.inheritHandler.
AbstractBaseHandler
(application, request, **kwargs)[源代码]¶ 基类:
ancient.handlers.baseHandler.BaseHandler
,abc.ABC
-
class
ancient.handlers.inheritHandler.
CROSBaseHandler
(application, request, **kwargs)[源代码]¶ 基类:
ancient.handlers.baseHandler.BaseHandler
继承该类,让路由拥有跨域访问的能力
-
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): ...