zoukankan      html  css  js  c++  java
  • Tornado引入静态css、js文件

    一、静态路径

    template_path=os.path.join(os.path.dirname(__file__), "templates")
    

     这里是设置了模板的路径,放置模板的目录名称是 templates 。类似的方法,我们也可以设置好静态文件的路径。

    static_path=os.path.join(os.path.dirname(__file__), "static")
    

    这里的设置,就是将所有的静态文件,放在了 static 目录中。

    这样就设置了静态路径。

    #! /usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import os.path
    import tornado.httpserver
    import tornado.ioloop
    import tornado.web
    import tornado.options
    
    from tornado.options import define, options
    define("port", default=8000, help="run on the given port", type=int)
    
    class IndexHandler(tornado.web.RequestHandler):
    	def get(self):
    		lst = ["python","www.itdiffer.com","qiwsir@gmail.com"]
    		self.render("index.html", info=lst)
    
    handlers = [(r"/", IndexHandler),]
    
    template_path = os.path.join(os.path.dirname(__file__), "temploop")
    static_path = os.path.join(os.paht.dirname(__file__), "static")	#这里增加设置了静态路径
    
    if __name__ == "__main__":
    	tornado.options.parse_command_line()
    	app = tornado.web.Application(handlers, template_path, static_path, debug=True)   #这里也多了点
    	http_server = tornado.httpserver.HTTPServer(app)
    	http_server.listen(options.port)
    	tornado.ioloop.IOLoop.instance().start()
    

       一处是定义了静态文件路径 static_path ,在这里将存储静态文件的目录命名为 static 。另外一个修改就是在实例化 tornado.web.Application() 的时候,在参数中,出了有静态路径参数 static_path ,还有一个参数设置 debug=True ,这个参数设置的含义是当前的tornado服务器可以不用重启,就能够体现已经修改的代码功能。回想一下,在前面进行调试的时候,是不是每次如果修改了代码,就得重启tornado服务器,才能看到修改效果。用了这个参数就不用这么麻烦了。

    #!/usr/bin/python
    #coding: utf8
    import RPi.GPIO as GPIO
    import time
    import sys
    import threading
    import tornado.ioloop
    import tornado.web
    import tornado.httpserver
    import tornado.options
    import json
    import os.path
    import subprocess
     
    tornado.options.define("port",default=8003,type=int)
     
    IN1 = 11
    IN2 = 12
    IN3 = 16
    IN4 = 18
     
     
    stop_status = 0
    last_key = ""
    last_request_time = 0
     
     
    def init():
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(IN1,GPIO.OUT)
        GPIO.setup(IN2,GPIO.OUT)
        GPIO.setup(IN3,GPIO.OUT)
        GPIO.setup(IN4,GPIO.OUT)
     
    # 前进
    def forward():
        global stop_status
        GPIO.output(IN1,GPIO.HIGH)
        GPIO.output(IN2,GPIO.LOW)
        GPIO.output(IN3,GPIO.HIGH)
        GPIO.output(IN4,GPIO.LOW)
        # print "forward"
        # time.sleep(0.1)
     
    # 后退
    def reverse():
        global stop_status
        GPIO.output(IN1,GPIO.LOW)
        GPIO.output(IN2,GPIO.HIGH)
        GPIO.output(IN3,GPIO.LOW)
        GPIO.output(IN4,GPIO.HIGH)
     
     
    # 左转弯
    def left():
        global stop_status
        GPIO.output(IN1,GPIO.LOW)
     
     
    # 右转弯
    def right():
        global stop_status
        GPIO.output(IN1,GPIO.HIGH)
     
    #停止
    def stop_car():
        GPIO.output(IN1,False)
        GPIO.output(IN2,False)
        GPIO.output(IN3,False)
        GPIO.output(IN4,False)
        global stop_status
        stop_status = 1
     
    #关闭GPIO接口
    def close_car():
        global stop_status
        stop_status = 1
        GPIO.cleanup()
    
    class IndexHandler(tornado.web.RequestHandler):
        def set_default_headers(self):
            self.set_header('Access-Control-Allow-Origin', '*')
            self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
            self.set_header('Access-Control-Allow-Headers', '*')
        def get(self):
            self.render("iat.html")
        def post(self):
            global stop_status
            global last_key
            global last_request_time
            old_request_time = last_request_time
            init()
            sleep_time = 10
            try:
                arg = self.get_argument('k')
                new_request_time = self.get_argument('time')
                print 'get last time',new_request_time
            except Exception, e:
                arg = json.loads(self.request.body)['k']
                new_request_time = json.loads(self.request.body)['time']
                print 'json last time', new_request_time
     
            print "==new time ==", new_request_time
            print "==old time ==", old_request_time
            if(arg=='g' and last_key!='g' and new_request_time >= old_request_time):
                print "WARNING_ON"
                stop_status = 0
    	    pname = ("/root/data/smoke/warning")
    	    result = subprocess.Popen(pname,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
                last_key = 'g'
            elif(arg=='n' and last_key!='n' and new_request_time >= old_request_time):
                print "WARNING_OFF"
                stop_status = 0
    	    qname = ("/root/data/smoke/cpwm")
                rresult = subprocess.Popen(qname,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
                last_key = 'n'
    	    rresult.kill()
            elif(arg=='t' and last_key!='t' and new_request_time >= old_request_time):
                print "LIGHT_ON"
                stop_status = 0
                autoThread = threading.Thread(target = right)
                autoThread.start()
                last_key = 't'
            elif(arg=='h' and last_key!='h' and new_request_time >= old_request_time):
                print "LIGHT_OFF"
                stop_status = 0
                autoThread = threading.Thread(target = left)
                autoThread.start()
                last_key = 'h'
    	elif(arg=='r' and last_key!='r' and new_request_time >= old_request_time):
    	    print "WATER_ON"
    	    stop_status = 0
    	    execfile('/root/data/mada/water.py')
    	    last_key = 'r'
    	elif(arg=='e' and last_key!='e' and new_request_time >= old_request_time):
    	    print "WATER_OFF"
    	    stop_status = 0
    	    execfile('/root/data/mada/close.py')
    	    last_key = 'e'
            elif(arg=='stop' and new_request_time >= old_request_time):
                print "stop"
                last_key = "stop"
                time.sleep(0.3)
                stop_status = 1
            else:
                print "error"
            last_request_time = new_request_time
            self.write(arg)
        def options(self):
                pass
    if __name__ == '__main__':
        tornado.options.parse_command_line()
        app = tornado.web.Application(handlers=[(r"/",IndexHandler)],
    	template_path=os.path.join(os.path.dirname(__file__),"templates"),
    	static_path=os.path.join(os.path.dirname(__file__),"static"),
    	debug=True)
        http_server = tornado.httpserver.HTTPServer(app)
        http_server.listen(tornado.options.options.port)
        tornado.ioloop.IOLoop.instance().start()
    

    二、编写模版文件

    我们设置静态路径的目的就是要在模板中引入css和js等类型的文件以及图片等等。那么如何引入呢,下面以css为例说明。

    <link href="/static/style.css" rel="stylesheet">
    

    但是,这里往往会有一个不方便的地方,如果我手闲着无聊,或者因为别的充足理由,将存储静态文件的目录static换成了sta,并且假设我已经在好几个模板中都已经写了上面的代码。接下来我就要把这些文件全打开,一个一个更改 <link> 里面的地址。

    请牢记,凡是遇到重复的事情,一定要找一个函数方法解决。tornado就提供了这么一个: static_url() ,把上面的代码写成:

    <link href="{{ static_url("style.css") }}" rel="stylesheet" >
    

    这样,就不管你如何修改静态路径,模板中的设置可以不用变。

    按照这个引入再修改相应的模板文件。

    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0">
        <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
        <title>花园Mini</title>
        <meta name="keywords" content="free mobile website templates, free mobile website template, free iphone template, free android template, free high end touch mobile templates, free high end touch mobile template" />
        <meta name="description" content="Get free mobile website templates for Iphone , Android and High end touch mobile devices" />
        <link href="{{static_url("css/style.css")}}" rel="stylesheet" type="text/css" />
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    </head>
    
    <body>
    	<div id="header">
            <div class="nav">
            	<ul>
                    <li><a href="#">花园Mini</a></li>
                </ul>
            </div>
            <div class="logo"></div>
        </div>
        <div class="clear"></div>
        <h2 id='iat_result'>请输入语音指令</h2>
        <ul class="helper">
            <li>请确认麦克风可以正常使用</li>
            <li>请保持网络接入畅通、稳定</li>
            <li>在安静环境下使用效果更佳</li>
        </ul>
    
    	<div style="position:relative">
    
    		<div id='a'>点击开始录音</div>
            <div id="canvas_wrapper" style="display:none">
                <div style="display: inline">♠</div>
                <canvas id="volume" height="4"></canvas>
            </div>
    	</div>
        <script>
            onerror=function(a,b,c){
                alert(a+b+c);
            }
        </script>
    	<script type="text/javascript" src="{{static_url("js/fingerprint2.min.js")}}"></script>
    	<script type="text/javascript" src="{{static_url("js/iat.all.js")}}"></script>
    	<script type="text/javascript" src="{{static_url("js/demo.js")}}"></script>
    <script>
            function go(k){
                    var requestTime= new Date().getTime();
                    $.post('/',{k:k,time:requestTime},function(){},"json");
            }
            var tValue=document.getElementById("iat_result").innerHTML;
     setInterval(function(event){
           if(tValue !=document.getElementById("iat_result").innerHTML){
    
             //这里写自己的业务逻辑代码
             tValue =document.getElementById("iat_result").innerHTML;
             // alert(tValue);
             if (tValue == "开启报警装置" || tValue == "开启报警装置。") {
                go('g');
    	    // alert("I am here");
             } else if (tValue == "关闭报警装置" || tValue == "关闭报警装置。") {
                go('n');
             } else if (tValue == "开启照明装置" || tValue == "开启照明装置。") {
                go('t');
             } else if (tValue == "关闭照明装置" || tValue == "关闭照明装置。") {
                go('h');
             } else if (tValue == "开启浇灌装置" || tValue == "开启浇灌装置。") {
                go('r');
             } else if (tValue == "关闭浇灌装置" || tValue == "关闭浇灌装置。") {
                go('e');
             } else if (tValue == "关闭交换装置" || tValue == "关闭交换装置。") {
                go('e');
    	 } 
           }
      },100);
            
    
            
    
        </script>
    </body>
    </html>
    
  • 相关阅读:
    Leetcode Substring with Concatenation of All Words
    Leetcode Divide Two Integers
    Leetcode Edit Distance
    Leetcode Longest Palindromic Substring
    Leetcode Longest Substring Without Repeating Characters
    Leetcode 4Sum
    Leetcode 3Sum Closest
    Leetcode 3Sum
    Leetcode Candy
    Leetcode jump Game II
  • 原文地址:https://www.cnblogs.com/sirius-swu/p/6830985.html
Copyright © 2011-2022 走看看