我正在尝试创建一个基本的Web应用程序,它接受“添加查询”页面上的文本输入,然后在“搜索查询”页面中显示它们。到目前为止,我已成功连接数据库,并且在我使用它时网站不会抛出错误。
但是,当我在“添加查询”页面上输入输入并单击“提交”时,“搜索查询”页面不会更新或显示任何新输入。
我认为我的代码中存在一些错误,它没有将输入链接到数据库。
UPDATE:有人提到我不在我的视图子类中调用方法“add_entry”和“show_entries”。但是,我的主要py文件不应该处理函数吗?
以下是我正在开发的webapp的一些基本截图:
以下代表我的py文件:
这是我的主要py文件(queries-Final2.py)
#functions
def show_entries():
db = get_db()
cur = db.execute('select title, columns, query, notes, tags from entries order by id desc')
entries = [dict(title=row[0], columns=row[1],query=row[2],notes=row[3],tags=row[4]) for row in cur.fetchall()]
return render_template('search-queries.html', entries=entries)
def add_entry():
if not session.get('logged_in'):
abort(401)
db = get_db()
db.execute('insert into entries (title, columns, query, notes, tags) values (?, ?)',
[request.form['title'],
request.form['columns'],
request.form['query'],
request.form['notes'],
request.form['tags']
])
db.commit()
flash('New entry was successfully posted')
return redirect(url_for('add-queries'))
# Routes
app.add_url_rule('/',
view_func=Main.as_view('main'),
methods=["GET"])
app.add_url_rule('/login/',
view_func=Login.as_view('login'),
methods=["GET", "POST"])
app.add_url_rule('/search-queries/',
view_func=SearchQueries.as_view('search-queries'),
methods=["GET", "POST"])
app.add_url_rule('/add-queries/',
view_func=AddQueries.as_view('add-queries'),
methods=["GET", "POST"])
app.add_url_rule('/edit-queries/',
view_func=EditQueries.as_view('edit-queries'),
methods=["GET", "POST"])
以及类文件:
这是我的“搜索查询”页面视图
class SearchQueries(flask.views.MethodView):
@utils.login_required
def get(self):
return flask.render_template('search-queries.html')
这是我的“添加查询”页面视图
class AddQueries(flask.views.MethodView):
@utils.login_required
def get(self):
return flask.render_template('add-queries.html')
def post(self):
return flask.render_template('search-queries.html')
这些是我的html文件:
这是我的“添加查询”html页面
{% extends "layout.html" %}
{% block content %}
<h1 class="pageHeader" xmlns="http://www.w3.org/1999/html">Add a query</h1>
<h3 class="pageSubHeader">Sooo many queries to add</h3>
<form action="{{ url_for('add-queries') }}" method=post class=add-entry>
<dl>
<dt>Title:
<dd><input type=text size=54 name=title>
<dt>Columns: (Store ID, Date, transaction-total, etc... )
<dd><textarea name=columns rows=5 cols=40></textarea>
<br>
<dt>Query: (The text of the query)
<dd><textarea name=query rows=5 cols=40></textarea>
<br>
<dt>Notes: (Anything that the analyst should note)
<dd><textarea name=notes rows=5 cols=40></textarea>
<br>
<dt>Tags: (traffic, conversion, etc... )
<dd><input name=tags type=text size=54>
<br>
<dd><input type=submit value="Submit query">
</dl>
</form>
{% endblock %}
这是我的“搜索查询”html页面
{% extends "layout.html" %}
{% block content %}
<h1 class="pageHeader">Have fun searching for queries</h1>
<h3 class="pageSubHeader">Search for a large query</h3>
<ul class=entries>
{% for entry in entries %}
<li><h2>{{ entry.title }}</h2>{{ entry.columns|safe }}
{% else %}
<li><em>Unbelievable. No entries here so far</em>
{% endfor %}
</ul>
{% endblock %}
我可能会发现一些非常明显的东西,所以我们将非常感谢您的帮助。提前谢谢!
更新:我的数据库使用SQLite3
和schema.sql文件如下:
drop table if exists entries;
create table entries (
id integer primary key autoincrement,
title string not null,
columns string not null,
query string not null,
notes string not null,
tags string not null
);
问题:在我看到的示例中,开发人员使用了
@app.route('/add/')
在声明函数之前。这是做什么的?
答案 0 :(得分:1)
你是对的,你的代码中没有任何地方调用你的add_entries
和show_entries
函数。
我不是视图类的粉丝,所以我从来没有使用它们,但是,你不会做这样的事情:
class AddQueries(flask.views.MethodView):
@utils.login_required
def get(self):
return flask.render_template('add-queries.html')
def post(self):
db = get_db()
db.execute('insert into entries (title, columns, query, notes, tags) values (?, ?, ?, ?, ?)',
[request.form['title'],
request.form['columns'],
request.form['query'],
request.form['notes'],
request.form['tags']
])
db.commit()
flash('New entry was successfully posted')
return flask.render_template('search-queries.html')
所以基本上,当POST
某些内容发送到AddQueries
视图时,实际会将其插入到数据库中。同样,您的ShowQueries
类需要实际运行当前show_entries()
函数中的代码。