我在理解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时,是否有可能开始嗅探流量?
提前感谢。
您所做的不是打算用管理命令做的。事实上,管理命令顾名思义就是管理某事,做快速操作的命令。而不是让整个进程在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了。您还可以像往常一样提供数据库的模板和视图。
唯一剩下的事情就是保持脚本运行,您可以简单地使用superord来完成。