gpt4 book ai didi

python - Bottle : how to set a cookie inside a python decorator?

转载 作者:行者123 更新时间:2023-12-03 09:33:09 24 4
gpt4 key购买 nike

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

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

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

    我发现很难在装饰器中使用 respose.set_cookie("cookie_name", actual_cookie)。似乎 flask 有一个运行良好的“make_response”对象(请参阅此处堆栈溢出问题 34543157 : Python Flask - Setting a cookie using a decorator ),但我发现很难用瓶子重现同样的事情。

    无论如何,我的尝试不起作用:

    #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

    你有什么线索吗?
    谢谢

    最佳答案

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

    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

    关于python - Bottle : how to set a cookie inside a python decorator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61680470/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com