2013-01-15 15 views
6

Pracuję nad aplikacją internetową za pomocą Flask i pyMongo, a ostatnio zacząłem integrować moduł Flask-Admin (1.0.4), biorąc pod uwagę nowe wsparcie mongodb.Flask-Admin - Dostosowywanie widoków

Wszystko jest gładkie i delikatne podczas korzystania z ModelViews, ale jeśli chodzi o podklasę BaseView, po prostu nie mogę go uruchomić.

Oto moja konfiguracja:


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')) 

Po wysłaniu formularza wtforms nie zgłasza żadnych błędów (o ile istnieje), ale walidacja nie wrócić do mojego widoku profilu (reszta: gałąź jest zawsze wykonywana)

Nie ma sposobu, abym mógł znaleźć tę pracę, pomimo dokładnej zeskanowanej dokumentacji flask-admin, kodu źródłowego i przykładów.

Czy ktoś może zasugerować, w jaki sposób mogę naprawić mój kod lub obejść ten problem?

Odpowiedz

4

Podejrzewam, że formularz jest wysyłany za pomocą metody GET zamiast testu POST lub Flask-WTF. Kontrola CSRF kończy się niepowodzeniem.

Oto mały fragment, który zrobiłem z przykładowym kodem. To działa zgodnie z oczekiwaniami: https://gist.github.com/4556210

kilka uwag:

  1. Szablon korzysta z niektórych funkcji bibliotecznych Kolba-admin do renderowania formularza. Nie musisz ich używać, jeśli nie chcesz;
  2. Używa symulowanego obiektu użytkownika
  3. Umieść szablon w podkatalogu templates/subdirectory, jeśli chcesz uruchomić próbkę.

W obu przypadkach widoki Flask-Admin zachowują się dokładnie tak samo jak "normalne" widoki kolb, są po prostu zorganizowane inaczej.

+0

Dzięki Joes. Masz rację, problem był w Formie, ponownie użyłem właściwego formularza z innego modułu, ale szablon pomijał niektóre pola obowiązkowe. Dziękuję również za flask-admin, to świetna biblioteka! – user1981924

+0

@Joes Tylko w przypadku, gdy znasz odpowiedź, zacząłem nagrodę w [to pytanie] (http://stackoverflow.com/q/33660840). :) –