【问题标题】:Can't get entries to appear in flask web application无法让条目出现在烧瓶 Web 应用程序中
【发布时间】:2012-11-16 19:08:21
【问题描述】:

我正在尝试创建一个基本的 Web 应用程序,它在“添加查询”页面上接受文本输入,然后将它们显示在“搜索查询”页面中。至此,我已经成功连接了数据库,网站在使用的时候也没有报错。

但是,当我输入输入并在“添加查询”页面上单击提交时,“搜索查询”页面不会更新或显示任何新输入。

我认为我的代码有问题,没有将输入链接到数据库。

更新:有人提到我没有在我的视图子类中调用方法“add_entry”和“show_entries”。但是,我的主py文件不应该处理函数吗?

以下是我正在开发的 web 应用的一些基本截图:

以下代表我的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/')

在声明函数之前。这是做什么的?

【问题讨论】:

  • 我不明白这个问题。这里真的有很多代码。
  • 同意alex,你的问题不清楚,甚至不知道你打算做什么。
  • 我更新了问题以使我的要求更加清晰。基本上,我不知道为什么输入没有出现在数据库中。
  • entries = [dict(title=row[0], text=row[1]) for row in cur.fetchall()]&lt;li&gt;&lt;h2&gt;{{ entry.title }}&lt;/h2&gt;{{ entry.columns|safe }}。命名不一致的字段 columns/text 是您的第一个问题。
  • 其次,您需要让我们更清楚地了解您的问题。修复格式;我不知道你的功能在哪里结束。此外,您需要为每个文档添加标题,因为我无法分辨哪个 html 文件属于哪个 Python 函数等。

标签: python forms input sqlite flask


【解决方案1】:

您是对的,您实际上没有在代码中调用您的add_entriesshow_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() 函数中的代码。

【讨论】:

  • 如果您不使用视图类,您会使用什么实现?
  • 我并不是说类是一种不好的方法,我只是不喜欢像get() 这样的分离路由和“魔术”方法等等。我的大脑很难追踪这一切!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 2017-10-18
  • 2016-05-27
相关资源
最近更新 更多