我正在使用Flask和pyMongo开发一个网络应用程序,我最近开始集成Flask-Admin模块(1.0.4),给予新的mongodb支持。
使用ModelViews时,一切都很顺畅,但是当涉及到BaseView的子类化时,我根本无法使它工作。
这是我的设置:
user_view = Admin(app, name='User stuff', url="/user", endpoint="user")
class ProfileForm(wtf.Form):
username = wtf.TextField('Username', [wtf.Required()])
name = wtf.TextField('Name', [wtf.Required()])
class Profile(BaseView):
@expose('/', methods=('GET', 'POST'))
def profile(self):
user = User(uid) # gets the user's data from DB
form = ProfileForm(request.form, obj=user)
if form.validate_on_submit():
data = form.data
user.set(**data)
user.save()
flash("Your profile has been saved")
else:
flash("form did not validate on submit")
return self.render('user/profile.html', form=form, data=user)
user_view.add_view(Profile(name='Profile', url='profile'))
提交表单时,wtforms不会报告任何错误(除非有任何错误),但验证不会返回到我的个人资料视图(else:分支始终执行)
尽管我已经彻底扫描了烧瓶管理员文档,源代码和示例,但我无法找到这项工作。
有人可以建议我如何修复我的代码,或者解决这个问题吗?
答案 0 :(得分:4)
我怀疑使用GET方法而不是POST或Flask-WTF CSRF检查提交表单失败。
这是我用你的示例代码制作的小小的要点。它按预期工作:https://gist.github.com/4556210
很少有评论:
在任何一种情况下,Flask-Admin视图的行为与“普通”Flask视图完全相同,它们的组织方式不同。