0

我正在尝试编写一个获取访问者 IP 并存储在 Riak 数据库中的小应用程序。在其 /show 路由上,它应该列出所有访问者,即存储的 IP 和相关日期。但是,出于某种原因,我要么只存储最后一个访问者,要么只获取最后一个访问者。我在这里做错了什么?我确定它不仅是错误的代码问题,而且是错误的方式 - 我正在尝试从顽固的 sql 用户切换,但我无法理解没有'select * from ...' 可用;)

import riak
import json
from flask import Flask, request, render_template
from datetime import datetime

app = Flask(__name__)
riak = riak.RiakClient(host='some.domain', port=8087, transport_class=riak.RiakPbcTransport)


def date(obj):
    return obj.isoformat() if hasattr(obj, 'isoformat') else obj


@app.route('/')
@app.route('/index')
def index():
    db = riak.bucket('visitor')
    ip = request.remote_addr
    time = json.dumps(datetime.now(), default=date)
    new_visitor = db.new('log', data={
        'ip': ip,
        'time': time,
    })
    new_visitor.store()
    return ip


@app.route('/show')
def show():
    db = riak.bucket('visitor')
    visitors = db.get('log')
    return render_template("show.html", visitors=visitors.get_data())


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')
4

1 回答 1

0

您将所有内容存储在同一个名称“log”下,因此每次收到新请求时都会覆盖该值。

Riak 存储桶就像 python dict 一样,您基本上是在对每个请求执行 visitor['log'] = {...data...} 。您可能希望为此使用不同的数据结构,或者如果时间足够离散,则可能使用时间作为键。

于 2013-01-12T17:23:26.567 回答