模板## 配置模板路径

这个在之前我们已经配置好了,可以参考前面的文章

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 : 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学习笔记day01
tornado学习笔记day02
tornado学习笔记day03
tornado学习笔记day04
tornado学习笔记day05
tornado学习笔记day06
tornado学习笔记day07
tornado学习笔记day08

tornado学习笔记day05-访问数据库相关推荐

  1. Python学习笔记:访问数据库

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  2. tornado学习笔记day07-同步与异步

    同步 概念 同步就是按部就班的依次执行我们的代码 进阶 但是有些情况我们有一些比较耗时的从操作,比如去别的地方拿点资源,去其他网站请求数据,去访问数据库,上传文件等等,所以这里面优点瑕疵,有小编一一道 ...

  3. tornado学习笔记day08-tornado中的异步

    概述 应为epoll主要用来解决网络的并发问题,所以tornado中的异步也是主要体现在网络的IO异步上,即异步web请求 tornado.httpclient.AsyncHTTPClient tor ...

  4. tornado学习笔记day06-应用安全

    应用安全 cookie 普通cookie 一般我们的用户表中都有啥呢 你在购物的时候,加入购物车,让你登录,那你登录之后,他怎么知道你登录了呢 token 这个值是随机的,存在cookie里面 设置 ...

  5. tornado学习笔记day02-进阶与提升

    整理基础工程 请看第一天的配置文件目录,搭建了一个框架的基础目录 Application settings debug 作用 可以设置tornado是否工作在调试模式下面,默认为false,即工作在生 ...

  6. tornado学习笔记day01-高并发性能web框架

    tornado的安装 这里我使用的是虚拟环境中的pip安装,配合清华大学镜像源安装的 pip install tornado -i https://pypi.tuna.tsinghua.edu.cn/ ...

  7. tornado学习笔记day04-执行顺序

    响应输出 -> write 原型 self.write()函数 源码中是这样定义的 def write(self, chunk: Union[str, bytes, dict]) -> N ...

  8. tornado学习笔记day03-响应输出

    write: 作用: 将chunk中的数据写到输出缓冲区 利用write方法写json数据 我们自己手动序列化json的那种方式Content-Type 的属性值为text-html 而我们采用wri ...

  9. VBNET学习笔记---MS VBnet数据库访问技术,概念,介绍,发展历程.

    VBNET学习笔记---MS VBnet数据库访问技术,概念,介绍,发展历程. 2013-02-20 1.数据库访问技术 a.JET与DAO JET(Joint Engine Technology)数 ...

最新文章

  1. 【HNOI2013】消毒
  2. 他是绝世天才,却只开了半辈子的挂!死后惨遭封号200年,这就是和牛顿抬杠的下场.........
  3. 固定速率与固定延迟– RxJava常见问题解答
  4. PMP读书笔记(第7章)
  5. OpenGL 视图和颜色的概念
  6. 修改Jupyter Notebook默认工作目录
  7. 三月提示:提防挂马网站 关注账号安全
  8. sqlserver 操作技巧
  9. 20172304 《程序设计与数据结构》 第一周学习总结
  10. python自动化办公——python操作Excel、Word、PDF集合大全
  11. 微信小程序物流仓库平台+后台管理系统|前后分离VUE
  12. Android仿微信朋友圈10s视频编辑
  13. 实时操作系统与分时操作系统原理详解——经典
  14. 学妹哭着问我:测试工程师应掌握什么?不知道自己是否适合做这个?
  15. Docker学习(2)-Docker基础1
  16. 【Nginx基础知识】
  17. 医学图像分割 unet实现(一)
  18. 如何解决您与此网站之间建立的连接不安全,该页面采用不加密的http传输协议?
  19. 逻辑覆盖测试用例设计
  20. arduino与hcsr04_基于Arduino的超声波传感器HC-SR04

热门文章

  1. 《 追风筝的人 》:“ 为你,千千万万遍 ” ...
  2. apache 官方 Dubbo 文档
  3. nginx-exporter安装使用
  4. 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
  5. 一个基于POP3协议进行邮箱账号验证的类
  6. C#实现简单WEB服务器
  7. Tomcat4/5连接池的设置及简单应用示例
  8. [flask]gunicorn配置文件
  9. canvas反向裁剪技巧
  10. [Web 前端] 解决因inline-block元素导致的空白间距和元素下沉