Есть некоторые операции, которые необходимо выполнить перед запуском некоторых маршрутов. Например:
- проверить, узнаем ли мы пользователя,
- проверить язык,
- проверить местоположение,
- установить переменные на панели навигации (здесь после названного заголовка) html
и т. д., затем принимайте решения на основе результата и, наконец, запускайте запрошенный маршрут.
Мне трудно использовать respose.set_cook ie ("cookie_name", actual_cook ie) внутри декоратора. Кажется, что flask имеет объект make_response, который работает хорошо (см. Здесь о проблеме переполнения стека 34543157: Python Flask - Установка повара ie с использованием декоратора ), но я нахожу трудно воспроизвести то же самое с bottle.
в любом случае, вот моя попытка, которая не работает:
#python3
#/decorator_cookie.py
from bottle import request, response, redirect
from other_module import datamodel, db_pointer, secret_value #custom_module
import json
cookie_value = None
surfer_email_exist_in_db = None
header = None
db_pointer = instanciation_of_a_db_connexion_to_tables
surfer = db_pointer.get(request.get_cookie('surfer')) if db_pointer.get(request.get_cookie('surfer')) != None else "empty"
def set_header(func):
def header_manager():
global cookie_value, surfer_email_exist_in_db, header, db_pointer
cookie_value = True #for stack-overflow question convenience
surfer_email_exist_in_db = True #for stack-overflow question convenience
if not all([cookie_value, surfer_email_exist_in_db]):
redirect('/login')
else:
header = json.dumps(db_pointer.get('header_fr'))
response.set_cookie("header", header, secret = secret_value, path = "/", httponly = True)
return func()
return header_manager
и основной файл, в котором маршрутизация идет на
#python3
#/main.py
from bottle import route, request
from decorator_cookie import set_header
from other_module secret_value
@route('/lets_try')
@set_header
def lets_try():
header = request.get_cookie('header', secret = secret_value)
print(header) #here I get None
return template('lets_try.tpl', headers = header)
Я также пробовал установить повар ie вот так:
make_response = response(func).set_cookie("header", header, secret = secret_value, path = "/", httponly = True)
Но получил ошибку :) Вот ответ do c: Ответная документация
У вас есть подсказки? Спасибо