在写用户编辑的时候,进行前端过滤,只是将用户ID和更改的字段传递给后端,可以后端我并不知道哪个字段更改啊(真是自己给自己挖坑啊)现在想想是不是当时喝醉写的代码
具体代码就不看了,说下个人认为正常操作吧
正常情况下,前端正常的判断还是需要的,然后将用户的所有字段都传递过来,并不是只有更改的字段,如果只传更改字段,其实在获取各个字段的时候,将默认值改成数据库中的数据也可以操作,这里我会再写一篇文章进行详细记录,先说说这次奇葩操作。
id | name | |
---|---|---|
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() #提交 |
可是我只传email
和id
的话,我可以根据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() #提交 |
现在看看这个操作还是想笑,后续我会关于这个实现,更新个正常点的方法。