zoukankan      html  css  js  c++  java
  • pythonのdjango Session体验

    Session

    Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:

    数据库(默认)
    缓存
    文件
    缓存+数据库
    加密cookie
    1、数据库Session

     1 Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
     2  
     3 a. 配置 settings.py
     4  
     5     SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)
     6      
     7     SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
     8     SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)
     9     SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
    10     SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认)
    11     SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认)
    12     SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认)
    13     SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认)
    14     SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)
    15  
    16  
    17  
    18 b. 使用
    19  
    20     def index(request):
    21         # 获取、设置、删除Session中数据
    22         request.session['k1']
    23         request.session.get('k1',None)
    24         request.session['k1'] = 123
    25         request.session.setdefault('k1',123) # 存在则不设置
    26         del request.session['k1']
    27  
    28         # 所有 键、值、键值对
    29         request.session.keys()
    30         request.session.values()
    31         request.session.items()
    32         request.session.iterkeys()
    33         request.session.itervalues()
    34         request.session.iteritems()
    35  
    36  
    37         # 用户session的随机字符串
    38         request.session.session_key
    39  
    40         # 将所有Session失效日期小于当前日期的数据删除
    41         request.session.clear_expired()
    42  
    43         # 检查 用户session的随机字符串 在数据库中是否
    44         request.session.exists("session_key")
    45  
    46         # 删除当前用户的所有Session数据
    47         request.session.delete("session_key")
    48  
    49         request.session.set_expiry(value)
    50             * 如果value是个整数,session会在些秒数后失效。
    51             * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    52             * 如果value是0,用户关闭浏览器session就会失效。
    53             * 如果value是None,session会依赖全局session失效策略。
    View Code

    2、缓存Session

     1 a. 配置 settings.py
     2  
     3     SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
     4     SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
     5  
     6  
     7     SESSION_COOKIE_NAME = "sessionid"                        # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
     8     SESSION_COOKIE_PATH = "/"                                # Session的cookie保存的路径
     9     SESSION_COOKIE_DOMAIN = None                              # Session的cookie保存的域名
    10     SESSION_COOKIE_SECURE = False                             # 是否Https传输cookie
    11     SESSION_COOKIE_HTTPONLY = True                            # 是否Session的cookie只支持http传输
    12     SESSION_COOKIE_AGE = 1209600                              # Session的cookie失效日期(2周)
    13     SESSION_EXPIRE_AT_BROWSER_CLOSE = False                   # 是否关闭浏览器使得Session过期
    14     SESSION_SAVE_EVERY_REQUEST = False                        # 是否每次请求都保存Session,默认修改之后才保存
    15  
    16  
    17  
    18 b. 使用
    19  
    20     同上
    View Code

    3、文件Session

     1 a. 配置 settings.py
     2  
     3     SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
     4     SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()                                                            # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
     5  
     6  
     7     SESSION_COOKIE_NAME = "sessionid"                          # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
     8     SESSION_COOKIE_PATH = "/"                                  # Session的cookie保存的路径
     9     SESSION_COOKIE_DOMAIN = None                                # Session的cookie保存的域名
    10     SESSION_COOKIE_SECURE = False                               # 是否Https传输cookie
    11     SESSION_COOKIE_HTTPONLY = True                              # 是否Session的cookie只支持http传输
    12     SESSION_COOKIE_AGE = 1209600                                # Session的cookie失效日期(2周)
    13     SESSION_EXPIRE_AT_BROWSER_CLOSE = False                     # 是否关闭浏览器使得Session过期
    14     SESSION_SAVE_EVERY_REQUEST = False                          # 是否每次请求都保存Session,默认修改之后才保存
    15  
    16 b. 使用
    17  
    18     同上
    View Code

    4、缓存+数据库Session

    1 数据库用于做持久化,缓存用于提高效率
    2  
    3 a. 配置 settings.py
    4  
    5     SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎
    6  
    7 b. 使用
    8  
    9     同上

    5、加密cookie Session

    1 a. 配置 settings.py
    2      
    3     SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎
    4  
    5 b. 使用
    6  
    7     同上

    扩展:Session用户验证

    1 def login(func):
    2     def wrap(request, *args, **kwargs):
    3         # 如果未登陆,跳转到指定页面
    4         if request.path == '/test/':
    5             return redirect('http://www.baidu.com')
    6         return func(request, *args, **kwargs)
    7     return wrap

    文章摘自:https://www.cnblogs.com/wupeiqi/articles/5246483.html

  • 相关阅读:
    OleDbCommand 的用法
    递归求阶乘
    C#重写窗体的方法
    HDU 5229 ZCC loves strings 博弈
    HDU 5228 ZCC loves straight flush 暴力
    POJ 1330 Nearest Common Ancestors LCA
    HDU 5234 Happy birthday 01背包
    HDU 5233 Gunner II 离散化
    fast-IO
    HDU 5265 pog loves szh II 二分
  • 原文地址:https://www.cnblogs.com/pengpengzhang/p/10149012.html
Copyright © 2011-2022 走看看