django sesstion

基于cookie做用户验证时:敏感信息不适合放在cookie

session依赖cookie

使用session首先要进行以下操作:

session

1. installed_apps

2. 中间件

3. 设置存储形式

4. 引用 request.session

django session的设计原理

1. 如果用户是第一次请求(如何看用户是不是第一次请求,就看客户端ID是否保存了session的cookie)

a) 创建session model

                   i. 生成一个key sessionID 随机的一个字符串 uuid

                 ii. 保存到用户的浏览器cookie

                iii. 保存到session_engine指定的位置

2. 如果第二次以上的请求,客户端ie都会自动提交cookie到django,django中利用你配置的sessionmiddleware中间件激活session利用cookie中的sessionID到session_engine指定的位置读取session model并设置到request的session属性上

3. 真是因为这样,你才能在你的view里面通过request.session使用session

4. session本身就是一个dict字典

5. session在存数据时数据必须支持序列化json

Django中对于session的存储方式:

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

       数据库(默认)

       缓存

       文件

       缓存+数据库

       加密cookie

1、如果是数据库,需要在settings.py中配置如下:
SESSION_ENGINE=’django.contrib.sessions.backends.db’(引擎(默认))

2、如果是缓存session,需要settings.py中配置如下:

SESSION_ENGINE ='django.contrib.sessions.backends.cache'(引擎)

SESSION_CACHE_ALIAS= 'default'  使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

3    如果是文件session, 需要在settings.py中配置如下:

SESSION_ENGINE ='django.contrib.sessions.backends.file' (引擎)

SESSION_FILE_PATH=None  缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()   

4    如果是缓存+数据库session,需要在settings.py中配置如下:

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'      (引擎)

 

配置setting.py

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原理:

cookie是保存在浏览器端的键值对

session是保存在服务器端的键值对

session服务端中存在的数据为:

session={

       随机字符串1:{用户1 的信息}

       随机字符串2:{用户2 的信息}

}                  

session客户端即客户端的浏览器的cookie中存的数据是当前用户对应的随机字符串

session的工作过程

1、    生成随机字符串

2、    写到用户浏览器的cookie

3、    保存到session

4、    在随机字符串对应的字典中设置相关内容

而上述过程在Django中的体现为:

request.session[‘username’]=user

这里的username为通过request.POST.get(‘username’)从前端html页面中获取到的用户名信息

同样的通过request.session[“username”]也可以获取相对应的值

在这个过程中:
1
、首先获取当前用户的随机字符串

2、根据随机字符串获取对应的内容

session的操作

request.session[‘k1’]如果不存在则会报错

request.session.get[‘k1’],如果不存在则会报错,为了防止出错可以

request.session.get[‘k1’,none]

request.session[‘k1’]=123设置session

request.session.setdefault[‘k1’,123]存在则不设置

del request.session[‘k1’]删除

request.session.clear()删除

 

所有的键、值、 键值对

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django Forms是Django框架中的重要组件,用于处理Web应用程序中的表单数据。它提供了一种简单而强大的方式来定义、验证和渲染表单。 Django Forms的主要特点包括: 1. 表单字段:Django Forms提供了各种字段类型,如文本字段、整数字段、日期字段等,用于定义表单中的各个输入项。 2. 表单验证:通过在表单字段上定义验证规则,Django Forms可以自动验证用户提交的数据,并提供错误提示信息。 3. 表单渲染:Django Forms可以自动将表单字段渲染为HTML表单元素,简化了前端开发的工作。 4. 表单处理:Django Forms可以处理用户提交的表单数据,并将其转换为Python对象,方便在后端进行处理和存储。 使用Django Forms的基本步骤如下: 1. 定义表单类:通过继承`django.forms.Form`类,定义一个表单类,并在其中定义各个表单字段。 2. 渲染表单:在视图函数中创建表单实例,并将其传递给模板进行渲染,生成HTML表单元素。 3. 处理表单数据:在视图函数中接收用户提交的表单数据,并进行验证和处理。 下面是一个简单的示例代码,展示了如何使用Django Forms: ```python # forms.py from django import forms class LoginForm(forms.Form): username = forms.CharField(label='用户名') password = forms.CharField(label='密码', widget=forms.PasswordInput) # views.py from django.shortcuts import render from .forms import LoginForm def login(request): if request.method == 'POST': form = LoginForm(request.POST) if form.is_valid(): # 处理表单数据 username = form.cleaned_data['username'] password = form.cleaned_data['password'] # 其他逻辑处理 else: form = LoginForm() return render(request, 'login.html', {'form': form}) # login.html <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">登录</button> </form> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值