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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Django学习笔记 - 8】:session的配置和使用、类视图初使用

一、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配置到项目中进行使用

f6300bacac95406ca32f6d916bed0317.png



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

760b90e40063471293975df21789ff18.png



4、在Navicat中新建一个连接

9fd5ba1b1a1d4ae88f9e2942660212f4.png



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


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


267f1a4fe61a4bb9b88892813969f8ce.png



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

677e8fc63a1c43d586425c15c56c1046.png



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

c8110049e4314019833d9eb2f17db826.png



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

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

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


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


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 引擎,指定数据库的引擎要使用哪一个数据库,此处即已经修改为了mysql数据库引擎
        'NAME': 'dj2022',    # 数据库名
        'HOST': '127.0.0.1',    # 数据库的访问ip
        'PORT': 3306,   # 数据库的使用端口
        'USER': 'root',  # 用户
        '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的函数,即可看到redis和mysql中都存储着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,即关闭浏览器后则消失



1de0ab65660141fcb9a10cc6ad9d4e3b.png

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

5d39ebeb9227407eb5bc3e2349200832.png

9d4179a390eb4292aadb9895dfa240b0.png

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




3、session的删除操作


第一种:根据键名删除

del request.session[key]


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


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



案例一:del演示

45ce62d5583c47509200aec9c357659b.png


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

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


ad75b69a6c0243c7930f7d6cccacef63.png

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

969990057c1c4079bc645befa7e5fb46.png


举例二:clear()

e2faa8802ea6482ea078847964d8dab6.png


执行结果:

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


ba7410a2f7194fb48ea616252e9bd7a5.png

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

6fe61013559347d8867dc7c09c868269.png




举例三:flush()


542833ee6f07414e912db712d9d61c7d.png


session后,使用flush()前:

f016ca45827e4d6a940b0056c9ce9725.png


45f3d65d3d034d61a62b6b10c9052433.png




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

7c585439fa194dfb819baed4d1523b64.png

dc6197bdb2e94271bf179c9a5c70f925.png





二、类试图的初使用


1、类视图定义


使用类来定义的视图,称为类视图。


与函数视图的区分:

以函数的方式定义的视图称为函数视图,函数视图便于理解。


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




2、类视图的初使用


导入类试图的两种方式:


from django.views.generic import View

from django.views import View



b479ac36e4814e1e87245a14a7eb41e6.png


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

27dadc92659a45c79b0c7ca844cd4bbf.png


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

8bc89fd6d2e148c59c23d7c5efbbd467.png


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


39399b5c3953403880eb234f6f897a7b.png


8917d9e574aa41ad9cc2f6d6a061eedf.png


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


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



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
82 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
4月前
|
存储 缓存 中间件
Django 框架中 Session 的用法
【8月更文挑战第30天】
40 6
|
3月前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
4月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
79 0
|
4月前
|
关系型数据库 MySQL 机器人
Django入门到放弃之数据库配置
Django入门到放弃之数据库配置
|
4月前
|
缓存 数据库 数据安全/隐私保护
Django入门到放弃之session
Django入门到放弃之session
|
4月前
|
前端开发 JavaScript 安全
Django入门到放弃之常见配置及基本命令
Django入门到放弃之常见配置及基本命令
|
4月前
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
Python 安全
Django配置介绍
Django的配置文件settings.py包含了基本上所有的Django安装的配置,这里解释下配置是如何生效的,还有有哪些可用的配置。 基础 配置文件是一个Python的模块,然后里面有一些模块级的变量。
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
156 45