在CherryPy托管的Django网页中调用Python主程序函数的方案咨询
结论
你当前选择的Python + CherryPy + Django技术栈完全可以实现需求,完全匹配你要求的Web浏览器访问GUI、优先使用Python开发的规则。
实现方案
由于你的Django站点是被CherryPy服务器在同一主进程内托管运行的,两者共享整个程序的内存空间,所以Django视图可以直接导入调用主程序的函数、类方法,不需要额外的跨进程通信组件。
具体操作步骤如下:
- 在Django对应的views.py文件顶部,直接导入主程序的目标函数即可
# Django的views.py from main import doSomething # main为你的主程序文件名,直接导入目标函数 def doSomething(request, id): # 直接调用主程序函数即可 doSomething(id) # 调用完成后返回响应,比如跳转回原页面 from django.shortcuts import redirect return redirect(request.META.get('HTTP_REFERER', '/')) - 如果要调用主程序的类方法,只需导入主程序中初始化完成的全局类实例,再调用对应方法即可。
注意事项
- 你使用的SQLite是文件级锁数据库,多线程写入时可能出现锁冲突,建议给主程序的数据库操作逻辑加线程锁,避免出现
database is locked类的错误。 - 当前你用GET请求触发操作,存在刷新页面重复提交、爬虫误触发的风险,建议改成POST请求配合CSRF校验,更符合Web开发规范。
内容的提问来源于stack exchange,提问作者Jguy
相关产品推荐
相关产品推荐

