gpt4 book ai didi

javascript - 如何为 Electron 应用程序提供 Django

转载 作者:太空狗 更新时间:2023-10-29 21:45:19 26 4
gpt4 key购买 nike

我正在尝试创建一个 Electron具有 Django 的桌面应用程序应用程序在其后端。有几个教程和博客提到了如何实现这一点。我已经尝试过这些并且它似乎有效,但是存在一些问题。

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

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

但是 - 知道这将在 Electron 桌面应用程序中使用,是否有更好的选择?也许更快,或更适合这项任务?在这种情况下处理 Django 的典型方法是什么?

最佳答案

首先,如果您的应用程序启动缓慢,您可以使用 Node 创建自定义加载动画模板,您将在服务器准备就绪之前使用该模板,在这种情况下,您的 BrowserWindow 标志显示应设置为 false,您将“在您的自定义“server_ready”事件中使用 window.show() 显示“您的窗口。你的应用程序的整体逻辑应该适合:1)你启动 Electron 应用程序并在加载服务浏览器窗口时加载...动画,然后你生成子进程,你的 django 应用程序将在其中运行,这里你有你之间的“桥梁” Electron Node 事件和 python 逻辑,按如下方式完成:

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

现在变量 django 是您与 django 应用程序通信的处理程序。您可以通过以下方式进行交流:

            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 进程将通过事件通知您它已准备就绪,您可以使用本地主机 URL 重新加载 BrowserWindow 并开始协调与子进程通信的交互。

关于javascript - 如何为 Electron 应用程序提供 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44271304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com