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

すべてを同じ名前「ログ」で保存しているため、新しいリクエストを取得するたびに値を上書きしています。

Riak バケットは python dict に似ており、基本的に各リクエストで visitor['log'] = {...data...} を実行しています。そのために別のデータ構造を使用したい場合や、十分に離散的である場合は時間をキーとして使用したい場合があります。

于 2013-01-12T17:23:26.567 に答える