python开发框架——Django基础知识(四)


  hello!我是小J,每天一个小知识,一起学python,让技术无限发散。

1. cookie

1.1 cookie简单介绍

  cookie,是一种“小型文本文件”,是某些网站为了识别用户的身份,进行session跟踪而存储在用户本地终端(浏览器)上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。是经HTTP协议发起的一种无状态(每次发送的请求都是独立的,不受上一次发送的请求和响应的影响,即“人生如初见,对于服务器而言,每次的请求都是新的”)的会话。

在这里插入图片描述

1.2 cookie的设置和读取、清除

1.2.1 设置cookie

因为cookie是在响应中使用的,所以需要使用response对象进行设置,设置cookie就是赋值给浏览器,可以使用response.set_cookie进行设置。set_cookie相关的选项介绍如下:

key:cookie的key
value:cookie的value
max_age:最长的生命周期,单位是秒
expires:过期时间。跟max_age是类似的,只不过这个参数需要传递一个具体的日期,比如datetime或者是符合日期格式的字符串。如果同时设置了expires和max_age,那么将会使用expires的值作为过期时间。
path:对域名下哪个路径有效。默认是对域名下所有路径都有效。
domain:针对哪个域名有效。默认是针对主域名下都有效,如果只要针对某个子域名才有效,那么可以设置这个属性.
secure:是否是安全的,如果设置为True,那么只能在https协议下才可用。
httponly:默认是False。如果为True,那么在客户端不能通过JavaScript进行操作。

def set_cookie(request):
    """
    设置cookie
    :param request:
    :return:
    """
    response = HttpResponse('hello python')
    # 设置cookie  使用set_cookie() set_cookie的选项介绍
    response.set_cookie('name', 'wky')
    # response.set_cookie('name1',('wky',123))
    # response.set_cookie('name2', {'wky':123})
    # response.set_cookie('name3', ['wky', 123])
    response.set_cookie('name1', 'wky',max_age=10000)  # max_age 设置cookie的过期时间,单位秒
    return response

1.2.2 获取cookie

获取浏览器发送过来的使用的是request.COOKIES,获得得到的对象是一个字典类型。

def get_cookie(request):
    """
    获取cookie
    :param request:
    :return:
    """
    # 获取cookie使用的是request.COOKIES,获得的获得的对象是一个字典类型
    cookies = request.COOKIES
    # print(cookies)
    return HttpResponse(cookies.items())

1.2.3 删除cookie

删除cookie使用的是request.delete_cookie,删除cookie实际上是将之前设置的cookie的值设为空字符串,并将cookie的过期时间设置为0,就是当浏览器关闭后它就失效。

def delete_cookie(request):
    """
    删除cookie
    :param request:
    :return:
    """
    # 通过delete_cookie即可删除cookie。实际上删除cookie就是将指定的cookie的值设置为空的字符串,然后使用将它的过期时间设置为0,也就是浏览器关闭后就过期。
    # key 设置的cookie的key
    # path = '/' 设置的域名路径
    # domain = None  设置的域名
    response = HttpResponse('delete success')
    response.delete_cookie('name')
    return response

路由

# 项目根路由
urlpatterns = [
    # 从上往下执行 执行到之后就会去找这个对应子应用中的子路由,然后在返回函数中的数据
    path('admin/', admin.site.urls),
    # path('books/',include('books.urls')),
    path('',include('books.urls',namespace='books')),   # 添加子应用注册后所写的路由  namespace给这个对应的子应用其别名
]

# 子路由
from django.urls import path
from django.urls import re_path
from . import views
# 给子应用的路由起别名
app_name = 'books'
urlpatterns = [
    # 设置cookie 获取cookie 删除cookie
    path('set_cookie',views.set_cookie),
    path('get_cookie',views.get_cookie),
    path('delete_cookie',views.delete_cookie),

]

①设置cookie结果
通过http://127.0.0.1:8000/set_cookie可以进行路由的设置
在这里插入图片描述
在这里插入图片描述
从上图中可以看到我们设置的cookie的key,
在这里插入图片描述
在浏览器的西欧cookie中,我们可以清楚的看到自己设置的key,vlue以及cookie的过期时间等

