2016-04-02 26 views
0

Flask/Flask-Admin konusunda oldukça yeni. Flask admin üzerindeki eğiticiyi takip ettim ve yönetici panelini almayı başardım ancak aşağıdaki şeylerin nasıl gerçekleştirileceği konusunda biraz kaydım. Ben sadece "ev" sayfasını görebilirsiniz normal bir kullanıcı olarak giriş https://github.com/flask-admin/flask-admin/tree/master/examples/authFlask Admin Özel Görünüm

  • . nasıl diğer görünümleri maruz bırakabilir "normal kullanıcı" ve bu tür aşağıda gibi diğer modellerle ilişkili olmayan bir "baseview" oluşturduk

  • vb salt okunur olarak eylemleri kısıtlamak için:

aşağıdaki gibi
class SitesView(MyBaseView): 
    @expose('/') 
    def index(self): 
    return self.render('views/testviews.html') 

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

ve 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 %} 

Bu g beklendiği gibi işleri ile farklı görünümleri ile yeni bir sekme ives.

Burada ulaşmaya çalıştığım şey, kullanıcı flask-admin arabiriminde Site1 sayfasına gittiklerinde Site1 bağlantısını tıklattığında, ancak bunu nasıl yapacağından emin değilim. Bunun için yeni bir rota oluşturabilirdim ama sorun, flask yönetici şablonunu genişletemiyorum (nasıl yapılacağını bilmiyorum).

bu işleri Örneğin

ama sayfa dış kabı-admin şablonu yönlendirmek:

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

ve aşağıdaki şablonlar> yönetici> index.html sayfasında modifiye:

<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 

Kullanıcı deneyimini tutarlı tutabilmem için tüm web sitesini flask admin kullanarak oluşturmak istiyorum. Bunu yanlış yoldan mı yapıyorum?

Zaman ayırdığınız için teşekkür ederiz.

Lütfen bu sorun hakkında daha fazla bilgi vermemi isterseniz bize bildirin.

Saygılarımızla.

cevap

0

Belgeler ve eğitimlerden geçtikten sonra sorunumun çözümünü buldum. Benim ilk soru için
:
Ben sadece "ev" sayfasını görebilirsiniz normal bir kullanıcı olarak giriş

. diğer görünümleri "normal kullanıcı" olarak nasıl görüntüleyebilirim ve yalnızca gibi okuma işlemlerini kısıtlayabilirim

Bizim bakış işlevlerini aşağıdaki gibi is_accessible yöntem üzerine yazarak bunu yapabilirsiniz

:

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

admin.add_view(MyView(name='Custom Views', endpoint='customviews')) 
: biz sadece aşağıdaki gibi bizim BaseView gelince uç noktasını vermek gerekir benim ikinci soru için

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 

Ve jinja şablonunuzda şu numarayı aramanız gerekir:

Sadece bir şey yapıyorum, nota: Biz bu kadar çok rol varsa

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

oldukça dağınık alabilir, bu yaklaşım olur ama bu umut biri yardımcı olacaktır nasıl emin.

Herkese teşekkürler.