2015-12-08 19 views
5

Bir denetleyici eylemini süsleyen @login_required dekoratörüm var. Ancak benim app çok büyük ve birçok farklı denetleyici dosyalarında tonlarca yol var. Her rotayı süslemek için tek tek gitmek hataya eğilimli (kolayca birisini özleyebilirim) ve zaman alıcıdır.Flask: Her rotayı bir kerede süsleyin?

Tüm yol boyunca tüm rotaları bir defada dekore etmenin bir yolu var mı?

Web sunucusunu (apache) kimlik doğrulama formunu uygulama düzeyine taşıyorum, bu yüzden bu sorunu yaşıyorum.

+0

bir modifiye yönlendirici yazma denediniz mi? – ferrix

+0

Basit 'login_required' onay her zaman sizin için yeterli olacak mı? Her zaman farklı kullanıcılar için farklı düzeylerde izinlere ihtiyacım var, bu yüzden 'require_privilege (' ayrıcalık adı ') 'ile her şeyi dekore ediyorum. Bu şekilde gitmeye karar verirseniz soruyorum, o zaman her yolu (başka izinler gerektiriyor) süslemek dışında bir yol yoktur. – zvone

+0

@ferrix Hayır, bunu duymadım ama kontrol edeceğim. zvone Hayır farklı izinlere/rollere sahip değiliz. Her kullanıcı aynı izinlere sahiptir. – steve

cevap

8

Sen Ters yönde gidip ve varsayılan olarak giriş gerektirecek şekilde before_request dekoratör kullanın ve örneğin değil giriş yapılmasını gerektiren yapmak yolları etiketlemek için özel bir dekoratör kullanabilirsiniz:

_insecure_views = [] 

@my_blueprint.before_request 
def require_login(): 
    if request.endpoint in _insecure_views: 
     return 
    # check for login here 

def login_not_required(fn): 
    '''decorator to disable user authentication''' 
    endpoint = ".".join([some_blueprint.name, fn.func_name]) 
    _insecure_views.append(endpoint) 
    return fn 

@some_blueprint.route('/') 
@login_not_required 
def index(): 
    pass 

Muhtemelen sarabilirdiniz kendi türetilmiş bir blueprint/Flask sınıfı içine.

Düzenleme: temelde Best way to make Flask-Login's login_required the default

+0

Bunun için teşekkürler ve diğer gönderiye bağlantı. “app.view_functions”, aradığım gizli sos. İşlevlere bir başvuru olduğu sürece, URL'ler bu işlevlere eşleştirilebilir. – steve