2016-08-12 1 views
0

Я пытаюсь получить роль для доступа к представлению, которое я определил как MethodView. Однако, похоже, я не могу правильно назвать маршрут.flask-security role_required with pluggable views

Если я просто требуют регистрации с декоратора все работает:

activities = Blueprint("activities", __name__, url_prefix="/activities") 

class ActivitiesView(MethodView): 
    def get(): 
     pass 

    def post(): 
     pass 

view = login_required(ActivitiesView.as_view("activities")) 
activities.add_url_rule('/', view_func=view) 

я получаю желаемое название маршрута, т.е. activities.activities:

>>> current_app.url_map 
Map([... 
<Rule '/activities/' (HEAD, POST, OPTIONS, GET) -> activities.activities>, 
...]) 

Однако, когда я пытаюсь использовать roles_required, в название маршрута искажено, а метод POST больше не указан:

view = roles_required("experimenter", ActivitiesView.as_view("activities")) 
activities.add_url_rule('/', view_func=view) 

>>> current_app.url_map 
Map([... 
<Rule '/activities/' (HEAD, OPTIONS, GET) -> activities.wrapper>, 
...]) 

Переключение аргументов на add_url_rule ничего не меняет. Как я могу использовать roles_required, не испортив название маршрута?

Выполнение этого фиксирует название маршрута, но не метод отсутствует POST:

view = roles_required("experimenter", endpoint="activities", ActivitiesView.as_view("activities")) 
activities.add_url_rule('/', view_func=view) 

ответ

0

Решение назвать декоратор:

view = roles_required("experimenter")(ActivitiesView.as_view("activities")) 
activities.add_url_rule('/', view_func=view) 

В качестве альтернативы:

decorators = [roles_required("experimenter")] 

Спасибо к этой статье:

http://scottlobdell.me/2015/04/decorators-arguments-python/