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

湖南3合1网站建设电话建设商城网站

湖南3合1网站建设电话,建设商城网站,网站12栅格系统怎么做,基本的网站建设步骤引入 1、Django自带7个中间件,每个中间件都有各自的功能 2、django能够自定义中间件 3、使用场景: 1. 全局身份校验 2. 全局用户权限校验 3. 全局访问频率的校验 ...... 【1】什么是中间件 Django中间件是一个轻量级、可重用的组件,用于处理…

引入

1、Django自带7个中间件,每个中间件都有各自的功能


2、django能够自定义中间件


3、使用场景:

        1. 全局身份校验

        2. 全局用户权限校验

        3. 全局访问频率的校验

        ......

【1】什么是中间件

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

【2】中间件的作用

  • 【2.1】认证和授权

    • 中间件可以在请求到达视图之前进行用户认证和权限认证,只有经过授权的用户才能访问敏感的资源
  • 【2.2】请求响应和处理

    • 中间件可以在请求到达视图之前进行预处理
      • 例如请求头信息,检查请求参数的合法性操作
    • 在视图函数返回响应给客户端之前,中间件还可以对响应进行后处理
      • 通知还可以添加额外的响应头,包装响应数据等操作
  • 【2.3】异常处理

    • 中间件可以捕获视图函数中可能抛出的异常,并做出相应的处理
      • 例:记录异常日志,返回自定义错误信息
  • 【2.4】性能优化

    • 通过中间件,可以对性能进行检测,缓存处理,压缩响应,提升网站整体性能等操作
  • 【2.5】示例

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

【3】Django中间件是Django的门户

请求操作和响应操作都需要经过中间件

 

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

2、响应返回的时候也要经过中间件后才能才能响应返回出去

【4】Django默认的7个中间件

【4.1】SecurityMiddleware

django.middleware.security.SecurityMiddleware
  • 安全中间件负责处理与网站安全相关的任务
  • 例如设置HTTP头部,防止跨站脚本攻击(XSS),点击劫持等
  • 它可以通过配置自定义安全策略来确保网站的安全性。

【4.2】SessionMiddleware

django.contrib.sessions.middleware.SessionMiddleware
  • 会话中间件负责处理用户会话的创建之间存储和检索用户数据。
  • 它基于浏览器提供的Cookie或URL传递的会话ID进行会话跟踪,并将会话数据存储在后端数据库或缓存中,以实现用户状态的跨请求保持。

【4.3】CommonMiddleware

django.middleware.common.CommonMiddleware
  • 通用中间件提供了一些常见而关键的HTTP请求处理功能
  • 例如,根据请求的HTTP头信息设置语言、时区等。
  • 此外,它还处理静态文件的serving,包括收集静态文件,为其生成URL,并在开发模式下提供静态文件的serving。

【4.4】CsrfViewMiddleware

django.middleware.csrf.CsrfViewMiddleware
  • CSRF(Cross-Site Request Forgery)中间件用于防止跨站请求伪造攻击。
  • 它在每个POST请求中验证一个CSRF标记,确保请求是通过合法的表单提交得到的,从而保护用户免受恶意站点的攻击。

【4.5】AuthenticationMiddleware

django.contrib.auth.middleware.AuthenticationMiddleware
  • 认证中间件负责处理用户身份认证相关的任务
  • 例如将认证信息关联到请求对象上,为每个请求提供一个user对象,以便在请求处理过程中轻松地获取和使用用户身份信息。

【4.6】MessageMiddleware

django.contrib.messages.middleware.MessageMiddleware
  • 消息中间件用于在请求处理过程中存储和传递临时的、一次性的用户消息。
  • 它允许在HTTP重定向之间跨请求传递消息,例如成功或错误提示,以改善用户体验。

【4.7】XFrameOptionsMiddleware

django.middleware.clickjacking.XFrameOptionsMiddleware
  • 点击劫持中间件用于防止页面被嵌入到其他网站中,从而提供一定的点击劫持保护。
  • 它通过设置X-Frame-Options HTTP头部来限制页面的显示方式,从而防止恶意网页通过iframe等方式嵌入当前网页。

【5】中间件方法(5个) 

