【问题标题】:In Django, how do I write a this for every function?在 Django 中,如何为每个函数编写一个 this?
【发布时间】:2011-06-16 01:43:14
【问题描述】:

每当有人加载页面时,我想在控制台中打印“Hello”。

我不想为我的所有 100 个视图添加装饰器。这很愚蠢。 我有点希望这个装饰器自动添加到我的视图中。 嗯……

【问题讨论】:

    标签: python django oop decorator


    【解决方案1】:

    中间件:http://docs.djangoproject.com/en/dev/topics/http/middleware/#writing-your-own-middleware

    定义一个中间件类,覆盖上面定义的函数之一,打印“Hello”,返回适当的对象(根据文档),并将中间件类添加到您的 settings.py

    class PrintHelloMiddleware(object):
        def process_response(self, request, response):
            print "Hello"
            return None
    
    # settings.py
    MIDDLEWARE_CLASSES = ( # ... usual middleware
                           'path.to.my.middleware.PrintHelloMiddleware',
                          )
    

    【讨论】:

    • 代码会是什么样子?我是否将所有内容都放在 init 中?该类的功能是什么?
    • 我链接到的文档显示了您可以覆盖哪些功能以及返回什么
    • 我如何让它只对我的views.py(而不是媒体等)中的函数可用
    • 媒体不应该经历这个阶段,因为你不应该通过 django 视图来提供媒体!
    • 但是您可能会覆盖process_view,这会暴露出正在调用的view_func。您可以进行一些粗略的inspect 调用以确定文件名是否为views.py,如果是则仅打印。
    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2020-12-27
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多