賞金將在 4 天后到期。此問題的答案有資格獲得 100聲望賞金。 curtcab正在尋找一個規范的答案:
請提供一些有關如何使這項作業正常作業的指導。
我正在嘗試使用一個簡單的應用程式來使用 Python、Flask 和 SQLite 顯示資料庫資訊。我有三個檔案 server_table.html、server_table.py 和 base.html。我的 SQLite 資料庫 testdb.db 構建成功,我可以向它拉/推資料。列和資料型別對于資料庫模型是正確的。
但是,當我運行 server_table.py 時,網頁渲染成功,但我收到一條No data available in table訊息,應該顯示表格資料。
沒有收到其他訊息。
我正在使用的代碼:
server_table.html
{% extends "base.html" %}
{% block content %}
<table id="data" class="table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Address</th>
<th>Phone Number</th>
<th>Email</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
{% endblock %}
{% block scripts %}
<script>
$(document).ready(function () {
$('#data').DataTable({
ajax: '/api/data',
serverSide: true,
columns: [
{ data: 'name' },
{ data: 'age' },
{ data: 'address', orderable: false },
{ data: 'phone', orderable: false },
{ data: 'email' }
],
});
});
</script>
{% endblock %}
base.html
<!doctype html>
<html>
<head>
<title>{{ title }}</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384- 0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7 AMvyTG2x" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/dataTables.bootstrap5.css">
</head>
<body>
<div class="container">
<h1>{{ title }}</h1>
<hr>
{% block content %}{% endblock %}
</div>
<script type="text/javascript" charset="utf8" src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript" charset="utf8"
src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.js"></script>
<script type="text/javascript" charset="utf8"
src="https://cdn.datatables.net/1.10.25/js/dataTables.bootstrap5.js"></script>
{% block scripts %}{% endblock %}
</body>
</html>
server_table.py
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///testdb.db"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), index=True)
age = db.Column(db.Integer, index=True)
address = db.Column(db.String(256))
phone = db.Column(db.String(20))
email = db.Column(db.String(120))
def to_dict(self):
return {
"name": self.name,
"age": self.age,
"address": self.address,
"phone": self.phone,
"email": self.email,
}
db.create_all()
@app.route("/")
def index():
return render_template("server_table.html", title="Server-Driven Table")
@app.route("/api/data")
def data():
query = User.query
# search filter
search = request.args.get("search[value]")
if search:
query = query.filter(
db.or_(User.name.like(f"%{search}%"), User.email.like(f"%{search}%"))
)
total_filtered = query.count()
# sorting
order = []
i = 0
while True:
col_index = request.args.get(f"order[{i}][column]")
if col_index is None:
break
col_name = request.args.get(f"columns[{col_index}][data]")
if col_name not in ["name", "age", "email"]:
col_name = "name"
descending = request.args.get(f"order[{i}][dir]") == "desc"
col = getattr(User, col_name)
if descending:
col = col.desc()
order.append(col)
i = 1
if order:
query = query.order_by(*order)
# pagination
start = request.args.get("start", type=int)
length = request.args.get("length", type=int)
query = query.offset(start).limit(length)
# response
return {
"data": [user.to_dict() for user in query],
"recordsFiltered": total_filtered,
"recordsTotal": User.query.count(),
"draw": request.args.get("draw", type=int),
}
if __name__ == "__main__":
app.run()
uj5u.com熱心網友回復:
請提供一些有關如何使這項作業正常作業的指導。
面對這樣的“全堆疊”問題,您需要將問題隔離到單層:前端、后端或資料庫。
首先在瀏覽器的開發工具的網路選項卡打開的情況下運行應用程式。找到應該獲取資料的請求,單擊它并檢查回應的內容。如果資料存在,那么您的前端代碼有問題。您將需要使用瀏覽器的 Javascript 除錯器和/或console.log陳述句來找出問題所在。
如果資料不在回應中,則問題必須在堆疊的下方。使用資料庫客戶端* 打開資料庫并查詢表以驗證預期資料是否實際存在。特別是對于 SQLite,確保您的應用程式肯定連接到正確的資料庫,路徑很容易出錯。
如果資料在資料庫中,但不在發送到瀏覽器的回應中,那么問題一定出在 Python 層。與 Javascript 層一樣,您可以使用除錯器和日志記錄、列印或斷言陳述句來檢查代碼中發生的情況。檢查查詢是否使用預期的 SQL 并生成預期的輸出。如有必要,從查詢中洗掉所有過濾器并將它們一一添加回來。
* SQLite 帶有一個命令列客戶端(sqlite3在 Linux 上,sqlite3.exe在 Windows 上),可以連接sqlite3 <filename>和運行 SQL 查詢;也有 GUI 客戶端,或者您運行代碼以從 Python REPL 查詢資料庫,盡管這是更多的作業,并且有可能從您的后端代碼中繼承任何隱式假設。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451631.html
標籤:Python html jQuery 烧瓶 烧瓶-sqlalchemy
上一篇:從Flask中的變數渲染按鈕
下一篇:AndroidRecyclerView:嘗試在空物件參考上呼叫虛擬方法'voidandroidx.recyclerview.widget.RecyclerView.setAdapter()
