tornado之表单和模板
之前在indexHandler中通过self.write()方法在对应的网页中写入具体的字符信息。 如果我们想直接返回一个网页那么这个时候就需要用到模板了
首先在工程目录下新建一个template文件夹。然后在Application中引用该文件夹的地址。template_path参数告诉Tornado在哪里寻找模板文件。下面的代码告诉Python在你Tornado应用文件同目录下的templates文件夹中寻找模板文件。
app = tornado.web.Application(handlers=[(r"/", indexHandler),(r"/show",showHandler)],template_path=os.path.join(os.path.dirname(__file__),"template"),)
然后在template文件下面新建一个index.html文件。内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8http://127.0.0.1:8000/">
<title>tornada测试</title>
</head>
<body>
<p>欢迎来到tornado</p>
</body>
</html>
一旦我们告诉Tornado在哪里找到模板,我们可以使用RequestHandler类的render方法来告诉Tornado读入模板文件,插入其中的模版代码,并返回结果给浏览器
修改indexHandler的get函数。改成return self.render(‘index.html’)
class indexHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
return self.render('index.html')
此时再在浏览器中输入http://127.0.0.1:8000/得到如下的输出

再来看下如何从网页中传递数据到后端。我们首先需要在html中构造传递数据的页面。网页改成如下,在这里需要输入名字,年龄,城市,工作。填完后会自动跳转到/show的页面
<body>
<h1>填入下面的信息</h1>
<form method="post" action="/show">
<p>你的名字<br><input type="text" name="name"></p>
<p>你的城市<br><input type="text" name="city"></p>
<p>你的年龄<br><input type="text" name="age"></p>
<p>你的工作<br><input type="text" name="job"></p>
<input type="submit">
</form>
</body>
输入http://127.0.0.1:8000/后的页面如下,点击提交查询后会显示输入的信息。传递参数的方法是post

对应的增加showHandler的函数,定义post函数使用get_argument获取网页传递的参数,最后通过render函数跳转到/show的界面。并传递获取到的参数
class showHandler(tornado.web.RequestHandler):
def post(self, *args, **kwargs):
name=self.get_argument('name')
age=self.get_argument('age')
city=self.get_argument('city')
job=self.get_argument('job')
self.render('show.html',name=name,age=age,city=city,job=job)
下面再来看下show.html界面,传递的参数通过{{}}方式来引用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>信息展示</title>
</head>
<body>
<h1>你的信息</h1>
<p>你的名字是{{name}}</p>
<p>你的名城市在{{city}}</p>
<p>你的年龄{{age}}</p>
<p>你的工作是{{job}}</p>
</body>
</html>
最终得到的界面如下
接下来看下如果通过引用静态文件来渲染模板。在django章节中我们介绍给在django中引用bootstrap来渲染页面。在tornado中通过也可以引用。
第一步:首先在项目中新建一个static文件夹,并将下载的bootstrap文件放在这个文件夹下面
第二步:在Application添加静态文件的引用路径
tornado.web.Application(handlers=[(r"/", indexHandler),(r"/show",showHandler)],template_path=os.path.join(os.path.dirname(__file__),"template"), static_path=os.path.join(os.path.dirname(__file__),"static"),)
第三步:在show的head中引用bootstrap
<head>
<meta charset="UTF-8">
<title>信息展示</title>
<link href="/static/css/bootstrap.min.css" rel="stylesheet">
<link href="/static/css/bootstrap.css" rel="stylesheet">
<script src="/static/js/bootstrap.min.js"></script>
<script src="/static/js/bootstrap.js"></script>
<script src="/static/js/jquery-3.2.1.min.js"></script>
</head>
此时的页面显示如下

