[英]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.