Tornaod框架
Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。
Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 C10K problem。)
一、tornado代码基础
#!/usr/bin/env python
# -*- coding:utf-8 -*- import tornado.ioloop
import tornado.web class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world") application = tornado.web.Application([
(r"/index", MainHandler),#(r"/api/make_doc/(?P<aid>\w+)_(?P<bid>\w+)$", aa),
])
if __name__ == "__main__":
application.listen(8888)
#application.listen(port=8888, address="0.0.0.0") 加入4个0的意思就是开启默认路由,运行别人访问我的这个程序,通常用于本地测试
tornado.ioloop.IOLoop.instance().start()
基本所有的Web框架都是一下的流程:
准备工作:
加载配置文件
加载路由映射 application = tornado.web.Application([(r"/index", MainHandler),])
创建socket
循环阶段:
类似socket Server不断的循环文件句柄,当有请求过来的时候,根据用户的请求方法来判断是什么请求,在通过反射来执行相应的函数或类。
运行流程:
第一步:执行脚本,监听 8888 端口 第二步:浏览器客户端访问 /index --> http://127.0.0.1:8888/index 第三步:服务器接受请求,并交由对应的类处理该请求 第四步:类接受到请求之后,根据请求方式(post / get / delete ...)的不同调用并执行相应的方法 第五步:方法返回值的字符串内容发送浏览器
#!/usr/bin/env python
# -*- coding:utf- -*- import tornado.ioloop
import tornado.web
from tornado import httpclient
from tornado.web import asynchronous
from tornado import gen import uimodules as md
import uimethods as mt class MainHandler(tornado.web.RequestHandler):
@asynchronous
@gen.coroutine
def get(self):
print 'start get '
http = httpclient.AsyncHTTPClient()
http.fetch("http://127.0.0.1:8008/post/", self.callback)
self.write('end') def callback(self, response):
print response.body settings = {
'template_path': 'template',
'static_path': 'static',
'static_url_prefix': '/static/',
'ui_methods': mt,
'ui_modules': md,
} application = tornado.web.Application([
(r"/index", MainHandler),
], **settings) if __name__ == "__main__":
application.listen()
tornado.ioloop.IOLoop.instance().start()
异步非阻塞示例
二、路由系统
路由系统其实就是 url 和 类 的对应关系,这里不同于其他框架,其他很多框架均是 url 对应 函数,Tornado中每个url对应的是一个类。
#!/usr/bin/env python
# -*- coding:utf-8 -*- import tornado.ioloop
import tornado.web class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world") class StoryHandler(tornado.web.RequestHandler):
def get(self, story_id):
self.write("You requested the story " + story_id) class BuyHandler(tornado.web.RequestHandler):
def get(self):
self.write("buy.wupeiqi.com/index") application = tornado.web.Application([
(r"/index", MainHandler),
(r"/story/([0-9]+)", StoryHandler),
]) application.add_handlers('buy.wupeiqi.com$', [
(r'/index',BuyHandler),
]) if __name__ == "__main__":
application.listen(80)
tornado.ioloop.IOLoop.instance().start()
Tornado中原生支持二级域名的路由,如:
aaarticlea/png;base64,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" alt="" />
----------------------------------------------------------
方法二:
方法三:
用self.get_arguments更好一点,不会报错, 如果值为空,会得到空列表
模板
Tornao中的模板语言和django中类似,模板引擎将模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者。
Tornado 的模板支持“控制语句”和“表达语句”,控制语句是使用 {%
和 %}
包起来的 例如 {% if len(items) > 2 %}
。表达语句是使用 {{
和 }}
包起来的,例如 {{ items[0] }}
。
控制语句和对应的 Python 语句的格式基本完全相同。我们支持 if
、for
、while
和 try
,这些语句逻辑结束的位置需要用 {% end %}
做标记。还通过 extends
和 block
语句实现了模板继承。这些在 template
模块 的代码文档中有着详细的描述。
基本使用:
#!/usr/bin/env python
# -*- coding:utf- -*- import tornado.ioloop
import tornado.web class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html", list_info = [,,]) application = tornado.web.Application([
(r"/index", MainHandler),
]) if __name__ == "__main__":
application.listen()
tornado.ioloop.IOLoop.instance().start()
app.py
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>老男孩</title>
<link href="{{static_url("css/common.css")}}" rel="stylesheet" />
</head>
<body> <div>
<ul>
{% for item in list_info %}
<li>{{item}}</li>
{% end %}
</ul>
</div> <script src="{{static_url("js/jquery-1.8..min.js")}}"></script> </body>
</html>
index.html
在模板中默认提供了一些函数、字段、类以供模板使用: escape: tornado.escape.xhtml_escape 的別名
xhtml_escape: tornado.escape.xhtml_escape 的別名
url_escape: tornado.escape.url_escape 的別名
json_encode: tornado.escape.json_encode 的別名
squeeze: tornado.escape.squeeze 的別名
linkify: tornado.escape.linkify 的別名
datetime: Python 的 datetime 模组
handler: 当前的 RequestHandler 对象
request: handler.request 的別名
current_user: handler.current_user 的別名
locale: handler.locale 的別名
_: handler.locale.translate 的別名
static_url: for handler.static_url 的別名
xsrf_form_html: handler.xsrf_form_html 的別名
其他方法
目录结构:
aaarticlea/png;base64,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" alt="" />
如果是前后端分离,访问图片路径原则:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<!--<script src="{{static_url('jquery.min.js')}}"></script>-->
<script src="../static/jquery.min.js"></script>
</head>
<body>
<div> <!--<img src="{{static_url('test.jpg')}}">-->
<img src="http://192.168.1.137:8888/static/test.jpg"> </div>
</body>
</html>
模板继承
多个子模板可以继承一个主模板, 那逆向思维,是不是一个主页面也可以有多个子模板类似轮播图, 然后进行判断呢, 用include
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>shuaige</title>
{% block css%} <!--这里对应子版的css路径--> {% end %}
</head>
<body> <div><h1>TEST</h1></div>
{% block htmlbody %}{% end %} <script src="{{static_url('js/jquery-1.8.2.min.js')}}"></script> {% block JavaScript %}{% end %} </body>
</html>
主模板layout.html
{% extends 'layout.html' %} {% block css %}
<link href="{{static_url('css/index.css')}}" rel="stylesheet" />
{% end %} {% block htmlbody %}
<h1 id="shuaige" class="tim">没有取值,就先这样吧,循环就先不写了.</h1>
{% end %} {% block JavaScript %} {% end %}
子版index.html
#!/usr/bin/env python
# -*- coding:utf-8 -*- import tornado.ioloop
import tornado.web class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render('index.html') settings = {
'template_path': 'template',
'static_path': 'static',
'static_url_prefix': '/static/',
} application = tornado.web.Application([
(r"/index", MainHandler),
], **settings) if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
主文件start.py
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZQAAAI+CAIAAAAUyGviAAAgAElEQVR4nO2d748bx33w54/JvHoiqC+EQv9B0fkDWl8KFXCdAEWRpou+SIs0dS+NWsRpFRV40CeeImUKNGmsIskpUpQ4jmwnuXVsS2oSO0rkkws7ii3LtixLuuPKZ1I8Pi/218zu7HLII4874ucDQjoO59fucj/8znA5K15+5bVQHi/9+n8vvXRlPBOXLl1KmtAjIUY6SZIk2VRqszHfdORV7UZyLKPdOdUKsHL0+/1+v7+zs7O9vX337t07d+68//77t27dEktX0jLlpUdCjIUcxnnCplIbkVwXYl2Ins5T4+ikEOtCrAu5EdcTDd9plZZdV9r0oFZjIVAYwCwgL1teNW2lbCqxrlJp6Z6MttI/Sj0ViUkS6820cBz1ojj942T+6lYkLamlhVEYwPQgr4bIy/aXES7FGyraSswIyw6+iiBLiJOpvLQqg7XaCFQrtAUwC8irYc4rDcEcc165vMxoyyhmhGCOyCuJo5OinPMi4AKYGeTVPGGfs5XNdqnNdPwo8iGkEWQVg8E8s7AmyMqcqqfEusN6ADAdyGuyvACggyAv5AUQJMgLeQEECfJCXgBBgryQF0CQIC/kBRAkyAt5AQQJ8kJeAEGCvJAXQJAgr1WU124kx0INlt2NKnokxF4Ul71Lf7JeJqa/mc9+uVU+lE6Kn1uVj7btG6gs26j81Wmtdeg4yOtg5WWsETZVsZ6avlArA3VgJ6geeXY+Hkox0taP1XcjVf5CXquRLuvLXyqr342iYpvMv2vtRKMozlssdoOzddZc6zDI66DkZS22E29Isa5UT4h1GW0oYwmK+hph9vIVWbakYeGwtrbFWMhhlAogGSg1zGOVkbFC2V4tbhkoMRZyqLOX8sxFnWpUeLAsni/KUaZkEVQtzWxtoOQwThKtxqWP6vJKHC9lKdHAlV4ljoZ5PabD662njfL7+Y6CvBYvL/caYbon5EacbEXyZBTnsVXDGmHOyKu+cJibeCiLtsvAb6BEfo7qUXFqxnqQ1zky6qwPpUpDlDn1qMxj1OkfeTmYUl5ybO/qYnhoyjMNsuyUSaCwDoK8DjDysvyV+WgrUhtx/rRpjTCnvOoLhzU17HKHEXLEQ5WflPkkU+W0dgQzRvi0l8eMdkBlGNPuQHPkVWchkZdRj9fomTXXugnyOsA5L2uNMJe83GuEJfbyrTLLX184zI05r1PikpcZglUirzYf5FWZ0Za92TKvv75G7SS0KiyaDeuaO9U2z2XVGRUF24uw5lqnQV5L+bYx3pDZumD5wtC6lwZQrjXCkmIdMWMFfffCYe7WrFBnpIvxlRoUIyvXN3bZ9Hjtiz1z3GXFaEbgVps1q3y3509Res+Y7tur9sjs+8RgytimeX8RAgcH8lrFSyUAHgCQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIgpHX8OhRHjx4LPexbF9ZhCSvByHystbz8l+lqzHnppq4Hs4Ui1Jp1Y1fy7hWPbN/ld25XbcKIK9VlVdlYZyGVbryXywa51XTel5JktTPwPpyYGnjjhVdtBIpSuXO0kpFkcxSdVqfzP/USggho6L/UpgZzTTbFmU7UVlZWVxaG+RePsha+aIDu25FQV6rJ6+mE3KKoMAzZ9NyYHmScR7GkcoXtyr+SrQqzKNVbhUjHDOyxlrXiifV/FY9cSRzU2lVCi7P0LiXkiTZjWQlEFvmrltZkNfqySvFsR7MvM/AxuXAkqS+KFUZ+5TBj9NTbnkV8VQ1drLlVbrLKG40Xa3AuWqOY62dpe66VQV5raq8ksp6Xolrla4MxxnoldO5HNjkRam0MWx0yauMwcrQyRg/ekZe7uKO3lT2Uj3sSrqz61YK5LXC8qpRW6VL9xo+/31zNiwHVsMKfqQVDyldxFXGZJcQQkil8kmrSvCktJnPjqfM4q7ArTpHVqFhEenl7brVBXkhr1UljmRLwOWmsnoqLBPkhbxWjSJKm1pd0CmQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV4rLC/jd8/500nXl6e5XBdIuZdw8MVYLWLRuDfT+Jk2BALyWl15VVbLyp5OXkOr9uvB5jr30Z1F0byZbdsFHQR5Ia/yuV/oFEcq0g1XqVfrNH5zWI/xhJBRVBTQSuk8f3sM1FA8b0eVfXAlNm4m8goM5IW8UuyfNrfZwxrimUth1eo0Xyx+SWj+pNAcuObymiBPd3HncmCuxJbNRF6BgbxWU15NUzw+0Zd9ktvPLHlVbDBhXJo2PTHuayjuWg7MnVi2VWusMgkI3QZ5raa8ksSpAa95rziS5sKjrZGXQ2VNwVUeeU2YNp8cmzl7X1mS0LWZRF6BgbyQl502KfKKI5ktpOVeJctKtgZp5ghSVJLzoajPd5ZNxatBljOxZTORV2AgL+QFKcgrMJDX6sqLKR4DrvMKD+S1wvICCBnkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkBfyAggS5IW8AIIEeSEvgCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkBfyAggS5IW8AIIEeSEvgCBBXsgLIEiQ1wrLq3LTWa2EEAu6DW0cyQk1u1vnXrDQCPJaXXlpZZkie1pJXVhz7lcdmeJIYS9wgLyQV/ncN/KKIylS8qhIKyGkUtJOLeoUQukJVmxsHXmBG+SFvFJKIdn6cZUrFaNVnjOOZJ6cJ8aRNF9t02JL68gL3CCv1ZRX01ySR/Rle6YwjeGY/E/bjh7j0YbWK3NzAEmSIK9VlVeSOG3iNe9VRlsmDnkZkZcZmE3qUKV1Ii9wg7yQl53mM+9VzGQVeY1yVhVlTqVU+2i0qXXkBW6QF/LqOMgL3CCv1ZVXCHNJXOcFjSCvFZYXQMggL+QFECTIC3kBBAnyQl4AQYK8kBdAkCAv5AUQJMgLeQEECfIKXF7xUKpBkiRbkVwXanMex2COVQEsDuQVjrz0SIhR7TfLZcqmmptx8qp2IzmW0e6cagWYJ8grBHnpkRBjIYfVK83joTLMsqnURiTXhVgXolcoLY5OCrEuxLqQG3E90fCdVmnZdaVND2o1FgKFQedAXt2WV5O2kiRJdiNpBWKbSqznK2r1ZLSV/lHqqUhMklhv5uts9fIVbU7mrzqHjSgMugby6ra8UvTI4S89qqjECJfiDRVtJWaEZQdfRZAlxMlUXlr1tLOq9EW0BZ0DeYUgryQPwco5r2rYlTjlZUZbRl1GCOaIvJI4OinKOS8CLugmyCsQeVXQo8pyEFvZbJfaTMePIh9CGkFWMRjMMwtrgqzMqXpKrDusB9AhkFeI8hoo9ywYwAqBvEKUFwAgL+QFECbIC3kBBAnyQl4AQYK8ZpcXDx48lvtYtq8sgpFXy4PIC2AFQV7ICyBIkBfyAggS5DVZXpszXf7OKl0ACwV5+aznVfx0cTpaF/xi6S6AfYG8fNbzijdUtJn/PvFkcUNpYw2JcokIxypd8YbMV5hIi+RxHOveAMwM8vJZzyvekMXSXcmmSlVlLt0Vb8jcTc5VuorFJJJkK1Ibdu0oDGAGkJfPel72sDE1keGjJMnX52pepSv/W/fs5SlYugtgNpCXz3pe8YYsB4Zl5GVoKIun3Kt0ZU97UWyEXSzdBbAvkNfkbxu3IrkuVU+KypyXtUpXIbLmVbqMZaMBYL8gr4O7zmtTyQ1WBQOYE8jrIOSVLbUqiLwA5gby4gp7gCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkBfyAggS5IW8AIIEeSEvgCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkBfyAggS5LV8eW1Fcl2ozTJB96yn8628IN6QouElA62EjdL1xOJulHEk0xSplIrihuITiYdSDebQee+GTBZ6OGCOIK+DlZceCTGqn7+batrTYzeSYxnt+jTkrHwrkj1declVp1ZKJ0kSRyqKy6dJoqMotrMkiVaFm7QSMpWXu7irn0abZcq+Oj9NQybzPxywAJDXQclLj4QYCzmMyxRV3Ea7OFu2IrkurJgiS5HRlv13kiRajYWo66ba0KZSG1m1omefrPWz1F1nYZ8yX2S4qSgr7UzNxZ07JMs7VEbrc+i8X0OLOhywMJDX4uXlPHni6GT+pq8Pjiqn5VakNrLC8YbKSpXVF+dMw1m6qcR6Hhv1pFW8KcSonYd1eSnXMLAcJdrpdvEmmyRJkuxG0oqG9tV5/4YWcThgwSCvA4y87LDLjCMqp0fttNS99AS2SyVJopUr0LBPV6O26snmPP8ddfpFXlZ+ab7SEHnVtaJHlabn0HmfhhZ3OGBhIK8DnPNKA4F05sX4qE/i6GTrR32RYqTvRrL5E95saIrzv6XOBnlZrxlTXlWtueRV62c97JpT5z0aWujhgMUQpLyGR4/y4MGjUw/k5SuvICMvaGOg3JNT4Ta0QiAv5AUQJMgLeQEECfJCXgBBgryQF0CQIC/kBRAkyAt5AQQJ8kJeAEGCvJAXQJAgrwddXlpZP1jOfsU8YYUrrYRwLdaQL53ltUCWu7RHUd98E2qw+tm0RQvpiXsnx5Fs6MJMx2g2Jm/RtJ1fHsjrAZdX5VfM2dPG3zYXNPww0FXnProzbb7pWvb6qeOMPfEo4ijp7sOsx2hG2iuetvNLBHmtlry8P9XjSEW6WKK0ujJNde0Z6ViUplipRkZRUUArpfP8bR/kWqkorzUra7SSF07DCKWyRqqV1uXl2CJn54u+K51XkuYrm23rfuNO9pLXFJFX2fm8N1oJIZWqbaZji+bT+SWCvFZKXg4BNGANL6ylG+qrAVorMqeVFn8k9qAol9ekE9MoY6426FgUNV09NW/PyuDY9uoWuTpv9N0qY5y8redxy072kZf/MTI7X+6lOJLVXde0RfPo/BJBXg+wvJrmKXw+2e13amVdP/Nkq7ylJ4x50qYnxxRGebMBl7yal3xuGzamz5ydr7q5vuSOz4iuYSdXprf2c4xszxSmcTi2eYv21/klg7weYHklifOd6jWnYnx+T4y8HCprCq7yyGvS3G+jvLKC+XL1U8nLsUWuzpvdswplObwiEPdO9hs2NhavZXJ/qVKTV8sW7bvzSwR5rZ68PD7V40gaMyfWhIrro96IAMxBmKgk50OWSd9Zmq9X+mpM3VgZ86rTLxWjej8btqih88bK0sr+mtI7+HDuZG95TfGtsN17o5xVRfMW7bPzSwR5raC8YHaa7/fhg7+8OgjyShLktczrvGBWmu7z4Y33dV5dhOu8MpAXV9gD7BfkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkBfyAggS5IW8AIIEeSEvgCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuQ1hbx48ODRqQfymuVB5AWwgiAv5AUQJMgLeQEECfJCXgBBgryQF0CQIK+g5aV7Qm0uuxMT0CMh9qJ4N5JjoQa1l0bVmyQ6E+fPQC2+lTjaE2LctDlxNLLuvhgPpRjX7xkZR3tT3EgyHkp7J09XfOHsRrJxh9gMlBi37L2kkNdPPpTivhBD8ZF7zyKvBXJAZ2a11d4S37/xUIqRThKtxjLaNV/RyrErnIk1BqriwTnkXBQNW1Tv2ECJvX3eTNZv7y2N1KQ+nSzNXtNxQb/f7/c/+As5/PL29t27d3/0qQ8/8ud3kdcC0CMhxkIOjTen7gmxLsS6UD1VBFBFotyIVE8nSZJsKrEu5IaOTgqxLkSauBXJtGwReW0qsS6jzSxdnEwPfpyVshIn9FKMhRrl59ZAibGQQ12JIoqcchipkS6iDONRVCCHcZJoVQ0r/ORVfgKr9KV4KI1WSiGW6XkNDTkbAqKiob0oGjXZPo728oLZjomzbo+F2It01qJZ3H2u6noTu5G0cmpVdN5Mr+2QsnNDZXw8uItbx604sI4tMvZeqVTXZqbB1F4U50WsN7kDP3kN8zyNHz/VYeOPkn99lshrvji0lSRJshWpjeyzJerlnzIbUmaJie7lnkoyVTlGiJvKTIw3pFjPz4lNVRT3jbx2IzXMu2QOaWpDvngoi+2ZPZj0kZf5CWycma43dDzQnjkdDe1GsjhFB8o1fHMVLHdYYnmtbYuq2+WBWUPDDknq7nMVNwbLxnFzbZE5rM4+fvIO1DbT6EnevcKwVf0lnuGhS50VLHn9+IOPiN1/Zdi4EPSo6i8jJsoDokbLlKazqcpLRVtG/b1J1VYxwqc9S17K7rojbGiOvJzsRrI6inQnGtGTbFdSEVNMzJlmV3Y44z26bJaX20fzlVfDDkkSPartz1pxO0+R7tgiO2g13w7Onuc1eO1GH3lZwp0YeX15IMSH/48J+wWSnV2OI5c7KN6Q7gl4X3nJMlizIi+ZSk33hHTWU8d8y9Tk1TwPMQ3TznlZb2hZBAh72Ue9Md6xIq9qTmdDjWGLqxt5PfYH0lTycvm/pcWJIVVb/92RVz4Xmbi3yIq2TNybGQ9VtOtpZC95RUXru1HUJq/Hf38k5O6P+bbxAIk3pGsqyp6i6unEmAUT66IYFdqJmZLiDaV60jG9tanMChu7ZH7aGm9n4yO4OOHsQGthw8Z0PsURaBQTOg09KtNrORtGNHas0WaWctpopLLxtF2nOVvYMHSaPdZz7pBWFVq7tDyexpSZY4sqR96YFGuIrLVqj7XzPM53jR7VA0n3sTBy9vv9fv/D3xcjkX7bKAZM2IeLPWzsPPv4tvFBwHvkWAt8qzRGSe3F57ury/DtoOA6rwdHXkV4Nekrxc6wzOu8uk8Z5sx0oUtr8SLMnPTNoA9lPHWwV6UgrwdHXjBXKoO+uZ3qMC+QF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkBfyAggS5IW8AIIEeSEvgCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkBfyAggS5IW8AIIEeSEvgCBBXgcoL62EMG4AqpUQwkppKiQdd5GNI+lTvIE4ktMUzboq9tGiqwNCCCGVUjPdJFer+fTEqM+xdXEknbt/xqM5G5OP1rSdfyBAXgcnL62s91b2tJLqII6az+7JpX2740FbR6ZtuzjPtFrs+eW7mc2Hw73Zsx7NGWmveNrOPxggr6XJy/uzOo5UpItAxX4rVussAhpXVCCEjCJVWkPpPL+fPswToWwoq8+syaq1ljNJEq2cLTr6qZUQQhbbnybWo840Pq3uJWNvTN7IxsPhJa8pIq+yV3mPtBJCKlU7xMX+UHqCFafs/IMB8lqWvPxPLGvQUBks2XWaL8aRLORR1G4OdXJ5+YcKlry0jquJDX86cpoD0bz9pn42Dpoc+9OxlzxjoZbD4SMv/6NpHqPS4XEk8+Q80dgfk4aNU3f+wQB5HYy8mmYffD6v7fef/cw6hSpv1AkjmbTpiWe2Udys35gFk6aS8njJDopaTupCn42WaTr/qvpw76WpBnINh6MyvbWfo2l7xogRa96vfi55HCmvzj84IK/lDRuTiX5JMT6VJ0ZeDpU1BVd55DVxNGV8/pfjHOmIsYoeGP1w5rQ2Is/cGAT6ysu9l4oOeEyuuQ+H37CxsXgtk1vhNXmZh8bauDl0/sEAeS1VXh6f1XEkjfkQa5rE9QFufK7b4y47OR+I+HxnacxEFadBJYAoi8eRtCMsV06tpCxSy8yOftqbWQysHNseR6q+l6zcHuGH83B4y2uK74+dW5l636jCGFurhi+dZ+v8gwHyWq68YF4s7iz1l1cHQV7dfoQirwd49mHpuKLDueB9nVcX4Tqvzj+CkRcAzA/khbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkBfyAggS5IW8AIIEeSEvgCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkBfyAggS5IW8AIIEeSEvgCBBXlPKKx5KNUiSZFOJdRltTbm7tyK5LtTmlKUAoA7yapaXHgkxqtxVVKsiJd5QU8srSZJN1SKv3UiOZbQ7fa0AKwfycslLj4QYCzms3ms4HqrSLPGGijYjuS7EuhAni/sSx9FJIdLEXmE+rdKUdaVzecUbUqwLuRHnRfI4TquxECgMYALIy5ZXk7aSJEl2I2kGYvGGFOv5/d43Vaoq3StHhfGGzN2Ui8kaNsZRL1feVqQ27CZRGEA7yKsh8qr7S49sldjDxtREho+SJEm06un83xxz2Jj/rXvKGp5qhbYAJoC8Gua80hCsnPOqhF1JGnkVViojL0NDWTxlRF5JHJ00J+zjqBfFRti1G0kCLgAvkJfft416ZMdGyVYk16XqSVGZ89rKZ8HSGa68eD7nJVTP/ppyUxnZAMAb5OUjr4Fyz4LNgU0lNxZUNcADDfJa2kWqm6oWoAGAN8iLK+wBggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkNeM63ntf2Wu/Fp8lvcCmAXkNfN6Xk0rc1V/Zd2OXQnreQH4grxmXs8r2VRqI/8lY/YLbWMxr/wHj+nKOaonxLqMNpS9+JfLgCyGA+AD8pp5PS/zN9W6V/7Wuh556Z6QG3GyFcmTUVzJ0LSwKgoDaAd5zbyel+kdc20vl7yUTsoVByfLi/W8ACaCvGZez6tZXlkUlgVc08iL9bwAfEFe+1jPK/+uMFsfwlgS2pgIS9eqF+tK519Q6p4QJ6OoZ8yOZYvZA4A3yGvJ63kBwGwgLy5SBQgS5IW8AIIEeSEvgCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHk55NXvp4+Cgz8uADAB5OUVeSEwgK6BvKry2t5JXr++e/nVdy9f/e3lq2+8vHVj++5OkiQ7OzvLOEAA4AZ5VeV1/Z2d126Pb9wev3lr8O723ubL73zt3P9cv/5WkiQ7/WR7J+n3E8IwgKWDvKryevPt21d+m4zHH473PhyP9374/Msn/v07X/nms9euvV7ZcQd4mACgCvKqyuuNGzevXHt/+974+z/bfuna7le++fR3nn/r8W9dOX/h5ukL219/5t6v3rrfv9dP8BfAUkFeVXn95s23L/z6jfuj8Y3bg50P9q6/8963L+zc2h6/v31/MB6/9v744//y5r+dvfbBB+nuW8IxA4AEedXl9dq1GxdfunZje/yfzya9H713/PQb+od37n14f3B/b7x3/xf/u/vZr+184p9f+r///UrSv5MQfwEsCeRVlder19566sWrg/vjy9fuXnr1vZ9eufmVs7+5vTP4+o92z12498LW7Y/9wy9/78/P/84ff/+p564mSbK9zbeQAEsAeVXltfX6my/+6tpbO+PjZ9898b3bX/z2jZPfemO7f//au4NXrt+7/Pr2uYvvPXXx5kOfOX/26VcSLqEAWBLIqyqv1994+8kLrz3zwuVvP/PzU09e+MbZn/zdV1977+7om/H2l3/wzt/8x+sfP/mK/s7Wxz77wzPnryREXgBLAnlV5XX77s6p7//0E5/+x089+qVP/u3JP/vMF/70iy/c2hm9uNV/8uLNrz51/Usb7z3xgyt/+Ndnzzy9lSAvgCWBvBp+HmRMw/+lfnU8Hn/hG69++vFfPfrVX/7V4xef+N7PH/7cU9995mrCsBFgSSCvqrz6/eTu9vadO3dv37lz89ad27fv/MGjm5//r5uf/KefPbz+9MOfO/8nj577o8+c/d2HT585/3JC5AWwJJBX2w+z0/DrF1dvnvnxtbM/+c2Z878+c/7KmfOvfPfZq09ubr319s0DOkoAUAN5sZ4XQJAgr8ny2ukn2zv97Z3+9vaO+TiAwwMATSAvIi+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkBfyAggS5IW8AIIEeSEvgCBBXsgLIEiQFwAEycWLFy9evHjhwoULFy68+OKLL7zwwvPPP//cc8+tirwAIFD29vb29vZGo9H9+/eHw+FgMNjd3b137x7yAoBOg7wAIEiQFwAECfICgCBBXgAQJMgLAIIEeQFAkCAvAAgS5AUAQYK8ACBIkBcABAnyGp8+Jpo5/NjlNM/hxy6PLz92OHtucPmxw0IIcez0fg4DAEwL8mogdVKuJFtetu5atXX6WCHA8Xg8Hl89cUQcOXHVuxvT5l9cJdWqrp44IuZVK8AMIC8Xp49VpFSTl1egdfmxw/uNyBYtr/3J9Nwj6AuWBvKqcvmxw/VoahZ5zUFdXZfX+OqJI+KRc/vrHcBsIC8b57SWPVA8/Nhj9VmyuqXcNRUnf/rHiUeKGkwHnHvErNuKdKrZzz1iZLCeVBt1tHX1xBG7nasnjogjjzxyxEowO1GT3blHsBcsh9WWVzbZPoHDj11OI6+c08fEsWNl9NU4j++Iuyx5GcY690jxxDKQIQsji+WQ4u/GQVxzW65Iymyv1nY9UsNesCRWW151GiOvqrxOl0n2i+0VVSKvq7OmW864euKIOHKkefzXVKf/S43dGI+vnjjCvBcsA+RlM2nYaMx5ZTNfDSX2Iy8jkqlEahYN0qmDvOBBBHnZuJ1TztRX5u0PHzvmdJTfsHHayKtpeHb1xBHxyCPN3/whL3gQQV42bnnlXy+ePnb4scuGlk4fa77My2vC3mEN64XqHFSpr6snjmRPcq3ZNV49caTI3mKoeq3Tyos5L1gSyMvGqZzTx7ILTU8fO/zYaeNK1cOPXbf+x5UAABk3SURBVK5dEtZe1WR5jc0vFY888kjluqqSYgLd/vLQ+FrQR17GeDT/tnEqeeEuWBbIK6W8FsJ50UMRaR0+duzwsdOXHztsXjdfeWpW6h5TPjBwnRcsD+S1UJq09oDAFfawRJAXzAa/bYQlg7wAIEiQFwAECfICgCBBXgAQJMgLAIIEeQFAkCAvAAgS5AUAQYK8ACBIkBcABAnyAoAgWXV5XQKAMLl48eLFixcvXLhw4cKFF1988YUXXnj++eefe+65FZJXAgAB0u/3+/3+zs7O9vb23bt379y58/7779+6dQt5AUCnQV7ICyBIkBfyAggS5IW8AIIEeSEvgCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeDnn1++mj4OCPCwBMAHl5RV4IDKBrIK+qvLZ3ktev715+9d3LV397+eobL2/d2L67kyTJzs7OMg4QALhBXlV5XX9n57Xb4xu3x2/eGry7vbf58jtfO/c/16+/lSTJTj/Z3kn6/YQwDGDpIK+qvN58+/aV3ybj8YfjvQ/H470fPv/yiX//zle++ey1a69XdtwBHiYAqIK8qvJ648bNK9fe3743/v7Ptl+6tvuVbz79neffevxbV85fuHn6wvbXn7n3q7fu9+/1E/wFsFSQV1Vev3nz7Qu/fuP+aHzj9mDng73r77z37Qs7t7bH72/fH4zHr70//vi/vPlvZ6998EG6+5ZwzAAgQV51eb127cbFl67d2B7/57NJ70fvHT/9hv7hnXsf3h/c3xvv3f/F/+5+9ms7n/jnl/7vf7+S9O8kxF8ASwJ5VeX16rW3nnrx6uD++PK1u5defe+nV25+5exvbu8Mvv6j3XMX7r2wdftj//DL3/vz87/zx99/6rmrSZJsb/MtJMASQF5VeW29/uaLv7r21s74+Nl3T3zv9he/fePkt97Y7t+/9u7glev3Lr++fe7ie09dvPnQZ86fffqVhEsoAJYE8qrK6/U33n7ywmvPvHD528/8/NSTF75x9id/99XX3rs7+ma8/eUfvPM3//H6x0++or+z9bHP/vDM+SsJkRfAkkBeVXndvrtz6vs//cSn//FTj37pk3978s8+84U//eILt3ZGL271n7x486tPXf/SxntP/ODKH/712TNPbyXIC2BJIK+GnwcZ0/B/qV8dj8df+Marn378V49+9Zd/9fjFJ77384c/99R3n7maMGwEWBLIqyqvfj+5u719587d23fu3Lx15/btO3/w6Obn/+vmJ//pZw+vP/3w587/yaPn/ugzZ3/34dNnzr+cEHkBLAnk1fbD7DT8+sXVm2d+fO3sT35z5vyvz5y/cub8K9999uqTm1tvvX3zgI4SANRAXqznBRAkyGuyvHb6yfZOf3unv729Yz4O4PAAQBPIi8gLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgQV7ICyBIkFeDvLQSQmnrqbBSOkMcyRk7VisZR7JTmzn7plk1uLbIs2r3cY8jKWQU76NfMAeQl1teWlnv1+xpJXW/zK26WSvSynUOznkrm5r2a6Qh33R9dOV2b7u7oKN8HCnstWSQl5e8poi88s96UZwbaYqM4vw1pc1sZlZXca2EkErJas6sS0IobfS2TFWTz+84ko481W0vu1Skl5tk/mluVJrViG+0cmWztsiFVirKs2fNO4qn7ai0iUhVq3XJy73t9eYbjjvyWj7Iy0de/mebVsLwiGkaGcX2y65zyl08jmSenCfGkbTcWJzXqkid+eSqyUvrep3G3/mfZufL/hm1meX9Iy9R3XZ38SySyhu2MswaS7Ycd+S1fJBXXV5NMxoe0Zf9brfe70bkUSY55lIcxZ2iMIuWz4waZp6UaYg6m8KZ/P/K6Vx9OZlVXp7FsxTnDtrfQLjhuFdmReHAQV5+w8Yyqf1EMKMDK1nkkZflsyI6yZLdxR3yMiIvMzCbsAl+VMUoq42b3TLSrHJFelne2vj6tk/sjC2v+q5bkLzcx53Ia/kgL295ec57GXGKPbuldO27L2PaqrG42azVgzKnUsqaU5s18rLaNuI+Kxy0xWY9t3LWZ+HSibuWbc9TLS07t71avMyYD6K1Kqe/9rFLjKaqE4HIa9kgL395QZWGOHMVQF7LB3n5XecFNkbYt4I7ieu8OgHy4gp7gCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCBHkhL4AgWTl5DY8e5cFjqseyT1Jws4ryIvICf5BXZ0FeyAvaQF6dBXkhL2gDeXUW5IW8oA3k1VmQF/KCNpBXZ0FeyAvaQF6dBXkhL2gDeXUW5IW8oA3k1VmQF/KCNpBXZ0FeyAvaQF6dBXkhL2gDeXUW5IW8oA3k1VmQF/KCNpBXZ0Fefvdt9L9btut+ftU7ZU9HfhPoZeHe9lW5dyHy6izIy+uO2dnTyffRbruR8j7uwr3MG3g3b/tK3DUaeXUW5OUlL8/IKz2fdRZnVQOTap15PCZcMZ4QMoqKAlopnedvD3caiuftqLIPzsSWKut5kBcsE+TlIy9DMxPsYQ3xtLLOeLtO88U4kmmlxR+JPXDN5TVBnu7ipWMM2zgTG7fIve3IC5YJ8qrLq2k2xyf6ss9n+5klr8qJP2FcmjY9Me5rKG74p9wuZ2JLzc5tr8wMPoggr86CvPyGjYnnvFccSWEOzNoiL4fKmoKrPPKaoJnJsZmz95Nn1NzbTuQFywR5ecvLI/KKIymkUrIS0RSzS1ayNR4zR5CikpwPRX2+s2wqXg2ynIktOLcdecEyQV7+8oIKyAuWCfLyu84LqnCdFywZ5MUV9tAG8uosyAt5QRvIq7MgL+QFbSCvzoK8kBe0gbw6C/JCXtAG8uosyAt5QRvIq7MgL+QFbSCvzoK8liavrUiuC7Eu1Gb1Fd1zJFaIN6RY97gQbTeSY6EGs3ayaG4oxViIsRB7Ldd26ZEQe1HsalOPhBjVfnHlSpw/A7WPVjzlFUd7QoybNieORtZui4dSjBdyGWE8lNaen27b42jvQI6IH469NFDG1uXyuvcX8v5HPtVHXgumdrpuqomeaqyr5/f2tw74jE0pr3d0PJRipJNEq7GMdidW4Ferf/fnsKF1poq8Grao3rGBav0UmBnPA7XQGuaHYy+ZHwNG5JV86vc/+BHyWhR6JMRYyGHlHVuRlyMc02pdyJ5K08XJ8mDqntJJHJ0UYl3IjeYzYaDUMJJjOzAYKDEWcqjtgCGPH8yODlQWc42FSAOqMpeVnCTJQMlhnCRaVcMKP3kVTY1U+lIZ8I2FMIRYpuc1NORsCIiKhvaiaNT0EZCGIcOjR4u9lf9UdSzEXqSzFu1f27vOfF1vYjeSPl2q7ZDGxGwnKOMzw7HteiTEnlJ71f2ZvjnFWKhBuQn1aDtNkcM4DegnBI/736L6XkrMTwLktXh5NWgrxRl5OYyWHXzdk9FWXm8mr0nx10AV7zI9MiKi2uhOj8qnVs79fxz7yKv8ULVOQlc8FQ+0Z05HQ7uRLD7PjX3TUDCPvHYjVR7BpuGVczOrY0YH7i45d0jDXkoaTvX6Tt6rfNIk8VDmb05ju8zxZp7T+Lv++bSALWqoOT8QyOsAIy+Xv/zkpfLAKt5QhrzcU2ZVjHPaendYp2NSD6iM7tpnQHPk5WQ3ktVRpDvRiJ5ku5KKSGFiTkf3pxhdNsvL7aNZ5dXQJecOce+l6sdNU5eMzuRbZAeG2hXzWlOdelRtekFb5MYpr+27X/5QiN1/RV6LIjvlJs95+corjbzKWMyNr7ya3v7JAUVeDS8VH/vFDIgRCFQir2pOZ0PuCKWhG3uZvOzPnqnk5Ro2VpjcpUk7sLGGyfIyIq9i1tKOtszqsv1Qn9ac9xY1wbBxKfKySOOm4pFOWrkStSpmwTaVWBfpl4z5t43ZnJfoNRzzbHJCqEExtaC0FbqYUxdaueaxnNNOU27t5Hdq3tNaO0WnjEXP9tq7X5thcc3d1Iq7+j0aHj0qxFjIkZLWXmzZSbWvZD1iPUeXnDukYS85/OjqkvHxme2rtGPl22GkVB5zW++RkbYm0cy3VVLUYL079rlFTfuJCfsOyGu12Me3jUtmLtd5eYwc90NDlPQA4rxUAnnBQlnmdV77gotUOwvXeSEvqIywrK8rkFdn4Qp75AVtIK/OgryQF7SBvDoL8kJe0Aby6izIC3lBG8irsyAv5AVtIK/OgryQF7SBvDoL8vK7b+Pku2XPTn5H7Gbcra/KnROXC/LqLMjL647Z2dOF3Ue7veLm1lfintXLBXl1FuTlJa8pIq84kiIlj4q0EkIqJe3Uok4hlJ5gxcbWkdfCQV6dBXn5yKsUkq0fVzlh/Ew4zxlHMk/OE+NImq+2abGldeS1cJBXZ0FedXk1zSV5RF+2ZwrTGI7J/7Tt6DEebWi9MjcH8wZ5dRbk5TdsTDznvcpoy8QhLyPyMgOzlopdrRN5LRzk1VmQl7e8POe9ipmsIq9RzqqizKmUah+NNrWOvBYO8uosyMtfXh0EeS0c5NVZkJffdV5dhOu8DgLk1VmQF1fYQxvIq7MgL+QFbSCvzoK8kBe0gbw6C/JCXtAG8uosyAt5QRvIq7MgL+QFbSCvzoK8kBe0gbw6C/JCXtAG8uosyAt5QRvIq7MgL+QFbSCvzoK8kBe0gbw6C/JCXtAG8uosyAt5QRvIq7MgL+QFbSCvzoK8kBe0gbw6SwDyGh49yoPHEh/LPknBTRjymmPkVYHIC9pBXp0FeSEvaAN5dRbkhbygDeTVWZAX8oI2kFdnQV7IC9pAXp0FeSEvaAN5dRbkhbygDeTVWZCX330b/e+W7bqTYhxJn+INxJH0Kuqbb0INVj+btmghPXHv5CXfnhJ5dRbk5XXH7Ozp5Ptot93Ceh934fYt2pBvupbt3DPelHuGjW3eycu8MTjy6izIy0tenpFXeprpLH6pxgvVOvM4R7hiPCFkFBUFtFI6z98WhWilorzWrKzRSl44DYyUyhqpVlqXl2OLnJ0v+q50Xkmar2y2rfuNOxl5gQPk5SMvhwAasAZMWlknol2n+WIcybTS4o/EHrjm8pokT6OMVmU/68GMVkJGcdGelcGx7dUtcnXe6LtVxjBPq4RadjLyAgfIqy6vpkkWn+jLPs3sZ5YUKufjhHFp2vTkgZhR3mzAJS+ljUyt8qpvkbPzVTebAVn6t89QsmEnV6YgDxDk1VmQl9+wMZnol5Q4kuVJNiHycqisKbjKI69JE9eN8soKZgHXdPJybJGr82b3rEJZDq/wyb2TibzAAfLylpdH5BVHUkilZGXoU0wFWcnWMMkchIlKcj4Im/Sdpfl6pa/GZJSVMa86/VIxqvezYYsaOl9uqFL215TekZNzJyMvcIC8/OUFs2POwE0P8gIHyMvvOi+YFSMam213cp0XuEFeXGEPbSCvzoK8kBe0gbw6C/JCXtAG8uosyAt5QRvIq7MgL+QFbSCvzoK8kBe0EYC8Lh0/JNZOlX+X5KkFp9bqacmpNev6PkeOWtFTa4eO+5w5l44fEkXOS8cPrZ06tSaMopeOH0ordVRYvNbU937/4ucPrT2xs7O9vf1fD330cy+k8noOeQEkSRDySpLyzDbO+OJPW2g1Dh2/ZDnklJ09q+7Umlg77qzIrbFao2un8lYuHV/LipQ+ctqwri/rqSmvu3df/NxHP7r+/Pv/+Qf/B3ktlq1Irgu16Xgl3pCi4aU6eiTUwPXCbiTHDS+VRcVeFE/IGEd7Qoz2fb3bQM1ciV8/m9iN5FiIWUrm+Mprun767ZAZtt2QQPXUd4ddeVZTRaUkiuoqcvGNvKzGq0pslmrRzUvH19bWnLnW1soKH3roIeu1pTvrwZSXHhUu2FQOQ21FsqfdL03LQLW+3+OhFCOdJFqNZbTbklGr/ctrH3j3s4UJu6IVX3m5+7mflp117kayuh8uHT+Um8T4Myl8kZnAqYosd2X0VoRGZayUjf6qI8ymMWatwdSJh44fXzP6OsM41NzGfv+JNVFEXnfv3LnztT/86N89x5zX3NEjIcZCDotLxTeV2ojkuhDrQvRsPfjIyx1TaDUWYizEWOn0vImjvTShfGQlBkoO4yTRamxc+j5QWbaRyp2l1SjKK8nX6CrCsYEyNyoeyrx4UWXeAduA6d4QY6GGZVhRFt8zrqh39tNJUakcRpZxqwopd4qZXvZpVObXw6NHzcQp9me5OWMhSuPUdkgaWI1U1nEzs3vbtZUnSfIT2p5Osjm15hjfFcaoRF75C7m7Tq0dOnTIfMFot1VedgBny6uhK0bpwo2n1grPmtvYfyJV6UPfuPD3HyXyWgg1baVsKrGer73Vk9GW9ZJv5GWdlnG0Z35ATz9WiqNRviLXUOXnhlbV8zOxwrHdSBXyGuha8aSa36onjvbyPWOOpMoM/n0fyqKMEd9m1VXkpQd58/kGG5tRSUwjLyNxGhojr+oOEXtRXBxAr3itrjBHcJWe6JeOHzp0/HgtaGqMvLL/y7jr+Knshf1EXtl8fe6eelW1jlluTKszFffE2qFDh9ae2HnioY/+/YtEXgtEjyr+MgwVb6h5yKt6QrRHCi6MYEGW8nJ4yi2vInYR1aGN1TU9Ml7Ni9txih18+aBHzYFZVQZFfGo2Y+wpMzGPvLLE6fanv7zUICkNOVle1UG0Y76+HF+lU1iOgZkZeVW+9DOCHTPr1JHXpeOH1tbWshmutVOOXpjfK1QqM1PS0PH4WuHLS8cPrX3emLBHXgslO7frc15zkpcReSVxtLePWerEOLsa5JWf4KWUjXDJO/JyF5+FeCgbt9eWgeHOhnjKzF/Mec00fVVsVBZblZ2YUV7ZbEHls8FUwqk1kX1jWJuub4+8ygyp66wKpo68MvEUyjp0SJQKtb8TrRq0VthuJ5uAO3X88xezbxu/Yc/XI6/FspXNdqnNdPwosiFk9nf2aFGYEeSYg9IyplAjVXuPTyCfRjNCJ3OCJqs7Pa/K+aWRykeolahE6cSYRLNjGrO4K3Cb5StOu/mRbtxL1nZmOa3Ab68YPEtRibymxZiETBPqO6ScvcwnEwdTHjornMn9UrVKY+SVD+8st4i1U9aU+uTIy33LqFJDxni0qKZ+GZjZWjX6q2JfKkHkBQeMOVXVSbp/nVcmBtNBSVJKrJxjsqKzJsMJSxiFv9LJ9pb5qcriuXnh8nvGS0aayK4Zs81khnVrp7LrNZqup1g7hbyQ13Ioop/ZApqDo/vy6gQea5TPHX4ehLygDeTVWZAX8oI2kFdnQV7IC9pAXp0FeSEvaAN5dRbkhbygDeTVWZAX8oI2kFdnQV7IC9pAXp0FeSEvaAN5dRbk5XfTWedd6OeE+3cV1c7UW1/y3VhXBOTVWZCXW15aWabInlZS50d7xc2tx5HCXosFeXUW5OUlrykirziS2a+v8qhIKyGkUtJOLeoUQukJVmxsHXktHOTVWZCXj7xKIdn6cZUrFaNVntP40WqeaPwWbNKwsaV15LVwkFdnQV51eTXNJXlEX7ZnCtMYjsn/tO3oMR5taL0yNwfzBnl1FuTlN2xMPOe9ymjLxCEv81f4jtVEmjpUaZ3Ia+Egr86CvLzl5TnvVcxkFXmNclYVZU6lVPtotKl15LVwkFdnQV7+8uogyGvhIK/Ogrz8rvPqIlzndRAgr86CvLjCHtpAXp0FeSEvaAN5dRbkhbygDeTVWZAX8oI2kFdnQV7IC9pAXp0FeSEvaAN5dRbkhbygDeTVWZAX8oI2kFdnQV7IC9pAXp0FeSEvaAN5dRbkhbygDeTVWZAX8oI2kFdnQV7IC9pAXp0lDHnx4LHEx7JPUnATgLwmPoi8AFYQ5IW8AIIEeSEvgCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuTld99G/7tlu+6kGEfSp3gDcSSnKVq/Zfd+ybsvpFKz3eRWq/neBNN9OLiR5WqBvLzumJ09nXwf7bZbWO/jLtzTF53fvbQN8Wi1WDn4bmbz4eAW4isE8vKSl2fklZ48ughU7POoWmcR0LhiPCFkFKnSGkrn+f30YZ7FZUNZfWZNVq21nEmSaOVs0dFPrYQQstj+NLEedabxaXUvGXtj8kY2Hg7ktUIgLx95+Z9Y1hCvMliy6zRfjCNZyKOo3Ry45vLyj78seWkdVxMb/nTkNAeieftN/Wwc4jr2p2MveUZeLYcDea0QyKsur6apE5/oyz557GfWqVk5yyaMS9OmJ57ZRnGzfmMWTJpKyuMlOyhqUXShz0bLNMmjKi/3XppqdNxwOCqTlfDggrz8ho3JRL+kxJEsT50JkZdDZU3BVR55TRxN5RmMvMawzyVTox/OnNZG5Jkbg0Bfebn3UtEBj8k19+Eg8lohkJe3vDwirziSQiolK8GL9f2fe5LHHnfZyfkgy+c7S2MmqjiH7SqN4nEk7QjLlVMrKYvUMrOjn/ZmZs04tz2OVH0vWbk9Yifn4UBeKwTy8pcXzIvFKQZ5rRDIy+86L5gfruhwLnCd12qBvLjCHiBIkBfyAggS5IW8AIIEeSEvgCBBXsgLIEiQF/ICCBLkhbwAggR5IS+AIEFeyAsgSJAX8gIIEuSFvACCpEle/x955uRfhD/4sAAAAABJRU5ErkJggg==" alt="" />
模板 --> 一个HTML内部有多个子模板可进行判断使用--》include
导入 include
<div>
<ul>
<li></li>
<li>42区</li>
</ul>
</div>
header.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>老男孩</title>
<link href="{{static_url("css/common.css")}}" rel="stylesheet" />
</head>
<body> <div class="pg-header">
{% include 'header.html' %}
</div> <script src="{{static_url("js/jquery-1.8..min.js")}}"></script> </body>
</html>
index.html
在模板中默认提供了一些函数、字段、类以供模板使用:
escape
:tornado.escape.xhtml_escape
的別名xhtml_escape
:tornado.escape.xhtml_escape
的別名url_escape
:tornado.escape.url_escape
的別名json_encode
:tornado.escape.json_encode
的別名squeeze
:tornado.escape.squeeze
的別名linkify
:tornado.escape.linkify
的別名datetime
: Python 的datetime
模组handler
: 当前的RequestHandler
对象request
:handler.request
的別名current_user
:handler.current_user
的別名locale
:handler.locale
的別名_
:handler.locale.translate
的別名static_url
: forhandler.static_url
的別名xsrf_form_html
:handler.xsrf_form_html
的別名
2、自定义模板
Tornado默认提供的这些功能其实本质上就是 UIMethod 和 UIModule,我们也可以自定义从而实现类似于Django的simple_tag的功能:
1、定义
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def tab(self):
return 'UIMethod' #def func(self,arg): # return arg.lower()
uimethods.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from tornado.web import UIModule
from tornado import escape class custom(UIModule): def render(self, *args, **kwargs):
return escape.xhtml_escape('<h1>德玛西亚</h1>')
#return escape.xhtml_escape('<h1>www</h1>')
uimodule.py
2.注册
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#!/usr/bin/env python
# -*- coding:utf-8 -*- import tornado.ioloop
import tornado.web
from tornado.escape import linkify
import uimodules as md
import uimethods as mt class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render('index.html') settings = {
'template_path': 'template',
'static_path': 'static',
'static_url_prefix': '/static/',
'ui_methods': mt,
'ui_modules': md,
} application = tornado.web.Application([
(r"/index", MainHandler),
], **settings) if __name__ == "__main__":
application.listen(8009)
tornado.ioloop.IOLoop.instance().start()
main.py
3.使用
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<link href="{{static_url("commons.css")}}" rel="stylesheet" />
</head>
<body>
<h1>hello</h1>
{% module custom() %}
{{ tab() }}
</body>
index.html
实用功能
1.静态文件
#!/usr/bin/env python
# -*- coding:utf-8 -*- import tornado.ioloop
import tornado.web class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render('index.html') settings = {
'template_path': 'template',
'static_path': 'static',
'static_url_prefix': '/static/',
} application = tornado.web.Application([
(r"/index", MainHandler),
], **settings) if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
在html中引用的时候
<link href="{{static_url('css/index.css')}}" rel="stylesheet" />
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<link href="{{static_url("commons.css")}}" rel="stylesheet" />
</head>
<body>
<h1>hello</h1>
</body>
</html>
目录结构:
aaarticlea/png;base64,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" alt="" />
静态文件缓存:
<link href="{{static_url('css/index.css')}}" rel="stylesheet" />
#这里static_url 为什么不写路径呢?
'''
在Django中,我们写成变量形式的主要是为了以后扩展方便。但是在Tornado中不仅有这个功能还有一个缓存的功能
'''
原理:
拿一个静态文件来说:/static/commons.js如果用Tornado封装后,类似于给他加了一个版本号/static/commons.js?v=sldkfjsldf123
当客户端访问过来的时候会携带这个值,如果发现没变客户端缓存的静态文件直接渲染就行了,不必再在服务器上下载一下静态文件了。
Tornado静态文件实现缓存源代码:
def get_content_version(cls, abspath):
"""Returns a version string for the resource at the given path. This class method may be overridden by subclasses. The
default implementation is a hash of the file's contents. .. versionadded:: 3.1
"""
data = cls.get_content(abspath)
hasher = hashlib.md5()
if isinstance(data, bytes):
hasher.update(data)
else:
for chunk in data:
hasher.update(chunk)
return hasher.hexdigest()
2.CSRF跨站伪造请求
Tornado中的夸张请求伪造和Django中的相似,跨站伪造请求(Cross-site request forgery)
settings = {
"xsrf_cookies": True,
}
application = tornado.web.Application([
(r"/", MainHandler),
(r"/login", LoginHandler),
], **settings)
配置
<form action="/new_message" method="post">
{{ xsrf_form_html() }}
<input type="text" name="message"/>
<input type="submit" value="Post"/>
</form>
使用--普通表单(可以加raw)
function getCookie(name) {
var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
return r ? r[] : undefined;
} jQuery.postJSON = function(url, args, callback) {
args._xsrf = getCookie("_xsrf");
$.ajax({url: url, data: $.param(args), dataType: "text", type: "POST",
success: function(response) {
callback(eval("(" + response + ")"));
}});
};
使用ajax
注:Ajax使用时,本质上就是去获取本地的cookie,携带cookie再来发送请求
Tornaod框架的更多相关文章
- 第一个web框架tornado
简介 tornado,是我学到的第一个web框架是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google ...
- 两个Python web框架:Django & Tornado比较
就是说它作为 web 框架比 Django 简单,又支援异步 IO,且更不需要前端的 webserver ? 我已经混乱了, Tornado是 Nginx.Django.Node.js 的结合体?又或 ...
- python运维开发(二十三)---tornado框架
内容目录: 路由系统 模板引擎 cookie 加密cookie 自定义api 自定义session 自定义form表单验证 异步非阻塞 web聊天室实例 路由系统 路由系统其实就是 url 和 类 的 ...
- Tornado框架简介
-------------------简介------------------- 1.概念: Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器 ...
- PythonWEB框架之Tornado
前言 Tornado(龙卷风)和Django一样是Python中比较主流的web框架,Tornado 和现在的主流 Web 服务器框架也有着明显的区别:Tornado自带socket,并且实现了异步非 ...
- python-Tornado 框架
概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...
- Tornado 框架的使用
Tornado tornado是一个轻量级python的web框架,他是非阻塞式的,而且速度非常快.得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着 ...
- 框架之Tornado(简单介绍)
引言 回想Django的部署方式 以Django为代表的python web应用部署时采用wsgi协议与服务器对接(被服务器托管),而这类服务器通常都是基于多线程的,也就是说每一个网络请求服务器都会有 ...
- Python web框架 Tornado(二)异步非阻塞
异步非阻塞 阻塞式:(适用于所有框架,Django,Flask,Tornado,Bottle) 一个请求到来未处理完成,后续一直等待 解决方案:多线程,多进程 异步非阻塞(存在IO请求): Torna ...
随机推荐
- angular学习-入门基础
angular .caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #00 ...
- 调研Android平台开发环境的发展演变
Android是Google推出的开源手机操作系统,主要以开发应用为主,要进行Android开发首先得搭建好开发平台.最近在搭建Android的开发环境,发现往往一个小问题都能花费你大半天时间,从刚开 ...
- nginx下禁止访问robots.txt的设置方法
关于robots.txt文件:搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信 息.您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中声明该网 ...
- 看css发现一个pointer-events:none;的东西
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 【CodeForces 614A】Link/Cut Tree
题 题意 给你一个区间,求里面有多少个数是k的次方. 分析 暴力,但是要注意这题范围会爆long long,当k=1e8: l=1:r=1e18时 k²=1e16,判断了是≤r,然后输出,再乘k就是1 ...
- bzoj 1193 贪心
如果两点的曼哈顿距离在一定范围内时我们直接暴力搜索就可以得到答案,那么开始贪心的跳,判断两点横纵坐标的差值,差值大的方向条2,小的条1,不断做,直到曼哈顿距离较小时可以暴力求解. 备注:开始想的是确定 ...
- 粒子群优化算法-python实现
PSOIndividual.py import numpy as np import ObjFunction import copy class PSOIndividual: ''' individu ...
- 以一个权限系统来告别WebForm —开篇
前言: 当今是互联网的时代,我们己经阻止不了它的发展了,只有跟上脚步,才不会被抛弃,松散了这么久,该紧紧了. 背景: 我之所以说以一个权限应用系统来告别我的WebForm内部系统的生涯,是缘于我自 ...
- EasyUI queryParams属性 在请求远程数据同时给action方法传参
http://www.cnblogs.com/iack/p/3530500.html?utm_source=tuicool EasyUI queryParams属性 在请求远程数据同时给action方 ...
- 如何起草你的第一篇科研论文——应该做&避免做
如何起草你的第一篇科研论文——应该做&避免做 导语:1.本文是由Angel Borja博士所写.本文的原文链接在这里.感谢励德爱思唯尔科技的转载,和刘成林老师的转发.2.由于我第二次翻译,囿于 ...