内容概要


  • 用户登录之后跳转到用户登录之前想要访问的页面
  • django操作cookie补充
  • django操作session
  • django操作session补充
  • CBV添加装饰器
  • django中间件
  • 自定义中间件
  • csrf跨站请求伪造
  • csrf解决策略

内容详情


用户成功登录跳转到之前想要访问的页面

def login_auth(func_name):
def inner(request, *args, **kwargs):
# print(request.path)
# print(request.path_info)
1.获取用户没有登录之前想要访问的网址地址
target_path = request.get_full_path()
if request.COOKIES.get('name'):
res = func_name(request, *args, **kwargs)
return res
else:
2.将用户想要访问的地址当做参数传给登录功能
return redirect(f'/login/?next={target_path}')
return inner def login(request):
if request.method == 'POST':
name = request.POST.get("name")
if name == 'jason':
# 获取用户登录之前想要访问的地址
next_path = request.GET.get('next')
'''注意 用户也有可能直接访问的登录页面 没有想要访问的其他页面'''
if next_path:
res = redirect(next_path) # 跳转到之前想要访问的界面
else:
res = redirect('/home/') # 默认登录之后跳转的界面
res.set_cookie('name', 'jason')
return res
return render(request, 'login.html')

django操作cookie补充

set_signed_cookie(key,value,salt='加密盐')
set_signed_cookie(key,value,max_age=超时时间:默认是秒数)
expires:专门针对IE浏览器设置超时时间 HttpResponse对象.delete_cookie(key)
ps:学到这里要对登录操作有本质的认识:核心就是cookie的存取

django操作session

# 设置
request.session['key'] = value # 可以设置多组
# 获取
request.session.get('key') # 可以获取多组
"""
服务端保存用户相关状态信息 返回给客户端随机字符串
针对保存 django需要一张表来处理 >>> 自带的django_session表
ps:django数据库迁移命令会产生一堆默认的表 其中就有一张django_session表
"""
1.设置session内部发生的事情
1.产生一个随机字符串
2.表中存储随机字符串与加密数据的对应关系
3.并将产生的随机字符串也给客户端发送一份并让其保存
sessionid:随机字符串
2.获取session内部发送的事情
1.自动获取客户端请求中的随机字符串
2.自动去存储session数据的表中比对
3.如果比对成功自动获取并'解密处理'
# django默认的session失效时间是14天

django操作session补充

request.session.session_key  # 获取产生的随机字符串
request.session.delete() # 只删客户端
request.session.flush() # 服务端 客户端都删
request.session.set_expiry(value) # 设置超时时间
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。 针对session数据的存储位置 有五种方案
1.数据库存储
2.缓存存储
3.文件存储
4.缓存+数据库存储
5.动态加密

CBV添加装饰器

'''需要借助于一个专门的装饰器模块'''
from django.utils.decorators import method_decorator # 方式1:直接在类中的某个方法上添加
class MyLoginView(views.View):
@method_decorator(login_auth)
def get(self, request):
return HttpResponse("from CBV get view")
# 方式2:直接在类名上添加并指定
@method_decorator(login_auth, name='get')
class MyLoginView(views.View):
def get(self, request):
return HttpResponse("from CBV get view")
# 方式3:重写dispatch方法并添加作用于类中所有的方法
class MyLoginView(views.View):
@method_decorator(login_auth)
def dispatch(self, request, *args, **kwargs):
super().dispatch(request,*args,**kwargs)

django中间件

自定义中间件

csrf跨站请求伪造

csrf解决策略

最新文章

  1. KnockoutJS 3.X API 第四章 数据绑定(5) 控制流component绑定
  2. 编写一个Java应用程序,该应用程序包括2个类:Print类和主类E。Print 类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的 立方和等于这个三位数本身,如: 371 = 33 + 73 + 13。)在主类E的main方法中来 测试类Print
  3. Swift声明参考
  4. 去除GHOST版系统自带的2345流氓软件
  5. poj 1475 || zoj 249 Pushing Boxes
  6. Sublime text2如何设置快捷键让编写的HTML文件在浏览器预览?
  7. “我爱淘”第二冲刺阶段Scrum站立会议1
  8. Visual Studio2013使用Microsoft Office Document Imaging(MODI)的方法
  9. Android Studio 环境配置优化
  10. ref和out的区别在c#中 总结
  11. Gvim自动编译运行c++11的程序
  12. CentOS(Linux) - SVN使用笔记(一) - 安装SVN过程及开启和关闭svn服务指令
  13. 函数alv下的颜色设置
  14. matlab 图片批量读取
  15. Delphi流的操作
  16. 201521123044 《Java程序设计》第2周作业-Java基本语法与类库
  17. ==运算符和equals()方法的区别
  18. 基于bootstrap table配置的二次封装
  19. vue项目,ie11 浏览器报 Promise 未定义的错误
  20. jquery 判断 元素是否具有某个class

热门文章

  1. Java自定义异常类的简单实现
  2. Java基础之浅谈泛型
  3. DRF JWT认证(一)
  4. NodeJs学习日报day9——操作数据库
  5. jsp第一周作业
  6. linux创建磁盘阵例10
  7. 【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩
  8. 老生常谈系列之Aop--Spring Aop源码解析(一)
  9. arthas学习图文记录
  10. Nvidia Triton使用教程:从青铜到王者