【问题标题】:Deleting a Post from a Stream从流中删除帖子
【发布时间】:2015-10-01 00:08:29
【问题描述】:

我是创建 Web 应用程序的新手,我决定从学习 Flask 开始。我正在制作一个社交网络作为一个辅助项目来练习和学习一些基本技能。

到目前为止,我已经能够构建一个用户可以发布到的“流”,有点像 Twitter。 我一直在努力寻找一种允许用户删除帖子的方法。我正在使用带有 Peewee 库的 SQLite 数据库。这是我尝试过的:

@app.route('/delete_post/<int:post_id>')
@login_required
def delete_post(post_id):
    delete = models.Post.select().where(models.Post.id == post_id)
    try:
        models.DATABASE.delete(delete)
    except models.DoesNotExist:
        abort(404)
    else:
        flash("This post has successfully been deleted.", "success")
    return redirect(url_for('stream', stream = stream))

另外,这里是一个帖子的创建方式:

class Post(Model):
    timestamp = DateTimeField(default=datetime.datetime.now())
    user = ForeignKeyField(
        rel_model= User,
        related_name='posts'
    )
    content = TextField()
    class Meta:
        database = DATABASE
        order_by = ('-timestamp',)

最后,当用户选择“删除”时,将调用 delete_post 方法的模板

{% extends "base.html" %}

{% block content %}
{% for post in stream %}
    <article>
        <h2>
            <a href="{{ url_for('stream', username=post.user.username) }}">{{ post.user.username }}</a>
        </h2>
        <i class="clock"></i>
        <time>
        {{ post.timestamp.strftime("%a, %d %b %Y %H:%M") }}
        </time>
        <a href="{{ url_for('view_post', post_id=post.id) }}" class="view">View</a>
        <a href="{{ url_for('delete_post', post_id=post.id) }}" class="view" >| Delete</a>

        <div class="post">
            {{ post.content }}
        </div>
    </article>
{% endfor %}
{% endblock %}

如何删除帖子?当我尝试我的解决方案时,我得到:AttributeError: 'SqliteDatabase' object has no attribute 'delete' 我知道这个问题很啰嗦,但是任何帮助都会非常感激,并且会在未来的项目中帮助我很多。如果我需要澄清其他任何事情,请告诉我。

谢谢!

【问题讨论】:

  • 那么真正的问题是什么?
  • 我想知道如何删除帖子
  • 我的删除 post_method 不起作用。当我尝试它时,我得到:AttributeError:'SqliteDatabase' 对象没有属性'delete'
  • 您使用的是什么数据库库?这就是您应该研究如何从数据库中删除某些内容的地方。这与 Flask 或您谈论的任何内容无关。这只是“如何使用库 X 从数据库中删除对象”,您没有告诉我们 X 是什么。
  • 猜测一下,一旦你获得了 Post 对象(你称之为 delete),你是否只是在其上调用 delete 方法? delete.delete()?

标签: python html sqlite flask peewee


【解决方案1】:

删除:

def delete_post(post_id):
    try:
        post = models.Post.select().where(models.Post.id == post_id).get()
    except models.Post.DoesNotExist:
        abort(404)

    post.delete_instance()
    flash("This post has successfully been deleted.", "success")
    return redirect(url_for('stream', stream = stream))

或者,你可以写:

def delete_post(post_id):
    post = models.Post.delete().where(models.Post.id == post_id).execute()
    flash("This post has successfully been deleted.", "success")
    return redirect(url_for('stream', stream = stream))

编辑:我也只想向您指出涵盖各种主题的文档...http://docs.peewee-orm.com/en/latest/peewee/querying.html#deleting-records

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    相关资源
    最近更新 更多