python--Django框架(cookie,session)

一.cookile

1.特点:

  • Cookie以键值对的格式进行信息的存储;
  • Cookie基于域名安全,不同域名的Cookie是不能互相访问的,如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写到Cookie信息.
  • 当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有Cookie信息提交给网站服务器.

2.设置cookie

  • 可以通过HttpResponse对象中的set_cookie方法来设置cookie.
HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
  • max_age 单位为秒,默认为None。如果是临时cookie,可将max_age设置为None。
def demo_view(request):
	response = HttpResponse("OK")
	response.set_cookie('itcast1", "python")	# 临时cookie
	response.set_cookie("itcast2", "python2", max_age=60*60)	# 有效期一小时

3.读取Cookie

  • 可以通过HttpRequest对象的COOKIES属性来读取本次请求携带的cookie值。request.COOKIES为字典类型。
def demo_view(request):
	cookie1 = request.COOKIES.get("itcast1")#获取键为itcast的值
	print(cookie1)
	return HttpResponse("OK")

二.session

1.启用session:

  • Django项目默认启用session.
    Session的理解:
  • 广义来讲: session是一种会话机制, 用于记录多次http请求之间的关系,关系就是状态数据,比如登录状态.
  • 狭义来讲: session是一种会话数据, 记录的状态数据, 比如登录之后记录的user_id等.
    可以在settings.py文件中查看,如图所示
    在这里插入图片描述

2.存储方式:

在settings.py文件中,可以设置session数据的存储方式;
另外session可以保存在数据库、本地缓存( 程序的运行内存中, 全局变量)、文件、redis等 。

2.1数据库

存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式

# 如果是存放数据库, 一般以db结尾
SESSION_ENGINE='django.contrib.sessions.backends.db'

如果存储在数据库中,需要在项INSTALLED_APPS中安装Session应用。
在这里插入图片描述

2.2 本地缓存

存储在本机内存中,如果丢失则不能找回,比数据库的方式读写更快。

# 如果是存放在本地缓存, 一般以cache结尾
SESSION_ENGINE='django.contrib.sessions.backends.cache'

2.3 redis

①安装扩展:
pip install django-redis
②配置:
  • 在settings.py文件中做如下设置:
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        # 定义django中redis的位置
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            # django使用redis的默认客户端来进行操作.
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
# 我们定义一个cache(本地缓存来存储信息,cahe指定的是redis)
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# 本地的session使用的本地缓存名称是'default', 这个名称就是上面我们配置的caches的名
# 称"default"
SESSION_CACHE_ALIAS = "default"
③添加代码,查看是否能够存储到redis中去:
# url的配置: 
from django.conf.urls import url
from . import views

urlpatterns = [
     # 保存session数据
    url(r'^set_session', views.set_session), 
    # 获取session数据
    url(r'^get_session', views.get_session),
]
# 定义设置session的视图函数
def set_session(request):
    request.session['one'] = '1'
    request.session['two'] = '2'
    request.session['three'] = '3'
    return HttpResponse('保存session数据成功')
# 定义获取session的视图函数
def get_session(request):
     one = request.session.get('one')
     two = request.session.get('two')
     three = request.session.get('three')
     text = 'one=%s, two=%s, three=%s' % (one,two,three)
     return HttpResponse(text)

3.session操作

  • 通过HttpRequest对象的session属性进行会话的读写操作。
3.1 以键值对的格式写session.
#request.session[‘键’]=值
request.session['one'] = '1'
3.2根据键读取值.
#request.session.get('键',默认值)
one = request.session.get('one')
3.3 清除所有session,在存储中删除值部分.
request.session.clear()
3.4清除session数据,在存储中删除session的整条数据。
request.session.flush()
3.5删除session中的指定键及值,在存储中只删除某个键及对应的值。
del request.session['键']
3.6设置session的有效期
request.session.set_expiry(value)
  • 如果value是一个整数,session将在value秒没有活动后过期。
  • 如果value为0,那么用户session的Cookie将在用户的浏览器关闭时过期。
  • 如果value为None,那么session有效期将采用系统默认值,默认为两周,可以通过在settings.py中设置 SESSION_COOKIE_AGE来设置全局默认值。其中 SESSION_COOKIE_AGE的单位是以秒为单位的.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值