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

整理基础工程

  • 请看第一天的配置文件目录,搭建了一个框架的基础目录

Application

settings

debug

作用

可以设置tornado是否工作在调试模式下面,默认为false,即工作在生产模式下

true的特性:

自动重启:
  • tornado程序会监控源代码文件,会自动重启服务器,减少我们手动重启的次数,提高开发效率
  • 如果保存后有错误,导致重启失败,修改好后,不会再重启了,需要我们手动进行重新启动
  • 在debug开启后,那四个特性咱也不太会啊,咱就想着能够重启就得了,那这可咋整,这个时候我们可以通过"autoreload" : True设置,仅仅有第一个特性
取消缓存编译的模板:
  • 单独设置:compiled_template_cache = False
  • ,这个默认值为true,这里要注意不是说我debug设置默认为啥,里面就默认都是啥
  • 你改完了模板的内容,它得加载你改了的啊,不能还用缓存的内容,要不然你看不到修改的新结果,这可不行
  • 虽然出于性能考虑,老也重新加载有点儿慢,但是没事儿,毕竟开发中也不差这一点资源
取消缓存静态文件的HASH值
  • 单独设置:static_hash_cache = False
  • css文件每次后面都有一个哈希值,这个哈希值能缓存
  • 这样我们都能重新加载这个css就OK了
提供追踪信息
  • 如果我们的IndexHandler里面抛出了一个异常,但是他自己没有捕获这个异常,就会生成一个追踪的页面
  • 单独设置:serve_traceback = True

template_path:

设置模板文件目录

static_path :

设置静态文件目录

auto_escape :

当为None时,关闭项目的自动转义

cookie_secret:

配置安全cookie秘钥

xsrf_cookie:

当为True,开启XSRF保护

login_url

用于定义登录的路径,默认找这里

路由

  • (r"/", index.IndexHandler),
  • 传的参数在路由那嘎达的字典类型的数据

D:.
│  config.py
│  readme.md
│  server.py
│  application.py
│  
├─.idea
│  │  .gitignore
│  │  itcast_tornado.iml
│  │  misc.xml
│  │  modules.xml
│  │  vcs.xml
│  │  workspace.xml
│  │
│  └─inspectionProfiles
│          profiles_settings.xml
│
├─static # 静态资源文件夹    
├─templates # 模板文件
├─upfile  # 上传文件
│
└─views # 视图│  index.py # 首页视图└─ __init__.py

version1.0

创建一个index.py文件在views包下面,内容如下

from tornado.web import RequestHandlerclass IndexHandler(RequestHandler):def get(self):self.write("main page info tornado!")

server.py文件中修改如下

import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
import config
from views.index import IndexHandlerif __name__ == '__main__':app = tornado.web.Application([(r"/", IndexHandler)])httpServer = tornado.httpserver.HTTPServer(app)httpServer.bind(config.options["port"])httpServer.start(1)tornado.ioloop.IOLoop.current().start()

其中的config.py不用动

options = {"port": 8080,"list": ["good", "nice", "handsome"]
}

version2.0

创建一个application.py的文件,内容如下

import tornado.web
from views.index import IndexHandlerclass Application(tornado.web.Application):def __init__(self):handlers = [(r"/", IndexHandler)]super(Application,self).__init__(handlers)

然后服务端这么改

import tornado.ioloop
import tornado.httpserver
import tornado.optionsimport config
from application import Applicationif __name__ == '__main__':app = Application()httpServer = tornado.httpserver.HTTPServer(app)httpServer.bind(config.options["port"])httpServer.start(1)tornado.ioloop.IOLoop.current().start()

视图都不用动

from tornado.web import RequestHandlerclass IndexHandler(RequestHandler):def get(self):self.write("main page info tornado!")

因为tornado不是Django那种大而全的,而是小而精的

所以配置也不用怎么动

# 参数
options = {"port": 8080
}# 配置
settings = {# static_path = "/","debug" : True
}

成了这就

然后我们再配置一个路由home
在application里面直接加就OK

import tornado.web
from views import indexclass Application(tornado.web.Application):def __init__(self):handlers = [(r"/", index.IndexHandler),(r"/home", index.HomeHandler),]super(Application,self).__init__(handlers)

然后在视图中再创建一个对应的类

from tornado.web import RequestHandlerclass IndexHandler(RequestHandler):def get(self):self.write("main page info tornado!")class HomeHandler(RequestHandler):def get(self):self.write(" this is home page content!")

重启服务即可在浏览器中访问http://127.0.0.1:8080/home看到结果

配置路径

