Poursuite du développement multi-plateforme avec Electron et Python

Vous avez dit étudier Python. De plus, j'ai dit que vous n'étiez pas obligé d'étudier HTML5. C'est *** mensonge ***.

Résultats de divers essais

Ce n'est pas exactement un mensonge, mais ce que j'ai trouvé en étudiant le contenu est réalisé en utilisant une fonction de Python et une fonction appelée Flask (jinja2).

Code que j'ai réellement essayé

J'ai fait une description en utilisant uniquement Flask comme indiqué ci-dessous et l'ai essayé avec ʻelectron .`, mais cela fonctionne correctement.

$ cat index.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from __future__ import print_function
import time
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "<!DOCTYPE html>\
<html lang=\"en\">\
  <head>\
    <meta charset=\"utf-8\">\
    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\
    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\
    <script src=\"http://code.jquery.com/jquery-1.11.1.min.js\"></script>\
    <link href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7\" crossorigin=\"anonymous\">\
    <script src=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js\" integrity=\"sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS\" crossorigin=\"anonymous\"></script>\
  </head>\
  <body>\
    <div class=\"container\">\
      <div class=\"header\">\
        <h3 class=\"text-muted\">Yesterday</h3>\
      </div>\
    </div>\
  </body>\
</html>"

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000)

Codage plus propre

Il vaut mieux faire ce qui suit que d'écrire du html en python.

Contenu de index.py

$ cat index.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from __future__ import print_function
import time
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000)

Contenu de templates / index.html

$ cat templates/index.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
  </head>
  <body>
    <div class="container">
      <div class="header">
        <h3 class="text-muted">Sample Page</h3>
      </div>
    </div>
  </body>
</html>

Comment aller et venir entre les pages

Si vous créez templates / sample / sample.html comme indiqué ci-dessous, utilisez Jinja2 et collez un lien, cela semble fonctionner. (S'il y a plusieurs fichiers dans le dossier des modèles, cela ne semble pas fonctionner?)

$ cat index.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from __future__ import print_function
import time
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    next = u'Je vais aller à la page suivante'
    return render_template('/index.html', message=next)

@app.route('/sample/')
def sample():
    return render_template('/sample/sample.html')

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000)

Contenu de /templates/index.html

$ cat Downloads/work/templates/index.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
  </head>
  <body>
    <div class="container">
      <div class="header">
        {% if message %}
        <h3 class="text-muted"><a href="/sample">{{message}}</a></h3>
        {% endif %}
      </div>
    </div>
  </body>
</html>

Contenu de /templates/sample/sample.html

$ cat Downloads/work/templates/sample/sample.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
  </head>
  <body>
    <div class="container">
      <div class="header">
        <h3 class="text-muted"><a href="/">Je reviendrai</a></h3>
      </div>
    </div>
  </body>
</html>

À propos de Jinja2

Je n'ai pas supprimé les détails, donc je vais m'y habituer, mais il semble que les variables et les instructions if peuvent être utilisées et qu'elles seront gérées en html. Et il semble que l'intérieur de app.route écrit en python soit strict. Jinja2 semble être considéré comme un dossier s'il se termine par /, et un fichier s'il se termine par / sample. En conséquence, je pensais que je ne pouvais pas y accéder avec / sample, mais je devais parcourir le répertoire.

Du fichier html, le contenu de / templates / index.html est affiché sous forme de messages en utilisant les variables reçues de python. De plus, le lien est différent de app.route de python et est accessible avec / sample. Cette description est proche de app.route, mais lâche. Peu importe s'il n'y a pas de / à la fin. Cependant, il ne fait pas directement référence à sample.html.

Inversement, lors du retour de / templates / sample / sample.html vers / templates / index.html, vous ne pouvez retourner qu'avec/.

Résumé

Après tout, il semble que nous ferons du HTML5. Je ferai de mon mieux…

(˙-˙). oO (En ressemblant à ceci, cela ressemble au cordova utilisé dans le développement multi-plateforme iOS ...)

URL de référence

Recommended Posts

Poursuite du développement multi-plateforme avec Electron et Python
Coexistence de Python2 et 3 avec CircleCI (1.0)
Construction d'interface graphique heureuse avec électron et python
Implémentation de l'arbre TRIE avec Python et LOUDS
Exemple de lecture et d'écriture de CSV avec Python
Téléchargez facilement et partiellement mp4 avec python et youtube-dl!
Visualisez la gamme d'insertions internes et externes avec python
Electron est la meilleure solution pour le développement multi-plateforme de Python
Lire et écrire des fichiers avec Slackbot ~ Développement de bot avec Python ~
[Python] Chapitre 01-02 À propos de Python (Exécution et installation de l'environnement de développement)
Comparaison de CoffeeScript avec la grammaire JavaScript, Python et Ruby
Gestion des versions de Node, Ruby et Python avec anyenv
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
python avec pyenv et venv
Installation source et installation de Python
Fonctionne avec Python et R
Unifier l'environnement de l'équipe de développement Python en commençant par Poetry
Effectuer une analyse isocurrent des canaux en eau libre avec Python et matplotlib
[Hikari-Python] Chapitre 05-10 Syntaxe de contrôle (interruption et poursuite du traitement itératif)
Débarrassez-vous des données sales avec Python et les expressions régulières
Détecter les objets d'une couleur et d'une taille spécifiques avec Python
[Astuces] Problèmes et solutions dans le développement de python + kivy
Exemple d'analyse HTTP GET et JSON avec Pepper Python
Jouez avec le mécanisme de mot de passe de GitHub Webhook et Python
Construction d'environnement de python et opencv
Briller la vie avec Python et OpenCV
L'histoire de Python et l'histoire de NaN
Robot fonctionnant avec Arduino et python
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Installer SciPy et matplotlib (Python)
Scraping avec Node, Ruby et Python
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
Premiers pas avec Python Bases de Python
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Développement de jeux Othello avec Python
Jeu de vie avec Python! (Le jeu de la vie de Conway)
Lire et écrire NetCDF avec Python
10 fonctions du "langage avec batterie" python
J'ai joué avec PyQt5 et Python3
Lire et écrire du CSV avec Python
Implémentation de la méthode Dyxtra par python
Intégration multiple avec Python et Sympy
Configurer un environnement de développement Python avec Atom
Développement d'applications avec Docker + Python + Flask
Résumé des index et des tranches Python
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
Etude de base d'OpenCV avec Python
Réputation des livres Python et des livres de référence
J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python
Comparaison de vitesse du traitement de texte intégral de Wiktionary avec F # et Python
Opérabilité du bras et du robot mobile Dessinez une ellipse avec python
Exploration avec Python et Twitter API 2-Implémentation de la fonction de recherche d'utilisateurs