csrf补充
问csrftoken在Django里面是基于什么实现的?------>中间件。
如果是Django表示每次发请求过来的时候,要检验有没有带随机字符串。当在执行视图函数之前,前面还有一道屏障,这个屏障就是用来判断带没带这个随机字符串,带了就可以继续往下走,没带就直接让它返回。根本到不了要请求的那里。
csrftoken在view方法里面。为什么呢?(中间件里做判断,如果加了免除csrf免除认证装饰器,它得做个判断得找到那个函数找到它上面的那个装饰器。而对于process_view而言,根本没到达路由匹配根本没找到函数,只有到process_view之后才能找到函数才能做判断。)
发过来请求,拿到token,验证这个token是不是我之前发的,如果带了就让继续执行,没带就直接返回。
加这个装饰器,意味着这个函数免除csrtoken认证。
from django.views.decorators.csrf import csrf_exempt # Create your views here. @csrf_exempt
def users(request): user_list = ['zgr', 'oldboy']
return HttpResponse(json.dumps(user_list))
来做csrftoken认证的时候做两件事(process_view做的):
第一件事先判断加没加这个装饰器
第二件事获取请求过来的token(请求体或cookie中)并进行验证是否遵循csrftoken规则,如果验证通过则继续执行,如果验证不通过则返回。
Django最多可以写几个方法?
process_request
process_response
process_view
process_exception (异常之后执行)
process_render_template (这个返回的对象视图函数永远不执行,因为没有render方法。)
中间件的执行流程是什么样子的?
看Django版本。
Django1.10 以上版本。
请求进来先执行Django中间件所有的request,执行路由匹配,意味着找到函数,但不执行。
跳回来在执行view,都执行完,执行视图函数。
视图函数在执行response再返回。
如果报错exception执行。
如果返回的对象有render方法,render_tempate方法也会被执行。
中间件做过什么?
权限
用户登录认证(之前是在每个视图函数之前加装饰器)为了省事不需要再每个函数加装饰器了,只要在中间件做一次判断就可以了。
csrftoken
如果不注释 'django.middleware.csrf.CsrfViewMiddleware', 意味着全局全栈整个网站只要发指定请求都是遵循csrftoken的要求。
不想要csrftoken认证的时候可以给他加个装饰器。
from django.views.decorators.csrf import csrf_exempt
# Create your views here. @csrf_exempt
def users(request): user_list = ['zgr', 'oldboy']
return HttpResponse(json.dumps(user_list))
还可以中间件注视了都不用,但是就想让他用怎么办?也是加个装饰器
rom django.views.decorators.csrf import csrf_protect # Create your views here. @csrf_protect
def users(request): user_list = ['zgr', 'oldboy']
return HttpResponse(json.dumps(user_list))
对csrft现在有两种设置方式了,一种是中间件,一种是装饰器。
如果cbv里面不想用csrftoken怎么办?
如果在cbv加装饰器导入
from django.utils.decorators import method_decorator
把@method_decorator(csrf_exempt)这个装饰器,并把csrf_exempt当做参数传进来。
到dispatch中就可以了。免除csrftoken认证。
class StudentsView(MyBaseView,View): @method_decorator(csrf_exempt)
def dispatch(self, request,*args, **kwargs):
print('before')
ret = super(StudentsView, self).dispatch(request, *args, **kwargs)
print('after')
return ret def get(self, request, *args, **kwargs):
print('get方法')
return HttpResponse('GET') def post(self, request, *args, **kwargs):
return HttpResponse('POST') def delete(self, request, *args, **kwargs):
return HttpResponse('DELETE')
还有一种dispatch方法不用写,加到类里面去。这样也可以。
@method_decorator(csrf_exempt,name='dispatch') #name是里面的方法名。 找到这个对象StudentsView的dispatch这个方法并给这个方法加上装饰器。
class StudentsView(View): def get(self, request, *args, **kwargs):
print('get方法')
return HttpResponse('GET')
def post(self, request, *args, **kwargs):
return HttpResponse('POST')
csrf补充的更多相关文章
- 3.CBV视图之csrf补充
CBV使用csrf装饰器关闭/开启 csrf验证,直接在函数上加装饰器无效的 #方法1 from django.views import View from django.views.decorato ...
- Django 五——中间件、缓存、CSRF、信号、Bootstrap(模板)
内容概要: 1.Django的请求生命周期是怎么样的? 2.中间件 3.CSRF补充 4.信号 5.Bootstrap(模板) 1.Django的请求生命周期是怎么样的? (即请求发起到返回都经历了什 ...
- 22期老男孩Ptython全栈架构师视频教程
老男孩Ptython全栈架构师视频教程 Python最新整理完整版22期视频教程 超60G课程容量<ignore_js_op> <ignore_js_op> <ignor ...
- django上课笔记3-ORM补充-CSRF (跨站请求伪造)
一.ORM补充 ORM操作三大难点: 正向操作反向操作连表 其它基本操作(包含F Q extra) 性能相关的操作 class UserInfo(models.Model): uid = models ...
- 浅谈CSRF攻击方式
一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...
- 关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)
我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...
- CSRF token 无法被验证. ----Yii连接数据库后数据库错误日志报错
CSRF token 无法被验证. 我使用的是mongodb+ yii1.1 What is CSRF, please see the details here. http://en.wikiped ...
- Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)
通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...
- python第二十天-----Django补充
学习python已经20天了啊,从一个不萌萌哒的战5渣升级到了一个萌萌哒的战5渣 1.分页(这是一个很通用的模块,不论在任何框架里都可以使用哦) class Page(object): def __i ...
随机推荐
- Web开发人员vs网页设计师
Web开发人员vs网页设计师 我们都遇到过,但实际的区别是什么?如果您是该领域的新手,请阅读详细内容,这些内容比您想象的更重要. 经过几周(或几个月)的规划和准备,进行市场调查,与其他企业家交谈,现在 ...
- 浅析SQLite的锁机制和WAL技术
锁机制 SQLite基于锁来实现并发控制.SQLite的锁是粗粒度的,并不拥有PostgreSQL那样细粒度的行锁,这也使得SQLite较为轻量级.当一个连接要写数据库时,所有其它的连接都被锁住,直到 ...
- mybatis generator使用方式
资源: 一 https://files.cnblogs.com/files/jiuya/jdbcT.zip 二 https://files.cnblogs.com/files/jiuya/mybat ...
- Linux:Day4(下) 用户及组管理
Linux用户:Username/UID 管理员:root,0 普通用户: 1-65535 系统用户:1-499 对守护进程获取资源进行权限分配: 登陆用户:500+ 交互式登录: Linux组:Gr ...
- go第三方日志系统-seelog-使用文档
参考:https://godoc.org/github.com/cihub/seelog 导入方式: import "github.com/cihub/seelog" 包seelo ...
- VMware 中安装虚拟机和宿主机通信
网络上对于三种连接模式说的很多了,这里就不在具体的说明了.此处采用的NAT模式连接虚拟机,让虚拟机和宿主机互相通讯,并且让虚拟机能访问互联网. 1.首先设置虚拟机的网络,如下图.通过如下操作进入虚拟机 ...
- AT1219 歴史の研究
附带权值的类区间众数问题?不是很好策啊 发现题目没有强制在线,而且也只有询问操作,那么可以考虑莫队 但是这里的莫队有一个很显著的特征,插入的时候很好维护答案,但是删除的时候不好回退 那么有没有什么办法 ...
- 深入理解Redis Cluster
Redis Cluster采用虚拟槽分区,所有的key根据哈希函数映射到0~16383槽内,计算公式: slot = CRC16(key) & 16383 每个节点负责维护一部分槽以及槽所映射 ...
- gulp + gulp-better-rollup + rollup 构建 ES6 开发环境
gulp + gulp-better-rollup + rollup 构建 ES6 开发环境 关于 Gulp 就不过多啰嗦了.常用的 js 模块打包工具主要有 webpack.rollup 和 bro ...
- JMX,Jstatd做好JVM应用上线的最后一层保障
目录 我理解的监控 代码异常监控 远程主机配置jmx 修改要启动的java程序启动参数(JVM_OPTS). 修改文件权限 启动jvisualvm 监控服务器上的java程序 jstatd 连接到远程 ...