网络推广方案的概念,天津seo排名收费,做标准件网站,北京和隆优化科技锋哥原创的Python Web开发 Django5视频教程#xff1a;
2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计26条视频#xff0c;包括#xff1a;2024版 Django5 Python we…锋哥原创的Python Web开发 Django5视频教程
2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计26条视频包括2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、第3讲 Django5创建项目(用命令方式)等UP主更多精彩视频请关注UP账号。https://www.bilibili.com/video/BV14Z421z78C/HTTP是一种无状态协议每次客户端访问web页面时客户端打开一个单独的浏览器窗口连接到web服务器由于服务器不会自动保存之前客户端请求的相关信息所有无法识别一个HTTP请求是否为第一次访问。这就引进了web客户端和服务器端之间的会话这就是会话管理。
常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份Session通过在服务器端记录信息确定用户身份。
一、关于Cookie
cookie是某些网站为了辨别用户身份进行Session跟踪而储存在用户本地终端上的数据通常经过加密由用户客户端计算机暂时或永久保存的信息。
Cookie定义了一些HTTP请求头和HTTP响应头通过这些HTTP头信息使服务器可以与客户进行状态交互。
客户端请求服务器后如果服务器需要记录用户状态服务器会在响应信息中包含一个Set-Cookie的响应头客户端会根据这个响应头存储Cookie信息。再次请求服务器时客户端会在请求信息中包含一个Cookie请求头而服务器会根据这个请求头进行用户身份、状态等较验。 二、关于session
Session是另一种记录客户状态的机制不同的是Cookie保存在客户端浏览器中而Session保存在服务器上。客户端浏览器访问服务器的时候服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
当程序需要为某个客户端的请求创建一个session的时候服务器首先检查这个客户端的请求里是否已包含了一个session标识称为session id如果已包含一个session id则说明以前已经为此客户端创建过session服务器就按照session id把这个session检索出来使用如果检索不到可能会新建一个如果客户端请求不包含session id则为此客户端创建一个session并且生成一个与此session相关联的session idsession id的值应该是一个既不会重复又不容易被找到规律以仿造的字符串这个session id将被在本次响应中返回给客户端保存。 三Session和Cookie的区别
1、数据存储位置cookie 数据存放在客户的浏览器上session 数据放在服务器上。
2、安全性cookie不是很安全别人可以分析存放在本地的cookie并进行cookie欺骗考虑到安全应当使用session。
3、服务器性能session会在一定时间内保存在服务器上。当访问增多会比较占用你服务器的性能考虑到减轻服务器性 能方面应当使用cookie。
4、数据大小单个cookie保存的数据不能超过4K很多浏览器都限制一个站点最多保存20个cookie。
5、信息重要程度可以考虑将用户信息等重要信息存放为session其他信息如果需要保留可以放在cookie中。
四CookiesSession再Django中使用实例
获取 cookie
request.COOKIES[key]
request.COOKIES.get(key)
这俩个方法可以获取指定键名的cookierequest.get_signed_cookie(key, defaultRAISE_ERROR, salt, max_ageNone)default: 默认值
salt: 加密盐
max_age: 后台控制过期时间默认是秒数
expires: 专门针对IE浏览器设置超时时间
设置 cookie
# 获取HttpResponse对象
# rep HttpResponse(...)
rep render(request, ...)
# 设置 cookie
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt加密盐, max_ageNone, ...)参数key, 键
value, 值
max_ageNone, 超时时间
expiresNone, 超时时间(IE requires expires, so set it if hasnt been already.)
path/, Cookie生效的路径/ 表示根路径特殊的根路径的cookie可以被任何url的页面访问
domainNone, Cookie生效的域名
secureFalse, https传输
httponlyFalse 只能http协议传输无法被JavaScript获取不是绝对底层抓包可以获取到也可以被覆盖
删除 cookie
# 获取HttpResponse对象
# rep HttpResponse(...)
rep render(request, ...)
# 删除 cookie
rep.delete_cookie(key)此方法会删除用户浏览器上之前设置的cookie值
Django 操作 session
1. 获取、设置、删除Session中数据request.session[k1] # 没有值会报错 request.session.get(k1,None) # 可以获取多组request.session[k1] 123 # 可以设置多组request.session.setdefault(k1,123) # 存在则不设置del request.session[k1]2. 所有 键、值、键值对request.session.keys()request.session.values()request.session.items()request.session.iterkeys()request.session.itervalues()request.session.iteritems()4. 会话session的keyrequest.session.session_key5. 将所有Session失效日期小于当前日期的数据删除request.session.clear_expired()6. 检查会话session的key在数据库中是否存在request.session.exists(session_key)7. 删除当前会话的所有Session数据request.session.delete() # 只删客户端8. 删除当前的会话数据并删除会话的Cookie。request.session.flush() # 服务端、客户端都删这用于确保前面的会话数据不可以再次被用户的浏览器访问例如django.contrib.auth.logout() 函数中就会调用它。9. 设置会话Session和Cookie的超时时间django默认的session失效时间是14天request.session.set_expiry(value)* 如果value是个整数session会在些秒数后失效。* 如果value是个datatime或timedeltasession就会在这个时间后失效。* 如果value是0,用户关闭浏览器session就会失效。* 如果value是None,session会依赖全局session失效策略。
下面通过一个具体Django事例来深入体验下Django项目里的CookieSession操作
views.py里定义两个方法分别是登录页面跳转以及登录逻辑处理
def to_login(request):跳转登录页面:param request::return:return render(request, login.html)def login(request):登录:param request::return:user_name request.POST.get(user_name)pwd request.POST.get(pwd)if user_name python222 and pwd 123456:request.session[currentUserName] user_name # session中存一个用户名print(session获取, request.session[currentUserName])response render(request, main.html) # 获取HttpResponseresponse.set_cookie(remember_me, True) # 设置cookiereturn responseelse:content_value {error_info: 用户名或者密码错误}return render(request, login.html, contextcontent_value)
urls.py里定义映射 path(toLogin/, helloWorld.views.to_login),path(login, helloWorld.views.login)
templates下新建login.html和main.html
login.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title登录页面/title
/head
body
form action/login methodpost{% csrf_token %}tabletrth用户登录/th/trtrtd用户名/tdtdinput typetext nameuser_name/td/trtrtd密码/tdtdinput typepassword namepwd/td/trtrtdinput typesubmit value提交/td/trtrtd colspan2font colorred{{ error_info }}/font/td/tr/table
/form
/body
/html
main.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title主页面/title
/head
body
欢迎{{ request.session.currentUserName }}
/body
/html
测试运行浏览器输入http://127.0.0.1:8000/toLogin/ 转发到login.html
我们先输入一个错误的用户名和密码 携带错误信息参数转发到登录页面页面提示错误信息。
我们在输入一个正确的用户名和密码则转发到main.html主页面。 同时服务器返回set-cookies信息包括内置的sessionid以及我们自己设置的remember_me。 Django 中的 Session 配置
1. 数据库Session
SESSION_ENGINE django.contrib.sessions.backends.db # 引擎默认2. 缓存Session
SESSION_ENGINE django.contrib.sessions.backends.cache # 引擎
SESSION_CACHE_ALIAS default # 使用的缓存别名默认内存缓存也可以是memcache此处别名依赖缓存的设置3. 文件Session
SESSION_ENGINE django.contrib.sessions.backends.file # 引擎
SESSION_FILE_PATH None # 缓存文件路径如果为None则使用tempfile模块获取一个临时地址tempfile.gettempdir() 4. 缓存数据库
SESSION_ENGINE django.contrib.sessions.backends.cached_db # 引擎5. 加密Cookie Session
SESSION_ENGINE django.contrib.sessions.backends.signed_cookies # 引擎其他公用设置项
SESSION_COOKIE_NAME sessionid # Session的cookie保存在浏览器上时的key即sessionid随机字符串默认
SESSION_COOKIE_PATH / # Session的cookie保存的路径默认
SESSION_COOKIE_DOMAIN None # Session的cookie保存的域名默认
SESSION_COOKIE_SECURE False # 是否Https传输cookie默认
SESSION_COOKIE_HTTPONLY True # 是否Session的cookie只支持http传输默认
SESSION_COOKIE_AGE 1209600 # Session的cookie失效日期2周默认
SESSION_EXPIRE_AT_BROWSER_CLOSE False # 是否关闭浏览器使得Session过期默认
SESSION_SAVE_EVERY_REQUEST False # 是否每次请求都保存Session默认修改之后才保存默认