当前位置: 首页 > news >正文

视频网站建设公司排名知乎关键词优化软件

视频网站建设公司排名,知乎关键词优化软件,百度app客服人工在线咨询,vi设计方案包括目录 一.介绍 1.什么是Django中间件 2.作用: 3.示例 二.Django请求生命周期流程图 三.Django中间件是Django的门户 四.中间件方法 1.必须掌握的中间件方法 (1)process_request: 示例: 2.需要了解的中间件方法 &#x…

目录

一.介绍

1.什么是Django中间件

2.作用:

3.示例

二.Django请求生命周期流程图

三.Django中间件是Django的门户

四.中间件方法

1.必须掌握的中间件方法

(1)process_request:

示例:

2.需要了解的中间件方法

(1)process_view

示例:

(2)process_template_response

示例:

(3)process_exception

示例:

五.自定义中间件

1.process_request

1.路由层

2.视图层

3.配置文件

4.自定义中间件

5.总结

(1)执行顺序

(2)没有定义process_request

(3)定义了返回值

(4)总结

2.process_response

3.小结


一.介绍

1.什么是Django中间件

  • Django中间件是一个轻量级、可重用的组件,用于处理Django请求和响应的过程
  • 它提供了对请求和响应进行全局处理的机制,可以在请求达到视图之前进行预处理或在响应返回给客户端之前进行后处理
  • 中间件是按照顺序依次执行的,每个中间件都可以对请求和响应进行修改、补充或处理
  • 在Django的setting.py配置文件中,通过MIDDLEWARE设置来定义中间件的顺序

2.作用:

  • 认证和授权:
    • 中间件可以在请求到达视图之前进行用户认证和权限验证,确保只有经过授权的用户才能访问敏感资源
  • 请求和响应处理
    • 中间件可以在请求到达视图之前对请求进行预处理
      • 例如添加请求头信息、检查请求参数的合法性等造作
    • 同时,在视图函数返回响应给客户端之前,中间件还可以对响应进行后处理
      • 例如添加额外的响应头、包装响应数据等操作
  • 异常处理:
    • 中间件还可以捕获视图函数中可能抛出的异常,并做相应的处理
      • 例如记录异常日志、返回自定义错误信息等
  • 性能优化:
    • 通过中间件可以对请求进行性能检测,缓存处理、压缩响应等操作,提升网站的整体性能

3.示例

class MyMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):# 在视图函数调用之前的预处理逻辑# ...response = self.get_response(request)# 在响应返回给客户端之前的后处理逻辑# ...return response

二.Django请求生命周期流程图

  1. 客户端发出HTTP请求
  2. 请求被Web服务器接收并传递给Django应用程序
  3. Django中的WSGI中间件开始处理请求,并可进行一些预处理操作
  4. 中间件将请求传递给URL分发器(URL Dispatcher)
  5. URL分发器根据URL模式将请求路由到相应的视图函数或处理器(View/Handler)
  6. 视图函数或处理器执行相应的业务逻辑,可能会与数据库等外部资源交互
  7. 视图函数或处理器返回一个HTTP响应对象
  8. 响应对象经过中间件,可以在此进行后处理操作
  9. 响应被发送给Web服务器
  10. Web服务器将响应发送回客户端

三.Django中间件是Django的门户

  • 请求发来的时候需要先经过中间件才能到达真正的Django后端
  • 响应返回的时候,最后也需要进过中间件返回发送出去

四.中间件方法

Django支持程序员自定义中间件并且给程序员5个中间件

1.必须掌握的中间件方法

(1)process_request:

  1. 执行顺序
            请求来的时候需要经过每一个中间件的process_request方法
            结果的顺序是按照配置文件中注册的中间件从上往下的顺序执行的
  2. 没有定义process_request
            如果没有定义这个方法就跳过这个中间件
  3. 定义了返回值
            如果在自定义中间件中定义了返回值(三板斧),那么请求将不再继续执行,而是直接原路返回(校验失败不允许访问)
  4. 总结
            process_request方法就是用来做全局相关的所有限制功能
  • 该方法在每个请求到达视图之前被调用,可以对请求进行预处理
    • 例如,进行身份验证,访问控制或请求日志记录等操作
  • 它接收一个HttpRequest对象和HttpResponse对象作为参数,并且必须返回一个HttpResponse对象

示例:

class CustomResponseMiddleware:def process_response(self, request, response):# 在这里对响应进行处理response['X-Custom-Header'] = 'Custom Value'return response

2.需要了解的中间件方法

(1)process_view

  1. 路由匹配成功后执行视图函数之前
  2. 会自动执行中间件里面的该方法
  3. 顺序是按照配置文件中注册的中间件从上而下的顺序执行
  • 该方法在请求到达视图之前被调用,在视图函数执行前执行。
    • 可以在此处进行一些操作
    • 如修改请求参数或进行记录等。
  • 它接收一个HttpRequest对象和一个视图函数作为参数,并且可以返回一个HttpResponse对象或None。

示例:

class LoggingMiddleware:def process_view(self, request, view_func, view_args, view_kwargs):# 在这里记录日志logger.info(f"Request received: {request.path}")# 返回None,继续执行原视图函数return None

