PythonWeb框架:Tornado

更新时间:2023-04-25 22:54:45 阅读: 评论:0


2023年4月25日发(作者:股票计算)

PythonWeb框架:Tornado

Tornado:Tornado web rver

官⽅⽂档

中⽂⽂档

Tornado概览

浅谈Python Web 框架:Django, Twisted, Tornado, Flask, Cyclone 和 Pyramid

Tornado⼊门

o

Tornado:python编写的web服务器兼web应⽤框架

o的优势

轻量级web框架

异步⾮阻塞IO处理⽅式

出⾊的抗负载能⼒

优异的处理性能,不依赖多进程/多线程,⼀定程度上解决C10K问题

WSGI全栈替代产品,推荐同时使⽤其web框架和HTTP服务器

o VS Django

Django:重量级web框架,功能⼤⽽全,注重⾼效开发

内置管理后台

内置封装完善的ORM操作

ssion功能

后台管理

缺陷:⾼耦合

Tornado:轻量级web框架,功能少⽽精,注重性能优越

HTTP服务器

异步编程

WebSocket

缺陷:⼊门门槛较⾼

2.安装

输⼊命令:

pip install tornado

备注:

Tornado应该运⾏在类Unix平台,为了达到最佳的性能和扩展性,仅推荐Linux和BSD(充分利⽤Linux的epoll⼯具和BSD的kqueue达到⾼性能

处理的⽬的)

3.使⽤

o⼊门程序 - (⼀)

#-*- coding:utf-8 -*-

import

import

#定义处理类型

class IndexHandler(tHandler):

#添加⼀个处理get请求⽅式的⽅法

def get(lf):

#向响应中,添加数据

('好看的⽪囊千篇⼀律,有趣的灵魂万⾥挑⼀。')

if __name__ == '__main__':

#创建⼀个应⽤对象

app = ation([(r'/',IndexHandler)])

#绑定⼀个监听端⼝

(8888)

#启动web程序,开始监听端⼝的连接

t().start()

1 .在pycharm中直接运⾏代码

2 .如果是在ub沙姜鸡脚 untu,在命令窗⼝输⼊

python ⽂件名.py

使⽤浏览器访问

o 代码解析

1.⼊门程序代码解析

:tornado的基础web框架

RequestHandler

:封装对请求处理的所有信息和处理⽅法

get/post/..

:封装对应的请求⽅式

write()

:封装响应信息,写响应信息的⼀个⽅法

:核⼼io循环模块,封装linux的epoll和BSD的kqueue, tornado⾼性能处理的核⼼。

current()

返回当前线程的IOLoop实例对象

start()

启动IOLoop实⼒对象的IO循环,开启监听

rver底层处理

httprver监听端⼝

rver(app)

(port)

httprver实现多进程操作

rver(app)

(port)

(0/None/<0/num)

# -*- coding:utf-8 -*-

from import Application,RequestHandler

from import IOLoop

from rver import HTTPServer

class IndexHandler(RequestHandler):

def get(lf):

('给⾃⼰⼀点时间,理清所有的荒唐与期望。')

if __name__ == '__main__':

app = Application([(r'/',IndexHandler)])

http_rver = HTTPServer(app)

#最原始的⽅式

http_(8888)

http_(0)

#启动Ioloop轮循监听

t().start()

同时打开两个窗⼝测试发现实现了多进程

s配置

全局配置

(

name, default, type, multiple, help

)

命令⾏参数转换

_command_line()

#-*- coding:utf-8 -*-

from import RequestHandler,Application

from import IOLoop

from rver import HTTPServer

import s

#定义变量

('port',default=8000,type=int,help="this is the port >for application")

class IndexHandler(RequestHandler):

def get(lf):

('我们既然改变不了规则,那就做到最好')

if __name__ == '__main__':

app = Application([(r'/',IndexHandler)])

_command_line()

http_rver = HTTPServer(app)

http_()

http_(1)

#启动IOLoop轮循监听

t().start()

通过命令窗⼝输⼊port来访问

通过使⽤我们命令窗⼝设定的port进⾏访问

配置⽂件

#即在当前py⽂件⽬录创建config⽂件,并在py代码中加⼊以下代码,

_config_file("./config")

配置模块:跟配置⽂件类似

ation配置

程序调试之debug配置

#⾃动重启+取消缓存模板+取消缓存静态⽂件+提供追踪信息

ation([(..)], debug=True)

注:开发之初可以设置debug=True⽅便调试,开发完毕改为Fal.

路由信息初始化参数配置

ation([(r””, Handler, {k:v})])

def initialize(lf, k)

#-*- coding:utf-8 -*-

from import RequestHandler,Application

from import IOLoop

from rver import HTTPServer

from s import define,options

define('port',default=8000,type=int)

class IndexHandler(RequestHandler):

def get(lf):

('get-->先⾃沉稳,⽽后爱⼈')

class ArticleHandler(RequestHandler):

def initialize(lf,title):

print('-->initialize()')

= title

def get(lf):

('你正在查看⽂章:%s'% )

if __name__ == '__main__':

_command_line()

app = Application([(r'/',IndexHandler),(r'/article',ArticleHandler,{'title':'>希望⾃⼰成为什么样的⼈,最终就会成为那样的⼈。'})],debug=True)

http_rver = HTTPServer(app)

http_()

http_(1)

t().start()

输⼊路径,显⽰结果

路由名称设置及反解析

#名称设置

ation([

url(r””, handler, {k,v}, name=“”)

])

#反解析操作

rever_url创业计划书格式 (name)

# -*- coding:utf-8 -*-

from import Application, RequestHandler, url

from import IOLoop

from rver import HTTPServer

from s import options,define

