Tornado 之路由配置

首先导入模块,使用Application方法中可配置多个路由,格式必须为列表中是元组

元组的第一个是配置的url,第二个参数时自定义的类(继承自RequestHandler)

import tornado
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, parse_config_file, options
from tornado.web import Application, RequestHandler
define('port', type=int, default=8888)
parse_config_file('./config/config')
app = Application([('/', IndexHandler), ('/login', LoginHandler), ....])
server = HTTPServer(app)
server.listen(options.port)
IOLoop.current().start()

其中port为创建的配置文件中的绑定端口号的变量  parse_config_file('./config/config')是找到解析配置文件的位置

通过define来设置port数据类型,当配置文件没有提供端口号时,默认值为default=8888,

IOLoop是开始执行语句,

Tornado 之自定义类

自定义的类中会含有两个方法分别对应form表单提交时的post方法,url请求的get方法、在get和post中可以通过一些方法发送获取前端的值

class LoginHandler(RequestHandler):
def get(self, *args, **kwargs):
pass
def post(self, *args, **kwargs):
# 如果输入的应户名输入的是abc密码是123就正确否则错误
uname = self.get_body_argument('uname', None)
upwd = self.get_body_argument('upwd', None)

Tornado 之 请求行 请求头  请求体的运用

请求体

利用get_body_argument或get_body_arguments可以获得请求体中的参数

.get_body_argument获得的是单独的参数值,get_body_arguments获得的是列表形式的参数值.

另外,两者还有2个明显的区别:
  使用get_body_argument时,最好提供默认值,防止访问时没有提供服务器需要的参数导致的400:bad request.

  使用get_body_arguments时,如果客户端没有提供服务器需要的参数,只会获得一个空列表,不会产生错误.

  如果在请求体中存在重名的参数,get_body_argument仅能取到最后一个设置的参数值,而get_body_arguments可以取到所有的重名的键所对应的值.

class LoginHandler(RequestHandler):
def get(self, *args, **kwargs):
pass
def post(self, *args, **kwargs):
# 如果输入的应户名输入的是abc密码是123就正确否则错误
uname = self.get_body_argument('uname', None)
upwd = self.get_body_argument('upwd', None)
# print(uname, upwd)
unames = self.get_body_arguments('uname')
upwds = self.get_body_arguments('upwd')

请求行

利用get_query_argument或get_query_arguments可以获得以get方式发起请求时携带的参数

.get_query_argument获得的是单独参数值,get_query_arguments获得的是以列表形式组织的参数值.

另外,两者还有2个明显区别:
  使用get_query_argument时,最好提供默认值,防止客户端访问时未提供所需参数导致400:Bad Request错误.

  使用get_query_arguments时,客户端未提供所需参数时,只会获得一个空列表,但不会产生错误.
  当有多个重名的参数提供时,利用get_query_argument仅能获得最后一个参数值,利用get_query_arguments可以获得所有重名参数的参数值.

class IndexHandler(RequestHandler):
def get(self, *args, **kwargs):
html = '<form method=post action=/login enctype=multipart/form-data>' \
'<span>用户名</span><input type=text name=uname><br>' \
'<span>密码</span><input type=password name=upwd><br>' \'</form>'
fail_html = '<form method=post action=/login>''</form>'
# 获取以get方式向根路径发起请求时携带的参数
msg = self.get_query_argument('msg', None)
msgs = self.get_query_arguments('msg')
print(msg)
print(msgs)
if msg:
self.write(fail_html)
else:
self.write(html)
def post(self):
pass

请求头

RequestHandler里面有一个属性,叫做request,引用着一个HttpServerRequest类型的对象,该对象中封装了与请求相关的几乎一切内容.
我们可以利用self.request.headers获取所有请求头.headers是以字典的方式组织请求头中的名和值.

class BlogHandler(RequestHandler):
def get(self, *args, **kwargs):
uname = self.get_query_argument('uname', None)
# 获取自定义请求头的内容
print(self.request)
# 获取所有请求头的相关内容
hs = self.request.headers
print(hs)
print(hs.get('myhead', None))
if uname:
self.write(uname)
else:
self.write('好')
def post(self, *args, **kwargs):

hs 打印结果如下:

