云图网
  • 业界资讯
  • 技术专区
    • 云计算
    • 人工智能
    • 信息安全
    • 大数据
    • 研发管理
    • 大前端
    • 开源
    • 智能运维
    • 编程笔记
    • WordPress
  • 企业战略规划
  • 下载专区
  • 江湖史
  • 随笔记录
登录 注册
投稿
  1. 云图网首页
  2. 技术专区
  3. 编程笔记

Django入门到放弃之session

2022年8月28日 02:16 • 编程笔记

文章目录[隐藏]

  • 1.Django中Session相关方法
  • 2.Django中的Session配置
  • 3.其他
  • 4.示例:实现登录认证并登陆成功后跳转至上一次访问页面


1.Django中Session相关方法

#取值
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失效策略。

2.Django中的Session配置

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,默认修改之后才保存(默认)

3.其他

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传输

4.示例:实现登录认证并登陆成功后跳转至上一次访问页面

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('登录失败')

  

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/282596.html

CookieDjangologinrequestsession入门
赞 (0)
0 0
生成海报
TensorFlow和CUDA、cudnn、Pytorch以及英伟达显卡对应版本对照表
上一篇 2022年8月28日 02:16
查找导致cup过高的代码方法
下一篇 2022年8月28日 02:16

相关推荐

  • Python入门系列(七)开发常说的“累”与“对象” 2022年8月21日
  • Python3项目初始化2-->用户删除和编辑 2022年7月25日
  • 关于 django:Python: //’module//’ 对象没有属性 //’logout_view//’ 2022年6月19日
  • 拦截器 2022年8月15日
  • linux-shell 2022年8月29日
  • django项目、vue项目部署云服务器 2022年7月21日
  • (Axios顺序请求实战)一个Axios请求参数依赖于另一个Axios请求返回值 2022年7月22日
  • cookie、session、tooken 2022年7月2日
  • PHP语言变得没那么好,还有必要再用吗? 2022年5月20日
  • javaWeb-Cookie实现十天内免登录 2022年7月27日

发表回复

请登录后评论...
登录后才能评论

热门标签

AI (11871) aliyun (95062) Android (10391) c (14594) go (7786) google (20654) html (8304) https (10802) iPhone (21436) jd (7444) linux (18686) MD (8346) microsoft (7561) Phone (21786) python (7226) windows (18482) 人工智能 (9889) 安全 (28526) 开源 (16950) 微软 (13275) 手机 (21138) 游戏 (13254) 百度 (7189) 硬件 (14378) 美国 (20456) 苹果 (10017) 观察 (7533) 谷歌 (8726) 车 (28069) 通信 (7496)
  • 欢迎投稿
  • 隐私政策
  • 使用协议
  • 服务条款
  • 版权声明

Copyright © 2006-2025 YTSO.COM 版权所有 鲁ICP备15002310号-3 Powered by WordPress

免责声明:本站信息来自互联网收集分享,版权归原创者所有,如果侵犯了您的权益,请发邮件给39941211@qq.com通知我们删除.