tengke 发表于 2023-5-23 18:27:04

python问题

from django.utils.deprecation importMiddlewareMixin

class Md(MiddlewareMixin):
    def owt(self,request):
      print("m1")
    def out2(self,request,response):
      print("m1 tou")
      return response


请查看上面的代码
如果我要调用并且使用 print打印处理 owt 和 out2 里面的python内容要怎么写呢

天地丶良心 发表于 2023-5-23 18:27:05


MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    # ...
    'myapp.Md', # 添加自定义中间件
]

from django.shortcuts import render
from django.views import View

class MyView(View):
    def get(self, request, *args, **kwargs):
      m1 = Md()
      m1.owt(request)
      return render(request, 'index.html')

    def post(self, request, *args, **kwargs):
      m1 = Md()
      m1.out2(request, response)
      return render(request, 'index.html')

isdkz 发表于 2023-5-23 18:36:24

Django中间件是Django请求/响应处理的一部分,它们是一个处理请求和响应的轻量级、低级的插件系统。每个中间件组件负责执行某些特定的函数,例如处理会话,管理用户认证,跟踪统计等。

在您提供的代码中,Md是一个中间件类,具有两个方法: owt和out2 。这两个方法在请求/响应处理过程中由Django自动调用,而不是手动调用。然而,如果你只是想在一些测试环境中测试这些函数并打印输出,你可以创建一个 Md 对象并调用这些函数。下面是一个例子:

# 创建一个Md的实例
middleware = Md()

# 创建一些模拟的请求和响应对象
# 注意这里我们并未实现Request和Response,你需要创建符合你实际使用的请求和响应对象
request = object()
response = object()

# 调用owt函数
middleware.owt(request)

# 调用out2函数
middleware.out2(request, response)


在这个例子中, request 和 response 是空的对象,并不具备真实的Django请求或响应对象的特性,你需要根据你的实际需求来创建和使用这些对象。

重要的是要注意,Django中间件并不是这样手动调用的。上面的例子只是为了说明如何在非Django环境下调用这些方法。在实际的Django项目中,这些方法会在合适的时间被自动调用,例如在请求处理的过程中。在这种情况下, request 和 response 对象会是真正的Django请求和响应对象,包含了用户的请求信息和服务器的响应信息。

sfqxx 发表于 2023-5-23 19:07:51

在 Django 中,中间件的处理函数必须遵循指定的函数签名格式。对于一个中间件类 Md,如果要打印处理 owt 和 out2 中的内容,可以按照以下方式编写代码:

from django.utils.deprecation import MiddlewareMixin

class Md(MiddlewareMixin):
    def process_request(self, request):
      # 在处理请求之前调用
      print("owt")
      return None

    def process_response(self, request, response):
      # 在处理响应之后调用
      print("out2")
      return response
注意事项:


[*]要继承 django.utils.deprecation.MiddlewareMixin 类,这个类提供了一些便捷的方法来处理请求和响应;
[*]重命名函数 owt 和 out2 分别为 process_request 和 process_response,这是中间件处理函数的规定命名;
[*]在处理请求之前和处理响应之后分别调用 print 函数来输出信息;
[*]process_request 函数需要返回 None 或 HttpResponse 对象;
[*]process_response 函数需要返回 HttpResponse 对象。

当这个中间件被添加到 Django 的中间件列表中后,每次有请求时,Django 就会自动调用 process_request 函数,在发送响应后调用 process_response 函数,从而触发中间件的执行。

天地丶良心 发表于 2023-5-29 16:19:17

以在settings.py文件中设置中间件,然后在Views中调用。具体实现如下:

1.在settings.py中设置中间件:

text
复制

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    # ...
    'myapp.Md', # 添加自定义中间件
]


2.在Views中调用:

text
复制

from django.shortcuts import render
from django.views import View

class MyView(View):
    def get(self, request, *args, **kwargs):
      m1 = Md()
      m1.owt(request)
      return render(request, 'index.html')

    def post(self, request, *args, **kwargs):
      m1 = Md()
      m1.out2(request, response)
      return render(request, 'index.html')


这样,在访问MyView的时候就会调用中间件里的`owt`和`out2`方法,并执行对应的输出语句。
页: [1]
查看完整版本: python问题