有些时候想用Cookies来做一些事情,但是又无法确定用户的浏览器是否已经打开Cookies。
以下是摘自django book里的原话
“cookie的存储是自愿的,一个客户端不一定要去接受或存储cookie。 事实上,所有的浏览器都让用户自己控制 是否接受cookies。 ”
所以说,检测用户浏览器Cookies的支持性是很有必要的。下面就通过我自己写的一个用户登录例子来讲述一下。
再一次引用 django book 的 话:
“你只需在视图(view)中调用 request.session.set_test_cookie(),并在后续的视图(view)、而不是当前的视图(view)中检查 request.session.test_cookie_worked() 。”
“虽然把 set_test_cookie() 和 test_cookie_worked() 分开的做法看起来有些笨拙,但由于cookie的工作方式,这无可避免。 当设置一个cookie时候,只能等浏览器下次访问的时候,你才能知道浏览器是否接受cookie。”
“检查cookie是否可以正常工作后,你得自己用 delete_test_cookie() 来清除它,这是个好习惯。 在你证实了测试cookie已工作了之后这样操作。”
1 2 3 4 5 6 7 8 9 10 11 |
def cookietest(request): if request.method == 'POST': if request.session.test_cookie_worked(): print '启用cookie' request.session.delete_test_cookie() return HttpResponse('您已经打开cookie') else: return HttpResponse('劳驾您打开浏览器的cookie') else: request.session.set_test_cookie() return render_to_response('cookie_test.html') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> </head> <body> <div class="panel-body"> <form role="form" action="/cookietest/" method="post"> <fieldset> {% csrf_token %} <input name="username"> <input name="password"> <input type="submit" class="btn btn-lg btn-success btn-block" value="登陆"> </fieldset> </form> </div> </body> </html> |
视图代码部分:
用户第一次请求页面时,走的是 else分支,同时set了一个test_cookie
当用户填写表单提交到后台是,走的是if分支,同时判断cookie是否工作,检测完成后删除了创建的cookie.
效果图:
开启cookie
未开cookie
- 本文固定链接: http://hanx.xin/2015/03/09/利用django自带方法来测试浏览器是否接受cookie/
- 转载请注明: hanxin 于 DJANGO那些事儿 发表