HTTPServerRequest(protocol='http', host='127.0.0.1:9999', method='GET', uri='/blog?uname=abc', version='HTTP/1.1', remote_ip='127.0.0.1', headers={'Host': '127.0.0.1:9999', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Referer': 'http://127.0.0.1:9999/', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Accept-Language': 'en-US,en;q=0.5'})

Tornado day1的更多相关文章

  1. Python(九)Tornado web 框架

    一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过 ...

  2. 使用tornado,我们可以做什么?

    以下介绍都是建立在python2.x的基础上面,tornado使用任意版本皆可. 如果我们需要对外提供一个http server(web api)/websocket server时,我们都可以使用t ...

  3. tornado session

    [转]tornado入门 - session cookie 和session 的区别: 1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以 ...

  4. tornado template

    若果使用Tornado进行web开发可能会用到模板功能,页面继承,嵌套... 多页应用模板的处理多半依赖后端(SPA就可以动态加载局部视图),就算是RESTfull的API设计,也不妨碍同时提供部分模 ...

  5. tornado上手

    http://www.tornadoweb.org/en/stable/ http://www.cnblogs.com/fanweibin/p/5418697.html import tornado. ...

  6. tornado+sqlalchemy+celery,数据库连接消耗在哪里

    随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知.     最近老是发现数据库的连接数如果 ...

  7. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  8. centos 6.7 搭建tornado + nginx + supervisor的方法(已经实践)

    首先,本来不想写这篇博客了,但是我测试了很多网上的例子包括简书的,全不行,我总结原因是自己太笨,搞了俩个晚上,后来决定,自己还是写一篇记录下来,保证自己以后使用 环境: centos6.7 64 py ...

  9. tornado中将cookie值设置为json字符串

    不熟悉,找了很久,能FQ的话, https://groups.google.com/forum/#!topic/python-tornado/9Y--NgwjP_w 2楼有解释. tornado.es ...

随机推荐

  1. SpriteBuilder中节点位置类型为百分比时不能定位的解决

    Ball.ccb类型是Node,其中有个子节点为Color Node,其中物理使能. MainScene.ccb中加入一个物理节点,将Ball.ccb拖入其中,成为该物理节点的孩子,这时出现了一个&q ...

  2. (二十四)监听键盘的通知和键盘弹出隐藏的View移动

    让控制器监听键盘的通知,注意谁监听,谁的dealloc方法中就要remove,如果非ARC还要调用父类的dealloc方法. //监听键盘的操作: [[NSNotificationCenter def ...

  3. 《java入门第一季》之面向对象(修饰符的概念和总结)

    还是由于eclipde等ide的强大功能,会自动提示你修饰符是否可行.所以对修饰符的作用了解即可: 修饰符:         权限修饰符:private,默认的,protected,public    ...

  4. 再回首UML之下篇

    接着我们上篇博客再回首UML之上篇说,在类图中有四种关系,关联.依赖.泛化.实现,接下来,我们来看看依赖,依赖--描述的是一种使用关系,她说明一个事物的规格说明的变化可能影响到他使用的另一个事物,反之 ...

  5. 移植Cocos2D到Android平台的原理

    幸运的,SpriteBuilder使得适配(安卓)多种多样的屏幕尺寸变得容易起来,因为Android Xcode插件允许你使用任何Cocos2D的特性并且可以继续使用很多iOS的框架(framewor ...

  6. crontab 任务程序执行乱码的问题

    今天碰到一个坑爹的问题,定时用php程序从远程的mssql读取数据,并写入到mysql中,手动用php执行程序的时候,程序运行没有问题,但当用crontab任务定时执行php程序的时候就出问题了,插入 ...

  7. 01_MUI之Boilerplate中:HTML5示例,动态组件,自定义字体示例,自定义字体示例,图标字体示例

     1安装HBuilder5.0.0,安装后的界面截图如下: 2 按照https://www.muicss.com/docs/v1/css-js/boilerplate-html中的说明,创建上图的 ...

  8. Material Design之CollapsingToolbarLayout使用

    CollapsingToolbarLayout作用是提供了一个可以折叠的Toolbar,它继承至FrameLayout,给它设置layout_scrollFlags,它可以控制包含在Collapsin ...

  9. Android进阶(二十)AndroidAPP开发问题汇总(四)

    · Android进阶(二十)AndroidAPP开发问题汇总(四) android:layout_width和android:width的区别 基中的android:layout_width和and ...

  10. LAV Filter 源代码分析 4: LAV Video (2)

    上一篇文章分析了LAV Filter 中的LAV Video的两个主要的类:CLAVVideo和CDecodeThread.文章:LAV Filter 源代码分析 3: LAV Video (1) 在 ...