之前不是又一个set_attrs方法来处理表单对模型对么

来源:12-15 完成鱼漂业务逻辑

老卢123123

2018-07-23

def set_attrs(self, attrs_dict):
    for key, value in attrs_dict.items():
        if hasattr(self, key) and key != 'id':
            setattr(self, key, value)
user.set_attrs(form.data)

为什么在save_drifrt的时候不用呢,而要用populate_obj

或者说,前面user.set_attrs(form.data) 也可以用form.populate_obj(user) ?

写回答

2回答

老卢123123

提问者

2018-07-23

@web.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm(request.form)
    if request.method == 'POST' and form.validate():
        with db.auto_commit():
            user = User()
            user.set_attrs(form.data)
            db.session.add(user)
        return redirect(url_for('web.login'))
    return render_template('auth/register.html', form=form)

上面这个是用set_attrs()


下面这个是用form.popilate_obj()

@web.route('/register2', methods=['GET', 'POST'])
def register2():
    form = RegisterForm(request.form)
    if request.method == 'POST' and form.validate():
        with db.auto_commit():
            user = User()
            form.populate_obj(user)
            # user.set_attrs(form.data)
            db.session.add(user)
        return redirect(url_for('web.login'))
    return render_template('auth/register.html', form=form)


不管调试,还是实际用,效果都是一样的···

0
0

7七月

2018-07-23

这两个方法是相反的呀,你好好想想

0
2
7七月
回复
老卢123123
看错了,这两个方法确实可以实现一样的。但是setAttr的好处在于可以不依赖form。
2018-07-24
共2条回复

Python Flask高级编程之从0到1开发《鱼书》精品项目

7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程

2735 学习 · 1267 问题

查看课程