Django - 访问中间件中基于类的视图的类属性

时间:2017-09-13 19:58:34

标签: python django middleware django-generic-views

我有几个视图,每个视图一次只能由一个用户加入。因此我使用锁定服务。我的想法如下:

- 声明每个视图

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

如何按描述访问视图的lock属性?

1 个答案:

答案 0 :(得分:0)

不确定您是否可以访问中间件中的视图,因此我只是建议更简单,易于实现/理解的内容。

只需创建一个模型 this.post = this.data.getPostById(this.postId).share().subscribe(data => { this.post = data; }, err => { console.log("Oops!"); }) ,其中包含字段Lock(字段字段),view_name(外键)& user(布尔)。然后,当您想要锁定给定request.user的视图(检查匿名用户)时,只需使用is_acquired&和Lock来实例化user模型。 view_name,然后执行.acquire(),基本上将is_acquired更改为True(并保存)。

如果您想检查是否已获取锁定,只需检查指定的条目.exists()

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