Django补充(4)

一、Cookie

    - 是用户浏览器上的一个键值对
        - 设置超时时间
    
    利用cookie可实现:
        - 登录验证
        - 页面显示条数
        - 拖动位置..


    两大忌讳:
        - 敏感信息

        - 简单

例子:

用户来时需要检测用户状态。

v = request.COOKIES.get("user")

if not v:

return    redirect("/login")

用户登录后需要返回页面时带上cookie

obj = models.Userinfo.objects.filter(username=u,pwd=p).first()

if obj:

obj = redirect("/user")

//在请求者那里存放cookies

obj.set_cookie(key="user_name",value=u,max_age=10)  #设置cookie失效时间

或者使用参数 expire设置当前时间延迟多长时间后失效。或者规定在哪个URL下生效,默认是“/”,表示全局。

还可以绑定域名,或者httponly,再或者使用https,secure=True。

二、Session

    - 放置在服务器端的键值对

    - 依赖cookies

    
    session = {
        'asdfasdfasd': {'username':'hailong'},
        'asdfasdfasdf': {username:'feinikesi'},

    }

例子:

检测用户的session,如果存在则直接登录

v = request.session.get("username")

if v:

return redirect("/login")

用户登录成功设置session

obj = request.session["username"] = u

return obj

如果pycharm使用的数据库是sqlite,则session存放在django_session.

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

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

1、数据库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
44
45
46
47
48
49
50
51
52
53
Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
 
a. 配置 settings.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,默认修改之后才保存(默认)
 
 
 
b. 使用
 
     def  index(request):
         # 获取、设置、删除Session中数据
         request.session[ 'k1' ]
         request.session.get( 'k1' , None )
         request.session[ 'k1' =  123
         request.session.setdefault( 'k1' , 123 # 存在则不设置
         del  request.session[ 'k1' ]
 
         # 所有 键、值、键值对
         request.session.keys()
         request.session.values()
         request.session.items()
         request.session.iterkeys()
         request.session.itervalues()
         request.session.iteritems()
 
 
         # 用户session的随机字符串
         request.session.session_key
 
         # 将所有Session失效日期小于当前日期的数据删除
         request.session.clear_expired()
 
         # 检查 用户session的随机字符串 在数据库中是否
         request.session.exists( "session_key" )
 
         # 删除当前用户的所有Session数据
         request.session.delete( "session_key" )
 
         request.session.set_expiry(value)
             *  如果value是个整数,session会在些秒数后失效。
             *  如果value是个datatime或timedelta,session就会在这个时间后失效。
             *  如果value是 0 ,用户关闭浏览器session就会失效。
             *  如果value是 None ,session会依赖全局session失效策略。

  2、缓存Session

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a. 配置 settings.py
 
     SESSION_ENGINE  =  'django.contrib.sessions.backends.cache'   # 引擎
     SESSION_CACHE_ALIAS  =  'default'                             # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
 
 
     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,默认修改之后才保存
 

b. 使用
       同上

3、文件Session

4、缓存+数据库Session

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

5、加密cookie Session

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

扩展:Session用户验证

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值