django 12 django中间件,cookie与session
django中间件
# 1.所有的请求和响应都必须经过中间件 # 2.django中间件默认自带七个,每个中间件负责不同的功能 """Django中间件的作用""" -1.修改请求,即传送到view中的HttpRequest对象。 -2.修改响应,即view返回的HttpResponse对象。 # 3.中间件的配置: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', # 4.常见的中间件方法(五个) # 1).process_request - 1.请求来的时候会按照配置文件中注册了的中间件 从上往下依次执行每一个中间件里面的process_request方法 如果没有则直接跳过 - 2.该方法如果返回了HttpResonse对象 那么请求不会再往后执行 原路返回 # 2).process_response - 1.响应走的时候会按照配置文件中注册了的中间件 从下往上一次执行每一个中间件里面的process_response方法 没有没有则直接跳过 - 2.该方法有两个形参request和response 并且默认情况下应该返回response - 3.该方法也可以自己返回HttpResponse对象 相当于狸猫换太子 """ 注意:如果请求的过程中process_request方法直接反悔了 HttpResponse对象那么会原地执行同级别process_response方法返回(flask则不同) """ # 3).process_view 当路由匹配成功之后 执行视图函数之前 自动触发 # 4).process_excption 当视图函数报错之后 自动触发 # 5).process_template_response 当视图函数返回的数据对象中含有render属性对应render函数才会触发 # 5.自定义中间件 - 1. 创建一个任意名的文件夹 - 2. 文件夹内创建一个任意名的py文件 - 3. 在py文件内编写中间件类(参考自带中间件的代码编写类并继承)
- 4. 在配置文件中注册即可(注册后才可以生效)
cookie与session简介
# 1.cookie 保存在客户端与用户状态相关的信息 # 2.session 保存在服务端与用户状态相关的信息 """session的工作需要依赖于cookie""" # 3.浏览器有资格拒绝保存服务端发送过来的cookie数据 # 4.django操作cookie - 1.想让客户端浏览器保存cookie需要HttpResponse对象调用方法 from django.shortcuts import render,HttpResponse,redirect,JsonResponse return render() return HttpResponse() return redirect() return JsonRepsonse() - 2.设置cookie obj = HttpResponse()/render()/redirect()/JsonResponse() obj.操作cookie的方法 return obj - 3.cookie操作设置 1.登录设置cookie 2.多个视图函数都需要校验用户是否登录(装饰器) 3.记录住用户登录之前想要访问的页面,登录成功后自动跳转 场景1:用户访问了其他需要登录才可以访问的页面 如何跳转>>>:想要访问的 场景2:用户直接访问的登录页面 如何跳转>>>:网址首页 print(request.path) print(request.path_info) print(request.get_full_path()) # 5.django操作session -1.session类似于服务端接收到客户端产生的随机字符串,存储后每次自动校验 -2.session的特点: 1.django默认的session失效时间是14天 2.客户端会接收到键值对,键默认是sessionid的值是加密的随机字符串(令牌) 3.session用于存储一次会话的多次请求的数据,存在服务端 4.session可以存储任意类型,任意大小的数据 5.即使浏览器关闭,保存的session也不会改变 6.session是以键值对的形式存储的 7.session依赖于cookie;唯一标识码保存在sessionid cookie -3.session操作 request.session['name'] = 'jason' 1.django自动产生一个随机字符串返回给客户端(对name加密) 2.往django_session创建数据(对jason加密) request.session.get('name') 1.自动从请求中回去session对应的随机字符串 2.拿着随机字符串去django_session中匹配数据 3.匹配到会自动解密并且展示 -4.session的存储位置(五种模式) 1.数据库 2.缓存数据库 3.文件 4.缓存+数据库 5.加密 -5.session其他操作 1.删除 # 删除当前会话的所有Session数据 request.session.delete() # 删除当前的会话数据并删除会话的Cookie。 request.session.flush() 2.时间设置 # 设置会话Session和Cookie的超时时间 request.session.set_expiry(value) """ 1.如果value是一个int类型,那么session将在value这个时间后过期,其中value代表的是秒。 2.如果value是一个datetime或者timedelta对象,那么这个session将在指定的时间后过期。datetime必须是使用了PickleSerializer进行序列化的。 3.如果value等于0,那么session将在web浏览器关闭后就直接过期。 4.如果value等于None,那么session将用settings.py中设置的全局过期字段SESSION_COOKIE_AGE,这个字段默认是14天,也就是2个礼拜。 5.读session的时候不会修改session的有效期,修改session的时候会重新设置session的有效期,会从修改的时间,重新计时。 6.如果settings.py中设置了SESSION_EXPIRE_AT_BROWSER_CLOSE=True,那么默认讲不再使用SESSION_COOKIE_AGE了,而是浏览器一关闭,session数据就会过期。这个值默认是为False。 """
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)