Django中的那个BASE_DIRS挺好用的,我们也想有一个,那我们也可以整

import os
BASE_DIR = os.path.dirname(__file__)# 参数
options = {"port": 8080
}# 配置
settings = {# 这写key的名字可不是随便起的奥,是写好的,# 就像upfile就没有,你写了也白扯'static_path' : os.path.join(BASE_DIR,"static"),'template_path' : os.path.join(BASE_DIR,"templates"),"debug" : True
}

路由参数的传递

传递的方式和Django差不多,但也有不同之处,这里直接上代码

路由里面这样发

import tornado.web
from views import indexclass Application(tornado.web.Application):def __init__(self):handlers = [(r"/", index.IndexHandler),(r"/sunck", index.SunckHandler,{'name':"victor",'age':19}),]super(Application,self).__init__(handlers)

视图里面这样接

from tornado.web import RequestHandlerclass IndexHandler(RequestHandler):def get(self):self.write("main page info tornado!")class SunckHandler(RequestHandler):# 该方法会在HTTP方法之前调用def initialize(self,age,name) -> None:self.age = ageself.name = namedef get(self):print(self.age)print(self.name)self.write("sunck page info tornado!")

这里不能再get方法中直接加上参数接受

需要重写initialize方法,来对成员属性进行定义

相似文章

tornado学习笔记day01
tornado学习笔记day02
tornado学习笔记day03
tornado学习笔记day04
tornado学习笔记day05
tornado学习笔记day06
tornado学习笔记day07
tornado学习笔记day08

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python123测验2答案八边形_Python试卷

3、写一个函数&#xff0c;计算一个给定的日期是该年的第几天。def getday(self,yNone,mNone,dNone):date datetime(y,m,d)days date.strftime(%j)return days4、写一个函数&#xff0c;给定N&#xff0c;返回斐波那契数列第N项。def getn_vlaue(self,n):if n<2:return 1e…

java实体类如果不重写toString方法,会如何?

先认识一下Object Object 类的 toString 方法 返回一个字符串&#xff0c;该字符串由类名&#xff08;对象是该类的一个实例&#xff09;、at 标记符“”和此对象哈希码的无符号十六进制表示组成。换句话说&#xff0c;该方法返回一个字符串&#xff0c;它的值等于&#xff1a;…

H.264 中很有用的一些概念

Q:PSNR 峰值信噪比 是根据它来取qp是不是&#xff1f; A:不是 和QP没有直接关系但是QP的选择会影响到PSNR Q: 如果不用率失真最优化&#xff0c;为什么选择SATD&#xff0b;deltar&#xff08;mv&#xff0c;mode&#xff09;作为模式选择的依据&#xff1f;为什么运动估…

tornado学习笔记day03-响应输出

write: 作用: 将chunk中的数据写到输出缓冲区 利用write方法写json数据 我们自己手动序列化json的那种方式Content-Type 的属性值为text-html而我们采用write自动序列化方式,我们的content-type 属性为application/json set_default_headers(): 作用: 在进入HTTP响应方法…

Machine Learning——octave矩阵操作(2)——DAY3

矩阵的数学操作&#xff1a; Assumed: a为一个矩阵&#xff0c;m是一个向量 Log(a)——求每一个元素的对数 Exp(a)——以e为底的指数 1./a——求每个元素的导师 [a,b]max(m)——m是一个向量&#xff0c;a为m当中最大的元素&#xff0c;b为a在m中的排列序号&#xff08;已按从小…

python 多进程并发_python并发编程之多进程

一 multiprocessing模块介绍python中的多线程无法利用多核优势&#xff0c;如果想要充分地使用多核CPU的资源(os.cpu_count()查看)&#xff0c;在python中大部分情况需要使用多进程。Python提供了multiprocessing。multiprocessing模块用来开启子进程&#xff0c;并在子进程中执…

tornado学习笔记day04-执行顺序

响应输出 -> write 原型 self.write()函数 源码中是这样定义的 def write(self, chunk: Union[str, bytes, dict]) -> None:作用 将chunk数据写到缓冲区 刷新缓冲区的四种方式 程序中断手动刷新缓冲区满了遇到\n 当你写了一个print之后,不是直接就显示在黑屏中断…

字符串中文判断

