python_way day22

1、tonardo

2、cookie

3、api认证


一、tonardo:

a、tonardo 初识

  1. #!/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 = []
  2.  
  3. class MainHadler(tornado.web.RequestHandler):
    def get(self):
    self.write("hello,word") #相当于django的HTTPResponse
  4.  
  5. class CmdbHander(tornado.web.RequestHandler): #tornado内部使用反射来找到类中对应的方法
    def get(self):
    # self.write("cmdb")
    self.render("index.html")
  6.  
  7. 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') #跳转
  8.  
  9. class HomeHadler(tornado.web.RequestHandler):
    def get(self):
    self.render("home.html", user_info_list = USER_INFO) #模板渲染
  10.  
  11. #源码中的反射:
    # obj = CmdbHander()
    # func = getattr(obj, "get")
    # func()
  12.  
  13. #配置模板路径
    settings = {
    "template_path":"template", #自定义页面放置位置
    "static_path": "static", #自定义静态文件放置位置,定义好以后在html页面中写上link标签引入静态文件才能生效
    }
  14.  
  15. application = tornado.web.Application([
    (r"/main", MainHadler),
    ], **settings) #只需要在application这里增加setttings这个配置
  16.  
  17. application.add_handlers("cmdb.old.com",[
    (r"/home", HomeHadler),
    ])
  18.  
  19. application.add_handlers("cmdb.old.com",[
    (r"/main", CmdbHander),
    ])
  20.  
  21. if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

1、从请求头中获取请求方式:

 

2、html

  1. <!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

  1. class CmdbHander(tornado.web.RequestHandler): #tornado内部使用反射来找到类中对应的方法
  2. #resutful变向资源编程,一个url通过不同的请求分配到不同的方法
  3. def get(self): #以get方式请求 Django的方式是需要使用request.method == "POST"来判断
  4. # self.write("cmdb")
  5. self.render("index.html")
  6.  
  7. def post(self): #以post方式请求,
  8. user = self.get_argument("user") #获取post请求的信息
  9. pwd = self.get_argument("password")
  10. USER_INFO.append({"u": user, "p": pwd})
  11. self.redirect('/home') #跳转

  

2、tornado原生支持二级域名

  1. application = tornado.web.Application([
  2. (r"/main", home.MainHadler),
  3. ], **settings)
  4.  
  5. application.add_handlers("cmdb.old.com",[ #add_handlers中第一个参数就是对应的二级域名,第二个参数一个列表,中间的元组就是url对应的了类
  6. (r"/home", home.HomeHadler),
  7. ])
  8.  
  9. application.add_handlers("cmdb.old.com",[   #也可以添加多个
  10. (r"/main", home.CmdbHander),
  11. ])
  1. lass MainHadler(tornado.web.RequestHandler):
  2. def get(self):
  3. self.write("hello,word") #相当于django的HTTPResponse
  4.  
  5. class CmdbHander(tornado.web.RequestHandler): #tornado内部使用反射来找到类中对应的方法
  6. #resutful变向资源编程,一个url通过不同的请求分配到不同的方法
  7. def get(self):
  8. # self.write("cmdb")
  9. self.render("index.html")
  10.  
  11. def post(self): #以post方式请求,
  12. user = self.get_argument("user") #获取post请求的信息
  13. pwd = self.get_argument("password")
  14. USER_INFO.append({"u": user, "p": pwd})
  15. self.redirect('/home') #跳转
  16.  
  17. class HomeHadler(tornado.web.RequestHandler):
  18. def get(self):
  19. self.render("home.html", user_info_list = USER_INFO) #模板渲染

对应的类

  

3、tornado 前段模板

  1. class CmdbHander(tornado.web.RequestHandler):
  2. def get(self):
  3. a = [11, 22, 33, 44]
  4. self.render("index.html", li = a) #把列表传到前面
  1. <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>

母板:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  5. <title>老男孩</title>
  6. <link href="{{static_url("css/common.css")}}" rel="stylesheet" />
  7. {% block CSS %}{% end %}
  8. </head>
  9. <body>
  10.  
  11. <div class="pg-header">
  12.  
  13. </div>
  14.  
  15. {% block RenderBody %}{% end %}
  16.  
  17. <script src="{{static_url("js/jquery-1.8.2.min.js")}}"></script>
  18.  
  19. {% block JavaScript %}{% end %}
  20. </body>
  21. </html>

layout.html (母板)

  1. {% extends 'layout.html'%}
  2. {% block CSS %}
  3. <link href="{{static_url("css/index.css")}}" rel="stylesheet" />
  4. {% end %}
  5.  
  6. {% block RenderBody %}
  7. <h1>Index</h1>
  8.  
  9. <ul>
  10. {% for item in li %}
  11. <li>{{item}}</li>
  12. {% end %}
  13. </ul>
  14.  
  15. {% end %}
  16.  
  17. {% block JavaScript %}
  18.  
  19. {% end %}

