前言 ´・ᴗ・`
- 本节将讲述HTTP 与 cookies的故事 引出 个性化的页面订制思路——利用cookie存储用户的喜好
- 本篇内容将会帮助你学习…
- 1 会话的概念
- 2 cookie的概念以及简单应用
- 3 django 会话的函数简要介绍
HTTP背景
看过我之前文章的同志应该不陌生 HTTP是一个无状态(stateless) 的通信协议 意味着当通信断开 除非用户往数据库存了点东西 否则下次用户与网站见面 就好像又不认识了一样
这样的后果显而易见
假设用户喜好某种网站的颜色样式 或者不想某个弹窗再次提醒他干啥
那用户每次打开网页用户都要重新点一遍
用户体验-1
所以 会话以及cookie的概念应运而生
- 会话session 一个抽象的机制 实现了保存用户相关参数数据
可以选择会话 将用户数据保存在数据库 或者客户端本地 - cookie 会话机制的产物 就是—— 存储个性化的用户数据的一些文件
cookie有生命期 有些生命期只是会话生命期——通信一断就结束 因此cookie并不会在硬盘而是内存中
当然 以前有些网站非常粗心的把重要的信息如账号密码放到cookie中 导致被黑客获取
现在一般方式:
重要数据放db
无关紧要但特别繁杂的放cookie
django的session
还记得 当时配置setting.py 我们装了一些自己都不知道的app admin我们介绍完了 现在是 session
INSTALLED_APPS = [
...
'django.contrib.sessions',
....
MIDDLEWARE = [
...
'django.contrib.sessions.middleware.SessionMiddleware',
....
由于当时也已经数据库迁移过了 我们现在直接用就好
cookie的本质就是字典 一般在会话期间 我们要是想添加数据到cookie 你只需要知道键(key)的名称:
request.session['my_phone'] = '123456789'
这里我知道key=my_phone 就可以更改
当然更改有个例外 虽然不常用
假设是嵌套的形式 比如这样:
request.session['my_phone']['district_num'] = '0755'
这样的更改是无效的
如果临时需要 加上这句代码:
request.session.modified = True
如果默认一直需要,在setting.py 添加设置来让会话保存每一次修改
SESSION_SAVE_EVERY_REQUEST = True
cookie的应用——记录访问次数
我们在catalog/view.py index主页 加一个render渲染的参数 num_visits
# Number of visits to this view, as counted in the session variable.
num_visits=request.session.get('num_visits', 0)
request.session['num_visits'] = num_visits+1
注意这句get 意思 有就用上 没有就创建 并且默认值为0
这样可以避免报错 少写一些error捕获
然后修改context
context = {
'num_books': num_books,
'num_instances': num_instances,
'num_instances_available': num_instances_available,
'num_authors': num_authors,
'num_visits': num_visits,
# 添加了这句
}
接下来修改一下模板:catalog/templates/index.html
<p>You have visited this page {{ num_visits }}{% if num_visits == 1 %} time{% else %} times{% endif %}.</p>
这句放哪都行
其他细节
其实我们要使用cookie 为了用户 客户端 还需要有些操作
比如 cookie的设置是以下4个步骤来的
- 客户端发送一个http请求到服务器端
- 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
- 客户端发送一个http请求到服务器端,其中包含Cookie头部
- 服务器端发送一个http响应到客户端
那么正常来说 我们
先set-cookie请求发出去 发一个test-cookie
获取浏览器对cookie的支持情况·
然后删除test cookie
也就是: - set_test_cookie()¶
- test_cookie_worked()¶
- delete_test_cookie()¶
这3个函数
接下来 我们可以用get pop函数对cookie进行增删
-
get(key, default=None)¶
Example: fav_color = request.session.get(‘fav_color’, ‘red’) -
pop(key, default=__not_given)¶
Example: fav_color = request.session.pop(‘fav_color’, ‘blue’)
get在我们上面的小实例使用到了的
如果不考虑cookie 生命期问题
在用户登出以后 你可以选择清除所有cookie:flush()
如果想设置 获取cookie 生命期(expiry) 用以下函数
-
set_expiry(value)¶
-
get_expiry_age()¶
具体 详见:django session一节
总结 ´◡`
runserver 看下效果:)
下一节我们看看另一个app authentication 也就是多用户验证的设计
服务端编程(十二)- Django - authentication 认识用户验证
我的其他文章 希望能够帮到你 []( ̄▽ ̄)*
-
本文章专栏
手把手带你学后端(服务端) -
想学习数据库嘛? 不妨从MySQL入手
MySQL专栏 -
python这么火 想要深入学习python 玩一下简单的应用嘛?可以看我专栏 还在持续更新中哦:
python应用 -
谢谢大佬支持! 萌新有礼了:)