Django框架基础之session

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。
这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
会话状态仅在支持 cookie 的浏览器中保留

Cookie是什么?
             保存在客户端浏览器上的键值对
Session是什么?
             保存在服务端的数据(本质是键值对)
             服务端session {‘jdsvbjsdkbj’:{‘id:1,‘name‘:‘alex‘,‘passwd‘:13}
             客户端cookie ‘jdsvbjsdkbj’
应用:依赖cookie
作用:保持会话(Web网站)
好处:敏感信息不会直接给客户端

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

1数据库(默认)

 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失效策略。

2缓存

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_ENGINE = ‘django.contrib.sessions.backends.cached_db‘        # 引擎

5加密cookie

SESSION_ENGINE = ‘django.contrib.sessions.backends.signed_cookies‘   # 引擎

用session做用户登录:

 1 def login(request):
 2     if request.method==‘GET‘:
 3         return render(request,‘login.html‘)
 4     else:
 5         u=request.POST.get(‘username‘)
 6         p=request.POST.get(‘passwd‘)
 7         sex=request.POST.get(‘sex‘)
 8         auto_login=request.POST.get(‘auto_login‘)
 9         # print(sex,auto_login)
10         if sex==‘man‘:
11             obj=models.Boy.objects.filter(name=u,passwd=p).first()
12         else:
13             obj = models.Gril.objects.filter(nick=u, passwd=p).first()
14         if obj:
15         #生成随机字符串
16         #通过cookie发送给客户端
17         #服务端保存{随机字符串一:{‘username‘:‘alex‘,‘passwd‘:‘123‘}}
18             request.session[‘username‘]=u
19             request.session[‘sex‘]=sex
20             if auto_login==‘true‘:
21                 request.session.set_expiry(604800)
22             # obj.set_cookie(‘ticket‘,‘123‘,max_age=10)
23             return redirect(‘index.html‘)
24         else:
25             return render(request,‘login.html‘,{‘msg‘:‘用户名或密码错误‘})

 1 #装饰器函数
 2 def login_later(func):
 3     def wrapper(*args):
 4         # 获取客户端cookie中的随机字符串
 5         # 去session中查找有没有随机字符
 6         # 去session对应的key的value中查看是否有username
 7         v = args[0].session.get(‘username‘)
 8         if not v:
 9             return redirect(‘login.html‘)
10         else:
11             return func(*args)
12     return wrapper

时间: 2024-11-05 21:40:32

Django框架基础之session的相关文章

Django框架基础(一)

Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 1 安装 1 pip3 install django 2 # 创建Django程序 3 django-admin startproject mysite 4 # 进入程序目录 5 cd mysite 6 # 启动socket服务端,等待用户发送请求 7 python manage.py runse

Django框架基础

Django基础-Lesson1 web框架概念 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统. 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端.  socket模拟服务端 最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回. 如果要动态生成HTML,就需要把上述步骤自己来实现.不过,接受HTTP

Django框架基础之Form组件

服务端假设所有用户提交的数据都是不可信任的,所以Django框架内置了form组件来验证用户提交的信息 form组件的2大功能:       1 验证(显示错误信息)       2 保留用户上次输入的信息                  -- 可以生成html标签应用: class A_Form(Form): 字段=fields.字段类型(默认参数: required=True, widget=widgets.插件(attrs={})) 常用字段:Charfield,RegexField,I

django框架基础-django redis-长期维护-20191220

###############   django框架-django redis    ############### ###############   django框架-django redis    ############### ###############   django框架-django redis    ############### ###############   django框架-django redis    ############### ##############

django框架基础-django的中间件-长期维护-20200113

##################    中间件      ####################### ##################    中间件      ####################### ##################    中间件      ####################### ##################    中间件      ####################### ##################    中间件     

Django框架基础学习

Django安装 python下载地址 http://www.python.org/download/releases/3.3.4/ Django的下载地址:https://www.djangoproject.com/download/ 1)安装(进到解压目录) python setup.py install 2.配置环境变量(PATH) C:/Python27/Lib/site-packages/django;C:/Python27/Scripts; 3.检查是否安装成功,可以在dos下进入D

Django框架基础之ajax

对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要重新加载全局数据 2.AJAX AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案. 异步的JavaScript:使用 [JavaScript语言] 以及 相关[浏览器提供类库] 的功能向服务端发送请求

Django框架-cookie与session

from django.shortcuts import redirect from django.shortcuts import render from login import models # 获取类才能orm操作库 """ cookie与session解决登录验证 1.models中创建UserInfo类 python manage.py makemigrations login /migrate login --database=login_db 2.urls.p

Django 框架基础

WEB框架 MVC Model View Controller 数据库 模板文件 业务处理 MTV Model Template View 数据库 模板文件 业务处理 Django 安装Django模块 安装第三方模块方法 pip install django 创建Django工程 django-admin startproject mysite[工程名称] 工程目录: mysite - mysite # 对整个程序进行配置 - init - settings # 配置文件 - url # UR