微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【Django学习笔记 - 8】:session的配置和使用、类视图初使用

目录

一、session的初步配置和使用

 1、session的介绍

2、配置session的存储方式 

案例一:session存储于mysql中

 案例二:存储于混合型的数据库之中(redis和mysql)

案例三:session的有效期设置 

3、session的删除操作

案例一:del演示

 举例二:clear()

举例三:flush()

二、类试图的初使用

1、类视图定义

2、类视图的初使用 


一、session的初步配置和使用

 1、session的介绍

session 又称“会话控制",Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 web页时,如果该用户还没有会话,则web服务器将自动创建一个Session对象。当会话过期或被放弃后,服务器将终止该会话。Session对象最常见的一个用法就是存储用户的首选项。

例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。 

注意:会话状态仅在支持cookie的浏览器中保留。

2、配置session的存储方式 

 配置settings文件

SESSION_ENGINE = 'django.contrib.sessions.backends.db'

存储于混合型的数据库之中,即二者皆用:

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

存储于非关系型的数据库之中:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

SESSION_CACHE_ALIAS = 'default'  ——指定缓存的认库

案例一:session存储于MysqL

session存储于数据库中(MysqL),需要在项目文件下下载pyMysqL文件

pip install pyMysqL

1、要在配置文件添加MysqL所需要的配置参数 ,然后使用设置其存储于关系型数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.MysqL',# 引擎,指定数据库的引擎要使用哪一个数据库,此处即已经修改为了MysqL数据库引擎
        'NAME': 'dj2022',# 数据库名
        'HOST': '127.0.0.1',# 数据库的访问ip
        'PORT': 3306,# 数据库的使用端口
        'USER': 'root',# 用户
        'PASSWORD': '' # 密码
    }
}

# 指定session存储方式
# 1.关系型数据库 --> MysqL
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 仅以关系型数据库来进行session存储

2、在根目录下的__init__.py文件中,将MysqL配置到项目中进行使用

 3、创建子应用,使用路由分发,在views.py文件中写入设置session的代码语句。需要注意的是设置session是以键值对的形式。

4、在Navicat中新建一个连接

 5、要将session存储于数据库中需要有表的存在,表不需要我们手动生成,可使用命令:

python manage.py migrate ,这个命令会依赖于我们的迁移文件数据库生成表。

 6、我们可以看到Navicat中出现自动生成了几个表

 7、运行项目,访问对应的路径,执行设置session的函数后再Navicat中会出现以下内容

 案例二:存储于混合型的数据库之中(redisMysqL

需要下载的包:pip install django-redis 

以下将使用Redis Desktop Manager管理工具

 注意:要存储于混合型的数据库中时需要将案例二的设置即配置MysqL数据的步骤做好。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.MysqL',# 用户
        'PASSWORD': '' # 使用自己的密码
    }
}


CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/0","OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient"
        }
    }
}

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'   # 指定存储方式为混合存储
SESSION_CACHE_ALIAS = 'default' # 指定使用的缓存库为default

 然后再次执行案例一中设置session的函数,即可看到redisMysqL中都存储着session。

注意: "LOCATION": "redis://127.0.0.1:6379/0",中的最后一个0表示使用第0个库存储,如果要使用第一个库存储session则修改为: "LOCATION": "redis://127.0.0.1:6379/1"

案例三:session的有效期设置 

当设置session时如果不写session的有效期则认有效期为两个星期

如果写了配置session有效期的语句则必须传值 

配置session语句:

request.session.set_expiry(None) :表示认为两个星期

request.session.set_expirt(0) : 表示会话session,即关闭浏览器后则消失

 先设置session为会话session,再获取session的值,关闭浏览器后重新打开,再获取session,发现获取不到数据

注意:设置成会话session,即浏览器关闭之后session会自动删除删除只会删除值,redis数据库中的session对象并不会删除删除的是浏览器的缓存。

3、session的删除操作

 第一种:根据键名删除

del request.session[key]

第二种request.session.clear(),将redisMysqL中的session数据清空,但是session对象依旧是存在的

第三种request.session.flush(),将redisMysqL中的数据和对象都清空。

案例一:del演示

 

 步骤:先设置session-->执行删除session函数-->最后获取session-->结果对比

运行结果如下:name键已被删除 

 通过redis管理工具查看键名,发现name值同时被删除

 举例二:clear()

 执行结果:

 再使用clear()后可以看到红框的值和以上的值不一样,即session中的键值被删除

在redis管理工具中的键值也被删除

举例三:flush()

 

设置session后,使用flush()前:

使用flush()后session对象被删除

 


二、类试图的初使用

1、类视图定义


使用类来定义的视图,称为类视图。
函数视图的区分:
函数的方式定义的视图称为函数视图,函数视图便于理解。
函数视图的缺点:遇到一个视图对应的路径提供了多种HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳。 

2、类视图的初使用 

导入类试图的两种方式:

from django.views.generic import View

from django.views import View

 在子应用中设置路由,使用的是类试图的时候,指定路由的对应视图格式,as_view()相当于实例化对象

设置发送的请求为GET请求,获取的所设置的get请求响应

 

要发送post请求时需要在settings.py文件中注释掉一个语句:

发送post请求: 

 总结:类视图中发起的请求是什么请求,就以请求方式的小写作为方法名来重写父类方法

如果用户发起一个不会被处理的请求,会返回一个405的状态,表示请求方式是不允许的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