0

我在理解 django 管理命令方面遇到了一点问题。我有一个 Web 应用程序,它通过 eth0 显示一些网络流量信息。因此,我创建了一个 python 类来分析流量并创建/更新数据库中的特定数据。像这样的东西:

class Analyzer:
    def doSomething(self):
        #analyze the traffic create/update data in db 
    def startAnalyzing(self):
        while 1:
              self.doSomething()

然后我创建一个管理命令来创建这个类实例并运行startAnalyzing().

现在我的问题:

这是通过管理命令执行此操作的正确方法吗,因为任务没有终止(一直运行)并且没有通过 web 应用程序启动/停止?或者正确的方法是什么?

不通过 django 启动“分析器”可能更好吗?我是 django 的新手,不想以正确的方式去做。

我运行时是否可以开始嗅探流量:manage.py runserver 0.0.0.0:8080?

提前谢谢了。

4

1 回答 1

0

您正在做的不是与管理命令有关。其实管理命令就是顾名思义,一个管理某事,做一个快速动作的命令。不要让整个过程在 Web 应用程序的整个生命周期内运行。

为了实现你想要的,你应该编写一个简单的 python 脚本并让它与进程管理器(主管?)一起运行。然后您必须在脚本的开头设置django,以便可以访问 Django 的 ORM,这可能是您选择 Django 的原因。

总而言之,您的脚本将如下所示:

import sys, os
sys.path.insert(0, "/path/to/parent/of/project") # /home/projects/django-proj

os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'proj.settings')

import django
django.setup() 

from proj.app.models import DBModel

通过这种方式,您可以像在普通 Django 应用程序中一样使用 django 的 ORM。您还可以像往常一样提供数据库的模板和视图。

唯一剩下的就是保持脚本运行,你可以简单地用supervisord来做。

于 2016-09-17T09:48:28.833 回答