簡體   English   中英

如何從 flask_view_counter 獲取視圖列表?

[英]How to get the list of views from flask_view_counter?

我正在使用flask_view_counter來跟蹤所有視圖。 它正確地保存到數據庫中,但是,我無法獲取程序內部的所有視圖。 我曾嘗試使用 SQLAlchemy 來做到這一點,但主要是它使用模型從數據庫中查找信息。 這是代碼示例:

主要.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Views</title>
</head>
<body>
    <h1>All the views: {{ my_views }}</h1>
</body>
</html>

應用程序.py

from flask import Flask, render_template
from flask_view_counter import ViewCounter
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)
app.config["SQLALCHEMY_DATABASE_URI"] = 'sqlite:///site.db'
views = ViewCounter(app, db)

@app.route('/')
@views.count
def mai():
    my_views = None # how to get it???
    return render_template('main.html', my_views=my_views)

if __name__ == "__main__":
    app.run(debug=True)

如果有另一種方法可以使用 python 或 javascript 制作視圖計數器,我想看看。

flask_view_counter代碼相當簡單:它創建一個數據庫表並在每次調用 flask 視圖時插入一條新記錄。 沒有 model——或者 SQLAlchemy 方面的declarative extension ——如您所料。 要獲取記錄,您需要直接 從表中獲取 select

對表的引用可作為ViewCounter實例上的一個屬性使用。 在您的情況下,它將是views.requests 您可以將表 object 傳遞給sqlalchemy.sql.select並使用db.engine.execute運行查詢。

from flask import Flask, render_template
from flask_view_counter import ViewCounter
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.sql import select

app = Flask(__name__)
db = SQLAlchemy(app)
app.config["SQLALCHEMY_DATABASE_URI"] = 'sqlite:///site.db'
views = ViewCounter(app, db)

@app.route('/')
@views.count
def mai():
    my_views = db.engine.execute(select([views.requests]))
    return render_template('main.html', my_views=my_views)

if __name__ == "__main__":
    app.run(debug=True)

還有許多其他可用的視圖計數選項,當然,這取決於您的用例。 作為一個簡單的解決方案,您可以使用更具侵入性的 Google Analytics JS 庫。 您可以考慮計算純 python 中的視圖而不緩存它們。 如果您不想使用SQLAlchemy ,您甚至可以根據flask_view_counter的源代碼滾動您自己的視圖裝飾器並將數據存儲在其他地方。

所以,結果應該從上面的解決方案修改:

應用程序.py

from flask import Flask, render_template
from flask_view_counter import ViewCounter
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.sql import select

app = Flask(__name__)
db = SQLAlchemy(app)
app.config["SQLALCHEMY_DATABASE_URI"] = 'sqlite:///site.db'
views = ViewCounter(app, db)

@app.route('/')
@views.count
def main():
    func = select([views.requests])
    my_views = db.engine.execute(func)
    return render_template('main.html', my_views=my_views)

if __name__ == "__main__":
    app.run(debug=True)

主要.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Views</title>
</head>
<body>
    {% for view in my_views %}
        <h1>All each ip for view: {{ view.ip }}</h1>
    {% endfor %}
</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM