python_way ,day22 tonardo,jsonp
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,jsonp的更多相关文章
- python_way ,day22 tonardo
python_way day22 1.tonardo 2.cookie 3.api认证 一.tonardo: a.tonardo 初识 #!/usr/bin/env python3# Created ...
- json和jsonp(json是目的,jsonp是手段)
自己理解:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议.我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的" ...
- python_way day12 sqlalchemy,原生mysql命令
python_way day12 sqlalchemy,mysql原生命令 1.sqlalchemy 2.mysql 原生命令 一,sqlalchemy SQLAlchemy本身无法操作数据库,其必 ...
- python_way ,day2 字符串,列表,字典,时间模块
python_way ,day2 字符串,列表,字典,自学时间模块 1.input: 2.0 3.0 区别 2.0中 如果要要用户交互输入字符串: name=raw_input() 如果 name=i ...
- json与jsonp区别浅析(json才是目的,jsonp只是手段)
一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...
- json与jsonp区别浅析(json才是目的,jsonp只是手段) (转)
一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...
- 《JavaScript》高级程序设计第21章:Ajax和Comet,jsonp
一.创建XMLHttpRequest对象 二.XHR的用法 五.跨域资源共享 六.其他跨域技术七.安全七.安全 1. 图像Ping 2. JSONP(JSON with padding,填充式JSON ...
- 【转】json与jsonp区别浅析(json才是目的,jsonp只是手段)
一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...
- 框架----Django之Ajax全套实例(原生AJAX,jQuery Ajax,“伪”AJAX,JSONP,CORS)
一.原生AJAX,jQuery Ajax,“伪”AJAX,JSONP 1. 浏览器访问 http://127.0.0.1:8000/index/ http://127.0.0.1:8000/fake_ ...
随机推荐
- Hive HiveQL基础知识及常用语句总结
基础语句 CREATE DROP 建表.删表 建表 -------------------------------------- -- 1. 直接建表 ------------------------ ...
- Objective-C UIWebview JS 交互
一.在OC中调用网页中的 js 方法. Objective-C 代码 [self.webView stringByEvaluatingJavaScriptFromString:@"alert ...
- HTML-参考手册: 功能排序
ylbtech-HTML-参考手册: 功能排序 1.返回顶部 1. 功能排序 New : HTML5 新标签 标签 描述 基础 <!DOCTYPE> 定义文档类型. <html ...
- MySQL高级学习笔记(五):查询截取分析
文章目录 慢查询日志 是什么 怎么玩 说明 查看是否开启及如何开启 默认 开启 那么开启了慢查询日志后,什么样的SQL才会记录到慢查询日志里面呢? Case 配置版 日志分析工具mysqldumpsl ...
- Windows操作系统架构
用户态 用户态有四类组件,这四类组件都是以进程形式存在的,也就是说,它们都有自己的进程地址空间(其实就是一套页表). 1. System Support Processes 这些是固化的进程,也就是说 ...
- 百度之星资格赛2018B题-子串查询
子串查询 题目 度度熊的字符串课堂开始了!要以像度度熊一样的天才为目标,努力奋斗哦! 为了检验你是否具备不听课的资质,度度熊准备了一个只包含大写英文字母的字符串 A[1,n]=a1a2⋯an,接下来他 ...
- 力扣算法——136SingleNumber【E】
Given a non-empty array of integers, every element appears twice except for one. Find that single on ...
- CG-CTF misc部分wp
将Misc剥离出来了,已完结(coding gay不想做了) MISC1,图种一听图种,现将图片的GIF改为zip,然后解压得到另一张动图看动图最后一句话为‘都深深的出卖了我’,得到 flag2, 丘 ...
- windows server 2016 支持多用户远程登录
服务器设置多用户同时远程桌面,可以提高访问效率,避免人多抢登服务器. 1. 首先需要先安装远程桌面服务 配置组策略,运行框输入gpedit.msc,打开计算机配置–>管理模板—>wind ...
- Docker 初识之路
一. 安装配置 1.安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2.设置阿里云镜像源 sudo yu ...