Python 使用瓶子.py为静态文件设置cookie

Python 使用瓶子.py为静态文件设置cookie,python,cookies,bottle,Python,Cookies,Bottle,python新手。我正在使用bottle.py作为web服务器 我有一组静态HTML文件,需要在不同的路径上呈现。我正在使用静态_file()函数来实现同样的功能。我还想为页面设置一个基于会话的cookie。所以我使用response.set_cookie() 但事实证明,当我返回一个静态文件时,cookie从未设置过。但是,如果我将响应更改为简单字符串,set_cookie()可以正常工作。有人能解释为什么吗?我怎样才能解决这个问题 @app.route("/index") def landi

python新手。我正在使用bottle.py作为web服务器

我有一组静态HTML文件,需要在不同的路径上呈现。我正在使用静态_file()函数来实现同样的功能。我还想为页面设置一个基于会话的cookie。所以我使用response.set_cookie()

但事实证明,当我返回一个静态文件时,cookie从未设置过。但是,如果我将响应更改为简单字符串,set_cookie()可以正常工作。有人能解释为什么吗?我怎样才能解决这个问题

@app.route("/index")
def landingPage():
response.set_cookie("bigUId", "uid12345")
# return "Hello there"    
return static_file("/html/index.html", root=config.path_configs['webapp_path'])

嗯,我只是尝试过,实际上它不起作用,我以前从未尝试过将cookie与静态文件()一起使用。。。但是,可以执行以下操作以将静态文件作为模板返回,并设置cookie:

您的路由功能:

@route('/test')
def cookie_test():
    response.set_cookie("test", "Yeah")
    return template('template/test.html')
要使其正常工作,您需要通过以下方式定义/模板的路由:

@route('/template/<filepath:path>')
def server_static(filepath):
    return static_file(filepath, root="./template")
@route(“/template/”)
def服务器_静态(文件路径):
返回静态_文件(filepath,root=“/template”)
(显然,根据项目路径将“/template”更改为您需要的任何内容!)

我就是这样做的,而且效果很好!我不确定当您尝试使用static_file()设置cookie时,它为什么不起作用,这可能是因为您正在提供的是一个静态文件,或者其他什么,我真的不知道

另外,使用template()函数来为“静态”html页面提供服务器可能不是正确的方法,但我一直都在这样做,我从来没有遇到过任何问题


希望有帮助

好吧,我只是尝试了一下,实际上它不起作用,我以前从未尝试过在静态文件()中使用cookie。。。但是,可以执行以下操作以将静态文件作为模板返回,并设置cookie:

您的路由功能:

@route('/test')
def cookie_test():
    response.set_cookie("test", "Yeah")
    return template('template/test.html')
要使其正常工作,您需要通过以下方式定义/模板的路由:

@route('/template/<filepath:path>')
def server_static(filepath):
    return static_file(filepath, root="./template")
@route(“/template/”)
def服务器_静态(文件路径):
返回静态_文件(filepath,root=“/template”)
(显然,根据项目路径将“/template”更改为您需要的任何内容!)

我就是这样做的,而且效果很好!我不确定当您尝试使用static_file()设置cookie时,它为什么不起作用,这可能是因为您正在提供的是一个静态文件,或者其他什么,我真的不知道

另外,使用template()函数来为“静态”html页面提供服务器可能不是正确的方法,但我一直都在这样做,我从来没有遇到过任何问题


希望有帮助

欢迎来到瓶子和Python.:)

从这个角度来看,问题显而易见。查看
静态文件
是如何结束的:

def static_file(...):
    ...
    return HTTPResponse(body, **headers)
static_file
创建一个新的
HTTPResponse
对象,因此在此之前设置的所有头都将被丢弃

解决此问题的一个非常简单的方法是在调用
static\u file
后设置cookies,如下所示:

@app.route("/index")
def landingPage():
    resp = static_file("/html/index.html", root=config.path_configs["webapp_path"])
    resp.set_cookie("bigUId", "uid12345")
    return resp

我刚试过,效果很好。祝你好运

欢迎来到瓶子和Python.:)

从这个角度来看,问题显而易见。查看
静态文件
是如何结束的:

def static_file(...):
    ...
    return HTTPResponse(body, **headers)
static_file
创建一个新的
HTTPResponse
对象,因此在此之前设置的所有头都将被丢弃

解决此问题的一个非常简单的方法是在调用
static\u file
后设置cookies,如下所示:

@app.route("/index")
def landingPage():
    resp = static_file("/html/index.html", root=config.path_configs["webapp_path"])
    resp.set_cookie("bigUId", "uid12345")
    return resp
我刚试过,效果很好。祝你好运