内容概要


  • 用户登录之后跳转到用户登录之前想要访问的页面
  • 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解决策略

django框架11的更多相关文章

  1. Django框架11 /form组件、modelForm组件

    Django框架11 /form组件.modelForm组件 目录 Django框架11 /form组件.modelForm组件 1. form组件介绍 2. form常用字段与插件 3. form所 ...

  2. MySQL在Django框架下的基本操作(MySQL在Linux下配置)

    [原]本文根据实际操作主要介绍了Django框架下MySQL的一些常用操作,核心内容如下: ------------------------------------------------------ ...

  3. django框架介绍

    主要内容 1.        Django框架发展 2.        Django架构,MTV模式 3.        开发流程 4.        开发实例——Poll python下各种框架 一 ...

  4. Django框架全面讲解

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  5. Django框架基础之Form组件

    服务端假设所有用户提交的数据都是不可信任的,所以Django框架内置了form组件来验证用户提交的信息 form组件的2大功能:       1 验证(显示错误信息)       2 保留用户上次输入 ...

  6. Django ---- 框架简介

    MVC框架和MTV框架 mvc,全名是 Model View Controller, 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Cont ...

  7. WEB框架-Django框架学习-预备知识

    今日份整理,终于开始整个阶段学习的后期了,今日开始学习Django的框架,加油,你是最胖的! 1.web基础知识 1.1 web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是 ...

  8. Django 框架基础

    Python web框架 本质 收发socket消息 --> 按照HTTP协议消息格式去解析消息 路径和要执行的函数的对应关系 --> 主要的业务逻辑 字符串替换 --> 模板(特殊 ...

  9. Django框架简介-路由系统

    2.2 路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是 ...

随机推荐

  1. Jackson 和 fastJSON 导包异常

    内容 一.异常信息 HTTP Status 400 - type Status report message org.springframework.http.converter.HttpMessag ...

  2. rpm方式安装mysql

    一.系统标准化采样 1)查看centos系统版本 [root@fp-web-126 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 ...

  3. Java 8 学习记录

    Java 8 学习记录 官方文档 https://docs.oracle.com/javase/8/ https://docs.oracle.com/javase/8/docs/index.html ...

  4. java过滤器拦截器的执行时机

    https://www.cnblogs.com/shamo89/p/8534580.html https://www.cnblogs.com/juanzila/p/11276067.html

  5. toFixed()与银行家舍入

    toFixed()与银行家舍入 一直在用toFixed()方法做浮点数的舍入取值,如果只是客户端展示数据是没有多大问题的,但是如果涉及到和后端互交,数据的精度可能会导致接口对接失败,当然了,涉及安全性 ...

  6. 微信开发者工具:Cannot read property 'addEventListener' of undefined 报错

    点击右上角详情 有个调试基础库 当前为2.17.0 调为2.14.1 解决 如果对您有帮助,希望对面的你能点赞加评论!拜上! 若有bug还请告知,万分感谢!

  7. AcWing周赛43

    AcWing周赛43 题源:https://www.acwing.com/activity/content/1233/ 4314. 三元组 直接暴力做就是了,我一开始还在找规律..悲 我滴代码 #in ...

  8. android软件简约记账app开发day04-记账页面条目的代码书写

    android软件简约记账app开发day04-记账页面条目的代码书写 在前三天我们完成了基本的界面展示,从今天开始,我们进入到后台逻辑代码的编写中,今天开发记账条目的代码 我们在主页面点击记一笔图标 ...

  9. 我的树莓派 Raspberry Pi Zero 2W 折腾笔记,记录一些遇到的问题和解决办法

    0x00 前言说明 最近买了一块Raspberry Pi Zero 2W来玩,目的是想搭建一台远程运行的个人服务器,上面放个博客.点个灯啥的.于是就有了这篇文章. 树莓派官网地址:https://ww ...

  10. Java基础语法Day_01

    第1节 java运行环境 day01_01_Java语言发展史 day01_02_计算机进制转换 day01_03_计算机存储单元 day01_04_命令提示符_基本介绍 day01_05_命令提示符 ...