Python e Django + Eléctron

339 views
Skip to first unread message

Cristiano Gross

unread,
Feb 1, 2021, 7:33:58 PM2/1/21
to Django Brasil
Boa noite pessoal,
estou tentando fazer meu app django rodar como um app desktop utilizando
o Eléctron. (Não sei se alguém já tentou fazer isso).
Ele funciona em partes, o app até roda desktop, mas somente quando eu ativo meu server 
com o camando "py manage.py runserver" a partir do terminal nas pastas do meu app django. 
Quando eu tento rodar meu app apenas com o comando "npm start" ele não "ativa"
o server do django. Acredite que falte alguma coisa. Não sei se estou no caminho certo.
Meu arquivo main.js do Eléctron está da seguinte forma: 

const {app, BrowserWindow} = require('electron')
const path = require('path')

function createWindow () {
  // Create the browser window.
  var subpy = require('child_process').spawn('py', ['./gestao_mvp/manage.py', 'runserver']);
  var rq = require('request-promise');
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 800,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  });
  var startUp = function() {
         rq(mainAddr)
             .then(function(htmlString) {
            
                 openWindow();
             })
             .catch(function(err) {
                 startUp();
             });
     };
     startUp();
  mainWindow.loadURL(mainAddr);

}

app.whenReady().then(() => {//
  createWindow()

  app.on('activate', function () {
  
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})


app.on('window-all-closed', function () {

  if (process.platform !== 'darwin') app.quit()
})


MARCELO PEREIRA DA SILVA

unread,
Feb 2, 2021, 6:32:00 AM2/2/21
to Django Brasil
Qual seu sistema operacional?
minha pergunta vem da construções dessa linha que creio  ser o start do server Django.

  var subpy = require('child_process').spawn('py', ['./gestao_mvp/manage.py', 'runserver']);  

quando você usa o "./" se for windows pode ser que ele não encontre o caminho /script/activade.
já em distribuição linux  o comando é "python manage.py runserver" talvez precise mudar algo aqui: ('py', ['./gestao_mvp/manage.py', 'runserver'])

isso assumindo que a virtual env está ativa quando essa linha é chamada, algo que não vi acontecer.
  
não sei se isso vai te ajudar, mas estou aqui pra prender também!


"não entendo de Eléctron, e estou ampliando meus conhecimento em python ." 

José Alves

unread,
Feb 2, 2021, 8:12:49 AM2/2/21
to django...@googlegroups.com
Bom dia.
Não se essa seria a melhor abordagem, eu não gosto muito dessa mistura de tecnologias.
se fosse eu, dividiria o aplicativo em 3 camadas, primeira camada o backend (Django), segunda camada o frontent web (django) e a camada desktop utilizando python com alguma biblioteca gráfica.
Deve ter alguma forma disso funcionar, confesso que eu não sei como, me desculpe por ser direto na ajuda, mas como o elétron é voltado para aplicativos desktops baseados em javascript, node, etc, eu não acho que essa ideia é muito prática.

espero sinceramente que de alguma forma eu tenha podido contribuir com o seu projeto.
att.

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/django-brasil/4a59c8fd-0ffd-426b-9630-156055e1b866n%40googlegroups.com.


--
José Alves

Rafael Henter

unread,
Feb 2, 2021, 8:20:58 AM2/2/21
to django...@googlegroups.com
Bom dia a todos,

Eu concordo com o João,

Separa as Camadas e sua App JS ou Django vai apenas consumir a sua API. Vai te ajudar a dar manutenção e tudo 

Dica:
Na Sua aplicação JS, usa um Axios autenticando via Token com o DRF(rest framework) ou se quiser mais segurança, usando o OAuth2 (django-oauth-toolkit).

Abs,

Rafael Henter



MARCELO PEREIRA DA SILVA

unread,
Feb 2, 2021, 8:58:42 AM2/2/21
to Django Brasil

Não sei qual a necessidade que o  cristia...@outlook.com está tendo.
mais concordo que seria muito mais simples colocar o Django pra rodar local e conectar no banco de dados externo se for o caso. já que a proposta é  descktop!

Cristiano Gross

unread,
Feb 2, 2021, 9:19:29 AM2/2/21
to Django Brasil
Estou usando o Windows 10, 
A ideia de usar django com eléctron é que preciso que o app rode off-line no computador do cliente e salve os dados no SQLite.
Esses dados serão sincronizados depois com um banco de dados online, quando este computador tiver acesso a Internet. 
Eu tentei ser prático usando o Eléctron pois o mesmo app poderia ser usado off-line com o eléctron sem ter que o cliente tenha que configurar muita coisa no
próprio computador já que ele nem teria conhecimento pra isso.  
E claro o mesmo app django (back-end, front-end)  servirá como o meu sistema que ficará hospedado e rodando online, e receberá os dados desse app desktop off-line. 

MARCELO PEREIRA DA SILVA

unread,
Feb 2, 2021, 9:29:12 AM2/2/21
to Django Brasil
Amigo neste caso você vai fazer dois trabalhos!
é muito mais viável fazer toda construção como Django pois depois você só precisará informar onde vai estar o banco/nuvem.

ou seja quando o seu cliente estiver com conexão a internet você só precisará mudar uma linha no código. 

Sinval Júnior

unread,
Feb 3, 2021, 5:27:27 AM2/3/21
to django...@googlegroups.com
Conforme mencionado por outros colegas, crie api utilizando o django rest [1], assim irá consumir com o electron e uma boa estratégico pois poderá utilizar tal solução em diferentes fonts.




Ao encaminhar esta mensagem, por favor:
1 - Apague meu endereço eletrônico;
2 - Encaminhe como Cópia Oculta (Cco ou BCc) aos seus destinatários. Dificulte assim a disseminação de vírus, spams e banners.

#=================================================================+
#!/usr/bin/env python
nome = 'Sinval Júnior'
email = 'sinvalju arroba gmail ponto com'
print nome
print email
#==================================================================+


marcos paulo silva viana

unread,
Apr 1, 2021, 5:34:19 PM4/1/21
to Django Brasil
Boa tarde rodar django no backend e electron terá um gasto tremendo em desempenho e pode haver alguns problemas de funcionalidade , principalmente nas questões de interações com a tela do app ( já aconteceu comigo ). O melhor seria como foi dito acima utilizar uma biblioteca gráfica como: PyGtk, GTK com PyGobject, Gtk WebKit, TKinter(seria até o mais simples e leve acredito, pois não necessitaria de muito) ou Qt. Daí a Janela seria um container WebView para o teu app django. Ou até mesmo com  o pywebview 

Guilherme Messeder Caldas Bretas

unread,
Apr 6, 2021, 11:25:40 AM4/6/21
to django...@googlegroups.com
Cara, montei uma stack para min, rodando Django com GraphQL no back e Nuxt no front. O Nuxt tem algumas recursos que podem rodar server-side no host do front, quando o back está indisponível, e ainda a opção de ser instalado no browser e rodar offline quando o host do front está indisponível. Em uma pesquisa rápida no Google achei esse boilerplate do Nuxt rodando no Electron, talvez possa te ajudar. https://github.com/michalzaq12/electron-nuxt

Reply all
Reply to author
Forward
0 new messages