Python 停止Django';是否通过页面请求访问开发服务器?

Python 停止Django';是否通过页面请求访问开发服务器?,python,django,Python,Django,我正在考虑编写一个轻便的Python应用程序。作为我最熟悉的“图形用户界面工具包”——————————是HTML/CSS/JS,我想使用Django作为项目的框架,使用其内置的“开发服务器”(manage.py runserver) 我已经花了几个小时进行概念验证,到目前为止,我遇到的唯一真正的问题是在用户使用完应用程序后关闭服务器。理想情况下,我希望在应用程序的页面上有一个链接,关闭服务器并关闭页面,但我在Django文档中没有看到任何东西表明这是可能的 这能做到吗?就这点而言,这是编写小型可

我正在考虑编写一个轻便的Python应用程序。作为我最熟悉的“图形用户界面工具包”——————————是HTML/CSS/JS,我想使用Django作为项目的框架,使用其内置的“开发服务器”(
manage.py runserver

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

这能做到吗?就这点而言,这是编写小型可移植GUI工具的合理方法吗?

一种暴力方法是让流程自行终止,如:

# somewhere in a views.py

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

注意:仅在Unix上可用(Windows替代方案可能是这样:)

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

当您点击
Ctrl+C
时,它所做的只是调用
sys.exit(0)
,因此您可能也可以这样做

编辑:根据您的评论,Django在调用视图函数时似乎正在捕获
SystemExit
。您是否尝试在另一个线程中调用
sys.exit

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

Edit:Nevermind,sys.exit from other thread只终止该线程,这在Python文档中没有很好的说明=(

它在Windows上对我有效:

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

不幸的是,我还需要支持Windows用户。:-)嘿,这可能行得通。我将把这个问题留一点时间,看看我是否能找到一种比“当面开枪”更微妙、更适合Django的方法,但它似乎确实能完成任务。;-。。。9? 你不认为应该调用
atexit
处理程序吗?是的,应该。但默认情况下,django中没有注册的
atexit
处理程序。我遗漏了什么?这是我的第一个想法,但Django捕获了
SystemExit
异常并将其作为页面返回!:-D