【问题标题】:Flask-Admin - Customizing viewsFlask-Admin - 自定义视图
【发布时间】:2013-01-15 23:36:07
【问题描述】:

我正在使用 Flask 和 pyMongo 开发一个 Web 应用程序,鉴于新的 mongodb 支持,我最近开始集成 Flask-Admin 模块 (1.0.4)。

使用 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: 分支始终执行)

尽管彻底扫描了烧瓶管理文档、源代码和示例,但我找不到任何方法来完成这项工作。

谁能建议我如何修复我的代码,或解决这个问题?

【问题讨论】:

    标签: python flask flask-admin


    【解决方案1】:

    我怀疑表单是使用 GET 方法而不是 POST 提交的,或者 Flask-WTF CSRF 检查失败。

    这是我使用您的示例代码制作的小要点。它按预期工作:https://gist.github.com/4556210

    几个cmets:

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

    在任何一种情况下,Flask-Admin 视图的行为方式都与“普通”Flask 视图完全相同,只是它们的组织方式不同。

    【讨论】:

    • 谢谢乔斯。没错,问题出在表单中,我正在重用来自另一个模块的正确表单,但模板省略了一些必填字段。也感谢 flask-admin,它是一个很棒的库!
    • @Joes 以防万一你知道答案,我开始对this question 进行赏金。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多