python新手。我使用bottle.py作为Web服务器。
我有一组需要在不同路由上呈现的静态HTML文件。我正在使用static_file()函数。我还想为页面设置基于会话的cookie。所以我使用的是response.set_cookie()。
但事实证明,当我返回一个static_file时,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'])
答案 0 :(得分:6)
欢迎使用Bottle和Python。 :)
看Bottle source code,问题很明显。看看def static_file(...):
...
return HTTPResponse(body, **headers)
如何结束:
static_file
HTTPResponse
会创建一个新 static_file
对象 - 因此您之前设置的所有标头都将被丢弃。
一个非常简单的方法是在调用@app.route("/index")
def landingPage():
resp = static_file("/html/index.html", root=config.path_configs["webapp_path"])
resp.set_cookie("bigUId", "uid12345")
return resp
后设置Cookie ,如下所示:
my_matrix[my_matrix==0] <- NA
我刚尝试过,它完美无缺。祝你好运!
答案 1 :(得分:0)
好吧,我刚刚尝试过,确实它没有用,我之前从未尝试过使用带有static_file()的cookie ...但是,你可以执行以下操作将静态文件作为模板返回,并且cookie将是设置:
您的路由功能:
@route('/test')
def cookie_test():
response.set_cookie("test", "Yeah")
return template('template/test.html')
要实现这一点,您需要以这种方式为/ template定义路径:
@route('/template/<filepath:path>')
def server_static(filepath):
return static_file(filepath, root="./template")
(显然,根据您的项目路径将“/ template”更改为您需要的任何内容!)
我这样做,而且工作正常!当你尝试使用static_file()设置一个cookie时,我不确定为什么它不起作用,它可能来自这样一个事实:IT是你正在服务的静态文件,或者其他什么,我真的不知道。
另外,使用template()函数来服务一个“静态”html页面可能不是正确的方法,但是我有一段时间以来一直在做这个,我从来没有遇到任何问题有这个。
希望它有所帮助!