python第一百零九天---Django 4

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python第一百零九天---Django 4相关的知识,希望对你有一定的参考价值。

session  :
1. Session
基于Cookie做用户验证时:敏感信息不适合放在cookie中


a. Session原理
Cookie是保存在用户浏览器端的键值对
Session是保存在服务器端的键值对:
保存在数据库
使用session 前需要 执行
--Python manage.py makemigrations
--python manage.py migrate
保存在内存中的形式:
‘随机字符串‘:{
‘username‘: ‘....‘,
‘loging‘: ‘....‘,
....
}

b. Cookie和Session对比

c. Session配置(缺少cache)

d. 示例:实现两周自动登陆
- request.session.set_expiry(60*10)
- SESSION_SAVE_EVERY_REQUEST = True

PS: cookie中不设置超时时间,则表示关闭浏览器自动清除


- session依赖于cookie
- 服务器session
request.session.get()#获取
request.session[x] = x

request.session.clear()

- 引擎配置
技术分享
 1 CACHES = {
 2             default: {
 3                 BACKEND: django.core.cache.backends.filebased.FileBasedCache,
 4                 LOCATION: os.path.join(BASE_DIR,cache)
 5                 }
 6             }
 7        SESSION_ENGINE = django.contrib.sessions.backends.db   # 引擎(默认)#保存在数据库中
 8 
 9        SESSION_ENGINE = django.contrib.sessions.backends.cache  #在缓存中
10 
11         SESSION_ENGINE = django.contrib.sessions.backends.file  #在文件中
12 
13         SESSION_ENGINE = django.contrib.sessions.backends.cached_db #缓存加数据库
14 
15         SESSION_ENGINE = django.contrib.sessions.backends.signed_cookies #加密cookies
View Code

 


- 配置文件中设置默认操作(通用配置):

 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过期(默认)
      # set_cookie(‘k‘,123)
      SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)


session 操作
1. 获取session中的值
request.session[key]  #获取不到会报错
request.session.get(key,None)#获取不到返回None
    2. 设置session中的值
 request.session[key]=123# 没有创建 有则替换
request.session.setdefault(key,123)#存在则不替换
删除:
 del request.session[key]

3. 所有 键 值 键值对
        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的随机字符串 在数据库中是否存在
            requset.session.exists(session_key)#request.session.get(‘key‘,None)#包含了
        #删除 用户session的随机字符串 及对应的 键值
            requset.session.delete(session_key)
            request.session.clear()#注销使用    
        #设置超时时间 :
request.session.set_expiry(value)
                * 如果valus为整数 ,session会在秒数后失效
                * 如果valus为datatime或timedelta ,session会在这个时间后失效
                * 如果valus为0 ,session会在关闭浏览器后失效
                * 如果valus为0 ,session会在关闭浏览器后失效
####################################   CSRF   #########################################
CSRF:
a. CSRF原理
{%csrf_token%}#前端生成一个随机字符串
--在表单中 和COOKIS 中都有存在 但不一样

django为用户实现防止跨站请求伪造的功能,
通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。
而对于django中设置防跨站请求伪造功能有分为全局和局部。
全局
--在全局发送POST数据时,需要 csrf_token
局部
[email protected]_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
[email protected]_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
注:from django.views.decorators.csrf import csrf_exempt,csrf_protect

b. 无CSRF时存在隐患
c. Form提交 (CSRF)
<form>
{%csrf_token%}
</form>
d. Ajax提交 (CSRF)
CSRF请求头 X-CSRFToken (不能有下划线)
示例:

$(function(){
          //
            $.ajaxSetup({//当前所有ajax发送 全局
                beforeSend: function(xhr,settings){//发送ajax前 先执行这个函数
                    xhr.setRequestHeader(X-CSRFtoken, $.cookie(csrftoken));
                }
            });

            $(#btn1).click(function () {
                $.ajax({
                    url: /login/,
                    type:"GET",
                    data: {user: root, pwd: 123},
                    // headers: {X-CSRFtoken: $.cookie(csrftoken)},
                    success:function(arg){

                    }
                })
            });
        })

 









































































以上是关于python第一百零九天---Django 4的主要内容,如果未能解决你的问题,请参考以下文章

python第一百零七天-- Django 基础 2

python学习第一百零八天:MongoDB,pymongo

第一百零一天

第一百零二天

第一百零三天

“全栈2019”Java第一百零二章:哪些作用域可以声明局部内部类?