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

 

posted @ 2024-07-09 22:33  little小新  阅读(9)  评论(0编辑  收藏  举报