鱼C论坛

 找回密码
 立即注册
查看: 1132|回复: 5

[已解决]python问题

[复制链接]
发表于 2023-5-23 18:27:04 | 显示全部楼层 |阅读模式
5鱼币
from django.utils.deprecation import  MiddlewareMixin

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

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

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

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

  13.     def post(self, request, *args, **kwargs):
  14.         m1 = Md()
  15.         m1.out2(request, response)
  16.         return render(request, 'index.html')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-23 18:27:05 | 显示全部楼层    本楼为最佳答案   

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

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

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

  13.     def post(self, request, *args, **kwargs):
  14.         m1 = Md()
  15.         m1.out2(request, response)
  16.         return render(request, 'index.html')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-23 18:36:24 | 显示全部楼层
Django中间件是Django请求/响应处理的一部分,它们是一个处理请求和响应的轻量级、低级的插件系统。每个中间件组件负责执行某些特定的函数,例如处理会话,管理用户认证,跟踪统计等。

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

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

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

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

  9. # 调用out2函数
  10. middleware.out2(request, response)
复制代码


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

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

点评

我很赞同!: 0.0
我很赞同!: 0
  发表于 2023-5-31 00:14
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-23 19:07:51 | 显示全部楼层
在 Django 中,中间件的处理函数必须遵循指定的函数签名格式。对于一个中间件类 Md,如果要打印处理 owt 和 out2 中的内容,可以按照以下方式编写代码:

  1. from django.utils.deprecation import MiddlewareMixin

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

  7.     def process_response(self, request, response):
  8.         # 在处理响应之后调用
  9.         print("out2")
  10.         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 函数,从而触发中间件的执行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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`方法,并执行对应的输出语句。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 13:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表