Django框架下的小人物--Cookie
Posted 追风的小蚂蚁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django框架下的小人物--Cookie相关的知识,希望对你有一定的参考价值。
1. 什么是Cookie,它的用途是什么?
Cookies是一些存储在用户电脑上的小文件。它是被设计用来保存一些站点的用户数据,这样能够让服务器为这样的用户定制内容,后者页面代码能够获取到Cookie值然后发送给服务器。比如Cookie中存储了所在地理位置,以后每次进入地图就默认定位到改地点即可。
2. 通过什么方式能获取到Cookie的内容,我能查看自己电脑上的Cookie吗?
能通过Web Server或者客户端浏览器来获取到Cookie。多数浏览器能够配置允许用户访问Cookies,但是注意不同的站点之间的Cookie是不能共享的。打开Chrome的调试窗口可以在Resource的Cookie侧边栏查看,或者在console中输入document.cookie来查看,这属于在电脑上行查看,另外一种服务器中查看可见后面的例子。
3. Cookie是什么时候生成的,完整的生成、传递和使用过程是怎么样的?
写数据到Cookie中通常是在一个页面被加载的时候,比如提交按钮被按下,后台处理完请求跳转到相应页面后会把Cookie值带回来,如下是一个例子:
·你在浏览器地址栏输入了一个站点,然后浏览器会发送请求到站点的Web服务器请求该页面
·与此同时,浏览器会在个人电脑上行查找和该站点对应的Cookie文件,如果发现了就会把里面的键值对内容全部发送给Web服务器,如果没找到则不发送。
·页面服务器接收到了Cookie的数据后,可以利用这些数据决定返回到前台的内容(更进一步是跟Session结合使用)
·如果没键值对被Web服务器接收到,站点就知道该用户没有访问过,就会为这个访问地址新建一个ID并且发送一些键值对给前台,这些值会被放在这次响应中的Header带给浏览器,浏览器端于是有了Cookie的值
·任何到服务的访问和数据请求都可能很对Cookie中的键值对进行修改
4.一个简单使用Cookie的例子
这个例子是利用Cookie实现一个用户登陆
views.py
user_info={ #创建一个后台数据组 ‘dachengzi‘:{‘pwd‘:‘123123‘}, ‘gangbazi‘:{‘pwd‘:‘123‘}, } def login(request): if request.method=="GET": #通过GET请求返回到login界面 return render(request,‘login.html‘) if request.method==‘POST‘: #请求方式为POST u=request.POST.get(‘user‘) p=request.POST.get(‘pwd‘) dic=user_info.get(u) #从前端得到username与user_info的数据组进行比较 if not dic: #不相同 return render(request,‘login.html‘) #返回login.html if dic[‘pwd‘]==p: #如果密码与前端输入的相同 res=redirect(‘/index‘) #跳转到index.html res.set_cookie(‘username‘,u) #设置cooki里的用户名 return res else: return render(request,‘login.html‘) def index(request): v=request.COOKIES.get(‘username‘) #从cookie里得到用户名 if not v: #用户名不存在 return request(‘/login‘) #返回login.html return render(request,‘index.html‘,{‘current_user‘:v})
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/login/" method="post" > <input type="text" name="user" placeholder="用户名" /> <input type="password" name="pwd" placeholder="密码" /> <input type="submit" value="提交" /> </form> </body> </html>
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>欢迎登录:{{ current_user }}</h1> </body> </html>
5. 使用Cookie存在的一些问题
·多个用户公用一台电脑比如网吧,那么前一个人登陆购物网站并购买物品,后一个人可以使用前一人的账号进行购物。
·清除浏览器缓存的账号和密码等操作可以擦出掉Cookie,因而很难恢复之前做过的操作,要查看添加到购物车商品几乎不可能。
·多太电脑之间的网站浏览记录(这里不是浏览器的历史记录)会不一致,比如这台电脑某宝告诉你你浏览过某些商品,另一台电脑可能是另外一些商品,因为不同Cookie对应的不同浏览记录。
这也是为什么需要使用账号登陆的原因,只要登陆过就能把所有记录跟后台数据库中的账号强关联起来。
以上是关于Django框架下的小人物--Cookie的主要内容,如果未能解决你的问题,请参考以下文章
Django基于PythonWeb的Django框架设计实现天天生鲜系统-6Django中Cookie存取
Django cookie 横幅:window.wpcc 未定义
Django框架进阶7 forms组件(pycharm内置测试环境Python Console), cookie与session操作