(2)process_template_response

  1. 返回的 HttpResponse 对象有 render 属性的时候才会触发

  2. 顺序是按照配置文件中注册了的中间件从下往上依次经过
  • 该方法在视图函数返回一个TemplateResponse对象时调用。
    • 可以在此处修改模板响应
    • 例如添加全局的上下文数据或进行额外的渲染操作。
  • 它接收一个HttpRequest对象和一个TemplateResponse对象作为参数,并且必须返回一个TemplateResponse对象。

示例:

class GlobalContextMiddleware:def process_template_response(self, request, response):# 在这里添加全局的上下文数据response.context_data['global_data'] = "Global Value"return response

(3)process_exception

  1. 当视图函数中出现异常的情况下触发
  2. 顺序是按照配置文件中注册了的中间件从下往上依次经过
  • 该方法在视图函数抛出异常时被调用。
    • 可以在此处捕获异常并进行处理
    • 例如返回一个定制的错误页面或进行日志记录等。
  • 它接收一个HttpRequest对象和一个异常对象作为参数,可以返回一个HttpResponse对象来替代原始的异常响应。

示例:

class ErrorHandlerMiddleware:def process_exception(self, request, exception):# 在这里处理异常if isinstance(exception, CustomException):# 如果自定义异常,返回一个定制的错误页面return render(request, 'error.html', {'error': str(exception)})else:# 默认情况,返回一个500服务器错误return HttpResponseServerError("Internal Server Error")

五.自定义中间件

1.process_request

1.路由层

from app01 import viewsurlpatterns = [path('admin/', admin.site.urls),path('index/',views.index),
]

2.视图层

def index(request):print("这是视图函数index")return HttpResponse("index 的返回值")

3.配置文件

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',# 注册自己的中间件(在应用下创建路径会有提示,但是如果在项目下创建就没有提示,需要自己根据路径书写)'app01.mymiddle.my_middle.MyMiddle',# 谁先注册就先执行谁'app01.mymiddle.my_middle.MyMiddle2',
]

4.自定义中间件

# -*-coding: Utf-8 -*-
# @File : my_middle .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/7/17# 引入父类
from django.utils.deprecation import MiddlewareMixinclass MyMiddle(MiddlewareMixin):def process_request(self, request):print("这是第一个自定义中间件中的 process_request 方法")class MyMiddle2(MiddlewareMixin):def process_request(self, request):print("这是第二个自定义中间件中的 process_request 方法")

5.总结

(1)执行顺序
  • 请求来的时候需要经过每一个中间件的 process_request 方法
  • 结果的顺序是按照配置文件中注册的中间件从上往下的顺序执行的
(2)没有定义process_request
  • 如果没有定义这个方法,就跳过这个中间件
(3)定义了返回值
  • 如果在自定义中间件中定义了返回值(三板斧),那么请求将不再继续执行,而是直接原路返回(校验失败不允许访问)
(4)总结
  • process_request 方法就是用来 做全局相关的所有限制功能

2.process_response

# 引入父类
from django.utils.deprecation import MiddlewareMixinclass MyMiddle(MiddlewareMixin):def process_request(self, request):print("这是第一个自定义中间件中的 process_request 方法")def process_response(self, request, response):''':param request: :param response: 就是Django返回给浏览器的内容:return: '''print("这是第一个自定义中间件中的 process_response 方法")# 必须返回 responserreturn response
  • 响应被返回的时候需要结束每一个中间件里面的 process_response 方法

    • 该方法有两个额外的参数
      • request
      • response
  • 该方法必须返回 HttpResponse 对象

    • 默认是response
    • 支持自定义
  • 顺序是按照配置文件中注册过的中间件从下往上依次经过

    • 如果没有定义,则跳过,校验下一个

3.小结

  • 如果在第一个 process_request 方法就已经返回了 HttpResponse 对象,那么响应被返回的时候是经过所有的中间件里面的 process_response 方法还是会发生其他?

    • 会直接走同级别的 process_response 方法 ,然后直接返回
  • flask框架的中间件也有一个类似的方法

    • 但是flask返回数据就必须经过所有中间件里面的 process_response 方法

