【问题标题】:How to load the data within the viewset class automatically on the server?如何在服务器上自动加载视图集类中的数据?
【发布时间】:2019-06-11 23:02:46
【问题描述】:

我的后端 Django 项目在 EC2、Ubuntu18.04、nginx 上运行。基本上,当我通过运行“python manage.py runserver”在本地测试项目时,我可以看到我想要生成的矩阵在服务器准备好之前加载。但是,在我将它部署到服务器上后,它返回了视图没有名为“矩阵”的属性的错误。

我在本地尝试过,我可以看到我的打印,以便它真正生成矩阵。但是,我无法像在本地那样调试项目,因为我通过设置 .conf 文件自动运行项目。

module 'test.views' has no attribute 'matrix'

class CreateMatrixViewSet(viewsets.ModelViewSet):
    serializer_class = MatrixSerializer
    queryset = Matrix.objects.all()

    print("start creating ls_frame")
    global ls_frame
    ls_frame = read_frame(queryset)
    print("end creating ls_frame")
    print("start creating matrix")
    global matrix
    matrix = generateMatrix(ls_frame)
    print("end creating matrix")
    http_method_names = ['post']

    def create(self, request):
        ...

我假设在服务器上运行时,它不会进行初始加载。所以如果我想在服务器准备好之前生成一些东西,我应该怎么做?

【问题讨论】:

    标签: python django nginx amazon-ec2 django-rest-framework


    【解决方案1】:

    这段代码有很多问题,我看不出它在本地是如何工作的。要将变量标记为全局变量,您需要首先在模块级别实际定义它。但是你不应该永远在像 Django 这样的多用户环境中使用全局变量;当然不是作为类属性,这根本没有意义。

    问题的根源是无论如何都试图在类级别运行代码。再一次,这没有任何意义。我不明白你为什么要在那里运行read_framegenerateMatrix;你应该在一个方法中运行它们(我不能告诉你什么方法,因为我不知道你想对结果做什么。)

    【讨论】:

    • 我正在使用 Django rest 框架,我运行 read_frame 和 generateMatrix 的原因是因为每次执行 serarch 函数来生成矩阵时需要超过 30 秒。我不希望我的最终用户每次搜索时都等待。所以我一开始就在全局范围内生成它以减少等待时间。
    • 因此,要么在类级别执行并将结果存储为类属性,要么在模块级别执行并将结果存储在那里(它们将自动成为全局)。不要试图将两者混为一谈。但只有在绝对确定它们不存储每个用户数据时,您才必须这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多