Python中在Web开发中如何优雅地删除数据库中的文章?
最近在学习 web 开发,想删除用户文章,以那种方式为最优雅的处理方式啊
我的想法:
1.通过文章标题的 hash 值
2.标题和时间戳结合
3.标题和 ID 值结合
如果可以的话,请 V 友指出你们所用的方式,以及在哪里可以学到类似这种经验的书或文章。谢谢大家
Python中在Web开发中如何优雅地删除数据库中的文章?
加一个字段,delete 删除就改成 true
在Web开发里删除数据库文章,核心就两步:处理业务逻辑(比如权限校验),然后执行SQL删除。用Web框架和ORM能让这事儿干净不少。
拿Flask-SQLAlchemy举个例子。假设你有个Article模型,通常会在视图函数里这么干:
from flask import request, jsonify
from your_app import db
from your_app.models import Article
@app.route('/article/<int:article_id>', methods=['DELETE'])
def delete_article(article_id):
# 1. 先找到要删的文章
article = Article.query.get_or_404(article_id)
# 2. 这里做权限检查(比如判断当前用户是不是作者)
# if current_user.id != article.author_id:
# return jsonify({'error': 'Forbidden'}), 403
# 3. 执行删除
db.session.delete(article)
db.session.commit()
return jsonify({'message': 'Article deleted successfully'}), 200
关键点:
- 用
get_or_404:找不到文章直接返回404,省得自己处理。 - 一定要做权限校验:别让用户删别人的东西,上面代码注释部分就是干这个的,根据你的认证系统来写。
- 事务提交:
db.session.commit()让删除生效,出错的话可以用db.session.rollback()回滚。
如果想“软删除”(就是不真删数据,只是标记个删除状态),给模型加个is_deleted字段就行,删除时改成True,查数据的时候过滤掉。这样数据能恢复,更稳妥。
总结:用ORM的删除方法,配上权限检查,就是最优雅的删库方式。
删除用户数据一般就是标记一下,不会真正做删除
那相当于用户是不可以删除自己文章吗?只是用 delete 来决定是否隐藏文章,是这样吗?
但是我现在还停留在设计字段,在数据库中查找这一篇文章的阶段。。。
了解了,谢谢。
这种方式是一个用户一个表的类型吗?我是把所有用户的文章放在一个表里面的,这样设计是否合理啊
标记就可以,对用户来说,这就是删掉了.
=.= 一般都是软删除的
谢谢,但是一般我需要通过怎样的方式找到表中的这个值啊。
我今天是第一次知道,一直都是直接删除,(⊙﹏⊙)
逻辑删除代替物理删除~
话说为什么要软删除呢(标记下就当删除了)
文章表加个自增 id,根据自增 id 删除就好了,你是担心删错文章吗
不会有人以为注销了帐号真的是删除了吧?
恩恩,是的,我是准备根据标题找到文章,然后删除这一行,然后用户可能会用相同的标题,就迷茫了。
头像还行
楼主列出的 123 怎么理解?好像和删除并没有关系吧?
我还停留在数据库查找的阶段。。。
truncate 是最爽的
一般都是软删除吧
文章是个表,里面有自增 ID 和用户 id,用户 ID 用来区分谁发的文章,自增 ID 在删除的时候用,别用标题查询删除,因为会重复,不是 unique,容易误删标题一样的文章,删除的时候用个 status 来表示,删除为 0,不删除为 1。获取文章列表的时候,添加个过滤规则 status ==1 就行了。
你说的三点我没怎么理解,一般来讲通过文章 ID 来进行删除就可以。
DELETE FROM table WHERE id = [:id];
或者软删除
UPDATE table SET deleted = 1 WHERE id = [:id];
一般都不是立即删除,属于打标,在查询逻辑中剔除掉删除的即可。
可以配合后台定时任务,处理比如 30 天以前已经打标删除的文章!
你这想的太复杂了,直接根据 id 删除就行
谢谢,问题我已经明白了,直接通过 ID 软删除。
有个疑问哈,逻辑删除的话那对需要删除表的改查都要加个查询字段,会不会太麻烦了,有啥办法能解决这个问题。
伪删除的做法,面向欧盟用户的话,是违反 GDPR 的。
加个 status,不要真的删了,一来破坏了表与表间的关联,二来嘛,数据还是挺重要的,这东西决定了现代互联网的拓扑和连接方式
没数据,你还怎么玩,是不?
#1 #22
软删除用时间戳 deleted_at (timestamp) 更合适而不是单纯的 bool,因为同时记录了删除时间(除非另有 log/表记录删除时间等信息)
https://www.douban.com/group/topic/36082266/ 是这种?用户注销了,但是用户数据却保留了
是用户自己删除他的文章。现在才发现大家都是用的软删除,汗。。
嗯嗯,如果空间足够大的话,你的做法比较好。
这是什么路子。。。
互联网企业不存在删除操作。。。
写程序的原则是尽可能给自己留后路
isdel 不可能真正删除用户的文章 而且 一般还会保存几个历史版本 QAQ
逻辑删除
软删除
created at,updated at 和 deleted at😂😂

