Django入门到放弃之session
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #取值 request.session[ 'k1' ] request.session.get( 'k1' , None ) #request.session这句是帮你从cookie里面将sessionid的值取出来,将django-session表里面的对应sessionid的值的那条记录中的session-data字段的数据给你拿出来(并解密),get方法就取出k1这个键对应的值 #设置值 request.session[ 'k1' ] = 123 request.session.setdefault( 'k1' , 123 ) # 存在则不设置 #帮你生成随机字符串,帮你将这个随机字符串和用户数据(加密后)和过期时间保存到了django-session表里面,帮你将这个随机字符串以sessionid:随机字符串的形式添加到cookie里面返回给浏览器,这个sessionid名字是可以改的,以后再说 #但是注意一个事情,django-session这个表,你不能通过orm来直接控制,因为你的models.py里面没有这个对应关系 #一个随机字符串对应一个浏览器,session设置多个值 key不变化data变化 #删除值 del request.session[ 'k1' ] #django-session表里面同步删除 # 所有 键、值、键值对 request.session.keys() request.session.values() request.session.items() # 会话session的key session_key = request.session.session_key 获取sessionid的值 # 将所有Session失效日期小于当前日期的数据删除,将过期的删除 request.session.clear_expired() # 检查会话session的key在数据库中是否存在 request.session.exists( "session_key" ) #session_key就是那个sessionid的值 # 删除当前会话的所有Session数据 request.session.delete() # 删除当前的会话数据并删除会话的Cookie。 request.session.flush() #常用,清空所有cookie---删除session表里的这个会话的记录, 这用于确保前面的会话数据不可以再次被用户的浏览器访问 例如,django.contrib.auth.logout() 函数中就会调用它。 # 设置会话Session和Cookie的超时时间 request.session.set_expiry(value) * 如果value是个整数,session会在些秒数后失效。 * 如果value是个datatime或timedelta,session就会在这个时间后失效。datetime.timedelta( 3 ) * 如果value是 0 ,用户关闭浏览器session就会失效。 * 如果value是 None ,session会依赖全局session失效策略。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 1. 数据库Session SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) 2. 缓存Session SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置 3. 文件Session SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎 SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() 4. 缓存 + 数据库 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎 5. 加密Cookie Session SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎 其他公用设置项: SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)***记住 - - - 了解 SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认) SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认) SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认) SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认) SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认) SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认) |
1 2 3 4 5 6 7 8 9 10 11 | def set_cookie( self , key, value = ' ', max_age=None, expires=None, path=' / ',domain = None , secure = False , httponly = False ) # key # value # max_age:传个数字,以秒计,过期时间,有默认值 (6天后过期:60*60*24*5) - - - 了解 # expires:传时间对象,date=datetime.timedelta() # path:默认 / 表示当前域下的所有路径 http://127.0.0.1:8000/lqz/dfd/ # domain:在那个域下有效 # secure:是否Https传输cookie # httponly:cookie只支持http传输 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | from django.shortcuts import render, HttpResponse, redirect, reverse import os # Create your views here. def login_auth(func): def inner(request, * args, * * kwargs): is_login = request.session.get( 'is_login' ) #根据session信息判断是否已经登录 print (is_login) if is_login: res = func(request, * args, * * kwargs) return res else : request_path = request.get_full_path() #获取登录前的URL login_path = reverse( 'login' ) #如果没有使用反向解析可以直接在redirect中写 return redirect( '%s?returnUrl=%s' % (login_path,request_path)) #将登录前的URL作为参数 return inner @login_auth def index(request): return render(request, 'cookies/index.html' ) @login_auth def home(request): return render(request, 'cookies/home.html' ) def login(request): if request.method = = 'GET' : return render(request, 'cookies/login.html' ) else : username = request.POST.get( 'username' ) password = request.POST.get( 'password' ) if username = = 'bge' and password = = '666' : request.session[ 'is_login' ] = True #账号密码正确的情况下设置session path = request.GET.get( 'returnUrl' ) #获取登录前的URL if path: obj = redirect(path) #跳转到登录前的页面 else : obj = redirect( 'home' ) return obj else : return HttpResponse( '登录失败' ) |
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2020-08-27 Linux 五种IO模型