记Flask-Sqlalchemy一次奇葩操作

在写用户编辑的时候,进行前端过滤,只是将用户ID和更改的字段传递给后端,可以后端我并不知道哪个字段更改啊(真是自己给自己挖坑啊)现在想想是不是当时喝醉写的代码

具体代码就不看了,说下个人认为正常操作吧

正常情况下,前端正常的判断还是需要的,然后将用户的所有字段都传递过来,并不是只有更改的字段,如果只传更改字段,其实在获取各个字段的时候,将默认值改成数据库中的数据也可以操作,这里我会再写一篇文章进行详细记录,先说说这次奇葩操作。

id name email
1 张三 zhangsan@qq.com
2 李四 lisi@qq.com

比如我现在用这个表,前端我需要修改张三的邮箱,而我往后端传递的参数只有id和修改后email,而后端正常更改用户数据的话,先根据id查询到相关用户,然后进行修改。

1
user = User.query.get(id)
2
user.email = 'zhangsan111@qq.com'
3
db.session.commit() #提交

可是我只传emailid的话,我可以根据id找到这个用户,但是再进行user.xxx=xxx时,我就不知道如何解决了,于是酒劲上来了,突发奇想,这样操作。

1
data = request.values   #获取返回的字典如{'id':1, 'email':'zhangsan111@qq.com'}
2
key = list(data.keys())  #获取字典中的key如:['id', 'name']
3
key.remove('id')  #将列表中的id删除,应为主键不可更改
4
for i in key:
5
4user.__setattr__(i, data.get(i))  #将列表中的其他字段通过user.__setattr__('email','zhangsan111@qq.com')进行更改,这样我就不要顾虑前端哪个字段更改了,都可以解决。
6
db.session.commit() #提交

现在看看这个操作还是想笑,后续我会关于这个实现,更新个正常点的方法。