【问题标题】:Django - access class attributes of a class-based view in middlewareDjango - 访问中间件中基于类的视图的类属性
【发布时间】:2018-02-22 15:48:28
【问题描述】:

我有几个视图,每个视图一次只能由不超过一个用户访问。因此,我为此使用了锁定服务。我的想法如下:

- 像这样声明每个视图

class DummyView(View):
    lock = Lock()
    def dispatch(self, request, *args, **kwargs):
        ...

- 在中间件中,做这样的事情

class Middleware:
    ...
    def __call__(self, request):
        # lock = view.get_lock_if_it_has_one (this is what I need help with)
        lock.acquire()

        response = self.get_response(request)

        lock.release()
        return response

如何访问所描述的视图的锁定属性?

【问题讨论】:

    标签: python django middleware django-generic-views


    【解决方案1】:

    不确定您是否可以访问中间件内部的视图,所以我只是建议一些更简单且易于实现/理解的东西。

    只需创建一个模型Lock,其中包含字段view_name(字符字段)、user(外键)和is_acquired(布尔)。然后,当您想锁定给定 request.user 的视图(检查匿名用户)时,只需使用 userview_name 实例化 Lock 模型,然后执行 .acquire() 基本上会更改 @987654330 @ 到 True(并保存)。

    当您想检查是否已获得锁时,只需检查给定条目 .exists()

    如果需要,您可以运行使旧锁过期的定期任务。

    【讨论】:

    • 我不想在视图的调度方法中一直重复相同的代码。但是,是的,当其他一切都失败时,我会使用它。谢谢。
    • 如果你能够访问中间件内部的视图,那么肯定不需要重复(你可以在中间件中处理它),但如果没有,我没有看到更好的方法.
    • 我明白了,view_func.view_class。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 2013-09-23
    • 2021-06-28
    • 2014-10-12
    • 2018-05-14
    • 2011-11-01
    • 2014-01-21
    • 2011-09-19
    相关资源
    最近更新 更多