zoukankan      html  css  js  c++  java
  • django 笔记12 session

    第一步写好函数,然后生成数据库session表
    python manage.py makemigrations
    python manage.py migrate
    
    session原理:
    1、Session
    
        基于COokie做用户验证时:
            不建议添加敏感信息;
            优点:服务器压力减小
    
            Cookie是保存在用户浏览器端的键值对
            Session是保存在服务器端的键值对  依赖cookie 即随机字符串
    
    session = {
        随机字符串1:{
            'is_login': True,
            'user':'''
            'nid':
            ...
        }
        随机字符串2:{
            'is_login':True,
            'user':'''
            'nid':
            ...
        }
    }
    
        a.Session原理
        b.Cookie和Session对比
        c.Session配置(缺少cache)
        d.实例 实现两周的自动登录
            -request.session.set_expiry(60*10)
            -SESSION_SAVE_EVERY_REQUEST = True
    
        PS: cookie中不设置超时时间, 则表示关闭浏览器自动清除
    
    request.session['k1']
    request.session.get('k1',none)
    
    request.session['k1'] = 123
    request.session.setdefault('k1', 123)
    
    request.session.clear() 注销时用
    del request.session['k1']
    
    requeset.session.keys()
    requeset.session.values()
    
    用户session的随机字符串
    request.session.session_key 获取当前人的随机字符串 一般用不着
    
    将所有session失效日期小于当前日期的数据删除
    request.session.clear_expired()
    
    检测用户session的随机字符串在数据库中是否存在
    request.session.exists("session_key") 基本不用
    
    默认session的超时时间是两周
    request.session.set_expiry(value)
        *如果value是个整数, session会在些秒数后失效
        *如果value是个datatime或timedelta session就会在这个时间后失效
        *如果value是0 用户关闭浏览器session就会失效
    
    在settings上设置这句
    SESSION_SAVE_EVERY_REQUEST = True 表示页面刷新 超时时间也跟着刷新
    
    原理      session依赖cookie
              随机字符串
              对服务器中的session操作
                request.session.get() #获取值
                request.session[x] = x 设置值
    
                request.session.clear() 注销时
    
              -配置文件中设置默认操作:
              SESSION_COOKIE_AGE = 1209600
              SESSION_SAVE_EVERY_REQUEST = True
    
              SESSION保存在哪里!  默认在数据库 
              引擎的配置
              SESSION_ENGINE = 'django.contrib.sessions.backends.db'默认数据库#保存在数据库中  当中的是可以换!!
              可以选择放在缓存,文件,数据库,加密cookie, 缓存加数据库
    
              如果缓存:
              SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
              SESSION_CACHE_ALIAS = 'default'  #名字
    
              默认CACHES中没有redis引擎  django默认不支持redis 只有memerch
    
    
    
    def login(request):
        if request.method == "GET":
            return render(request,'login.html')
        elif request.method == 'POST':
            user = request.POST.get('user')
            pwd = request.POST.get('pwd')
            if user == 'root' and pwd =='123':
                #生成随机字符串
                #写到用户浏览器cookie
                #保存到session中
                #在随机字符串对应的字典中设置相关内容
                request.session['username'] =user #这句话将上面四句话解决
                request.session['is_login'] = True
                request.session.set_expiry(10)
                return redirect('/index')
            else:
                return render(request,'login.html')
    
    def index(request):
        #获取当前用户的随机字符串
        #根据随机字符串获取对应的信息
        if request.session['is_login']:
            return HttpResponse(request.session['username'])
        else:
            return HttpResponse('no ok')
  • 相关阅读:
    git或gitee 提交代码到远程仓库
    gitee 创建代码仓库,并提交本地代码
    Logback 实现日志链路追踪
    navicat 查看,设计并导出数据库 ER图
    Jackson 使用 @JsonFormat 注解进行时间格式化
    Redis 缓存常见问题
    jedis 与 redission 实现分布式锁
    Redis 集群模式搭建
    Redis 哨兵模式高可用
    Notepad++ 正则表达式提取信息
  • 原文地址:https://www.cnblogs.com/Liang-jc/p/9220547.html
Copyright © 2011-2022 走看看