python学习:python网络框架Tornado(1):安装和使用
Python的Web框架Tornado
Tornado安装
Tornado安装命令:pip3 install tornado

安装过程出现错误,升级pip

根据提示执行命令:python –m pip install –upgrade pip
我们这里因为同时安装python2.7和python3.7,所以将python.exe修改成了python2和python3。所以需要将python替换成对应名字执行。

再次执行安装tornado命令。

Tornado的’hello world’
在GitHub上可以找到Tornado源码。
网址:https://github.com/tornadoweb/tornado
可以拷贝其中hello world示例:
import tornado.ioloop
import tornado.web
#相当于CBV中视图类
class MainHandler(tornado.web.RequestHandler):
#get方法,处理get请求
def get(self):
#返回信息,相当于HttpResponse
self.write("Hello, world")
#url系统
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
#app对象
app = make_app()
#监听链接端口
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
运行hello.py,直接浏览器访问localhost:8888/就可以看到hello world页面。

Tornado配置静态路径,模板路径
配置静态文件路径,配置模板路径等,这里创建了静态文件夹static和模板文件夹templates。
import tornado.ioloop import tornado.web #相当于CBV中视图类 class MainHandler(tornado.web.RequestHandler): #get方法,处理get请求 def get(self): #返回信息,相当于HttpResponse self.write("Hello, world") #使用render("模板页面") class LoginHandler(tornado.web.RequestHandler): #get方法,处理get请求 def get(self): #默认查找当前目录,其他目录需要配置文件 self.render("login.html") #post方法,接收post数据 def post(self): #获取数据 user = self.get_argument("user") pwd = self.get_argument("pwd") print(user,pwd) #配置文件,将配置文件在url中引用 settings = { #配置模板路径 "template_path":"templates", #配置静态文件路径 "static_path":"statics", #配置静态路径别名 "static_url_prefix":"/static/" } #url系统 #tornado.web.Application(路由列表,配置文件) def make_app(): return tornado.web.Application([ (r"/", MainHandler), (r"/login",LoginHandler), ],**settings) if __name__ == "__main__": #app对象 app = make_app() #监听链接端口 app.listen(8888) tornado.ioloop.IOLoop.current().start()
其中login.html代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登陆页面</title> </head> <body> <form action="/login" method="post"> <p><input type="text" name="user"></p> <p><input type="password" name="pwd"></p> <p><input type="submit" value="提交"></p> </form> <!--静态文件--> <img src="/static/back3.jpg"> </body> </html>
Tornado页面跳转
使用self.render(“模板页面”,参数字典)方法,返回一个页面;
使用self.redirect(“页面url”)方法,复位向到新的url页面;
示例:
self.render("login.html")
self.render("login.html",msg="hello")
key_dict = {"name":"","age":""}
self.render("login.html",**key_dict)
self.redirect("www.baidu.com")
self.redirect("/login")
Tornado的Cookie
使用self.set_cookie(“键”,”值”),设置cookie;
使用self.get_cookie(“键”),获取cookie;
示例:
#设置cookie
self.set_cookie("is_login","true")
class HomeHandler(tornado.web.RequestHandler):
#get方法,处理get请求
def get(self):
#获取cookie判断
if self.get_cookie("is_login") == "true":
#返回信息,相当于HttpResponse
self.write("欢迎登陆")
else:
self.redirect("/login")
设置加密的cookie,使用set_secure_cookie(“键”,”值”)
获取加密的cookie,使用get_secure_cookie(“键”)
使用加密cookie,需要配置文件配置:"cookie_secret":"xxxx",
示例:
#配置文件,将配置文件在url中引用
settings = {
#配置模板路径
"template_path":"templates",
#配置静态文件路径
"static_path":"statics",
#配置静态路径别名
"static_url_prefix":"/static/",
#配置cookie加密
"cookie_secret":"abscksjfi",
}
示例:
#设置加密cookie
self.set_secure_cookie("is_login","true")
#获取加密cookie
self.get_secure_cookie("is_login")
Tornado的Handler
Tornado的视图函数,定义为handler,处理页面请求。
定义处理类,继承tonado.web.RequestHandler
class XXX(tornado.web.RequestHandler):
#get请求处理方法
def get(self):
#处理逻辑
#post请求处理方法
def post(self):
#处理逻辑
示例:
class LoginHandler(tornado.web.RequestHandler):
#get方法,处理get请求
def get(self):
#默认查找当前目录,其他目录需要配置文件
self.render("login.html",msg="hello")
key_dict = {"name":"","age":""}
self.render("login.html",**key_dict)
#post方法,接收post数据
def post(self):
#获取数据
user = self.get_argument("user")
pwd = self.get_argument("pwd")
print(user,pwd)
self.redirect("www.baidu.com")
self.redirect("/login")
Tornado获取请求信息
使用self.request.files[“键”],获取页面提交文件内容;
使用self._headers,获取请求头;
使用self.get_cookies,获取cookie;
使用self.get_arguments(),获取所有请求参数;
使用self.get_argument(),获取请求参数;
使用self.method,请求方式;
使用self.url,请求的url;
使用self.body,请求体;
使用self.version,请求version;
self.request对象,其实是tornado.httputil import HTTPServerRequest的实例化对象。
Tornado的模板
Tornado的模板和Django的模板语言类似,Tornado的for循环不同。
语法:
{% for i in range(10)%}
{{i}}
{% end %}
直接就是end结束。
UIMETHOD,自定制方法。
示例:
创建一个uimethod文件夹,创建UIMethod.py文件,
UIMethod.py内容:
#自定义tab方法
def tab(self):
return "UImethod"
在setting中配置ui_methods
示例:
导包:
from uimethod import UIMethod
在setting中配置:
#配置ui_methods
"ui_methods":UIMethod,
在html模板中使用:
示例:
{{tab()}}
可以直接使用()传参数。
UIMODULE,自定义模块。
UIMODULE可以添加js、css和文档内容等
示例:
创建uimodule文件夹,创建UIModule.py文件。
UIModule.py内容:
from tornado.web import UIModule
#定义一个类,继承UIModule
class Mymodule(UIModule):
#重新render方法
def render(self, *args, **kwargs):
return "UImodule"
setting中注册我们编写的module:
导包:
from uimodule import UIModule
Setting配置:
#配置ui_modules
"ui_modules":UIModule,
UIMethod和UIModule比较:
UIMethod,UIModule返回一个字符串,例如:返回一个<a>标签的字符串,UIMethod会自动转义,UIModule不会自动转义;
UIMethod会自动将字符串转义,如果我们再使用escape转换就会直接输出标签字符串,我们可以通过配置setting,将自动转义关闭。
UIModule不会自动将字符串转义,返回原样输出。
转义过程有两个:UIMethod在tornado内部自动转义,然后浏览器再次转义后,输出是字符串;
UIModule在tornado内部不会自动转义,然后浏览器在转义时,就根据字符串转换成html标签元素;
示例:
setting中关闭自动转义
#将自动转义关闭
"autoescape":None,
示例:
from tornado import escape
#自定义tab方法
def tab(self):
#返回字符串,method在tornado会自动转义
#使用 {{ tab() }} ,本来转义了,浏览器再次转义,显示<a href='http://www.baidu.com'>百度一下</a>字符串,
#使用 {% raw tab() %},正常显示a链接,raw表示原样显示,浏览器不需要转义,只转义一次
return "<a href='http://www.baidu.com'>百度一下</a>"
#使用escape.xhtml.escape(),模拟method在tornado中自动转义,再转义一次
# return escape.xhtml_escape("<a href='http://www.baidu.com'>百度一下</a>")
html页面调用method
<!--uimethod调用-->
{{ tab() }}
{% raw tab() %}
<!--uimodule调用-->
{% module Mymodule() %}
UIModule可以插入css,js代码或css,js的文件:
示例:
from tornado.web import UIModule
#定义一个类,继承UIModule
class Mymodule(UIModule):
#插入css代码
def embedded_css(self):
return "h2{display:none}"
#插入css文件,查找statics静态文件夹中test.css
def css_files(self):
return "test.css"
#插入js文件,会自动去statics配置的静态文件夹中查找test.js
def javascript_files(self):
return "test.js";
#插入js代码
def embedded_javascript(self):
return "function hello(){alert('hello')}"
#重新render方法
def render(self, *args, **kwargs):
return "<h2>UImodule<h2>"
本文来自博客园,作者:渔歌晚唱,转载请注明原文链接:https://www.cnblogs.com/tangToms/articles/14174564.html

浙公网安备 33010602011771号