增加 Flask 中的 cookie 值
Increment the cookie value in Flask
我想统计页面的访问次数。下面是相同的代码。当我 运行 代码时,它不会设置 'visit_count' cookie 和 '/visit' returns 'None' 值。有什么问题?
from flask.helpers import make_response
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def show_page():
return render_template('cookiecounter.html')
@app.route('/setcookie', methods=['GET','POST'])
def setcookie():
resp = make_response('Welcome to our site!')
resp.set_cookie('user_visit',str(1), max_age=5*60*60)
return resp
@app.route('/visit', methods=['GET','POST'])
def visit():
vc=request.cookies.get('user_visit')
if vc==1:
return 'You are visiting for the first time'
else:
vscount=int(vc)+1
resp1 = make_response('new visit')
resp1.set_cookie('visit_count',str(vscount), max_age=5*60*60)
inc_count=request.cookies.get('visit_count')
return str(inc_count)
if __name__=="__main__":
app.run(debug=True)
发生了一些导致意外结果的事情。
resp1.set_cookie('visit_count',str(vscount), max_age=5*60*60)
当您这样做时,您实际上并没有设置 cookie 的值,只是准备响应,以便在客户端收到您的响应后设置 cookie。
inc_count=request.cookies.get('visit_count')
由于前面的语句实际上没有设置任何 cookie,这实际上是在检索与您第一次调用它时相同的值,即旧值。
return str(inc_count)
还记得您是如何设置响应以便在客户端设置 cookie 的吗?由于您没有返回该响应,因此永远不会设置更新的 cookie,您只剩下旧的(在您的情况下根本没有 cookie)。另外,您还返回了旧值,因为您在之前的行中检索到了它。
另一件事是您正在检查包含字符串“1”和数字 1 的变量之间的相等性,这可能不是您想要做的。
我不确定您为什么使用两个不同的 cookie user_visit
和 visit_count
。
from flask.helpers import make_response
from flask import Flask, request
app = Flask(__name__)
@app.route('/visit', methods=['GET','POST'])
def visit():
vc=request.cookies.get('user_visit', "1")
resp = make_response(f"This is visit number {int(vc)}")
vscount=int(vc)+1
resp.set_cookie('user_visit',str(vscount), max_age=5*60*60)
return resp
这可能接近您想要实现的目标。
- https://docs.python.org/3/library/stdtypes.html#dict.get(字典获取)
- https://www.python.org/dev/peps/pep-0498/(字符串插值)
Python 快乐
我想统计页面的访问次数。下面是相同的代码。当我 运行 代码时,它不会设置 'visit_count' cookie 和 '/visit' returns 'None' 值。有什么问题?
from flask.helpers import make_response
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def show_page():
return render_template('cookiecounter.html')
@app.route('/setcookie', methods=['GET','POST'])
def setcookie():
resp = make_response('Welcome to our site!')
resp.set_cookie('user_visit',str(1), max_age=5*60*60)
return resp
@app.route('/visit', methods=['GET','POST'])
def visit():
vc=request.cookies.get('user_visit')
if vc==1:
return 'You are visiting for the first time'
else:
vscount=int(vc)+1
resp1 = make_response('new visit')
resp1.set_cookie('visit_count',str(vscount), max_age=5*60*60)
inc_count=request.cookies.get('visit_count')
return str(inc_count)
if __name__=="__main__":
app.run(debug=True)
发生了一些导致意外结果的事情。
resp1.set_cookie('visit_count',str(vscount), max_age=5*60*60)
当您这样做时,您实际上并没有设置 cookie 的值,只是准备响应,以便在客户端收到您的响应后设置 cookie。
inc_count=request.cookies.get('visit_count')
由于前面的语句实际上没有设置任何 cookie,这实际上是在检索与您第一次调用它时相同的值,即旧值。
return str(inc_count)
还记得您是如何设置响应以便在客户端设置 cookie 的吗?由于您没有返回该响应,因此永远不会设置更新的 cookie,您只剩下旧的(在您的情况下根本没有 cookie)。另外,您还返回了旧值,因为您在之前的行中检索到了它。
另一件事是您正在检查包含字符串“1”和数字 1 的变量之间的相等性,这可能不是您想要做的。
我不确定您为什么使用两个不同的 cookie user_visit
和 visit_count
。
from flask.helpers import make_response
from flask import Flask, request
app = Flask(__name__)
@app.route('/visit', methods=['GET','POST'])
def visit():
vc=request.cookies.get('user_visit', "1")
resp = make_response(f"This is visit number {int(vc)}")
vscount=int(vc)+1
resp.set_cookie('user_visit',str(vscount), max_age=5*60*60)
return resp
这可能接近您想要实现的目标。
- https://docs.python.org/3/library/stdtypes.html#dict.get(字典获取)
- https://www.python.org/dev/peps/pep-0498/(字符串插值)
Python 快乐