【5.1】process_request  ------- 必须掌握

  • (1)执行顺序
    • 按照配置文件中的中间件从上往下执行
    • 每一个请求来的时候都需要经过process_request方法
    • 该方法有一个request参数
  • (2)没有定义process_request方法
    • 没有定义就直接跳过process_request
  • (3)定义了返回值
    • 如果在自定义的中间件中定义了返回了,那么请求将不再继续执行
  • (4)总结
    • process_request方法就是用来做全局相关的所有限制功能
    • 该方法在每个请求到达视图之前被调用,可以对请求进行预处理。
    • 它接收一个HttpRequest对象作为参数,并且没有返回值。

例:

class AuthenticationMiddleware:def process_request(self, request):# 在这里进行身份验证操作if not request.user.is_authenticated:# 如果用户未经身份验证,则返回HttpResponse或重定向到登录页面

【5.2】process_response ------ 必须掌握

  • 响应被返回的时候需要结束每一个中间件里面的process_response方法
    • 该方法有两个额外的参数
      • request
      • response
  • 该方法必须返回HttpResponse对象
    • 默认是response        
    • 支持自定义
  • 执行顺序
    • 按照注册的中间件从最后往上依次执行
  • 如果没有定义,则跳过,检验下一个
  • 该方法在每个请求结束并且响应返回到客户端之前被调用
    • 可以在此处对响应进行处理
  • 它接收一个HttpRequest对象和HttpResponse对象作为参数,并且必须返回一个HttpResponse对象

例:

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

【5.3】process_view

  • 路由匹配成功后执行视图函数之前
  • 会自动执行中间件里面的该方法
  • 顺序是按照配置文件中注册的中间件从上而下的顺序执行
  • 该方法在请求到达视图之前被调用,在视图函数执行前执行。
    • 可以在此处进行一些操作
    • 如修改请求参数或进行记录等。
  • 它接收一个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

【5.4】process_template_response

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

示例:

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

【5.5】process_exception

  • 当视图函数中出现异常的情况下触发
  • 顺序是按照配置文件中注册了的中间件从下往上依次经过
  • 该方法在视图函数抛出异常时被调用。
    • 可以在此处捕获异常并进行处理
    • 例如返回一个定制的错误页面或进行日志记录等。
  • 它接收一个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")

【6】自定义中间件

        第一步:在视图文件中新建一个视图函数

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

        第二步:在路由文件中配置路由

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

        第三步:创建一个py文件,在py文件中写自定义中间件

# -*-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 方法")

        注意:在自定义中间件的时候必须要继承父类MiddlewareMixin

        

        引入父类:

from django.utils.deprecation import MiddlewareMixin

第四步:在配置文件的中间件中加入自定义中间件

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',
]

【6.1】总结

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

        

                会直接走同级别的 process_response 方法 ,然后直接返回

2、flask框架的中间件也有一个类似的方法

        

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

http://www.yayakq.cn/news/10296/

相关文章:

  • 广州科 外贸网站建设中国建筑论坛网
  • 简述网站的建设流程网站和服务器是什么关系
  • 建设网站的建设费用包括什么科目微信公众号网站开发本地调试
  • 广州易网网站建设营销型网站有哪些平台
  • 做信息类网站怎么赚钱百度打开百度搜索
  • 咸宁做网站公司网页制作平台flash
  • 书画网站 建站廊坊百度快照优化
  • 网站推广与seo的区别南昌seo实用技巧
  • 做期货应该看的网站wordpress团购主题
  • 哪种语言的网站 做seo更好重庆有专业做网站的吗
  • 微信网站制作方案百度推广要自己建站吗
  • 宁波招聘网站开发故事式软文范例100字
  • 单页面竞价网站辽阳企业网站建设费用
  • dw怎么做鲜花网站外贸营销网站推广
  • 网站建设在哪里发布企业网站宽度给多少
  • 行业网站运营计划营销型网站建设计划书
  • 企业购网站建设wordpress增加首页菜单
  • 摄影网站制作网站产品页面
  • 国外手机网站模板重庆公众号制作
  • 网站建站管理系统最好的做网站公司有哪些
  • 品牌网站设计案例淘宝客免费建网站
  • 做我女朋友套路网站wordpress小工具变成英文
  • 网站可以做推广沈阳市城市建设网站
  • 网站的推广有哪些方式哪里可以学习做网站
  • 常州网站建设找思创h5网页模板下载
  • 网站开发业务方向架构文档百度如何购买关键词
  • 学做网站论坛好吗河南省城乡建设厅网站
  • 网站建设参考线上推广方案模板
  • 网上商城网站 找什么做成品网站1688入门网
  • 龙海市住房和城乡建设局网站关于建设网站的图片