Django入门到放弃之session

简介: Django入门到放弃之session

1.Django中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

#取值

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

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

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.其他

1

2

3

4

5

6

7

8

9

10

11

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.示例:实现登录认证并登陆成功后跳转至上一次访问页面

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

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


相关文章
|
2月前
|
测试技术 API 数据库
Django测试入门:打造坚实代码基础的钥匙
Django测试入门:打造坚实代码基础的钥匙
34 3
|
20天前
|
前端开发 关系型数据库 Python
Django入门到放弃之分页器
Django入门到放弃之分页器
|
1月前
|
前端开发 网络协议 物联网
Django Web:搭建Websocket服务器(入门篇)
Django Web:搭建Websocket服务器(入门篇)
36 1
|
18天前
|
存储 缓存 中间件
Django 框架中 Session 的用法
【8月更文挑战第30天】
17 0
|
20天前
|
关系型数据库 MySQL 机器人
Django入门到放弃之数据库配置
Django入门到放弃之数据库配置
|
20天前
|
缓存 中间件 数据库
Django入门到放弃之缓存及信号机制
Django入门到放弃之缓存及信号机制
|
20天前
|
前端开发 数据库 数据安全/隐私保护
Django入门到放弃之Auth模块
Django入门到放弃之Auth模块
|
20天前
|
JSON 前端开发 数据安全/隐私保护
Django入门到放弃之CSRF_TOKEN
Django入门到放弃之CSRF_TOKEN
|
20天前
|
前端开发 中间件 索引
Django入门到放弃之中间件
Django入门到放弃之中间件
|
20天前
|
JavaScript 前端开发 数据安全/隐私保护
Django入门到放弃之cookies
Django入门到放弃之cookies