FlaskAdmin自定义视图

2024-09-29 19:32:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Flask和pyMongo开发一个web应用程序,最近我已经开始集成Flask管理模块(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:branch始终执行)

我找不到办法让这个工作,尽管有彻底扫描烧瓶管理文件,源代码和例子。

有人能建议我如何修复代码,或者解决这个问题吗?


Tags: nameformviewurlflaskdataprofileclass
1条回答
网友
1楼 · 发布于 2024-09-29 19:32:20

我怀疑表格是用GET方法提交的,而不是用POST或烧瓶进行的,因为CSRF检查失败。

这是我用你的示例代码做的一个小要点。它按预期工作:https://gist.github.com/4556210

很少评论:

  1. 模板使用一些Flask管理库函数来呈现表单。如果你不想,你不必使用它们
  2. 使用模拟用户对象
  3. 如果要运行示例,请将模板放在templates/子目录下。

在这两种情况下,Flask管理视图的行为与“普通”Flask视图完全相同,只是它们的组织方式不同。

相关问题 更多 >

    热门问题