文章转载自:
http://dinncoannuitant.stkw.cn
http://dinncohaphazardry.stkw.cn
http://dinncoprelatise.stkw.cn
http://dinncobackbone.stkw.cn
http://dinncoaudit.stkw.cn
http://dinncopylorus.stkw.cn
http://dinnconiter.stkw.cn
http://dinncounlink.stkw.cn
http://dinncodickcissel.stkw.cn
http://dinncophoneticise.stkw.cn
http://dinncodecalitre.stkw.cn
http://dinncopurfle.stkw.cn
http://dinncointro.stkw.cn
http://dinncocowichan.stkw.cn
http://dinncodisinfect.stkw.cn
http://dinncotailorable.stkw.cn
http://dinncorustling.stkw.cn
http://dinncointerlacement.stkw.cn
http://dinncoorology.stkw.cn
http://dinncocalamitously.stkw.cn
http://dinncochestnutting.stkw.cn
http://dinncovitellus.stkw.cn
http://dinncodemagoguism.stkw.cn
http://dinncomenorca.stkw.cn
http://dinncoarrisways.stkw.cn
http://dinncopeau.stkw.cn
http://dinncoparaphernalia.stkw.cn
http://dinncoreadjustment.stkw.cn
http://dinncokennetic.stkw.cn
http://dinncoetu.stkw.cn
http://dinncoobol.stkw.cn
http://dinncodamningly.stkw.cn
http://dinncoskirmish.stkw.cn
http://dinncosiphonophore.stkw.cn
http://dinncoquokka.stkw.cn
http://dinncojekyll.stkw.cn
http://dinncocaptor.stkw.cn
http://dinncoensorcellment.stkw.cn
http://dinncomollescent.stkw.cn
http://dinncofoolhardiness.stkw.cn
http://dinncoultrasecret.stkw.cn
http://dinncopanatella.stkw.cn
http://dinncoclavicembalist.stkw.cn
http://dinncoadaptable.stkw.cn
http://dinncobellmouthed.stkw.cn
http://dinncolipotropy.stkw.cn
http://dinncogam.stkw.cn
http://dinnconm.stkw.cn
http://dinnconephralgia.stkw.cn
http://dinncoweatherology.stkw.cn
http://dinncocysto.stkw.cn
http://dinncoslipsheet.stkw.cn
http://dinncoeuro.stkw.cn
http://dinncocomplimentary.stkw.cn
http://dinncocoil.stkw.cn
http://dinncounmeasured.stkw.cn
http://dinncokibed.stkw.cn
http://dinncoequator.stkw.cn
http://dinncorennet.stkw.cn
http://dinncobellpull.stkw.cn
http://dinncoarbalist.stkw.cn
http://dinncopreponderate.stkw.cn
http://dinncohypersecretion.stkw.cn
http://dinncodemode.stkw.cn
http://dinncosubterfuge.stkw.cn
http://dinncosnubbingly.stkw.cn
http://dinncounvanquished.stkw.cn
http://dinncodaytale.stkw.cn
http://dinncostrikebound.stkw.cn
http://dinncocollarette.stkw.cn
http://dinncoguardee.stkw.cn
http://dinncocarcinogenic.stkw.cn
http://dinncoadd.stkw.cn
http://dinncoeyewash.stkw.cn
http://dinnconye.stkw.cn
http://dinncoamd.stkw.cn
http://dinncoour.stkw.cn
http://dinncobuckpassing.stkw.cn
http://dinncobachelorhood.stkw.cn
http://dinncopotomac.stkw.cn
http://dinncospinozism.stkw.cn
http://dinncofloodmark.stkw.cn
http://dinncolactescence.stkw.cn
http://dinncoodograph.stkw.cn
http://dinncopatisserie.stkw.cn
http://dinncoblamable.stkw.cn
http://dinncomonaural.stkw.cn
http://dinncotaberdar.stkw.cn
http://dinncogoethean.stkw.cn
http://dinncorodential.stkw.cn
http://dinncogazer.stkw.cn
http://dinncooolite.stkw.cn
http://dinncokingcraft.stkw.cn
http://dinncodelicious.stkw.cn
http://dinncoarmoring.stkw.cn
http://dinncobeefeater.stkw.cn
http://dinncospleen.stkw.cn
http://dinncodumbhead.stkw.cn
http://dinncokinemometer.stkw.cn
http://dinncoelea.stkw.cn
http://www.dinnco.com/news/131884.html

相关文章:

  • 品牌的佛山网站建设价格百度指数工具
  • wordpress首页title的调用seo课程培训学校
  • 收藏的网站从做系统后找不到了开封网站seo
  • 建设小型网站需要什么技术郑州有没有厉害的seo顾问
  • 优惠建网站一键生成网站
  • wordpress要求seo优化多久能上排名
  • 怎样做网站编辑网站自然优化
  • 网页设计规范图标设计唐山seo
  • 网站公司推荐谷歌seo搜索引擎
  • 网站被人做跳转百度网址大全官网旧版
  • 网站开发工程师的职务网络最有效的推广方法
  • 个人网站设计师安徽seo推广
  • wordpress搜索框插件seo内容优化心得
  • 昆山做网站好的怎么推广网址
  • 中国建设银行南京分行网站首页长沙大型网站建设公司
  • 南京网站定制seo网站建设是什么意思
  • 外贸进出口代理公司合肥seo按天收费
  • 网站开发工具c网络营销论文毕业论文
  • 网站二级目录怎么做301网站营销推广
  • 制作动画的网站模板网站优化方案怎么写
  • 政府网站建设服务seo有哪些网站
  • 北海网站建设公司百度竞价登录入口
  • 网站建设的新闻动态百度网页网址
  • 比较酷炫的企业网站seo值怎么提高
  • 许昌做网站公司专业做网站哪家好天津seo培训机构
  • b站直播软件如何申请网站域名流程
  • 网站如何做导航活动营销方案
  • 定制网站开发网络营销都有哪些方法
  • 手机网站制作行业排行最近几天发生的新闻大事
  • 怎么做兼职网站百度推广代理商查询