简单操作django中session和cookie

cookie

1.会话技术
  2.客户端的会话技术( 数据库保存在浏览器上)
  3.问题导致原因: 在web应用中,一次网络请求是从request开始,到response结束,跟以后的请求或者跟其他请求没有关系
  导致每次请求之间的数据没有关系 (短链接,长连接:QQ)
  解决: 在客户端保留数据(cookie)或者服务端保留数据(session)来建立关系
  4.cookie的使用
    1.存
    格式: response.set_cookie(key,value)
    通过response通知浏览器要保存key,value形式的cookie

    示例:  

    
    
def session_and_cookie(req):
req.session['int'] = '正军'
resp = HttpResponse('设置cookie') #可以改成重定向等,但
# 改成重定向的话函数或者类需要写在视图view里面,这与django的请求生命周期有关
resp.set_signed_cookie('uname',json.dumps('凯子'))
resp.set_cookie('name','qwertui')
resp.set_signed_cookie('shaxx','biding',salt='shax') #带签名的cookie(加盐)
return resp

    2. 取
    如果浏览器保留了cookie,那么每次请求该服务器的时候,会自动的携带该cookie
    格式: request.COOKIES.get(key)

    示例:

    

    
def get_session_and_cookie(req):
data = {
'key':req.session.get('int'),
'name':req.COOKIES.get('name'),
'uname':req.COOKIES.get('uname'),
'shaxx':req.get_signed_cookie('shaxx',salt='shax') #获取带签名的cookie(盐要相同,不然拿不到)
}
return JsonResponse(data)

    3.设置过期时间
    默认情况下,关闭浏览器cookie就会过期,有时候我们需要设置过期时间:

    格式: response.set_cookie(key,value,expires=值)
    expires=0 立马过期
    expires=None 用不过期
    expires= 值 单位是秒

    expires=timedelta(days=值) 表示多少天后过期 hours=值 表示多少小时后过期.....

    4.删除
    response.delete_cookie(key)

    5.cookie的应用场景:1.保存账号,密码 2.京东的购物车 3.保留用户的浏览信息 .....

    **cookie中文问题: response.set_cookie(key,json.dumps(value)) 即可

    注意:设置好cookie之后一定要返回给浏览器

cookie原理图

简单操作django中session和cookie

session  

  1.会话技术
  2.服务端的会话技术
  3.需要客户端的支持才可以
  4.使用:
    1.存
    格式: request.session[key] = value

    注意:在django中存储了一个session后,django会 自动 的生成session key,并将session key与 数据自

    动的存储到 django_session表中去,数据会自动的用base64编码,并会 自动 的让浏览器的cookie存储

    sessionid(就是sessison key) (在使用session前需要先做数据迁移)

    2.取
    格式: value = request.session.get(key)
    注意: 在django中,会 自动 的将cookie中的sessionid拿出来跟数据库中的session key匹配,匹配成功后既可以获取值

    3.清除
    1.清除对应的cookie
    2. del request.session
    推荐的:3. request.session.flush() 会清楚对应的cookie及session

    5.应用: 用户登陆认证

session原理图

简单操作django中session和cookie

上一篇:Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)


下一篇:scrapy学习笔记之hello world