② 获取cookie结果
通过http://127.0.0.1:8000/get_cookie获取cookie数据
在这里插入图片描述
③删除cookie结果
通过http://127.0.0.1:8000/delete_cookie对cookie进行删除
在这里插入图片描述
在这里插入图片描述
从图中可以看到我们删除name后,我们所设置的wky的cookie值变成了空字符串,而我们的过期时间也有所变化。

1.3 cookie流程

  1. cookie流程: 第一次请求的过程 ,我们的浏览器第一次请求服务器的时候,只是单纯的发起请求,是不会带有cookie的
  2. 第二次请求的时候就会携带cookie进行请求,这样我们的服务器才能够知道是谁的请求

2. session

2.1 session简介

  session,在计算机网络应用中,被称为“会话控制”。session对象会存储特定用户会话所需的属性及配置信息,这样,当用户在应用程序和web页跳转时,存储在session对象中的变量不会丢失,而是整个用户的会话会一直保存下去。当用户请求web页面时,如果没有会话,web服务器会自己建立一个session对象,当会话过期或被放弃时,服务器会终止会话。
在这里插入图片描述

2.2 session的设置和读取、清除

2.2.1 设置session

session的设置通过request.session[‘xxx’] = 'xx’的格式设置。

def set_session(request):
    """ 设置session """
    request.session['username'] = 'wky'
    request.session['age'] = 20
    return HttpResponse('设置session成功')

2.2.2 获取session

session的获取和session的设置相似,怎么设置的session就怎么进行session的获取

# 获取session  怎么设置的session就怎么去获取
def get_session(request):
    """ 获取session """
    # 获取设置session的用户名 年龄
    username = request.session['username']
    age = request.session['age']
    return HttpResponse(username + ":" + str(age))

2.2.3 清除session

session的清除有clear() 和 flush()两种方法

  1. session.flush()的作用就是将缓存的session数据进行清理同步到数据库
  2. session.clear()的作用就是清除session中的缓存数据,不会管数据和数据库的同步
# 清除session 主要有两种方法  clear() 和 flush()
# flush和 clear 都可以清除session数据    flush 会把sessionid也给清除掉里面的内容
# 1 session.flush()的作用就是将session的缓存中的数据与数据库同步。
# 2 session.clear()的作用就是清除session中的缓存数据(不管缓存与数据库的同步)。
def clear_session(request):
    request.session.clear()
    return HttpResponse('使用clear()清除session')

def  flush_session(request):
    request.session.flush()
    return HttpResponse('使用flush()清除session')

子路由

from django.urls import path
from django.urls import re_path
from . import views
app_name = 'books'
urlpatterns = [
    # 设置session 获取session 清除session
    path('set_session',views.set_session),
    path('get_session',views.get_session),
    path('clear_session',views.clear_session),
    path('flush_session',views.flush_session),
]

结果展示
①查询结果展示
首先通过http://127.0.0.1:8000/set_session进行设置session,
在这里插入图片描述
但是顿时就报错了,在设置session这一部分需要注意的是,在运行项目时,需要到terminal中进入到根目录下使用python manage.py migrate导入Django中相应的库才能够正常使用。
在这里插入图片描述
再通过http://127.0.0.1:8000/set_session正常设置session
在这里插入图片描述
在这里插入图片描述
可以看到原来cookie的地方新增了一个sessionid,并且对内容进行了加密处理。

②获取session结果展示
通过http://127.0.0.1:8000/get_session获取session
在这里插入图片描述
③清除session结果展示
使用clear()清除session,通过http://127.0.0.1:8000/clear_session
在这里插入图片描述
在这里插入图片描述
发现没有变化,实际上已经进行了session的清除,之所以没有变化是因为浏览器本地缓存的原因

使用flush()进行session的清除,通过http://127.0.0.1:8000/flush_session
在这里插入图片描述
在这里插入图片描述
从上图中发现我们sessionid中的内容变成了空字符串,实现了session的清除

3. cookie和session的区别

在这里插入图片描述


总结

  本文属于作者原创,转载请注明出处,不足之处,希望大家能过给予宝贵的意见,如有侵权,请私信。每天一个小知识,一起学python,让技术无限发散

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python独角兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值