bottle:如何在python装饰器中设置cookie?

问题描述 投票:0回答:1

在运行某些路由之前,需要完成一些操作。例如:

  • 检查我们是否识别出用户,
  • 检查语言,
  • 检查位置,
  • 在html的导航栏中(在命名标题之后)设置变量

依此类推,然后根据结果做出决定,最后运行所请求的路线。

我发现很难在装饰器中使用respose.set_cookie(“ cookie_name”,Actual_cookie)。似乎flask具有一个运行良好的“ make_response”对象(请参见堆栈溢出问题34543157:Python Flask - Setting a cookie using a decorator的此处),但是我发现很难用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)

我也尝试过这样设置Cookie:


make_response = response(func).set_cookie("header", header, secret = secret_value, path = "/", httponly = True)

但出现错误:)这是响应文档:Response documentation

您有任何线索吗?谢谢

python python-3.x cookies python-decorators bottle
1个回答
0
投票

您的代码没有问题,您所缺少的是理解就是理解

Request 1 [By Browser/No Cookies] -> Request has No cookies -> Response you add cookie header

Request 2 [By Browser/Header Cookies] -> Request has Header cookies -> Response

因此,对于您的第一个请求,Request.get_cookie将返回None,但对于您的第二个请求,它将实际返回值

Working fine

© www.soinside.com 2019 - 2024. All rights reserved.