如何为电子应用程序提供Django服务

我正在尝试创build一个在后端具有Django应用程序的Electron桌面应用程序。 有几个教程和博客提到如何实现。 我已经尝试过这些,似乎正在工作,但有一些问题。

其中一个是我如何在这种情况下服务器Django? 对我来说,目前的做法造成一些不必要的延迟,使应用程序启动缓慢…

通常,创buildDjango / Electron应用程序需要做的是将Django应用程序打包(我使用pyInstaller )到独立的可执行文件中,然后将其捆绑到一个Electron应用程序中。 问题是在使用pyInstaller打包之前,应该将哪个服务器用于服务器Django? 目前我使用cherryPy作为WSGI Web服务器来为Django服务。

然而 – 有一个更好的select,知道这将用于电子桌面应用程序? 也许更快,或更适合这个任务? 在这种情况下处理Django的典型方法是什么?

首先,如果你的应用启动速度慢,你可以创build自定义的加载animation模板,你将服务的节点,直到你的服务器准备好,在这种情况下,你的BrowserWindow标志显示应该设置为false,你将“显示”你的window.show()在你自定义的“server_ready”事件上。 你的应用程序的总体逻辑应该适合于:1)你启动电子应用程序,并在加载服务浏览器窗口加载…animation,然后你产卵的Django应用程序将运行的subprocess,在这里你有你的“桥梁”电子节点事件和python逻辑,这样做如下:

let django=child_process.spawn('python', [__dirname+'/django_folder/start_server.py']); 

现在variablesdjango是你的处理程序与你沟通django应用程序。 你可以交stream如下:

  let result_name = ''; django.stdout.on( 'data', (data:Buffer) => { result_name+=data.toString('utf8'); } ); django.stdout.on( 'end', (reasone) => { resolve(result); } ); django.stderr.on( //error in python will be directed here 'data', (buf : Buffer) => { reject(buf.toString('utf8')); } ); django.stdin.write(JSON.stringify('notify your django app what you need from it')); 

在python中:

 args=sys.stdin.readlines()[0] #your message in json from electron args=json.loads(args)['data'] print result #send data back to electron 

如果你的应用程序不是很复杂,你可能可以在本地主机上运行,​​那么你的python进程会通过事件告诉你它已经准备好了,你可以使用localhost url重新加载BrowserWindow并开始协调与subprocess的交互。