情感测试
情感测试

您现在的位置: 情感测试简介_情感测试玩法 > 情感测试简介 > 109,DjangoLearn之中间

109,DjangoLearn之中间

发布时间:2021-8-25 14:40:34   点击数:
鐧界櫆椋庢不鐤? http://pf.39.net/bdfyy/zjdy/180320/6113618.html
一,django中间件9.1django中间件简介

django中间件是django的门户(自带7个中间件)

1请求来的时候需要先经过中间件才能到达真正的django后端

2响应走的时候最后也需要经过中间件才能发送出去

django请求生命周期,浏览器——Web服务网关接口(wsgiref、uwsgi)——django后端(django中间件-urls-views-models-database)

django支持自定义中间件且暴露给程序员五个可以自定义的方法

1必须掌握

process_request

process_response

2了解即可

process_view

process_template_response

process_exception

9.2如何自定义中间件

1在项目名或应用名下创建一个任意名称的文件夹

2在该文件夹内创建一个任意名称的py文件

3在该py文件内书写一个类(必须继承MiddlewareMixin)

然后这个类中就可以自定义五个方法了(并不需要全部书写,用几个写几个)

4需要将类的途径以字符串的形式注册到配置文件中才能生效

mydd.py

#-8-coding=utf-8-*-#

Time:/5/:43#

File:mydd.py#

Software:PyCharmfromdjango.shortcutsimportHttpResponse,render,redirectfromdjango.utils.deprecationimportMiddlewareMixinclassMyMiddleWare1(MiddlewareMixin):defprocess_request(self,request):print(我是第一个自定义中间件里的process_request方法)classMyMiddleWare2(MiddlewareMixin):defprocess_request(self,request):print(我是第二个自定义中间件里的process_request方法)

views.py

defmiddleware_index(request):print(我是视图函数的index)returnHttpResponse(index)

settings.py中MIDDLEWARE列表中再添加

#注册自定义中间件(在应用下创建路径有提示,在项目中创建没有提示,需要自己比对着书写)app01.mymiddleware.mydd.MyMiddleWare2,app01.mymiddleware.mydd.MyMiddleWare1,

运行浏览器输入相关网址后端返回有

在classMyMiddleWare1中添加以下代码

returnHttpResponse(我是第一个自定义中间件里的request方法返回的数据)

则前端有

后端有

process_request

1请求来的时候需要经过每一个中间件里面的process_request方法,结果的顺序是按照配置文件中注册中间件的顺序从上到下依次执行

2如果中间件里没有定义该方法,则直接跳过执行下一个中间件

3如果该方法返回了HTTPResponse对象,则请求将不再继续往后执行,而是直接原路返回(相当于校验失败,不允许访问)

process_request方法就是用来做全局相关的所有限制功能

在两个类中添加

defprocess_reponse(self,request,response):""":paramresponse:django客户端返回给浏览器的内容"""print(我是第一个自定义中间件里的process_response方法)returnresponse

后端并没有打印出print里面的内容

process_response

1响应走的时候需要经过每一个中间件里面的process_response方法,该方法有request和response两个参数

2该方法必须返回一个HTTPResponse对象

默认返回的是形参response

也可以自定义

3顺序是按注册顺序从上到下,如果没有定义,直接跳过执行下一个

研究如果在第一个process_request方法就已经返回了HttpResponse对象,则响应走的时候是经过所有中间件里的process_response还是其他情况

是其他情况

会直接走同级别的process_response返回

flask框架也有一个中间件,当它只要返回了数据就必须经过所有中间件里的类似于process_response方法

2了解即可

process_view

路由匹配成功之后执行视图函数之前,会自动执行中间件中的此方法,顺序如上

process_template_response

返回的HTTPResponse对象有render属性时才会触发,顺序是从下往上(基本不用)

后端:views.py

#触发中间件中process_template_response方法defmiddleware_index(request):print(我是视图函数的index)obj=HttpResponse(index)defrender():print(内部render)returnHttpResponse(o98k)obj.render=renderreturnobj

process_exception

当视图函数中出现异常是触发,顺序从下往上

mydd.py,在两个类中继续添加

defprocess_view(self,request,view_name,*args,**kwargs):print(view_name,*args,**kwargs)print(我是第一个自定义中间件里的process_view方法)defprocess_template_response(self,request,response):print(我是第一个自定义中间件里的process_template_response方法)returnresponsedefprocess_exception(self,request,exception):print(我是第一个自定义中间件里的process_exception方法)print(exception)

执行之后前端输出

后端输出

二,csrf校验9.3csrf跨站请求伪造

钓鱼网站有关

内部本质:

在钓鱼网站页面针对对方账户只给用户提供一个没有name属性的普通input框,然后在内部隐藏一个已经写好name和value的input框。

正经网站前端:

h1我是正儿八经的网站/h1formaction=""method="post"pusername:inputtype="text"name="username"/pptarget_user:inputtype="text"name="target_user"/ppmoney:inputtype="text"name="money"/pinputtype="submit"class="btnbtn-info"/form

后端:

defcsrf_transfer(request):ifrequest.method==POST:username=request.POST.get(username)target_user=request.POST.get(target_user)money=request.POST.get(money)print(f"{username}给{target_user}转了{money}元")returnrender(request,csrf_transfer.html)

钓鱼网站前端:

h1我是钓鱼网站/h1formaction="

转载请注明:http://www.zmax-alibaba.com/qgjj/138061.html

网站简介 | 发布优势 | 服务条款 | 隐私保护 | 广告合作 | 合作伙伴 | 版权申明 | 网站地图

当前时间: