$Django 中间件 csrf
2024-05-15 23:42:45
中间件
-中间件是什么?请求和响应之间的一道屏障
-中间件作用:控制请求和响应
-django中内置几个中间件
process_request(self,request)
process_view(self, request, callback, callback_args, callback_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)
-中间件是什么?请求和响应之间的一道屏障
-中间件作用:控制请求和响应
-django中内置几个中间件
process_request(self,request)
process_view(self, request, callback, callback_args, callback_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)
总的顺序
我是 request1
我是 request2
我是 执行视图函数之前 1
我是 执行视图函数之前 2
我是视图函数
我是 template 2
我是 template 1
我是 异常2
我是 异常1
我是 response2
我是 response1
我是 request2
我是 执行视图函数之前 1
我是 执行视图函数之前 2
我是视图函数
我是 template 2
我是 template 1
我是 异常2
我是 异常1
我是 response2
我是 response1
-自定义中间件
-1.from django.utils.deprecation import MiddlewareMixin
class MyMiddleware1(MiddlewareMixin):
def process_request(self, request):
print('MyMiddleware---->1---->process_request')
# 返回HttpRspons对象,直接返回,走自己的process_response
# 返回None的时候,继续往下走
# return HttpResponse('i am middle--1')
return None
def process_response(self, request, response):
print('MyMiddleware--->1---->process_response')
return response #这里必须返回HTTPRESPONSE对象 对视图函数的返回值response的一个操作,可以丢弃等等操作
-2.在setting中注册,是有顺序的,
MIDDLEWARE = [
'app01.mymiddelware.MyMiddleware1',
]
-中间件执行顺序:
-process_request,从上往下执行
-如果retrun HttpResponse的对象,直接返回了
-如果retrun None ,继续往下走
-process_response,从下往上执行
-必须要retrun Httpresponse的对象
csrf:跨站请求伪造
比如:转账请求:transfer?to=lqz&count=1000
-是什么?攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的
-如何防范:
-通过refer
-加一个随机字符串校验(加载请求的路径里,加载请求体中)
-在请求头中加字符串校验
django中的应用:
-中间件csrf不注释掉
-以后再发post请求,必须携带那个随机字符串到服务端
-form表单形式:
<form action="" method="post">
{% csrf_token %}
<input type="text" name="name">
<input type="text" name="pwd">
<input type="submit" value="提交">
</form>
-ajax提交
data: {
'name': $('[name="name"]').val(),
'pwd': $('[name="pwd"]').val(),
//'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()
'csrfmiddlewaretoken': '{{ csrf_token }}'
},
csrf:局部禁用,局部使用
-用装饰器:
from django.views.decorators.csrf import csrf_exempt,csrf_protect
-fbv--->直接加载fbv上就行了
-局部禁用,全局得使用
@csrf_exempt
def csrf_disable(request):
print(request.POST)
return HttpResponse('ok')
-局部使用,全局得禁用
@csrf_protect
def csrf_disable(request):
print(request.POST)
return HttpResponse('ok')
-cbv-->只能加在dispatch方法或者类上面
-局部禁用,全局得使用
-局部使用,全局得禁用
from django.views import View
from django.utils.decorators import method_decorator
#####################################################
第一个参数为装饰器,第二个参数为哪个方法
@method_decorator(csrf_protect,name='dispatch')
class Csrf_disable(View):
# @method_decorator(csrf_protect)
def dispatch(self, request, *args, **kwargs):
ret=super().dispatch(request, *args, **kwargs)
return ret
def get(self,request):
return HttpResponse('ok')
@method_decorator(csrf_protect,name='dispatch')
class Csrf_disable(View):
# @method_decorator(csrf_protect)
def dispatch(self, request, *args, **kwargs):
ret=super().dispatch(request, *args, **kwargs)
return ret
def get(self,request):
return HttpResponse('ok')
def post(self,request):
return HttpResponse('post---ok')
return HttpResponse('post---ok')
cbv加登陆验证装饰器
-先导入:
from django.utils.decorators import method_decorator
-1 可以在方法上加装饰器:
@method_decorator(login_auth)
-2 可以在类上加
@method_decorator(login_auth,name='post')
@method_decorator(login_auth,name='get')
-3 可以加在dishpatch方法上
@method_decorator(login_auth)
一旦加在dishpatch,说明,所有方法都加了装饰器
-1 可以在方法上加装饰器:
@method_decorator(login_auth)
-2 可以在类上加
@method_decorator(login_auth,name='post')
@method_decorator(login_auth,name='get')
-3 可以加在dishpatch方法上
@method_decorator(login_auth)
一旦加在dishpatch,说明,所有方法都加了装饰器
#####py文件
from django.utils.deprecation import MiddlewareMixinfrom django.utils.decorators import method_decoratorfrom django.shortcuts import render,HttpResponse class MyMiddleware(MiddlewareMixin): def process_request(self,request): print('我是 request1') # return HttpResponse(1) # 我是 request0 我是 response0 def process_view(self, request, callback, callback_args, callback_kwargs): print ("我是 执行视图函数之前 1") #有异常才执行该函数,每异常不管他,必须返回Httpresponse对象(有异常 显示我的信息) def process_exception(self, request, exception): print ("我是 异常1") return HttpResponse('出错了兄弟1') # 方法对视图函数返回值有要求,必须是一个含有render方法类的对象,才会执行此方法 # 1.视图函数 必须返回 一个类(有render方法 返回Httprespons对象) # 2.这里要返回一个 Httpresponse对象 def process_template_response(self,request,response): print('我是 template 1') return HttpResponse('我是 template1') def process_response(self,request,response): print('我是 response1') return responseclass MyMiddleware1(MiddlewareMixin): def process_request(self,request): print('我是 request2') def process_view(self, request, callback, callback_args, callback_kwargs): print ("我是 执行视图函数之前 2") def process_exception(self, request, exception): print ("我是 异常2") def process_template_response(self, request, response): print ('我是 template 2') return HttpResponse ('我是 template2') def process_response(self, request, response): print ('我是 response2') return response ###视图函数
from django.shortcuts import render,HttpResponse # Create your views here.class GG(): def render(self): return HttpResponse('template')def aaa(request): if request.method=='GET': print('我是视图函数get') return GG() elif request.method=='POST': print(request.POST,type(request.POST),'我是视图函数post') return HttpResponse('ok')
转载于:https://www.cnblogs.com/3sss-ss-s/p/10009728.html
最新文章
- gi克隆github文件_如何构建GitHub文件搜索功能的克隆
- readonly和disabled的区别!
- Apache Directory 指令
- 巨蟒python全栈开发flask5
- 【LeetCode笔记】337. 打家劫舍III(Java、树型动态规划)
- Win7+IIS7下用FastCGI模式配置PHP环境
- mysql的介绍和安装
- python调用接口上传文件_python接口自动化7-post文件上传
- 导轮式机器人_轮式移动机器人导航控制与路径规划研究
- snmp error on SnmpMgrRequest 40
- 搭建LAMP架构之Apache2.4.4安装及管理
- python如何计算个人gpa_【Python】计算GPA | 学步园
- ufvm可以读哪些网格_高三美术生可以读的985、211大学有哪些?
- 「需求广场」需求词更新明细(六)
- php教师评价系统,正韵教学评价系统 v3.2
- 程序猿生存指南-43 温柔以待
- VC6中如何让改变控件Botton的字体(大小和字体)
- 《鬼谷子》飞箝第五(译文)
- 中国大陆手机号码如何注册谷歌账号?解决手机收不到验证码
- 公交APP评测:谁是最好用的公交线路查询软件?
热门文章
- python程序设计 清华大学出版社 pdf下载-清华大学出版社-图书详情-《Python 程序设计》...
- 哪本python入门书内容最详细-重磅 | 由浅入深的 AI 学习路线,最详细的资源整理!...
- python有道翻译法语-使用python2爬取有道翻译
- python学起来难不难-Python自学难不难,培训班推荐?
- 从零开始学python网络爬虫-从零开始学Python 三(网络爬虫)
- python web为什么不火-编程语言里的明星:Python为什么突然不火了?
- python代码翻译-python实现在线翻译
- python在日常工作处理中的应用-记 Python 在实际工作中的第一次应用
- python3版本之间的区别-python3.6与3.4版本的区别是什么?
- 查看python安装路径-Mac查看Python安装路径和版本