python_way ,day22 tonardo
python_way day22
1、tonardo
2、cookie
3、api认证
一、tonardo:
a、tonardo 初识
#!/usr/bin/env python3
# Created by han on 2016/10/23
import os, sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
import tornado.ioloop
import tornado.web
USER_INFO = [] class MainHadler(tornado.web.RequestHandler):
def get(self):
self.write("hello,word") #相当于django的HTTPResponse class CmdbHander(tornado.web.RequestHandler): #tornado内部使用反射来找到类中对应的方法
def get(self):
# self.write("cmdb")
self.render("index.html") def post(self): #以post方式请求,
user = self.get_argument("user") #获取post请求的信息
pwd = self.get_argument("password")
USER_INFO.append({"u": user, "p": pwd})
self.redirect('/home') #跳转 class HomeHadler(tornado.web.RequestHandler):
def get(self):
self.render("home.html", user_info_list = USER_INFO) #模板渲染 #源码中的反射:
# obj = CmdbHander()
# func = getattr(obj, "get")
# func() #配置模板路径
settings = {
"template_path":"template", #自定义页面放置位置
"static_path": "static", #自定义静态文件放置位置,定义好以后在html页面中写上link标签引入静态文件才能生效
} application = tornado.web.Application([
(r"/main", MainHadler),
], **settings) #只需要在application这里增加setttings这个配置 application.add_handlers("cmdb.old.com",[
(r"/home", HomeHadler),
]) application.add_handlers("cmdb.old.com",[
(r"/main", CmdbHander),
]) if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
1、从请求头中获取请求方式:
2、html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>
hello HOME
</h1>
<ul>
<!--模板语言-->
{% for item in user_info_list %}
<li>
{{item['u']}}
</li>
<li>
{{ item.get("p","default")}}
</li>
{% end %} <!--注意end结尾,不再是endfor了-->
</ul>
</body>
</html>
b、文件的归类
写到这里我们可以发现,把路由系统,处理的类,和一些设置都放到一个文件中肯定很乱。所以我们能否想django一样每个功能都分开放哪?答案肯定是能的
1、先创建一个目录叫contorller(随便怎么叫都可以),并且创建一个home.py的文件
2、在最开始的class文件中把这个文件倒入进来
c、路由系统:
一个url可以处理多个动作,比如get post delete put每个都有不同的作用
这种处理请求就是resutful,面向资源编程。
1、tornado WEB框架原生支持resutful
class CmdbHander(tornado.web.RequestHandler): #tornado内部使用反射来找到类中对应的方法
#resutful变向资源编程,一个url通过不同的请求分配到不同的方法
def get(self): #以get方式请求 Django的方式是需要使用request.method == "POST"来判断
# self.write("cmdb")
self.render("index.html") def post(self): #以post方式请求,
user = self.get_argument("user") #获取post请求的信息
pwd = self.get_argument("password")
USER_INFO.append({"u": user, "p": pwd})
self.redirect('/home') #跳转
2、tornado原生支持二级域名
application = tornado.web.Application([
(r"/main", home.MainHadler),
], **settings) application.add_handlers("cmdb.old.com",[ #add_handlers中第一个参数就是对应的二级域名,第二个参数一个列表,中间的元组就是url对应的了类
(r"/home", home.HomeHadler),
]) application.add_handlers("cmdb.old.com",[ #也可以添加多个
(r"/main", home.CmdbHander),
])
lass MainHadler(tornado.web.RequestHandler):
def get(self):
self.write("hello,word") #相当于django的HTTPResponse class CmdbHander(tornado.web.RequestHandler): #tornado内部使用反射来找到类中对应的方法
#resutful变向资源编程,一个url通过不同的请求分配到不同的方法
def get(self):
# self.write("cmdb")
self.render("index.html") def post(self): #以post方式请求,
user = self.get_argument("user") #获取post请求的信息
pwd = self.get_argument("password")
USER_INFO.append({"u": user, "p": pwd})
self.redirect('/home') #跳转 class HomeHadler(tornado.web.RequestHandler):
def get(self):
self.render("home.html", user_info_list = USER_INFO) #模板渲染
对应的类
3、tornado 前段模板
class CmdbHander(tornado.web.RequestHandler):
def get(self):
a = [11, 22, 33, 44]
self.render("index.html", li = a) #把列表传到前面
<div>
{% for i in range(len(li))%}
<P>{{ li[i] }}</P> #和python的语法一样,可以使用【】来获取。
{% end %}
<hr>
{% for i in li %}
<P>{{ i }}</P>
{% break %} #跳出循环支持python语法中的break
{% end %}
</div>
母板:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>老男孩</title>
<link href="{{static_url("css/common.css")}}" rel="stylesheet" />
{% block CSS %}{% end %}
</head>
<body> <div class="pg-header"> </div> {% block RenderBody %}{% end %} <script src="{{static_url("js/jquery-1.8.2.min.js")}}"></script> {% block JavaScript %}{% end %}
</body>
</html>
layout.html (母板)
{% extends 'layout.html'%}
{% block CSS %}
<link href="{{static_url("css/index.css")}}" rel="stylesheet" />
{% end %} {% block RenderBody %}
<h1>Index</h1> <ul>
{% for item in li %}
<li>{{item}}</li>
{% end %}
</ul> {% end %} {% block JavaScript %} {% end %}
index.html (子板)
在模板中执行自定义方法:
<div>
{{ kakaka() }} #执行 ui_methods
{% module custom1() %} #执行 ui_modules
</div>
def kakaka(self, arg):
return int(arg) + 12
methods
class custom1(UIModule):
def render(self, *args, **kwargs):
return "<h1>CCCC</h1>" #返回h1标签 def javascript_files(self):
return ["http://adsfasdfasdf.js", "/static/myjs.js"] #引用javascrip def css_files(self):
return ["/static/mycss.css", ] #引用css def embedded_css(self):
return "#form { background-color: aqua; }" #执行一个css def embedded_javascript(self):
return "function f1() {alert('js哈哈哈');} f1();" #执行一个javacript
modules
2、cookie认证
cookie加密,
使用用户名,时间戳,以及api的kay做md5加密,
然后再把value,time与加密的字符串一起传给客户端,以后就验证这个,但是还是能被其他用户看到并且盗用呀!
3、jsonp
img,iframe ,scritp,link 都不会被同源策略所束缚
也就是说标签具有src 属性,同源策略不生效
利用不被同源策略舒服的标签发送ajax请求
<body>
<input type="botton" onclick="Ajax3()" value="ajax请求" >
</body>
function Ajax3() {
var tag = document.createElemnt('scritp');
tag.src = "www.baidu.com";
document.head.appendChild(tag)
}
python_way ,day22 tonardo的更多相关文章
- python_way ,day22 tonardo,jsonp
python_way day22 1.tonardo 2.cookie 3.api认证 一.tonardo: a.tonardo 初识 #!/usr/bin/env python3# Created ...
- python_way ,day23 API
python_way ,day23 1.api认证 .api加密动态请求 2.自定义session 一.api认证 首先提供api的公司,如支付宝,微信,都会给你一个用户id,然后还会让你下一个SD ...
- python_way ,自定义session
python_way ,自定义session container = {} #可以是数据库,可以是缓存也可以是文件 class Session: def __init__(self, handler) ...
- python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,
python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...
- python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法
python_way day18 html-day4 1.Django-路由系统 - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...
- python_way day17 html-day3 前端插件(fontawsome,easyui,bootstrap,jqueryui,bxslider,jquerylazyload),web框架
python_way day17 一.模板插件 图标的插件 fontawsome: 后台管理: easyui jqueryui 很多网站都会用: bootstrap :引入jQuery:(2.x,1. ...
- python_way day17 jQuery表单验证,事件绑定,插件,文本框架,正则表达式
python_way day17 1.jQuery表单验证 dom事件绑定 jquery事件绑定 $.each return值的判断 jquery扩展方法 2.前段插件 3.jDango文本框架 4. ...
- python_way day16 JQuary
python_way day16 JQuery 封装dom js代码 jQuery(1.10,1.12-兼容性好,2.0.以后放弃了ie9以下) - 封装了Dom & JavaScript 查 ...
- python_way day16 DOM
Python_way day16 1.Dom (找到html中的标签) 一.DOM 1.查找元素 直接查找 document.getElementById 根据ID获取一个标签 --->这里是 ...
随机推荐
- sql多表查询(out join,inner join, left join, right join)
left join以左表为基准显示所有左表的信息,在on中有符合条件的其他表也显示出来 right join则相反 inner join的只显示on中符合条件的 1 使用多个表格 在「world」资料 ...
- 如何清除DNS缓存,使用cmd命令清理DNS缓存方法
如何清除DNS缓存,使用cmd命令清理DNS缓存方法 有时候电脑突然上不了网,或者存在某些网站打不开的情况,但别的网站又可以打开,解决办法需要清除DNS缓存,那么如何清除DNS缓存呢,最常用的方法就是 ...
- hashcode与equals
归纳一下就是hashCode是用于查找使用的,而equals是用于比较两个对象的是否相等的.以下这段话是从别人帖子回复拷贝过来的: .hashcode是用来查找的,如果你学过数据结构就应该知道,在查找 ...
- 【转】身份证号码校验与信息提取 - Java 代码
转载地址:http://www.w3china.org/blog/more.asp?name=lhwork&id=19148 import java.util.regex.*; /** ...
- Python学习笔记-Day2-Python基础之字符串操作
字符串的常用操作包括但不限于以下操作: 字符串的替换.删除.截取.复制.连接.比较.查找.分割等 这里将对字符串的内置操作方法进行总结归纳,重点是以示例的方式进行展示. 使用type获取创建对象的类 ...
- SharePoint自动化系列——Site/Web/List级别的导航菜单
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 需求:在不同的测试用例中,对脚本中不确定的因素需要和用户交互来确定,比如选择哪个site,选择哪个 ...
- 局域网无法访问vmware虚拟机WEB服务器解决办法
环境:虚拟机服务器是centos,apache+php+mysql环境,但是局域网无法访问 1.本机能ping通虚拟机 2.虚拟机也能ping通本机 3.虚拟机能访问自己的web 4.本机无法访问虚拟 ...
- Linux crond定时任务
第1章 Crond是什么? Crond是linux系统用来定期执行命令或指定程序任务的一种服务或软件.一般情况下,我们安装完Centos5/6linux操作系统之后,默认便会启动Crond任务调度服务 ...
- Android中的sharedUserId属性详解
在Android里面每个app都有一个唯一的linux user ID,则这样权限就被设置成该应用程序的文件只对该用户可见,只对该应用程序自身可见,而我们可以使他们对其他的应用程序可见,这会使我们用到 ...
- Mysql-学习笔记(==》约束 六)
-- 建立表的相关约束主键约束 PRIMARY KEY (主键自带索引 PK 关系数据库领域,要求一个表只有一个主键)CREATE TABLE t1( tid INT UNSIGNED NOT NUL ...