在tornado工程中也可以看到获取bootstrap的打印
[I 171208 10:18:56 web:2063] 200 GET /static/js/bootstrap.min.js (127.0.0.1) 2.66ms
[I 171208 10:18:56 web:2063] 200 GET /static/js/bootstrap.js (127.0.0.1) 2.57ms
[W 171208 10:18:56 web:2063] 200 GET /static/js/jquery-3.2.1.min.js (127.0.0.1) 51.24ms
tornado之表单和模板的更多相关文章
- Python Tornado初学笔记之表单与模板(一)
Tornado中的表单和HTML5中的表单具有相同的用途,同样是用于内容的填写.只是不同的是Tornado中的表单需要传入到后台,然后通过后台进行对模板填充. 模板:是一个允许嵌入Python代码片段 ...
- Angular 2 + 折腾记 :(7) 初步了解表单:模板驱动及数据驱动及脱坑要点
前言 表单在整个系统中的作用相当重要,这里主要扯下响应表单的实现方式. 首先须要操作表单的模块引入这两个模块. import { FormsModule, ReactiveFormsModule } ...
- Angular 表单(二) - 模板驱动表单
import { Component, OnInit } from '@angular/core'; import { Hero} from '../hero'; @Component({ selec ...
- tornado表单和模板
模板渲染,指定模板路径: app = tornado.web.Application( handlers=[(r'/my', Myrequest),('/myweb',MywebRequest)], ...
- Tornado,表单处理,一样在行
哟,处理流程还算自然... import os.path import random import tornado.httpserver import tornado.ioloop import to ...
- Flask之模板web表单
3.3 Web表单: web表单是web应用程序的基本功能. 它是HTML页面中负责数据采集的部件.表单有三个部分组成:表单标签.表单域.表单按钮.表单允许用户输入数据,负责HTML页面数据采集,通过 ...
- DedeCMS提交自定义表单加入验证码功能
织梦dedecms网站给自定义表单加dede模板自带验证码的方法. 有时候,我们因为需要给dede网站的自定义表单添加验证码,防止恶意填写表单提交. 我们可以用以下的方法来实现: 首先,我们要找到 / ...
- Symfony2学习笔记之表单
对于一个Web开发者来说,处理HTML表单是一个最为普通又具挑战的任务.Symfony2集成了一个Form组件,让处理表单变的容易起来.在这一节里,我们将从基础开始创建一个复杂的表单,学习表单类库中最 ...
- ThinkPHP表单令牌验证功能详细介绍
注:TP版本为3.1.3 在ThinkPHP框架下,两次提交同一个表单,比如提交信息后在浏览器点击后退退回上次的页面,重新点击提交按钮,就会提示“表单令牌错误”的信息. ThinkPHP新版内置了表单 ...
随机推荐
- Django迁移数据库
我们已经编写了博客数据库模型的代码,但那还只是 Python 代码而已,Django 还没有把它翻译成数据库语言,因此实际上这些数据库表还没有真正的在数据库中创建 为了让 Django 完成翻译,创建 ...
- Xcode文件名后的字母含义
Xcode文件名后的字母含义 在Xcode中,左侧的dock区域显示项目结构.很多时候,文件名后方会出现一个字母提示,如M.A之类的.这实际是一种提示符号.如果项目中使用SVN.Git等版本控制工 ...
- django使用logging记录日志
django使用logging记录日志,我没有用这方式去记录日志,主要还是项目小的原因吧, 有机会遇见大项目的话可以回头研究. 配置setting.py配置文件 import logging impo ...
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) Minimization dp
原题链接:http://codeforces.com/contest/572/problem/D 题意 给你个数组A和n,k,问你排列A后,下面的最小值是多少. 题解 先排个序,要填充像1,1+k,1 ...
- 配置tomcat启动参数-Dfile.encoding=UTF-8后,IDEA控制台乱码
配置tomcat启动参数-Dfile.encoding=UTF-8后,IDEA控制台出现乱码 解决方法: 在idea的bin目录(如:D:\JetBrains\IntelliJ IDEA 2018.1 ...
- IntelliJ IDEA ,springboot 2.0 +mybatis 创建和访问数据库
环境: JDK8+windows10 步骤 New Module —>Spring Initializr—>next 1 2. 3.web勾选web,sql里面可以不勾,后续添加, ...
- ajax跨域-springboot
package com.xxxx.xx.service.configuration; import org.springframework.context.annotation.Bean; impor ...
- XSY1659 [HNOI2012]永无乡
题面 Description 永无乡包含 n 座岛,编号从 1 到 n. 每座岛都有自己的独一无二的重要度,按照重要度可以将这n座岛排名,名次用 1到n来表示.某些岛之间由巨大的桥连接,通过桥可以从一 ...
- 设置linux编码utf-8
#vim /etc/sysconfig/i18n LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" source / ...
- Oracle8i Internal Services
http://d.hatena.ne.jp/yohei-a/20091017/1255791152 第1回 Oracle8i Internal Services 1人読書会 Oracle 読んだところ ...
