烧瓶删除功能 - 从sqlite中删除一行

时间:2017-11-22 01:08:32

标签: python sqlite flask

我正在努力在基于flask的博客上实现删除功能。我在这里搜索了相关的帖子并尝试将这些评论结合在一起,但仍然无法正常工作..似乎如果我运行代码,则条目ID不会通过url。它给了我'找不到页面'的错误。很高兴得到帮助,为什么会发生这种情况!

这是我的py:

@app.route('/delete_entry/<entry_id>', methods=['POST'])
def delete_entry():
    if not session.get('logged_in'):
        abort(401)
    db = get_db()
    db.execute('delete from entries where id=' + entry_id)
    db.commit()
    flash('Entry deleted')
    return redirect(url_for('show_entries'))

这是我的show_entries py:

    {% extends "layout.html" %}
    {% block body %}
      {% if session.logged_in %}
        <form action="{{ url_for('add_entry') }}" method=post class=add-entry>
          <dl>
            <dt>Title:
            <dd><input type=text size=30 name=title>
            <dt>Text:
            <dd><textarea name=text rows=5 cols=40></textarea>
            <dd><input type=submit value=Share>
          </dl>
        </form>

      {% endif %}
      <ul class=entries>
      {% for entry in entries %}
        <li><h2>{{ entry.title }}</h2><h6>{{ entry.dt }}<h6><p>{{ entry.text|safe }}</p><p><{{ entry.id }}</p></li>

        <form action="{{ url_for('delete_entry', entry_id = entry.id) }}" method=post class=delete-entry>
        <input type="hidden" name="entry_id" value="{{ entry.id }}">
        <input type="submit" value="Delete" />
        </form>

      {% else %}
        <li><em>Unbelievable.  No entries here so far</em></li>
      {% endfor %}
      </ul>
    {% endblock %}

这是delete_entry.html:

    {% extends "layout.html" %}
    {% block body %}
      <ul class=entries>
      {% for entry in entries %}
        <li><a>{{entry.title }}</a>
        <pre>{{ entry.text }}</pre>
        {% if session.logged_in %}
          <form action="{{ url_for('delete_entry') }}" method=post class=delete-entry>
          <input type=hidden value="{{ entry.id }}"name=movie_to_delete"></input>
          <input type=submit></input>
          </form>
        {% endif %}
      {% endfor %}
      </ul> 
    {% endblock %}

1 个答案:

答案 0 :(得分:1)

好吧,也许这是在您的代码中,但是如果不是 - 当您使用url_for()时,您需要在代表该路由的代码中有一个函数。为了澄清,你不能只有一个名为show_entries的html模板,你需要一个呈现该模板的函数read about it here

@app.route('/show_entries')
def show_entries():
    return render_template('show_entries.html')

另外,我认为您需要在函数中添加一个GET方法,以允许用户访问html表单,在那里他们选择要删除的条目ID,如下所示:

@app.route('/delete_entry/<entry_id>', methods=['GET', 'POST'])
def delete_entry():
    if not session.get('logged_in'):
        abort(401)
    if request.method == 'POST' and form.validate_on_submit():
        db = get_db()
        db.execute('delete from entries where id=' + entry_id)
        db.commit()
        flash('Entry deleted')
        return redirect(url_for('show_entries'))
    else #request.method == 'GET':
        return render_template('delete_entry.html')