de和春节有关的画 fine("port", default=8000, type=int)

class IndexHandler(RequestHandler):

def get(lf):

("⽤户登录")

class RegistHandler(RequestHandler):

def initialize(lf, title):

= title

def get(lf):

("注册业务处理:" + str())

class LoginHandler(RequestHandler):

def get(lf):

("⽤户登录页⾯展⽰")

def post(lf):

("⽤户登录功能处理")

if __name__ == "__main__":

app = Application(

[

(r"/", IndexHandler),

(r"/regist", RegistHandler, {"title": "会员注册"}),

url(r"/login", LoginHandler, name="login"),

]

)

http_rver = HTTPServer(app)

http_(8000)

t().start()

浏览器显⽰结果

5.参数传递

get⽅式传递参数

get_query_arguments(name,default=_ARG_DEFAULT,strip=True)

get_query_argu千岛湖是哪里 ment(name ,strip=True)

# -*- coding:utf-8 -*-

from import Application, RequestHandler

from import IOLoop

from rver import HTTPServer

from s import options, define

define("port", default=8000, type=int)

class IndexHandler(RequestHandler):

def get(lf):

# 获取get⽅式传递的参数

urname = _query_argument("urname")

urnames = _query_arguments("urname")

print (urname)

print (urnames)

if __name__ == "__mai万象更新拼音 n__":

app = Applicat紫檀功效 ion([(r"/", IndexHandler)])

(8000)

t().start()

post⽅式传递参数

get_body_arguments(name, default=_ARG_DEFAULT,strip=True)

get_body_argument(name ,strip=True)

混合⽅式

get_arguments(..)/get_argument(..)

# -*- coding:utf-8 -*-

from import Application, RequestHandler

from import IOLoop

from s import options, define

define("port", default=8000, type=int)

class IndexHandler(RequestHandler):

def get(lf):

# 获取get⽅式的参数

ur = _argument("ur")

print("get⽅式获取参数:" + str(ur))

def post(lf):

# 获取post⽅式的参数

ur = _argument译的组词 ("ur")

print("post⽅式获取参数:" + ("utf-8"))

if __name__ == "__main__":

app = Application([(r"/", IndexHandler)])

(8888)

t().start()

使⽤⾕歌浏览器的应⽤postman可以看到get和post请求

其他参数

通过request获取参数数据

method/host/uri/path/query/version/headers/body/remote_ip/files

6.响应头设置

t_header(name, value)

t_default_headers(lf)

add_header(name, value)

clear_header(name)

# -*- coding:utf-8 -*-

from import Application, RequestHandler

from import IOLoop

from s import options,汇报材料模板 define

define("port", default=8000, type=int)

class IndexHandler(RequestHandler):

def t_default_headers(lf):

# 第⼆种响应头设置⽅式

print("---------> 响应头t_default_headers()执⾏")

_header("Content-type", "application/json; chart=utf-8")

_header("js", "zj")

def get(lf):

# 第⼀种操作响应头的⽅式:

# _header("Content-type", "application/json")

print("---------->get⽅法执⾏")

("{'简书':'知⼏'}")

_header("jianshu", "zhiji")

if __name__ == "__main__":

app =依据英语 Application([(r"/", IndexHandler)])

(8000)

t().start()

浏览器显⽰结果

操作

cooki革命乐观主义精神 es

t/get_cookie(name, value)

t/get_cure_cookie(name, value)

clear_cookie(name)

clear_all_cookie()

# -*- coding:utf-8 -*-

from import Application, RequestHandler

from import IOLoop

from s import options, define

define("port", default=8000, type=int)

class IndexHandler(RequestHandler):

def get(lf):

("hello ")

_cookie("loginur", "admin")

print _cookie("loginur")

print s

if __name__ == "__main__":

app = Application([(r"/", IndexHandler)])

(8000)

t().start()

可以看到cookie已⽣效

8.响应错误码 & 错误描述

t_status(status_code, reason=None)

# -*- coding:utf-8 -*-

from import Application, RequestHandler

from import IOLoop

from s import options, define

define("port", default=8000, type=int)

class IndexHandler(RequestHandler):

def get(lf):

("hello 简书")

# _status(404) # 标准错误码 ⽆描述使⽤默认描述

_status(201, reason="zhiji is cool") # ⾃定义错误码,设置reason描述

# _status(230) # ⾃定义错误码,⽆reason 报错

if __name__ == "__main__":

app = Application([(r"/", IndexHandler)])

(8000)

t().start()

通过审查元素我们可以测试定义的错误码有没有⽣效

nd_error(status_code, reason=None)

# -*- coding:utf-8 -*-

from import Application, RequestHandler

from import IOLoop

from s import options, define

define("port", default=8000, type=int)

class IndexHandler(RequestHandler):

def get(lf):

("hello ")

_error(500, reason="出错啦出错啦")

if __name__ == "__main__":

app = Application([(r"/", IndexHandler)])

(8000)

t().start()

浏览器显⽰结果

write_error(lf, status_code, **kw)

# -*- coding:utf-8 -*-

from import Application, RequestHandler

from import IOLoop

from s import options, define

define("port", default=8000, type=int)

class IndexHandler(RequestHandler):

def get(lf):

("hello ")

_error(404, msg="页⾯丢失", info="家⾥服务器搞对象去了")

def write_error(lf, status_code, **kwargs):

("

出错啦,⼯程师MM正在赶来的途中...

")

("

错误信息:%s

" % kwargs["msg"])

("

错误描述:%s

" % kwargs["info"])

if __name__ == "__main__":

app = Application([(r"/", IndexHandler)])

(8000)

t().start()

浏览器显⽰结果


本文发布于:2023-04-25 22:54:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/848096.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:tornado
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图