Ошибка MyIndexView в примере темы не работает в Flask-AppBuilder - PullRequest
0 голосов
/ 26 декабря 2018

Я реализовал шаги 1, 2 и 3 из раздела «Изменение индекса» этой страницы. https://flask -appbuilder.readthedocs.io / en / latest / customizing.html? Highlight = theme .

Я получаю следующую ошибку: \ app__init __. Py ", строка 4, из app.index import MyIndexView ImportError: невозможно импортировать имя 'MyIndexView'

Я внес эти изменения в bareboneПриложение Flask-AppBuilder.

Код точно такой, как показано на сайте.

Я ожидаю, что пример будет работать, как описано. Но я получаю сообщение, которое я разместил выше, когда я его запускаю.

1 Ответ

0 голосов
/ 17 января 2019

Ваш index.py должен выглядеть следующим образом (базовая версия).

# Import flask functions for redirecting and getting user status
from flask import g, url_for, redirect
# Import IndexView class to overwrite files/redirects and expose to expose custom index view
from flask_appbuilder import IndexView, expose

# File to display custom made different views based off if user is signed

class MyIndexView(IndexView):

    # Checking user and redirecting for user when user goes to index view
    @expose('/')
    def index(self):

        # Get user status
        user = g.user

        # Check user
        if user.is_anonymous:
            # user is not authenticated and gets redirected to New user page
            return redirect(url_for('HomeView.new'))
        else:
            # user is authenticated and has an account redirect to General page
            return redirect(url_for('HomeView.general'))

Затем в вашем views.py создайте простой вид, подобный этому

# Views for any home paths
class HomeView(BaseView):

    # add route base for views as /home
    route_base = "/home"

    # Route for new or logged out users
    @expose('/new')
    def new(self):
        return self.render_template('new_user.py')

    # Route for signed in users or users who want to just view data
    @expose('/general')
    def general(self):
        return self.render_template('my_index.py')

Также убедитесь, чточтобы добавить его в свой объект appbuilder в вашем init .py

appbuilder = AppBuilder(app, db.session, indexview=MyIndexView)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...