zoukankan      html  css  js  c++  java
  • 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(1) }}                    #执行 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)

    }

  • 相关阅读:
    javascript之void0
    Sublime之OS X Command Line
    iOS之Monkey
    iOS之在成员函数中使用Block
    mac之javascriptcore
    国内成功码农的发展轨迹
    HTML之表格初步
    ClientSide JavaScript Timeline
    javascript正则表达式
    同源策略
  • 原文地址:https://www.cnblogs.com/python-way/p/5998837.html
Copyright © 2011-2022 走看看