python---tornado钩子预留解析
生活随笔
收集整理的這篇文章主要介紹了
python---tornado钩子预留解析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在tornado.web.RequestHandler類中的初始構(gòu)造方法中:
class RequestHandler(object):"""Base class for HTTP request handlers. Subclasses must define at least one of the methods defined in the"Entry points" section below.""" SUPPORTED_METHODS = ("GET", "HEAD", "POST", "DELETE", "PATCH", "PUT","OPTIONS")_template_loaders = {} # type: typing.Dict[str, template.BaseLoader]_template_loader_lock = threading.Lock()_remove_control_chars_regex = re.compile(r"[\x00-\x08\x0e-\x1f]")def __init__(self, application, request, **kwargs):super(RequestHandler, self).__init__()self.application = applicationself.request = requestself._headers_written = Falseself._finished = Falseself._auto_finish = Trueself._transforms = None # will be set in _executeself._prepared_future = Noneself._headers = None # type: httputil.HTTPHeadersself.path_args = Noneself.path_kwargs = Noneself.ui = ObjectDict((n, self._ui_method(m)) for n, m inapplication.ui_methods.items())# UIModules are available as both `modules` and `_tt_modules` in the# template namespace. Historically only `modules` was available# but could be clobbered by user additions to the namespace.# The template {% module %} directive looks in `_tt_modules` to avoid# possible conflicts.self.ui["_tt_modules"] = _UIModuleNamespace(self,application.ui_modules)self.ui["modules"] = self.ui["_tt_modules"]self.clear()self.request.connection.set_close_callback(self.on_connection_close)self.initialize(**kwargs) View Code尾部自動(dòng)調(diào)用tornado為用戶預(yù)留的initialize方法(未實(shí)現(xiàn),是由用戶調(diào)用來實(shí)現(xiàn))
def initialize(self):"""Hook for subclass initialization. Called for each request. A dictionary passed as the third argument of a url spec will besupplied as keyword arguments to initialize().Example::class ProfileHandler(RequestHandler):def initialize(self, database):self.database = databasedef get(self, username):...app = Application([(r'/user/(.*)', ProfileHandler, dict(database=database)),])""" pass View Code所以對(duì)于之前的session類的使用上可以用到鉤子,就像php中的公共控制類中構(gòu)造方法中調(diào)用某些函數(shù),會(huì)在每個(gè)控制器執(zhí)行時(shí)去執(zhí)行這些函數(shù),減少在代碼中的復(fù)用。
前面session類的改進(jìn)
class BaseRequestHandler(tornado.web.RequestHandler):#tornado預(yù)留鉤子函數(shù)def initialize(self):self.session=Session(self)class IndexHandler(BaseRequestHandler):def get(self):if self.get_argument('u',None) in ['asd','zxc']:#在這里有個(gè)bug,當(dāng)程序兩次設(shè)置值時(shí),邏輯相同,但是由于只發(fā)送了一次請(qǐng)求,獲取了第一次的py_session#在相同邏輯代碼處理下random_str=self.handler.get_cookie('py_session')#每次都是不正確的,都需要重新創(chuàng)建一個(gè)標(biāo)識(shí)符#但是后面的刷新過程中由于修改了客戶區(qū)的py_session,所以可以正常進(jìn)行操作,但是第一次產(chǎn)生的py_session的依舊存在服務(wù)端self.session.set_value('is_login',True)self.session.set_value('name',self.get_argument('u'))#self.get_secure_cookie()#The decoded cookie value is returned as a byte string (unlike#`get_cookie`).else:self.write("請(qǐng)登錄")?
轉(zhuǎn)載于:https://www.cnblogs.com/ssyfj/p/8529267.html
總結(jié)
以上是生活随笔為你收集整理的python---tornado钩子预留解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Security构建Res
- 下一篇: 04_Struts2标签