美文网首页
实践 | 用SAE搭建Python应用,实现简单的网页访问量统计

实践 | 用SAE搭建Python应用,实现简单的网页访问量统计

作者: 8c9c47c26245 | 来源:发表于2016-04-22 08:44 被阅读691次

    SAE(Sina Applacation Engine)是新浪云应用引擎。可以快速部署php,python等web应用。

    第一步,注册新浪云账号并创建一个Python应用

    注册地址:http://www.sinacloud.com/

    创建一个Python类型的应用,并根据引导填写信息。创完成会在控制台有一条记录:

    Paste_Image.png

    第二步,编写服务器端代码,实现访问量统计

    SAE的Python应用是基于WSGI矿建的,它有两个要求:
    1、入口是index.wsgi文件
    2、文件中要有一个application对象、并且是一个标准的WSGI应用对象。

    index.wsgi代码:

    import sae
    import json
    from counter import Counter
    
    from cgi import parse_qs
    
    ## A wsgi applacation.
    ## for test in a browser: http://wangxiaokuai.applinzi.com/?key=wangxiaokuai
    def simple_app(environ, start_response):
        """Simplest possible application object"""
    
        # parse query string
    
        query_dict = parse_qs(environ["QUERY_STRING"])  
    
        key = query_dict.get("key", [""]).pop(0)
    
        counter = Counter(key)
        counter.increase()
        data = {}
        data["total_points"] = counter.get()
    
        status = '200 OK'
        response_headers = [('Content-type','application/json')]
        response_headers.append(("Access-Control-Allow-Origin", "*"))
        
        start_response(status, response_headers)
        return json.dumps(data)
    
    application = sae.create_wsgi_app(simple_app)
    

    index.wsgi只有一个功能:每次收到请求,通过解析URL中的QUERY_STRING,将该key的访问次数加一,并返回。

    counter.py实现了一个计数器功能,并使用了SAE提供的KVDB服务保存持久化数据。KVDB是key-value型数据库,通过sae.kvdb.Client对象即可访问。

    import sae.kvdb
    
    class Counter():
        def __init__(self, name):
            self.name = name
            self.kv_client = sae.kvdb.Client()
    
        def increase(self):
            count = self.kv_client.get(self.name)
            if count == None:
                count = 0
    
            count += 1
    
            self.kv_client.set(self.name, count)
    
            return count
    
        def get(self):
            return self.kv_client.get(self.name)
    
        def reset(self):
            self.kv_client.set(self.name, 0)
    

    第三步,通过Git上传代码到SAE

    下载git客户端,通过git bush在你本地git代码目录里,添加一个新的git远程仓库sae

    mkdir git001
    cd git001
    git init
    git remote add sae https://git.sinacloud.com/wangxiaokuai
    

    编辑代码并将代码部署到sae的版本1。

    git add .
    git commit -am "make it better"
    git push sae master:1       # 然后会提示输管理员口令
    

    现在,用SAE提供的访问地址访问该服务。每刷新一次页面,total_points都会加一!

    Paste_Image.png

    第四步,将访问量统计功能,添加到页面中。

    index.js中,通过jQuery的接口向服务端发送Ajax请求,这样每次加载index.js脚本,服务端都会增加一个访问量。
    然后脚本将服务器返回的数据,显示在了id为"total_points"的页面元素上。
    index.js代码

    $(document).ready(function(){
        url = "http://wangxiaokuai.applinzi.com?key=wangxiaokuai.github.io"
    
        var data = $.get(url, function(data, status){
    
            $("#total_points").text(data.total_points)
        })
    
    }); // end of $.ready()
    

    index.html代码:

    <script src="/script/index.js"></script>
    ......
    
    <p><span>访问:<span id="total_points"></span>次</span>
    

    同理对每一篇博客文章,添加阅读次数统计。每篇文章要有一个算法去获取它的唯一ID作为key。
    post.js代码:

    $(document).ready(function(){
        var page_id = $("#page_id").text()
    
        if (page_id) {
            url = "http://wangxiaokuai.applinzi.com" + "?key=" + page_id
            console.log(url)
    
            var data = $.get(url, function(data, status){
    
                console.log(data)
                console.log(data.total_points)
                $("#read_times").text(data.total_points)
            })
        }
    
    }); // end of $.ready()
    

    post.html相关代码:

    <script src="/script/post.js"></script>
    ......
    <span>阅读:<span id="read_times"></span></span>
    

    Bingo!

    Paste_Image.png Paste_Image.png

    Python代码托管在GitHub上。

    相关文章

      网友评论

          本文标题:实践 | 用SAE搭建Python应用,实现简单的网页访问量统计

          本文链接:https://www.haomeiwen.com/subject/mexxrttx.html