6

私は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:ブランチは常に実行されます)

フラスコ管理者のドキュメント、ソースコード、および例を徹底的にスキャンしたにもかかわらず、この機能を実現する方法はありません。

誰かが私のコードを修正する方法、またはこの問題を回避する方法を提案できますか?

4

1 に答える 1

5

POSTの代わりにGETメソッドを使用してフォームが送信されているか、Flask-WTFCSRFチェックが失敗している疑いがあります。

これが私があなたのサンプルコードで作った小さな要点です。期待どおりに機能します:https ://gist.github.com/4556210

いくつかのコメント:

  1. テンプレートは、いくつかのFlask-Adminライブラリ関数を使用してフォームをレンダリングします。使用したくない場合は、それらを使用する必要はありません。
  2. モックユーザーオブジェクトを使用します
  3. サンプルを実行する場合は、templates/サブディレクトリの下にテンプレートを配置します。

いずれの場合も、Flask-Adminビューは、「通常の」Flaskビューとまったく同じように動作し、編成が異なるだけです。

于 2013-01-17T14:20:12.367 に答える