2015-03-09 2 views
2

Я строю систему с использованием Flask, которая содержит как сайт, так и api для приложения. У меня before_request определенная для webviews следующим образом:Как создать фальш-представление before_request для определенных видов?

@app.before_request 
def before_request(): 
    g.user = current_user 
    # And I do some more stuff here.. 

У меня есть свои взгляды на структуру на основе папок, как это:

views (folder) 
--------------- 
    - __init__.py 
    - apiviews.py 
    - webviews.py 

Так как я использую логин на основе маркеров system для api Теперь я хочу определить другой before_request для всех apiviews. Есть ли способ, которым я могу это сделать? Может быть, мне нужно определить декоратора или что-то еще? Все советы приветствуются!

ответ

6

Вы не можете использовать крючок before_request для определенных видов, а не в том же приложении.

Ваши варианты заключаются в следующем:

  • Использовать отдельный Blueprint для API и веб-сайта; вы может зарегистрировать before_request на чертеж, и он будет применяться к представлениям только для этого чертежа.
  • Используйте декоративные элементы для просмотра, а не before_request.
  • фильтр по пути запроса в обработчике before_request; if request.path.startswith(...) тестирование стиля.
+0

Это первый раз, когда я понимаю использование чертежей. Я только что реализовал его (был удивлен, как легко это было), и он работает как шарм. Спасибо миллион за простой, хотя и очень полный ответ! – kramer65

+0

@Martijn Pieters. Не могли бы вы объяснить «Использовать декораторы для просмотра, а не before_request». Спасибо –

+1

@Shafaq: используйте декоратор на каждом представлении, который должен иметь другое поведение. Напишите декоратор и примените его к каждому виду с помощью '@ decorator'. –

Смежные вопросы