2016-04-02 4 views
0

Я довольно новичок в Flask/Flask-Admin. Я следил за учебником по администратору флэшей и сумел заставить панель администратора работать, но немного проиграл, как получить реализованные ниже вещи. https://github.com/flask-admin/flask-admin/tree/master/examples/authFlask Admin Custom View

  • При входе в систему как обычный пользователь, я могу увидеть только «домашней» страницы. Как я могу выставить другие взгляды на «обычный пользователь» и ограничить такие действия, как только для чтения и т.д.

  • Я создал «BaseView», который не связан с какими-либо другими моделями, как показано ниже:

class SitesView(MyBaseView): 
    @expose('/') 
    def index(self): 
    return self.render('views/testviews.html') 

admin.add_view(SitesView(name='Test views', endpoint='test views')) 

и HTML, как показано ниже:

{% extends 'admin/master.html' %} 
{% block body %} 
{{ super() }} 
{% if current_user.has_role('view1') %} 
<a href="#">Site1</a> 
{% endif %} 
{% if current_user.has_role('view2') %} 
<a>Site2</a> 
{% endif %} 
{% if current_user.has_role('view3') %} 
<a>Site3</a> 
{% endif %} 
{% if current_user.has_role('view4') %} 
<a>Site4</a> 
{% endif %} 
{% endblock %} 

Это г ives меня новая вкладка с разными представлениями с работами, как ожидалось.

Что я пытаюсь достичь здесь, когда пользователь щелкает ссылку Site1, они идут на страницу Site1 в интерфейсе flask-admin, но я не уверен, как это сделать. Я мог бы создать новый маршрут для этого, но проблема в том, что я не могу (не знаю, как) расширять шаблон флэш-админа.

Например, это работает, но это перенаправление страницы за пределами шаблона колба-администратора:

@app.route('/views/') 
def views(): 
    return render_template('views/views1.html') 

и модифицировали шаблоны> админ> index.html страницу с ниже:

<ul class="lead text-center list-group"> 
    {% if current_user.has_role('view1') %} 
     <li class="list-group-item"><a href="{{ url_for('views') }}">View1</a></li> 
    {% endif %} 
    {% if current_user.has_role('view2') %} 
     <li class="list-group-item"><a href="#">View2</a></li> 
    {% endif %} 
    {% if current_user.has_role('view3') %} 
     <li class="list-group-item">View3</li> 
    {% endif %} 
    {% if current_user.has_role('view4') %} 
     <li class="list-group-item">View4</li> 
    {% endif %} 
</ul 

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

Спасибо за ваше время.

Пожалуйста, дайте мне знать, если вы хотите, чтобы я предоставил дополнительную информацию по этой проблеме.

С уважением.

ответ

0

Итак, просмотрев документацию и учебники, я нашел решение своей проблемы.
На мой первый вопрос:

При входе в систему как обычный пользователь, я могу увидеть только «домашней» страницы. Как я могу подвергать другие взгляды «нормальному пользователю» и ограничивать такие действия, как чтение и т. Д.

Мы можем сделать это путем переписывания нашей точки зрения функции is_accessible метод, как показано ниже:

def is_accessible(self): 
    if not current_user.is_active or not current_user.is_authenticated: 
     return False 

    if current_user.has_role('superuser') or current_user.has_role('user') or current_user.has_role('view1'): 
     return True 

    return False 

Для моего второго вопроса мы просто должны дать конечную точку, как для нашего BaseView, как показано ниже:

class MyView(BaseView): 
    @expose('/') 
    def index(self): 
     return self.render('views.html') 

admin.add_view(MyView(name='Custom Views', endpoint='customviews')) 

А затем в вашем шаблоне jinja вам необходимо называть его:

href="{{ url_for('customviews.index') }} 

Только одна вещь, чтобы отметить, как это сделать:

current_user.has_role('superuser') or current_user.has_role('user') or current_user.has_role('view1') 

может получить довольно грязно, если у нас так много ролей, не знаю, как мы будем подходить к этому, но надеюсь, что это поможет кому-то.

Спасибо всем.