通过页面请求停止Django的开发服务器?

时间:2010-06-05 23:32:10

标签: python django

我正在考虑编写一个便携,轻量级的Python应用程序。作为我最熟悉的“GUI工具包” - 大幅度提升! - 是HTML / CSS / JS,我想使用Django作为项目的框架,使用其内置的“开发服务器”(manage.py runserver)。

我一直在敲打概念验证几个小时,到目前为止我遇到的唯一真正问题是在用户使用完应用程序后关闭服务器。理想情况下,我希望应用程序页面上有一个链接关闭服务器并关闭页面,但我在Django文档中看到的任何内容都表明这是可能的。

可以这样做吗?就此而言,这是一种编写小型便携式GUI工具的合理方法吗?

3 个答案:

答案 0 :(得分:2)

一种暴力方法是让进程自杀,例如:

# somewhere in a views.py

def shutdown(request):
    import os
    os.kill(os.getpid(), 9) 

注意:os.kill仅适用于Unix(Windows替代方案可能是这样的:http://metazin.wordpress.com/2008/08/09/how-to-kill-a-process-in-windows-using-python/

答案 1 :(得分:1)

查看python manage.py runserver的源代码:

http://code.djangoproject.com/browser/django/trunk/django/core/management/commands/runserver.py

当您点击Ctrl+C时,只需拨打sys.exit(0)即可,所以您可能也会这样做。

编辑:根据您的评论,当Django调用您的查看功能时,它似乎正在捕捉SystemExit。您是否尝试在另一个帖子中调用sys.exit

import threading
thread = threading.Thread(target=sys.exit, args=(0,))
thread.start()

编辑:Nevermind,来自另一个线程的sys.exit只终止该线程,这在Python文档中没有详细记录。 =(

答案 2 :(得分:0)

它适用于Windows:

def shutdown(request):
    import os
    os._exit(0)