【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中会出现以下内容

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

需要下载的包: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的函数,即可看到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,即关闭浏览器后则消失

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

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

3、session的删除操作

 第一种:根据键名删除

del request.session[key]

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

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

案例一: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的状态,表示请求方式是不允许的。

原文地址:https://blog.csdn.net/Oh_Python

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

相关推荐


注:所有源代码均实测运行过。所有源代码均已上传CSDN,请有需要的朋友自行下载。
继承APIView和ViewSetMixin;作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。ViewSet在开发接口中不经常用。
一、Django介绍Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。Django学习线路Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。这个MVT模式并
本文从nginx快速掌握到使用,gunicorn快速掌握到使用,实现小白快速搭建django项目,并对可能出现的报错进行了分析
uniapp微信小程序订阅消息发送服务通知
Django终端打印SQL语句 1 Setting配置: 2 默认python 使用的MysqlDB连接,Python3 支持支持pymysql 所有需要在app里面的__init__加上下面配置:
url: re_path('authors/$', views.AuthorView.as_view()), re_path('book/(?P\d+)/$', vie
前提 关于html寻找路线: template 如果在各个APP中存在, Django 会优先找全局template 文件下的html文件,如果全局下的template文件没有相关的html Djan
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
from bs4 import BeautifulSoup#kindeditordef kindeditor(request): s = ''' <li><s
view.py 配置 html 配置
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type&#
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type&#
浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。所谓同源是指,域名,协议,端口相同。不同源的客户端脚本(javascript、ActionScript)在没明确授权的情况
自动发送 > 依赖jQuery文件 实例-->GET请求: 手动发送 > 依赖浏览器XML对象(也叫原生ajax) Ajax主要就是使用 【XmlHttpRequest】对象来完成请
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render