20、Django-会话-cookie和session-2
session是在服务器上开辟一段空间用于保留和服务器交互时的重要数据
实现方式:
-- 使用session需要在浏览器客户端启动cookie、且在cookie中存储session
-- 每个客户端都可以在服务器端有一个独立的session
-- 注意:不同的请求者之间不会共享这个数据、与请求者一一对应
在Django中的配置-一般默认的配置、没有就添加
--开启session
setting.py
-------------------------------------------------------
INSTALLED_APPS = [
..........
'django.contrib.sessions',
.........
]
#中间件
MIDDLEWARE = [
......
'django.contrib.sessions.middleware.SessionMiddleware',
................
]
使用session
session对象是一个类似与字典的SessionStore类型的对象、可以用类似于字典的方式进行操作
-- session能够存储:字符串、整型、字典、列表等
1、保存session的值到服务器:
-- request.session['key'] = value
2、获取session的值
-- value = request.session['key']
-- value = request.session.get('KEY', 默认值) -- 推荐使用这种方法取值
3、删除session
-- del request.session['key']
注意:在django中session默认的缓存是使用数据库保存的、所以要先迁移数据库、不然会报:
-- django.db.utils.OperationalError: no such table: django_session
主路由:urls.py
----------------------------------------
from django.contrib import admin
from django.urls import path
from django.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
path('cs/', include('cs_app.urls'), name='cs_app'),
]
-----------------------------------------------------------
子路由:urls.py
----------------------------------------------------
from django.urls import path
from cs_app.views import *
urlpatterns = [
path('set_cookies/', set_cookie, name='set_cookies'),
path('get_cookies/', get_cookie, name='get_cookies'),
path('set_session/', set_session, name='set_session'),
path('get_session/', get_session, name='get_session'),
]
--------------------------------------------------------------
views.py
----------------------------------------------------------------------
from django.http import HttpResponse
from django.shortcuts import render
#保存cookie
def set_cookie(request):
# response = render(request, 'set_cookie.html')
# response.set_cookie('username', 'zhangsan', max_age=3600)
# return response
resp = HttpResponse('set cookie is ok')
resp.set_cookie('username', 'xiaoxin', max_age=3600)
return resp
#取cookie
def get_cookie(request):
username = request.COOKIES.get('username')
#username = request.COOKIES['username']
return HttpResponse('username is %s' % username)
#保存session�存session = get_cookie()
def set_session(request):
request.session['username'] = 'ctx'
return HttpResponse('set session is ok')
#取session
def get_session(request):
username = request.session.get('username')
return HttpResponse('username is %s' % username)
------------------------------------------------------------------------
#记得先迁移数据库
-- python .\manage.py makemigrations
-- python .\manage.py migrate
session的相关配置
在setting.py中的配置
---------------------------------------------------------------
1、SEESION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
-- 作用是指定sessionid在cookies中的保存时长(默认是2周)
2、SESISION_EXPIRE_AT_BROWSER_CLOSE = True
-- 设置只要关闭浏览器时、session就会失效(默认为False)
删除session
可以定时做删除过期的seesion
-- python3 manage.py clearsessions