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

   - 配置文件中设置默认操作(通用配置):
 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){

                    }
                })
            });
        })
				
时间: 2024-11-21 04:35:35

python第一百零九天---Django 4的相关文章

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

1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() /detail/(\d+) -> 函数(参数) 或 类.as_view()(参数) /detail/(?P<nid>\d+) -> 函数(参数) 或 类.as_view()(参数) /detail/ -> include("app01.urls") /detai

python第一百零五天 ---Django 基础

一 路由系统 URL 1 url(r'^index/',views.index) url(r'^home/', views.Home.as_view()) 2 url(r'^detail-(\d+).html',views.detail),#动态路由 views.py def detail(request,nid) url(r'^detail-(\d+)_(\d+).html',views.detail),#动态路由 def detail(request,nid,uid) 3 url(r'^de

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

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零二章:哪些作用域可以声明局部内部类? 下一章 "全栈2019"Java第一百零三章:匿名内部类详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学

“全栈2019”Java第一百零四章:匿名内部类与外部成员互访详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零四章:匿名内部类与外部成员互访详解 下一章 "全栈2019"Java第一百零五章:匿名内部类覆盖作用域成员详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"

“全栈2019”Java第一百零五章:匿名内部类覆盖作用域成员详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零五章:匿名内部类覆盖作用域成员详解 下一章 "全栈2019"Java第一百零六章:匿名内部类与抽象类接口注意事项 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&quo

“全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零六章:匿名内部类与抽象类接口注意事项 下一章 "全栈2019"Java第一百零七章:匿名内部类与构造方法注意事项 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&quo

“全栈2019”Java第一百零七章:匿名内部类与构造方法注意事项

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零七章:匿名内部类与构造方法注意事项 下一章 "全栈2019"Java第一百零八章:匿名内部类与final关键字 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"

Python 学习第十九天 django知识

一,django 知识总结 1,同一个name属性的标签,多个值获取 <form action="/login/" method="POST" enctype="multipart/form-data"> <p> <input type="text" name="user" placeholder="用户名" /> </p> <p&g

python第一百一十一天 --Django 6

创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 1 import MySQLdb 2 3 def GetList(sql): 4 db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost') 5 cursor = db.cursor() 6 cursor.execute(sql) 7 data = cursor.