zoukankan      html  css  js  c++  java
  • Python3之Django的Cookie与Session的使用

    一、Cookie的使用

    1、设置Cookie

    url.set_cookie("tile","zhanggen",expires=value,path='/' )

    2、Cookie的参数

    key  键

    value=''  值

    max_age=xx                              # 超时时间(默认单位秒)

    expires=xx                                 #超时时间

    path='/'                                       #Cookie生效的路径,/ 表示Cookie在根路径生效

    domain=xx                                 #Cookie生效的域名

    secure=False                             #是否通过https传输

    httponly=False                           #只能通过http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

     

    3、设置Cookie并加密盐

    url.set_signed_cookie(key,value,salt='加密盐',...)

     

    4、获取Cookie

    request.COOKIES.get('key')

     

    5、获取Cookie并解密盐

    request.get_signed_cookie('key',salt='加密盐')

    二、session的使用

    1、配置setting.py

    SESSION_ENGINE = 'django.contrib.sessions.backends.db'                  # 引擎(默认)

    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_COOKIE_AGE = 1209600                                                     # Session的cookie失效日期(2周)(默认)

    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                           # 是否关闭浏览器使得Session过期(默认)

    SESSION_SAVE_EVERY_REQUEST = False                                      # 是否每次请求都保存Session,默认修改之后才保存(默认)

     

    2、设置session

    request.session['key'] = value                      #设置session

    request.session.setdefault('key',WT)           # 存在key则不设置(当key不存在设置)

     

    3、获取session

    request.session['key']                                   #获取session

    request.session.get('key',None)                  #获取session,key不存在则获取的值为Node

     

    4、删除session

    del request.session['key']                             #删除键key的值

    request.session.delete("session_key")        # 删除当前用户的所有Session数据

    request.session.clear()                                #删除所有的session

     

    5、获取所有 键、值、键值对

    request.session.keys()                            #获取所有session的键,

    request.session.values()                         #获取所有session的值

    request.session.items()                           #获取所有session的键值对

     

    6、获取session的随机字符串

    request.session.session_key

     

    7、将所有Session失效日期小于当前日期的数据删除

    request.session.clear_expired()

     

    8、检查 用户session的随机字符串 在数据库中是否

    request.session.exists("session_key")

     

    9、设置session的过期时间

    request.session.set_expiry(value)

    默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的

    如果value是个整数,session会在些秒数后失效。

    如果value是个datatime或timedelta,session就会在这个时间后失效。

    如果value是0,用户关闭浏览器session就会失效。

    如果value是None,session会依赖全局session失效策略。

    三、session的存储引擎(在settings.py配置)

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

    1、DB
    SESSION_ENGINE = 'django.contrib.sessions.backends.db' #引擎(默认)

    2、cache
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
    SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

    3、文件
    SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
    SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()

    4、缓存+数据库Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎

    5、加密cookie Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎

    四、Django缓存(在settings.py配置)

    1、开发调试

    # 此为开始调试用,实际内部不做任何操作
    # 配置如下:
    
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.dummy.DummyCache',  # 引擎
            'TIMEOUT': 300,  # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
            'OPTIONS': {
                'MAX_ENTRIES': 300,  # 最大缓存个数(默认300)
                'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
            },
            'KEY_PREFIX': '',  # 缓存key的前缀(默认空)
            'VERSION': 1,  # 缓存key的版本(默认1)
            'KEY_FUNCTION': '函数名'  # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
        }
    }
    
    
    # 自定义key
    def make_key(key, key_prefix, version):
        return ':'.join([key_prefix, str(version), key])
    View Code

    2、内存

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
            'LOCATION': 'unique-snowflake',
        }
    }
    View Code

    3、文件

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
            'LOCATION': '/var/tmp/django_cache',
            'TIMEOUT': 60,                       #超时为60秒
            'OPTIONS': {
                'MAX_ENTRIES': 1000                #最大容量为1000个项目
            }
        }
    }
    View Code

    4、数据库

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
            'LOCATION': 'my_cache_table', #缓存数据库表
        }
    }
    
    #之后运行" python manage.py createcachetable "创建缓存表
    View Code

    5、Memcache缓存(python-memcached模块)

    CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': [
                    '10.0.0.50:11211',
                    '10.0.0.51:11211',
                ]
            }
       }
    View Code

    6、Memcache缓存(pylibmc模块)

    CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
                'LOCATION': [
                    '10.0.0.50:11211',
                    '10.0.0.51:11211',
                ]
            }
        }
    View Code

    7、Memcache权重缓存

    # python-memcached模块
    
    CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
                'LOCATION': [
                    ('10.0.0.50:11211',10),
                    ('10.0.0.51:11211',20),
                ]
            }
        }
    # pylibmc模块
    
    CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
                'LOCATION': [
                    ('10.0.0.50:11211',10),
                    ('10.0.0.51:11211',20),
                ]
            }
        }
    View Code

    8、Redis缓存(默认Django不支持redis,需要安装插件 pip install django-redis)

    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://10.0.0.88:6379",
            "OPTIONS": {
                "DB": 0,
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "CONNECTION_POOL_KWARGS": {
                    "max_connections": 100,
                },
            }
        }
    }
    View Code

    五、Django缓存应用

    1、全站使用
    MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',
        # 其他中间件...
        'django.middleware.cache.FetchFromCacheMiddleware',
    ]
    
    CACHE_MIDDLEWARE_ALIAS = ""
    CACHE_MIDDLEWARE_SECONDS = ""
    CACHE_MIDDLEWARE_KEY_PREFIX = ""
    View Code
    2、单独视图缓存
    # 方式一
       from django.views.decorators.cache import cache_page
    
       @cache_page(60 * 15)
       def my_view(request):
          ...
    
    # 方式二
        from django.views.decorators.cache import cache_page
    
        urlpatterns = [
            url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),
        ]
    View Code
    3、局部视图使用
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <h1>缓存</h1>
    
         {% cache 10 缓存key %}
            <h1>我是缓存</h1>
         {% endcache %}
    </body>
    </html>
    View Code
  • 相关阅读:
    win7常用快捷键
    java中构造代码块、方法调用顺序问题
    eclipse项目改为maven项目导致svn无法比较历史数据的解决办法
    linux配置Anaconda python集成环境
    DataFrame对行列的基本操作实战
    驱动:电阻屏触摸芯片NS2009
    读书笔记:代码大全(第二版)
    资料:磁角度传感器芯片
    经验:FatFs文件系统实时写入
    笔记:CAN收发器-TJA1051T与TJA1051T/3调试总结
  • 原文地址:https://www.cnblogs.com/wutao666/p/9516569.html
Copyright © 2011-2022 走看看