tornado学习笔记day05-访问数据库
模板## 配置模板路径
这个在之前我们已经配置好了,可以参考前面的文章
settings = {# 就像upfile就没有,你写了也白扯'template_path': os.path.join(BASE_DIR, "templates"),
}
渲染并返回给客户端
使用render()方法
class HomeIndexHandler(RequestHandler):def get(self):self.render("home.html")
变量与表达式
语法
- { { var } }
- { { expression } }
实例
class HomeIndexHandler(RequestHandler):def get(self):temp = 100# 直接传一个变量就行self.render("home.html",num = temp)# self.render("home.html")
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>主页</title>
</head>
<body><h1>这里是主页</h1>{ { num } }<br><!-- 这里支持加减 -->{ { num + 1 } }{ { num + 18 } }<!-- 这里需要用模板的注释才能真正的注释掉双大括号 --><!-- 这里一定要注意,这个普通的注释会被加载到页面中 -->{# num: { { num } } #}<!-- 模板的注释才是真正的注释 -->{# num: { { num + 10 } } #}<!-- 等号的赋值的不好使的,会报错 -->{# num: { { num = 5} } #}
</body>
</html>
流程控制
if
格式
单个的if
{ % if表达式 % }
语句
{ % end % }
if和else的
{ % if表达式 % }
语句1
{ % else % }
语句2
{ % end % }
多个if 的
{ % if表达式1 % }
语句1
{ % elif 表达式2% }
语句2
{ % elif 表达式3% }
语句3
<!--这里面else可有可无-->
{ % end % }
实例
{ % if flag == 0% }
flag确实是0
{ % elif flag == 0 %
语句2
{ % elif flag == 2 % }
flag bug
{ % else % }
baiche
{ % end % }
for
这里面需要注意的是,结束模板语法都是{ % end % }
{ % for 变量 in 集合 % }
语句
{ % end % }
实例:
<ul>{ % for stu in stus % }<li>{ { stu } }</li>{ % end % }
</ul>
while
这个while很少使用,就不写了
函数
static_url()
作用
- 获取配置中的静态目录的路径
- 将参数拼接到静态目录后面并返回新的路径
示例
<link rel="stylesheet" href="{ { static_url('css/home.css') } }">
优点
- 修改目录的话 只需要修改配置文件中的内容即可,不需要修改各种页面中的URL
- Hash值
- static_url创建了基于文件内容的Hash值
- 将其添加到文件的末尾(当一个查询参数)
- 这个hash值总能够保证,我们每一次加载最新的版本
- 而不是之前的缓存的版本
- 不论是开发阶段还是线上阶段,都是很有必要的
转义
tornado默认开启自动转义功能,能够防止网站攻击
class TranHandler(RequestHandler):def get(self):str = "<h1>能不能转义就看这会的了</h1>"self.render("trans.html",str = str)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>转义</title>
</head>
<body>
{ {str} }
</body>
</html>
页面这样显示
<h1>能不能转义就看这会的了</h1>
关闭自动转义
- raw:
{ % raw str % }
这个会关闭一行 - 在页面模板中修改
- autoescape:
{ % autoescape None % }
- 这个不管你三七二十一都关闭了就
- autoescape:
- 在配置文件中修改
autoescape : None
- 当为None时关闭当前项目的自动转义
- escape()函数
- 这个函数能够在全局转义的条件下再不转义
{ { escape(str) } }
继承
静态文件
static_path
- 作用
- 告诉tornado从文件系统中某一个特定的位置提供我们的静态文件
- 示例:
'static_path': os.path.join(BASE_DIR, "static"),
- 请求方式:
http://127.0.0.1:8080/static/html/index.html
- 引用其他文件:
<link rel="stylesheet" href="{ {static_url('css/index.css')} }"> <script src="{ {static_url('js/jquery.js')} }"></script>
- 作用
StaticFileHandler
使用原因:这种请求方式:
http://127.0.0.1:8080/static/html/index.html
对于用户来说,体验不佳本质: 是tornado预制的用来提供静态资源文件的Handler
作用: 可以通过StaticFileHandler来映射静态资源文件
使用:
- 第一种写法
(r"/(.*)$", tornado.web.StaticFileHandler,{"path":os.path.join(BASE_DIR,"static/html"),}),
- 第二种:
(r"/(.*)$",tornado.web.StaticFileHandler,{"path": os.path.join(BASE_DIR, "static/html"),"default_filename": "index.html"} ),
参数:
- path:用来指定访问提供静态文件根路径
- default_filename:用来指定访问路由中未指定文件名时,访问哪个静态中的文件
注意:
- 最好在其他路由的最下面写
- 否则可能会不匹配
- 其中的路由可以去参考一下百度的
数据库
概述
tornado目前没有自己的数据库,需要连接数据库,还得自己去适配
目前python3.6+tornado还没有完善的驱动
磁盘数据库和内存数据库:
比如你以前你的爸爸,那个手机啊,欠费了好几十还不给你停机
因为数据还没来得及处理,那个话费单,得一条一条处理,他处理不过来,知道么,当你欠费的时候,他还不知道你欠费呢
现在就不一样了,你的话单数据都在内存里面了,你一旦欠费,马上就给你停机,O(∩_∩)O哈哈~
redis的开源的内存数据库,移动联通都不用这种数据库
内存数据库是国内06年开始有人在搞
从13年开始,又出现了一个分布式内存数据库,现在人们都有钱了,数据量大了,一台服务器都存不下了
14年开始,又升级了一下,这次升级的是硬件,以前用的是万兆网卡,现在更NB了
链接
在应用启动时,创建一个数据库链接实例,供各个requestHandler使用
在requestHandler中,通过self.application来获取对象
相似文章
tornado学习笔记day05-访问数据库相关推荐
- Python学习笔记:访问数据库
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- tornado学习笔记day07-同步与异步
同步 概念 同步就是按部就班的依次执行我们的代码 进阶 但是有些情况我们有一些比较耗时的从操作,比如去别的地方拿点资源,去其他网站请求数据,去访问数据库,上传文件等等,所以这里面优点瑕疵,有小编一一道 ...
- tornado学习笔记day08-tornado中的异步
概述 应为epoll主要用来解决网络的并发问题,所以tornado中的异步也是主要体现在网络的IO异步上,即异步web请求 tornado.httpclient.AsyncHTTPClient tor ...
- tornado学习笔记day06-应用安全
应用安全 cookie 普通cookie 一般我们的用户表中都有啥呢 你在购物的时候,加入购物车,让你登录,那你登录之后,他怎么知道你登录了呢 token 这个值是随机的,存在cookie里面 设置 ...
- tornado学习笔记day02-进阶与提升
整理基础工程 请看第一天的配置文件目录,搭建了一个框架的基础目录 Application settings debug 作用 可以设置tornado是否工作在调试模式下面,默认为false,即工作在生 ...
- tornado学习笔记day01-高并发性能web框架
tornado的安装 这里我使用的是虚拟环境中的pip安装,配合清华大学镜像源安装的 pip install tornado -i https://pypi.tuna.tsinghua.edu.cn/ ...
- tornado学习笔记day04-执行顺序
响应输出 -> write 原型 self.write()函数 源码中是这样定义的 def write(self, chunk: Union[str, bytes, dict]) -> N ...
- tornado学习笔记day03-响应输出
write: 作用: 将chunk中的数据写到输出缓冲区 利用write方法写json数据 我们自己手动序列化json的那种方式Content-Type 的属性值为text-html 而我们采用wri ...
- VBNET学习笔记---MS VBnet数据库访问技术,概念,介绍,发展历程.
VBNET学习笔记---MS VBnet数据库访问技术,概念,介绍,发展历程. 2013-02-20 1.数据库访问技术 a.JET与DAO JET(Joint Engine Technology)数 ...
最新文章
- 【HNOI2013】消毒
- 他是绝世天才,却只开了半辈子的挂!死后惨遭封号200年,这就是和牛顿抬杠的下场.........
- 固定速率与固定延迟– RxJava常见问题解答
- PMP读书笔记(第7章)
- OpenGL 视图和颜色的概念
- 修改Jupyter Notebook默认工作目录
- 三月提示:提防挂马网站 关注账号安全
- sqlserver 操作技巧
- 20172304 《程序设计与数据结构》 第一周学习总结
- python自动化办公——python操作Excel、Word、PDF集合大全
- 微信小程序物流仓库平台+后台管理系统|前后分离VUE
- Android仿微信朋友圈10s视频编辑
- 实时操作系统与分时操作系统原理详解——经典
- 学妹哭着问我:测试工程师应掌握什么?不知道自己是否适合做这个?
- Docker学习(2)-Docker基础1
- 【Nginx基础知识】
- 医学图像分割 unet实现(一)
- 如何解决您与此网站之间建立的连接不安全,该页面采用不加密的http传输协议?
- 逻辑覆盖测试用例设计
- arduino与hcsr04_基于Arduino的超声波传感器HC-SR04
热门文章
- 《 追风筝的人 》:“ 为你,千千万万遍 ” ...
- apache 官方 Dubbo 文档
- nginx-exporter安装使用
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
- 一个基于POP3协议进行邮箱账号验证的类
- C#实现简单WEB服务器
- Tomcat4/5连接池的设置及简单应用示例
- [flask]gunicorn配置文件
- canvas反向裁剪技巧
- [Web 前端] 解决因inline-block元素导致的空白间距和元素下沉