自己做视频网站只能用地址连接,重庆微信网站制作专家,网站模板简易修改,甘肃省建设银行网站【0】cookie、session和Token的发展史 【1】Cookie的形式
存储形式#xff1a;k#xff1a;v键值对存储位置#xff1a;客户端缺点#xff1a;不安全#xff0c;信息可能会泄露
【2】session的形式
标识符#xff0c;表示我是当前用户加密出来的数据对敏感信息进行加密…【0】cookie、session和Token的发展史 【1】Cookie的形式
存储形式kv键值对存储位置客户端缺点不安全信息可能会泄露
【2】session的形式
标识符表示我是当前用户加密出来的数据对敏感信息进行加密处理 存储服务端标识符配合上你的加密串把某个数据的标识符字符串全给服务端 客户端存储格式 session_id返回回来的标识符加密串
【3】Cookie方法 【3.1】设置Cookie
obj HttpResponse(ok)obj.set_cookie(K,V)
HttpResponsedjango的三板斧返回的是字符串.set_cookie(k,v) ------------- 设置cookie kkey值 vvalue值设置cookie是不只是使用django三板斧中的HttpResponse其余两个都能使用 【3.2】cookie取值
request.COOKIES.get(k) 【3.3】设置过期时间
obj.set_cookie(k,v,expires3)obj.set_cookie(k,v,max_age3)
expires:设置超时时间单位为秒max_age:设置超时时间单位为秒 【3.4】删除cookie
def logout(request,*args,**kwargs):obj redirect(/home/)obj.delete_cookie(sign)return obj
【4】Session
【4.1】session注意事项
session基于数据库表才能使用 必须先迁移数据库生层django_session表session只对当次登录有效 主动清除浏览器中本地存在的session验签发现没有sessionid就会生成新的sessiondjango_session表中的数据取决于浏览器同一个计算机(IP地址)上同一个浏览器只会有一条数据生效同一个计算机(IP地址)上多个浏览器会有多个数据生效当session过期的时候可能会出现多条数据对应一个浏览器 但是这些数据不会持久化存储会被定时清理掉可以手动清除也可以代码清除目的是为了节省服务器数据库资源 【4.2】设置session
request.session[sign] user
sign -------- k值user -------- v值 【4.3】session取值
sign request.session.get(sign) 【4.4】session设置过期时间
# 设置sessionrequest.session[key] value# 设置过期时间request.session.set_expiry()
参数1、整数设置多少秒过期2、日期设置到指定日期失效3、0退出浏览器失效4、不写失效时间取决于Django内部全局session失效的时间 【4.5】清空session
def clear_session(request):request.session.delete()
request.session.delete(): 只删除服务端1、该方法用于删除当前用户的Session数据但会保留Session的Key2、这意味着Session对象本身仍然存在但其中的数据将被清空3、下次访问时如果Session没有被重新填充则会得到一个空的Session对象简而言之就是使用request.session.delete()方法会删除浏览器端的session数据库中的数据不会被删除
def clear_session(request):request.session.flush()
request.session.flush()服务端和客户端都删除该方法用于完全删除当前用户的Session包括Session对象和所有相关数据下次访问时将创建一个新的空Session对象简而言之就是删除了浏览器端和数据库中的session 【4.6】保存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默认修改之后才保存默认
【5】CBV加装饰器的三种方法
from django.utils.decorators import method_decorator# 方式二放在类视图上面 (放的装饰器函数,name指定你的视图函数里面的方法)
# method_decorator(login_auth, nameget)
# method_decorator(login_auth, namepost)
class UserView(View):# 方式三 dispactch 方法加装饰器 本视图函数内所有的视图都需要走装饰器method_decorator(login_auth)def dispatch(self, request, *args, **kwargs):# Try to dispatch to the right method; if a method doesnt exist,# defer to the error handler. Also defer to the error handler if the# request method isnt on the approved list.if request.method.lower() in self.http_method_names:handler getattr(self, request.method.lower(), self.http_method_not_allowed)else:handler self.http_method_not_allowedreturn handler(request, *args, **kwargs)# 方式一加在视图函数上面# method_decorator(login_auth)def get(self, request, *args, **kwargs):return HttpResponse(这是home页面) 【5.1】补充 CSRF Token相关装饰器在CBV只能加到dispatch方法上 或者加在视图类上然后name参数指定为dispatch方法。 备注 csrf_protect ----------无论settings.py文件中的中间件中的csrf有没有被注释掉都会报错 1、为当前函数强制设置防跨站请求伪造功能 2、即便settings中没有设置中间件 from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decoratorclass HomeView(View):method_decorator(csrf_exempt)def dispatch(self, request, *args, **kwargs):return super(HomeView, self).dispatch(request, *args, **kwargs)def get(self, request):return render(request, home.html)def post(self, request):print(Home View POST method...)return redirect(/index/) csrf_exempt ---------- settings.py文件中的中间件中的csrf没有注释掉也不会报错 1、取消当前函数防跨站请求伪造功能 2、即便settings中设置了全局中间件 from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decoratormethod_decorator(csrf_exempt, namedispatch)
class HomeView(View):def dispatch(self, request, *args, **kwargs):return super(HomeView, self).dispatch(request, *args, **kwargs)def get(self, request):return render(request, home.html)def post(self, request):print(Home View POST method...)return redirect(/index/)