index.html (子板)

在模板中执行自定义方法:

  1. <div>
  2. {{ kakaka() }} #执行 ui_methods
  3. {% module custom1() %}        #执行 ui_modules
  4. </div>
  1. def kakaka(self, arg):
  2. return int(arg) + 12

methods

  1. class custom1(UIModule):
  2. def render(self, *args, **kwargs):
  3. return "<h1>CCCC</h1>" #返回h1标签
  4.  
  5. def javascript_files(self):
  6. return ["http://adsfasdfasdf.js", "/static/myjs.js"] #引用javascrip
  7.  
  8. def css_files(self):
  9. return ["/static/mycss.css", ] #引用css
  10.  
  11. def embedded_css(self):
  12. return "#form { background-color: aqua; }" #执行一个css
  13.  
  14. def embedded_javascript(self):
  15. 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的更多相关文章

  1. python_way ,day22 tonardo,jsonp

    python_way day22 1.tonardo 2.cookie 3.api认证 一.tonardo: a.tonardo 初识 #!/usr/bin/env python3# Created ...

  2. python_way ,day23 API

    python_way ,day23 1.api认证  .api加密动态请求 2.自定义session 一.api认证 首先提供api的公司,如支付宝,微信,都会给你一个用户id,然后还会让你下一个SD ...

  3. python_way ,自定义session

    python_way ,自定义session container = {} #可以是数据库,可以是缓存也可以是文件 class Session: def __init__(self, handler) ...

  4. python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,

    python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...

  5. python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法

    python_way day18 html-day4 1.Django-路由系统   - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...

  6. python_way day17 html-day3 前端插件(fontawsome,easyui,bootstrap,jqueryui,bxslider,jquerylazyload),web框架

    python_way day17 一.模板插件 图标的插件 fontawsome: 后台管理: easyui jqueryui 很多网站都会用: bootstrap :引入jQuery:(2.x,1. ...

  7. python_way day17 jQuery表单验证,事件绑定,插件,文本框架,正则表达式

    python_way day17 1.jQuery表单验证 dom事件绑定 jquery事件绑定 $.each return值的判断 jquery扩展方法 2.前段插件 3.jDango文本框架 4. ...

  8. python_way day16 JQuary

    python_way day16 JQuery 封装dom js代码 jQuery(1.10,1.12-兼容性好,2.0.以后放弃了ie9以下) - 封装了Dom & JavaScript 查 ...

  9. python_way day16 DOM

    Python_way day16 1.Dom  (找到html中的标签) 一.DOM 1.查找元素 直接查找 document.getElementById 根据ID获取一个标签 --->这里是 ...

随机推荐

  1. FireDac 与数据库连接时字符集及对应的字段类型问题

    近日在一个过程调用时发生一个奇怪现象, 异常返回意思是说, 数据的长度是[6], 而字段定义的长度是[3].  分析后认为:  调用过程你不涉及到对返回数据集的字段手动定义问题, 出现这个问题应是两边 ...

  2. Python 进阶(五)定制类

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAugAAAF/CAIAAACUs6uhAAAgAElEQVR4nOzdZXubx7ov8PPV9tlrt0 ...

  3. STM32的晶振跟HSE外部时钟设置.

    void RCC_Configuration(void){  /* RCC system reset(for debug purpose) */  RCC_DeInit(); /* Enable HS ...

  4. linux中断的上半部和下半部 【转】

    转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=24690947&id=3491821 一.什么是下半部 中断是一 ...

  5. 那些情况该使用它们spin_lock到spin_lock_irqsave【转】

    转自:http://blog.csdn.net/wesleyluo/article/details/8807919 权声明:本文为博主原创文章,未经博主允许不得转载. Spinlock的目的是用来同步 ...

  6. JS 动态加载脚本 执行回调_转

    关于在javascript里面加载其它的js文件的问题可能很多人都遇到过,但很多朋友可能并不知道怎么判断我们要加载的js文件是否加载完成,如果没有加载完成我们就调用文件里面的函数是不会成功的.本文讲解 ...

  7. 如何获取各大平台的播放地址(获得优酷的m3u8播放地址)为例

    1.打开safari 2.在顶部(黑色小苹果)旁边,点击safari. 3.打开里面的 偏好设置. 4.在高级 中 找到 “在菜单栏中显示开发菜单” 并打勾. 5.关闭窗口后,可以发现safari 顶 ...

  8. 使用磁盘为Linux添加swap

    一.SWAP 说明 1.SWAP 概述 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放 ...

  9. ECshop中TemplateBeginEditable 和后台编辑讲解

    在ecshop的dwt文件里面经常发现有“<!-- TemplateBeginEditable name="doctitle" -->和<!-- #BeginLi ...

  10. SQL SERVER 数据库实用SQL语句

    --查看指定表的外键约束 select * from sysobjects where parent_obj in( select id from sysobjects where name='表名' ...