2019独角兽企业重金招聘Python工程师标准>>> 1、判断字符串是否全是中文或含有中文 <?php header(Content-type:text/html; charsetutf-8); $str 你好; if(preg_match(/^[\x{4e00}-\x{9fa5}]$/u, $str)>0){ echo 全是中文; …

angular使用动态组件后属性值_Angular动态加载组件

引言有时候需要根据URL来渲染不同组件&#xff0c;我所指的是在同一个URL地址中根据参数的变化显示不同的组件&#xff1b;这是利用Angular动态加载组件完成的&#xff0c;同时也会设法让这部分动态组件也支持AOT。动态加载组件下面以一个Step组件为示例&#xff0c;完成一个3个…

分治2--取余运算

分治2--取余运算 一、心得 二、题目和分析 题目描述 输入b&#xff0c;p&#xff0c;k的值&#xff0c;求bp mod k的值。其中b&#xff0c;p&#xff0c;k*k为长整型数。输入 三个整数&#xff0c;分别为b&#xff0c;p&#xff0c;k的值输出 bp mod k样例输入 2 10 9样例输出 …

-mysql-锁机制分为表级锁和行级锁

2019独角兽企业重金招聘Python工程师标准>>> 声明&#xff1a;本栏目所使用的素材都是凯哥学堂VIP学员所写&#xff0c;学员有权匿名&#xff0c;对文章有最终解释权&#xff1b;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 mysql锁机制分为表级锁和行级锁 …

tornado学习笔记day05-访问数据库

模板## 配置模板路径 这个在之前我们已经配置好了,可以参考前面的文章 settings {# 就像upfile就没有,你写了也白扯template_path: os.path.join(BASE_DIR, "templates"), }渲染并返回给客户端 使用render()方法 class HomeIndexHandler(RequestHandler):def ge…

pythonelectron桌面开发案例_使用Electron开发基于Node.js的桌面应用

最近小编在查看分享资料时&#xff0c;发现一个可以开发跨平台桌面应用的框架——NW.js(原名&#xff1a;node-webkit)。正当小编兴致勃勃的研究NW.js的时候&#xff0c;最基础的安装环节出了问题。无论用npm还是cnpm都无法完整下载所依赖的包(具体原因待考察)。鉴于此&#xf…

x264_param_t结构体参数分析

参考网上的一些资料&#xff0c;结合个人的理解&#xff0c;对x264中x264_param_t结构体作了初步的分析&#xff0c;不保证正确。对x264熟悉的朋友可以在这基础上修改添加typedef struct x264_param_t{/* CPU 标志位 */unsigned int cpu;int i_threads; /* 并行编…

知识点总结

1、把一个类转换成一个xml&#xff0c;首先&#xff0c;类名前需要加特性&#xff0c;[DataContract(Namespace "http://CYSoft.Services/AuthorizationObject")]&#xff0c;[XmlRoot("Org")]&#xff0c;里边的名字为根节点的名字&#xff0c;对各个属性…

tornado学习笔记day06-应用安全

应用安全 cookie 普通cookie 一般我们的用户表中都有啥呢 你在购物的时候,加入购物车,让你登录,那你登录之后,他怎么知道你登录了呢 token 这个值是随机的,存在cookie里面 设置 原型: 设置cookie 的方法 def set_cookie(self,name: str,value: Union[str, bytes],domai…

托福试卷真题_干货解答考生疑惑,自考真题考过了还会在出吗?

重视真题&#xff01;重视真题&#xff01;重视真题&#xff01;重要的话要说三遍。想自考的你们一定要注意&#xff0c;对于历年真题&#xff0c;从来都是“备考必做”的态度。做自考真题&#xff0c;除了可以让自己尽快熟悉考试题型和考点外&#xff0c;还有什么好处呢&#…

x264 struct学习 1

x264_t 结构体维护着CODEC的诸多重要信息 其中成员frames是一个指示和控制帧编码过程的结构。其中current是已经准备就绪可以编码的帧&#xff0c;其类型已经确定&#xff1b;next是尚未确定类型的帧&#xff1b;unused用于回收不使用的frame结构体以备今后再次使用。 struct …

2016 ACM/ICPC Asia Regional Dalian Online

自己还是太菜&#xff0c;补题离不开题解。。。 但还是留个博客&#xff0c;万一以后忘了。。。 1001 Different Circle Permutation Polya定理&#xff0c;第一次遇见&#xff0c;学习了一下。不旋转的时候可以得到 f[i]f[i-1]f[i-2] 斐波那契数列&#xff0c;旋转后就可以通过…

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

同步 概念 同步就是按部就班的依次执行我们的代码 进阶 但是有些情况我们有一些比较耗时的从操作,比如去别的地方拿点资源,去其他网站请求数据,去访问数据库,上传文件等等,所以这里面优点瑕疵,有小编一一道来 比如这样 本模块的功能:<同步异步demo># 这个就相等于一个…